From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Joseph Marrero Corchado To: git-commits@fedoraproject.org Subject: [rpms/rpm-ostree] f45: Release 2026.3 Date: Sat, 12 Sep 2026 16:36:41 GMT Message-ID: <178923100102.1.8198800263933655537.rpms-rpm-ostree-149588667e4e@fedoraproject.org> List-ID: X-Git-Repo: rpms/rpm-ostree X-Git-Branch: f45 X-Git-Rev: 149588667e4e09537ea6248d2ebf6977e0dba6da QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcnBtLW9zdHJlZQpC cmFuY2ggOiBmNDUKQ29tbWl0IDogMTQ5NTg4NjY3ZTRlMDk1MzdlYTYyNDhkMmViZjY5NzdlMGRi YTZkYQpBdXRob3IgOiBKb3NlcGggTWFycmVybyBDb3JjaGFkbyA8am1hcnJlcm9AcmVkaGF0LmNv bT4KRGF0ZSAgIDogMjAyNi0wOS0xMFQxMzoyNzoyMy0wNDowMApTdGF0cyAgOiArMi8tMTM0NDUg aW4gNCBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMv cnBtLW9zdHJlZS9jLzE0OTU4ODY2N2U0ZTA5NTM3ZWE2MjQ4ZDJlYmY2OTc3ZTBkYmE2ZGE/YnJh bmNoPWY0NQoKTG9nOgpSZWxlYXNlIDIwMjYuMwoKLS0tCmRpZmYgLS1naXQgYS8wMDAxLWtleXJp bmctQWxzby1zZWFyY2gtdXNyLXNoYXJlLXBraS1ycG0tZ3BnLWZvci1HUEcta2UucGF0Y2ggYi8w MDAxLWtleXJpbmctQWxzby1zZWFyY2gtdXNyLXNoYXJlLXBraS1ycG0tZ3BnLWZvci1HUEcta2Uu cGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NTE4NWEuLjAwMDAwMDAKLS0t IGEvMDAwMS1rZXlyaW5nLUFsc28tc2VhcmNoLXVzci1zaGFyZS1wa2ktcnBtLWdwZy1mb3ItR1BH LWtlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotRnJvbSBhOGU5ZmNjNWM1 YjgwZmUyNWU3MjVkMDI4ZTlmOWI4MDhjYjAyNzNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQot RnJvbTogSm9zZXBoIE1hcnJlcm8gQ29yY2hhZG8gPGptYXJyZXJvQHJlZGhhdC5jb20+Ci1EYXRl OiBXZWQsIDE5IEF1ZyAyMDI2IDE3OjEwOjQzIC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGtleXJp bmc6IEFsc28gc2VhcmNoIC91c3Ivc2hhcmUvcGtpL3JwbS1ncGcgZm9yIEdQRyBrZXlzCi0KLVNl YXJjaCBib3RoIC9ldGMvcGtpL3JwbS1ncGcgKHVzZXItYWRkZWQga2V5cykgYW5kIC91c3Ivc2hh cmUvcGtpL3JwbS1ncGcKLShkaXN0cmlidXRpb24tcHJvdmlkZWQga2V5cykgc28gdGhhdCBHUEcg c2lnbmF0dXJlIHZlcmlmaWNhdGlvbiB3b3JrcwotcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUga2V5 cyBhcmUgaW5zdGFsbGVkLgotCi1Dby1hdXRob3JlZC1ieTogQWRhbSBXaWxsaWFtc29uIDxhd2ls bGlhbUByZWRoYXQuY29tPgotQXNzaXN0ZWQtYnk6IEFJCi0tLS0KLSBsaWJkbmYvbGliZG5mL2Ru Zi1rZXlyaW5nLmNwcCB8IDU5ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkK LQotZGlmZiAtLWdpdCBhL2xpYmRuZi9saWJkbmYvZG5mLWtleXJpbmcuY3BwIGIvbGliZG5mL2xp YmRuZi9kbmYta2V5cmluZy5jcHAKLWluZGV4IDJlMzhlZmRkLi5hNzI1ZGViYSAxMDA2NDQKLS0t LSBhL2xpYmRuZi9saWJkbmYvZG5mLWtleXJpbmcuY3BwCi0rKysgYi9saWJkbmYvbGliZG5mL2Ru Zi1rZXlyaW5nLmNwcAotQEAgLTM0NSwzNCArMzQ1LDQxIEBAIG91dDoKLSBnYm9vbGVhbgotIGRu Zl9rZXlyaW5nX2FkZF9wdWJsaWNfa2V5cyhycG1LZXlyaW5nIGtleXJpbmcsIEdFcnJvciAqKmVy cm9yKSB0cnkKLSB7Ci0tICAgIGNvbnN0IGdjaGFyICpncGdfZGlyID0gIi9ldGMvcGtpL3JwbS1n cGciOwotLSAgICBnYm9vbGVhbiByZXQgPSBUUlVFOwotLSAgICBnX2F1dG9wdHIoR0RpcikgZGly ID0gTlVMTDsKLS0gICAgR0Vycm9yICpsb2NhbEVycm9yID0gTlVMTDsKLS0KLS0gICAgLyogc2Vh cmNoIGFsbCB0aGUgcHVibGljIGtleSBmaWxlcyAqLwotLSAgICBkaXIgPSBnX2Rpcl9vcGVuKGdw Z19kaXIsIDAsICZsb2NhbEVycm9yKTsKLS0gICAgaWYgKGRpciA9PSBOVUxMKSB7Ci0tICAgICAg ICBpZiAobG9jYWxFcnJvci0+ZG9tYWluICE9IEdfRklMRV9FUlJPUiB8fCBsb2NhbEVycm9yLT5j b2RlICE9IEdfRklMRV9FUlJPUl9OT0VOVCkgewotLSAgICAgICAgICAgIGdfd2FybmluZygiJXMi LCBsb2NhbEVycm9yLT5tZXNzYWdlKTsKLS0gICAgICAgIH0KLS0gICAgICAgIGdfZXJyb3JfZnJl ZShsb2NhbEVycm9yKTsKLS0gICAgICAgIHJldHVybiBUUlVFOwotLSAgICB9Ci0tICAgIGRvIHsK LS0gICAgICAgIGNvbnN0IGdjaGFyICpmaWxlbmFtZTsKLS0gICAgICAgIGdfYXV0b2ZyZWUgZ2No YXIgKnBhdGhfdG1wID0gTlVMTDsKLS0gICAgICAgIGZpbGVuYW1lID0gZ19kaXJfcmVhZF9uYW1l KGRpcik7Ci0tICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKLS0gICAgICAgICAgICBicmVh azsKLS0gICAgICAgIHBhdGhfdG1wID0gZ19idWlsZF9maWxlbmFtZShncGdfZGlyLCBmaWxlbmFt ZSwgTlVMTCk7Ci0tICAgICAgICByZXQgPSBkbmZfa2V5cmluZ19hZGRfcHVibGljX2tleShrZXly aW5nLCBwYXRoX3RtcCwgJmxvY2FsRXJyb3IpOwotLSAgICAgICAgaWYgKCFyZXQpIHsKLS0gICAg ICAgICAgICBnX3dhcm5pbmcoIiVzIiwgbG9jYWxFcnJvci0+bWVzc2FnZSk7Ci0rICAgIC8qIFNl YXJjaCBib3RoIEdQRyBrZXkgbG9jYXRpb25zOiAvZXRjL3BraS9ycG0tZ3BnIGZvciB1c2VyLWFk ZGVkIGtleXMKLSsgICAgICogYW5kIC91c3Ivc2hhcmUvcGtpL3JwbS1ncGcgZm9yIGRpc3RyaWJ1 dGlvbi1wcm92aWRlZCBrZXlzLgotKyAgICAgKi8KLSsgICAgY29uc3QgZ2NoYXIgKmdwZ19kaXJz W10gPSB7ICIvZXRjL3BraS9ycG0tZ3BnIiwgIi91c3Ivc2hhcmUvcGtpL3JwbS1ncGciLCBOVUxM IH07Ci0rCi0rICAgIGZvciAoY29uc3QgZ2NoYXIgKipncGdfZGlyX3AgPSBncGdfZGlyczsgKmdw Z19kaXJfcCAhPSBOVUxMOyBncGdfZGlyX3ArKykgewotKyAgICAgICAgY29uc3QgZ2NoYXIgKmdw Z19kaXIgPSAqZ3BnX2Rpcl9wOwotKyAgICAgICAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSsgICAg ICAgIGdfYXV0b3B0cihHRGlyKSBkaXIgPSBOVUxMOwotKyAgICAgICAgR0Vycm9yICpsb2NhbEVy cm9yID0gTlVMTDsKLSsKLSsgICAgICAgIC8qIHNlYXJjaCBhbGwgdGhlIHB1YmxpYyBrZXkgZmls ZXMgKi8KLSsgICAgICAgIGRpciA9IGdfZGlyX29wZW4oZ3BnX2RpciwgMCwgJmxvY2FsRXJyb3Ip OwotKyAgICAgICAgaWYgKGRpciA9PSBOVUxMKSB7Ci0rICAgICAgICAgICAgaWYgKGxvY2FsRXJy b3ItPmRvbWFpbiAhPSBHX0ZJTEVfRVJST1IgfHwgbG9jYWxFcnJvci0+Y29kZSAhPSBHX0ZJTEVf RVJST1JfTk9FTlQpIHsKLSsgICAgICAgICAgICAgICAgZ193YXJuaW5nKCIlcyIsIGxvY2FsRXJy b3ItPm1lc3NhZ2UpOwotKyAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBnX2Vycm9yX2ZyZWUo bG9jYWxFcnJvcik7Ci0tICAgICAgICAgICAgbG9jYWxFcnJvciA9IE5VTEw7Ci0rICAgICAgICAg ICAgY29udGludWU7Ci0gICAgICAgICB9Ci0tICAgIH0gd2hpbGUgKHRydWUpOwotKyAgICAgICAg ZG8gewotKyAgICAgICAgICAgIGNvbnN0IGdjaGFyICpmaWxlbmFtZTsKLSsgICAgICAgICAgICBn X2F1dG9mcmVlIGdjaGFyICpwYXRoX3RtcCA9IE5VTEw7Ci0rICAgICAgICAgICAgZmlsZW5hbWUg PSBnX2Rpcl9yZWFkX25hbWUoZGlyKTsKLSsgICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVM TCkKLSsgICAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAgICAgcGF0aF90bXAgPSBnX2J1 aWxkX2ZpbGVuYW1lKGdwZ19kaXIsIGZpbGVuYW1lLCBOVUxMKTsKLSsgICAgICAgICAgICByZXQg PSBkbmZfa2V5cmluZ19hZGRfcHVibGljX2tleShrZXlyaW5nLCBwYXRoX3RtcCwgJmxvY2FsRXJy b3IpOwotKyAgICAgICAgICAgIGlmICghcmV0KSB7Ci0rICAgICAgICAgICAgICAgIGdfd2Fybmlu ZygiJXMiLCBsb2NhbEVycm9yLT5tZXNzYWdlKTsKLSsgICAgICAgICAgICAgICAgZ19lcnJvcl9m cmVlKGxvY2FsRXJyb3IpOwotKyAgICAgICAgICAgICAgICBsb2NhbEVycm9yID0gTlVMTDsKLSsg ICAgICAgICAgICB9Ci0rICAgICAgICB9IHdoaWxlICh0cnVlKTsKLSsgICAgfQotICAgICByZXR1 cm4gVFJVRTsKLSB9IENBVENIX1RPX0dFUlJPUihGQUxTRSkKLSAKLS0tIAotMi41NS4wCi0KCmRp ZmYgLS1naXQgYS8yZDE3N2RmZDY2YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5YWE4MTU0LnBhdGNo IGIvMmQxNzdkZmQ2NmFiNDVhZTI3NjYxYTA4OTlmMGM2NGQ0OWFhODE1NC5wYXRjaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE0NDQ3ZC4uMDAwMDAwMAotLS0gYS8yZDE3N2RmZDY2 YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5YWE4MTU0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs MTMzNDMgKzAsMCBAQAotRnJvbSAyZDE3N2RmZDY2YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5YWE4 MTU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSm9zZXBoIE1hcnJlcm8gQ29yY2hh ZG8gPGptYXJyZXJvQHJlZGhhdC5jb20+Ci1EYXRlOiBXZWQsIDE5IEF1ZyAyMDI2IDIyOjUzOjIy IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIFN1cHBvcnQgcmVsb2NhdGVkIHJlcG8gY29uZmlncyAo RmVkb3JhIDQ1KykKLQotRmVkb3JhIDQ1IENoYW5nZSBSZWxvY2F0ZVJwbVJlcG9Db25maWdzVG9V c3IgbW92ZWQgc3lzdGVtIHJlcG9zaXRvcnkKLWRlZmluaXRpb25zIGZyb20gL2V0Yy95dW0ucmVw b3MuZCB0byAvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCBhbmQgR1BHCi1rZXlzIGZyb20gL2V0Yy9w a2kvcnBtLWdwZyB0byAvdXNyL3NoYXJlL3BraS9ycG0tZ3BnLiBUaGlzIGJyb2tlCi1wYWNrYWdl IG92ZXJsYXkgb3BlcmF0aW9ucyAocnBtLW9zdHJlZSBpbnN0YWxsKSB3aXRoOgotICBlcnJvcjog Tm8gZW5hYmxlZCByZXBvc2l0b3JpZXMKLQotU3dpdGNoIGFsbCByZXBvIGRpcmVjdG9yeSBzZXR1 cCBmcm9tIHRoZSBzaW5nbGUtZGlyZWN0b3J5Ci1kbmZfY29udGV4dF9zZXRfcmVwb19kaXIoKSBB UEkgdG8gdGhlIG11bHRpLWRpcmVjdG9yeQotZG5mX2NvbnRleHRfc2V0X3JlcG9zX2RpcigpIEFQ SSwgcGFzc2luZyBib3RoIHRoZSB1c2VyLWFkZGVkIGFuZAotZGlzdHJpYnV0aW9uLXByb3ZpZGVk IGxvY2F0aW9ucy4gVGhlIGxpYmRuZiByZXBvIGxvYWRlciBhbHJlYWR5Ci1ncmFjZWZ1bGx5IHNr aXBzIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcywgc28gdGhpcyB3b3JrcyBvbiBib3RoIG9sZAot KEZlZG9yYSA8PTQ0LCBSSEVMKSBhbmQgbmV3IChGZWRvcmEgNDUrKSBsYXlvdXRzIHdpdGhvdXQg dmVyc2lvbgotZGV0ZWN0aW9uLgotCi1DaGFuZ2VzOgotLSBycG1vc3RyZWUtY29yZS5jeHg6IEFk ZCBidWlsZF9yZXBvc19kaXJzKCkgaGVscGVyIHVzaW5nIGNhbm9uaWNhbAotICBwYXRoIGxpc3Qg ZnJvbSBSdXN0IHZpYSBjeHggYnJpZGdlLiBVcGRhdGUgYWxsIGNhbGwgc2l0ZXMgdG8gdXNlIGl0 LgotICBBZGQgcnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9zX2RpcnMoKSBmb3IgbXVsdGktZGly IG92ZXJyaWRlcy4KLS0gcnVzdC9jb21wb3NlcG9zdDogQWRkIHNoYXJlZCBjb25zdGFudHMgZm9y IHJlcG8gZGlyIHBhdGhzLCBleHBvc2VkCi0gIHRvIEMrKyB2aWEgZ2V0X3JlcG9zX2RpcnMoKSBi cmlkZ2UgZnVuY3Rpb24uCi0tIHJ1c3QvY291bnRtZTogU2NhbiBib3RoIHJlcG8gZGlyZWN0b3Jp ZXMgZm9yIENvdW50IE1lIHN1cHBvcnQuCi0tIHJ1c3QvY29tcG9zZTogSGFuZGxlIGJvdGggcmVw byBsYXlvdXRzIGluIG11dGF0ZV9zb3VyY2Vfcm9vdCgpLgotLSBUZXN0cyBhbmQgZG9jdW1lbnRh dGlvbiB1cGRhdGVkIGFjY29yZGluZ2x5LgotCi1DbG9zZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9j b3Jlb3MvcnBtLW9zdHJlZS9pc3N1ZXMvNTYyMwotCi1Dby1hdXRob3JlZC1ieTogQWRhbSBXaWxs aWFtc29uIDxhd2lsbGlhbUByZWRoYXQuY29tPgotQXNzaXN0ZWQtYnk6IEFJCi0tLS0KLSBkb2Nz L3RyZWVmaWxlLm1kICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCi0gbWFuL3JwbS1v c3RyZWUueG1sICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArLQotIHJwbW9zdHJlZS1jeHhy cy5jeHggICAgICAgICAgICAgICAgICAgICB8IDc4NDEgKysrKysrKysrKysrKystLS0tLS0tLS0K LSBycG1vc3RyZWUtY3h4cnMuaCAgICAgICAgICAgICAgICAgICAgICAgfCAyMDk5ICsrKy0tLQot IHJ1c3Qvc3JjL2NvbXBvc2UucnMgICAgICAgICAgICAgICAgICAgICB8ICAgNTggKy0KLSBydXN0 L3NyYy9jb21wb3NlcG9zdC5ycyAgICAgICAgICAgICAgICAgfCAgIDE3ICsKLSBydXN0L3NyYy9j b3VudG1lL3JlcG8ucnMgICAgICAgICAgICAgICAgfCAgIDMyICstCi0gcnVzdC9zcmMvbGliLnJz ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCi0gc3JjL2RhZW1vbi9ycG1vc3RyZWUt c3lzcm9vdC11cGdyYWRlci5oIHwgICAgMiArLQotIHNyYy9saWJwcml2L3JwbW9zdHJlZS1jb3Jl LmN4eCAgICAgICAgICB8ICAgNTUgKy0KLSBzcmMvbGlicHJpdi9ycG1vc3RyZWUtY29yZS5oICAg ICAgICAgICAgfCAgICAxICsKLSB0ZXN0cy9jb21tb24vbGlidGVzdHJlcG9zLnNoICAgICAgICAg ICAgfCAgICA4ICstCi0gdGVzdHMvY29tcG9zZS1pbWFnZS5zaCAgICAgICAgICAgICAgICAgIHwg ICAxMCArLQotIDEzIGZpbGVzIGNoYW5nZWQsIDYyNDMgaW5zZXJ0aW9ucygrKSwgMzkxNSBkZWxl dGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2RvY3MvdHJlZWZpbGUubWQgYi9kb2NzL3RyZWVmaWxl Lm1kCi1pbmRleCBhNDA2OGI3MjcwLi5iOWUwNjNkYjllIDEwMDY0NAotLS0tIGEvZG9jcy90cmVl ZmlsZS5tZAotKysrIGIvZG9jcy90cmVlZmlsZS5tZAotQEAgLTM2LDggKzM2LDkgQEAgSXQgc3Vw cG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgotICAgIHVzZSwgZnJvbSBhbnkgZmlsZXMg dGhhdCBlbmQgaW4gYC5yZXBvYCwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzCi0gICAgdGhlIHRy ZWVmaWxlLiBJZiBtaXNzaW5nLCBhbGwgeXVtIHJlcG9zIGVuYWJsZWQgYnkgZGVmYXVsdCBhcmUg dXNlZC4KLSAgICBgcnBtLW9zdHJlZSBjb21wb3NlIHRyZWVgIGRvZXMgbm90IHVzZSB0aGUgc3lz dGVtCi0tICAgYC9ldGMveXVtLnJlcG9zLmRgLCBiZWNhdXNlIGl0J3MgY29tbW9uIHRvIHdhbnQg dG8gY29tcG9zZSBhIHRhcmdldAotLSAgIHN5c3RlbSBkaXN0aW5jdCBmcm9tIHRoZSBvbmUgdGhl IGhvc3Qgc3l0ZW0gaXMgcnVubmluZy4KLSsgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZGly ZWN0b3JpZXMsIGJlY2F1c2UgaXQncyBjb21tb24gdG8gd2FudAotKyAgIHRvIGNvbXBvc2UgYSB0 YXJnZXQgc3lzdGVtIGRpc3RpbmN0IGZyb20gdGhlIG9uZSB0aGUgaG9zdCBzeXRlbQotKyAgIGlz IHJ1bm5pbmcuCi0gCi0gICogYHNlbGludXhgOiBib29sZWFuLCBvcHRpb25hbDogRGVmYXVsdHMg dG8gYHRydWVgLiAgSWYgYGZhbHNlYCwgdGhlbgotICAgIG5vIFNFTGludXggbGFiZWxpbmcgd2ls bCBiZSBwZXJmb3JtZWQgb24gdGhlIHNlcnZlciBzaWRlLgotZGlmZiAtLWdpdCBhL21hbi9ycG0t b3N0cmVlLnhtbCBiL21hbi9ycG0tb3N0cmVlLnhtbAotaW5kZXggY2NmNWQwZjViMy4uMmNhODVh OGY2OSAxMDA2NDQKLS0tLSBhL21hbi9ycG0tb3N0cmVlLnhtbAotKysrIGIvbWFuL3JwbS1vc3Ry ZWUueG1sCi1AQCAtMjIyLDggKzIyMiw4IEBAIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgot ICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICBUYWtl cyBvbmUgb3IgbW9yZSBwYWNrYWdlcyBhcyBhcmd1bWVudHMuIFRoZSBwYWNrYWdlcyBhcmUKLS0g ICAgICAgICAgICBmZXRjaGVkIGZyb20gdGhlIGVuYWJsZWQgcmVwb3NpdG9yaWVzIGluCi0tICAg ICAgICAgICAgPGZpbGVuYW1lPi9ldGMveXVtLnJlcG9zLmQvPC9maWxlbmFtZT4gYW5kIGFyZSBv dmVybGF5ZWQgb24KLSsgICAgICAgICAgICBmZXRjaGVkIGZyb20gdGhlIGVuYWJsZWQgcmVwb3Np dG9yaWVzIGluIHRoZSBzeXN0ZW0KLSsgICAgICAgICAgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRp b24gZGlyZWN0b3JpZXMgYW5kIGFyZSBvdmVybGF5ZWQgb24KLSAgICAgICAgICAgICB0b3Agb2Yg YSBuZXcgZGVwbG95bWVudC4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhCi0gICAg ICAgICAgICAgbG9jYWwgUlBNIHBhY2thZ2UgdGhhdCByZXNpZGVzIG9uIHRoZSBob3N0LiBPdmVy bGF5ZWQKLSAgICAgICAgICAgICBwYWNrYWdlcyBjYW4gbGF0ZXIgYmUgcmVtb3ZlZCB3aXRoIHRo ZQotQEAgLTMxMCw4ICszMTAsOCBAQCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAgICAg ICAgICAgICBUYWtlcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyBhcyBhcmd1bWVudHMuIFRoZSBwYWNr YWdlcyBhcmUKLSAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIHNldCBvZiBwYWNrYWdlcyB0 aGF0IGFyZSBjdXJyZW50bHkKLSAgICAgICAgICAgICBvdmVybGF5ZWQuIFRoZSByZW1haW5pbmcg cGFja2FnZXMgaW4gdGhlIHNldCAoaWYgYW55KSBhcmUKLS0gICAgICAgICAgICBmZXRjaGVkIGZy b20gdGhlIGVuYWJsZWQgcmVwb3NpdG9yaWVzIGluCi0tICAgICAgICAgICAgPGZpbGVuYW1lPi9l dGMveXVtLnJlcG9zLmQvPC9maWxlbmFtZT4gYW5kIGFyZSBvdmVybGF5ZWQgb24KLSsgICAgICAg ICAgICBmZXRjaGVkIGZyb20gdGhlIGVuYWJsZWQgcmVwb3NpdG9yaWVzIGluIHRoZSBzeXN0ZW0K LSsgICAgICAgICAgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgYW5kIGFy ZSBvdmVybGF5ZWQgb24KLSAgICAgICAgICAgICB0b3Agb2YgYSBuZXcgZGVwbG95bWVudC4KLSAg ICAgICAgICAgPC9wYXJhPgotIAotQEAgLTMzNCw4ICszMzQsOCBAQCBCb3N0b24sIE1BIDAyMTEx LTEzMDcsIFVTQS4KLSAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgPHBhcmE+Ci0gICAg ICAgICAgICAgVGFrZXMgb25lIG9yIG1vcmUgcXVlcnkgdGVybXMgYXMgYXJndW1lbnRzLiBUaGUg cGFja2FnZXMgYXJlCi0tICAgICAgICAgICAgc2VhcmNoZWQgd2l0aGluIHRoZSBlbmFibGVkIHJl cG9zaXRvcmllcyBpbgotLSAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL3l1bS5yZXBvcy5kLzwv ZmlsZW5hbWU+LiBQYWNrYWdlcyBjYW4gYmUKLSsgICAgICAgICAgICBzZWFyY2hlZCB3aXRoaW4g dGhlIGVuYWJsZWQgcmVwb3NpdG9yaWVzIGluIHRoZSBzeXN0ZW0KLSsgICAgICAgICAgICByZXBv c2l0b3J5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMuIFBhY2thZ2VzIGNhbiBiZQotICAgICAg ICAgICAgIG92ZXJsYXllZCBhbmQgcmVtb3ZlZCB1c2luZyB0aGUgPGNvbW1hbmQ+aW5zdGFsbDwv Y29tbWFuZD4KLSAgICAgICAgICAgICBhbmQgPGNvbW1hbmQ+dW5pbnN0YWxsPC9jb21tYW5kPiBj b21tYW5kcy4KLSAgICAgICAgICAgPC9wYXJhPgotQEAgLTUxOSw4ICs1MTksOCBAQCBCb3N0b24s IE1BIDAyMTExLTEzMDcsIFVTQS4KLSAgICAgICAgICAgICA8b3B0aW9uPi0tY2hlY2s8L29wdGlv bj4gdG8ganVzdCBjaGVjayBpZiBhbiB1cGdyYWRlIGlzCi0gICAgICAgICAgICAgYXZhaWxhYmxl LCB3aXRob3V0IGRvd25sb2FkaW5nIGl0IG9yIHBlcmZvcm1pbmcgYQotICAgICAgICAgICAgIHBh Y2thZ2UtbGV2ZWwgZGlmZi4gIFVzaW5nIHRoaXMgZmxhZyB3aWxsIGZvcmNlIGFuIHVwZGF0ZQot LSAgICAgICAgICAgIG9mIHRoZSBSUE0gbWV0YWRhdGEgZnJvbSB0aGUgZW5hYmxlZCByZXBvcyBp bgotLSAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL3l1bS5yZXBvcy5kLzwvZmlsZW5hbWU+LCBp ZiB0aGVyZSBhcmUgYW55Ci0rICAgICAgICAgICAgb2YgdGhlIFJQTSBtZXRhZGF0YSBmcm9tIHRo ZSBlbmFibGVkIHJlcG9zIGluIHRoZSBzeXN0ZW0KLSsgICAgICAgICAgICByZXBvc2l0b3J5IGNv bmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMsIGlmIHRoZXJlIGFyZSBhbnkKLSAgICAgICAgICAgICBs YXllcmVkIHBhY2thZ2VzLgotICAgICAgICAgICA8L3BhcmE+Ci0gCi1AQCAtOTExLDE0ICs5MTEs MTcgQEAgJCBzeXN0ZW1jdGwgc3RhcnQgcG9zdGdyZXNxbCAgIyBTb21lIHNldHVwIHJlcXVpcmVk Ci0gICAgIDx0aXRsZT5SZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYW5kIEdQRyBrZXlzPC90aXRs ZT4KLSAKLSAgICAgPHBhcmE+Ci0tICAgICAgcnBtLW9zdHJlZSB1c2VzIHRoZSBsaWJkbmYgc2hh cmVkIGxpYnJhcnksIHdoaWNoIGhvbm9ycyA8bGl0ZXJhbD4vZXRjL3l1bS5yZXBvcy5kPC9saXRl cmFsPi4KLSsgICAgICBycG0tb3N0cmVlIHVzZXMgdGhlIGxpYmRuZiBzaGFyZWQgbGlicmFyeSwg d2hpY2ggaG9ub3JzIGJvdGgKLSsgICAgICA8bGl0ZXJhbD4vZXRjL3l1bS5yZXBvcy5kPC9saXRl cmFsPiAoZm9yIHVzZXIgY29uZmlndXJhdGlvbikgYW5kCi0rICAgICAgPGxpdGVyYWw+L3Vzci9z aGFyZS9kbmY1L3JlcG9zLmQ8L2xpdGVyYWw+IChmb3IgZGlzdHJpYnV0aW9uLXByb3ZpZGVkIGNv bmZpZ3VyYXRpb24pLgotICAgICAgIE5vdGUgdGhhdCBycG0tbWQgKHl1bS9kbmYpIHJlcG9zaXRv cmllcyBhcmUgb25seSBjaGVja2VkIGlmIGNsaWVudC1zaWRlIHBhY2thZ2UgbGF5ZXJpbmcgaXMK LSAgICAgICBlbmFibGVkLgotICAgICA8L3BhcmE+Ci0gCi0gICAgIDxwYXJhPgotICAgICAgIEhv d2V2ZXIsIHRoZSBiZWhhdmlvciBmb3IgR1BHIGtleXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZy b20gYSB0cmFkaXRpb25hbCA8Y29tbWFuZD5ycG08L2NvbW1hbmQ+Ci0tICAgICAgc3lzdGVtLiAg RXNzZW50aWFsbHksIGFsbCBHUEcga2V5cyBpbiA8bGl0ZXJhbD4vZXRjL3BraS9ycG0tZ3BnPC9s aXRlcmFsPiBhcmUgbG9hZGVkIGFuZCB0cnVzdGVkLgotKyAgICAgIHN5c3RlbS4gIEVzc2VudGlh bGx5LCBhbGwgR1BHIGtleXMgaW4gPGxpdGVyYWw+L2V0Yy9wa2kvcnBtLWdwZzwvbGl0ZXJhbD4g YW5kCi0rICAgICAgPGxpdGVyYWw+L3Vzci9zaGFyZS9wa2kvcnBtLWdwZzwvbGl0ZXJhbD4gYXJl IGxvYWRlZCBhbmQgdHJ1c3RlZC4KLSAgICAgICBUaGUgPGxpdGVyYWw+LnJlcG88L2xpdGVyYWw+ IGZpbGUgc2hvdWxkIHJlZmVyZW5jZSB0aGUgZmlsZSBwYXRoIGluIHRoZXJlLgotICAgICA8L3Bh cmE+Ci0gICAgIDxwYXJhPgotZGlmZiAtLWdpdCBhL3JwbW9zdHJlZS1jeHhycy5jeHggYi9ycG1v c3RyZWUtY3h4cnMuY3h4Ci1pbmRleCA4NzEyYTNmMmM2Li5jN2QwNWYyMzEyIDEwMDY0NAotLS0t IGEvcnBtb3N0cmVlLWN4eHJzLmN4eAotKysrIGIvcnBtb3N0cmVlLWN4eHJzLmN4eAotQEAgLTEs MTYgKzEsMTUgQEAKLS0jaW5jbHVkZSAic3JjL2xpYnByaXYvcnBtb3N0cmVlLWN4eHJzLXByZWx1 ZGUuaCIKLSsjaW5jbHVkZSAicnBtb3N0cmVlLWN4eHJzLmgiCi0rI2luY2x1ZGUgInJwbW9zdHJl ZS1jbGllbnRsaWIuaCIKLSAjaW5jbHVkZSAicnBtb3N0cmVlLWNvbnRhaW5lci5ocHAiCi0gI2lu Y2x1ZGUgInJwbW9zdHJlZS1jeHhyc3V0aWwuaHBwIgotLSNpbmNsdWRlICJycG1vc3RyZWUtdXRp bC5oIgotLSNpbmNsdWRlICJycG1vc3RyZWVtYWluLmgiCi0tI2luY2x1ZGUgInJwbW9zdHJlZS1j bGllbnRsaWIuaCIKLSAjaW5jbHVkZSAicnBtb3N0cmVlLWRpZmYuaHBwIgotICNpbmNsdWRlICJy cG1vc3RyZWUtbGliYnVpbHRpbi5oIgotLSNpbmNsdWRlICJycG1vc3RyZWUtdXRpbC5oIgotICNp bmNsdWRlICJycG1vc3RyZWUtb3V0cHV0LmgiCi0tI2luY2x1ZGUgInJwbW9zdHJlZS1ycG0tdXRp bC5oIgotICNpbmNsdWRlICJycG1vc3RyZWUtcGFja2FnZS12YXJpYW50cy5oIgotLSNpbmNsdWRl ICJycG1vc3RyZWUtY3h4cnMuaCIKLSsjaW5jbHVkZSAicnBtb3N0cmVlLXJwbS11dGlsLmgiCi0r I2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCi0rI2luY2x1ZGUgInJwbW9zdHJlZW1haW4uaCIK LSsjaW5jbHVkZSAic3JjL2xpYnByaXYvcnBtb3N0cmVlLWN4eHJzLXByZWx1ZGUuaCIKLSAjaW5j bHVkZSA8YWxnb3JpdGhtPgotICNpbmNsdWRlIDxhcnJheT4KLSAjaW5jbHVkZSA8Y2Fzc2VydD4K LUBAIC00MCw5NCArMzksOTggQEAKLSAjZW5kaWYgLy8gX19jbGFuZ19fCi0gI2VuZGlmIC8vIF9f R05VQ19fCi0gCi0tbmFtZXNwYWNlIHJ1c3QgewotLWlubGluZSBuYW1lc3BhY2UgY3h4YnJpZGdl MSB7Ci0rbmFtZXNwYWNlIHJ1c3QKLSt7Ci0raW5saW5lIG5hbWVzcGFjZSBjeHhicmlkZ2UxCi0r ewotIC8vICNpbmNsdWRlICJydXN0L2N4eC5oIgotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9QQU5J QwotICNkZWZpbmUgQ1hYQlJJREdFMV9QQU5JQwotLXRlbXBsYXRlIDx0eXBlbmFtZSBFeGNlcHRp b24+Ci0tdm9pZCBwYW5pYyBbW25vcmV0dXJuXV0gKGNvbnN0IGNoYXIgKm1zZyk7Ci0rdGVtcGxh dGUgPHR5cGVuYW1lIEV4Y2VwdGlvbj4gdm9pZCBwYW5pYyBbW25vcmV0dXJuXV0gKGNvbnN0IGNo YXIgKm1zZyk7Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfUEFOSUMKLSAKLSBzdHJ1Y3QgdW5zYWZl X2JpdGNvcHlfdDsKLSAKLS1uYW1lc3BhY2UgewotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNs YXNzIGltcGw7Ci0rbmFtZXNwYWNlCi0rewotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBp bXBsOwotIH0gLy8gbmFtZXNwYWNlCi0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tOjpzdGQ6 OnNpemVfdCBzaXplX29mKCk7Ci0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tOjpzdGQ6OnNpemVf dCBhbGlnbl9vZigpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPjo6c3RkOjpzaXplX3Qgc2l6ZV9v ZiAoKTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD46OnN0ZDo6c2l6ZV90IGFsaWduX29mICgpOwot IAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX1NUUklORwotICNkZWZpbmUgQ1hYQlJJREdFMV9S VVNUX1NUUklORwotLWNsYXNzIFN0cmluZyBmaW5hbCB7Ci0rY2xhc3MgU3RyaW5nIGZpbmFsCi0r ewotIHB1YmxpYzoKLS0gIFN0cmluZygpIG5vZXhjZXB0OwotLSAgU3RyaW5nKGNvbnN0IFN0cmlu ZyAmKSBub2V4Y2VwdDsKLS0gIFN0cmluZyhTdHJpbmcgJiYpIG5vZXhjZXB0OwotLSAgflN0cmlu ZygpIG5vZXhjZXB0OwotLQotLSAgU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICYpOwotLSAgU3Ry aW5nKGNvbnN0IGNoYXIgKik7Ci0tICBTdHJpbmcoY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCk7 Ci0tICBTdHJpbmcoY29uc3QgY2hhcjE2X3QgKik7Ci0tICBTdHJpbmcoY29uc3QgY2hhcjE2X3Qg Kiwgc3RkOjpzaXplX3QpOwotKyAgU3RyaW5nICgpIG5vZXhjZXB0OwotKyAgU3RyaW5nIChjb25z dCBTdHJpbmcgJikgbm9leGNlcHQ7Ci0rICBTdHJpbmcgKFN0cmluZyAmJikgbm9leGNlcHQ7Ci0r ICB+U3RyaW5nICgpIG5vZXhjZXB0OwotKwotKyAgU3RyaW5nIChjb25zdCBzdGQ6OnN0cmluZyAm KTsKLSsgIFN0cmluZyAoY29uc3QgY2hhciAqKTsKLSsgIFN0cmluZyAoY29uc3QgY2hhciAqLCBz dGQ6OnNpemVfdCk7Ci0rICBTdHJpbmcgKGNvbnN0IGNoYXIxNl90ICopOwotKyAgU3RyaW5nIChj b25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCk7Ci0gI2lmZGVmIF9fY3BwX2NoYXI4X3QKLS0g IFN0cmluZyhjb25zdCBjaGFyOF90ICpzKTsKLS0gIFN0cmluZyhjb25zdCBjaGFyOF90ICpzLCBz dGQ6OnNpemVfdCBsZW4pOwotKyAgU3RyaW5nIChjb25zdCBjaGFyOF90ICpzKTsKLSsgIFN0cmlu ZyAoY29uc3QgY2hhcjhfdCAqcywgc3RkOjpzaXplX3QgbGVuKTsKLSAjZW5kaWYKLSAKLS0gIHN0 YXRpYyBTdHJpbmcgbG9zc3koY29uc3Qgc3RkOjpzdHJpbmcgJikgbm9leGNlcHQ7Ci0tICBzdGF0 aWMgU3RyaW5nIGxvc3N5KGNvbnN0IGNoYXIgKikgbm9leGNlcHQ7Ci0tICBzdGF0aWMgU3RyaW5n IGxvc3N5KGNvbnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotLSAgc3RhdGljIFN0 cmluZyBsb3NzeShjb25zdCBjaGFyMTZfdCAqKSBub2V4Y2VwdDsKLS0gIHN0YXRpYyBTdHJpbmcg bG9zc3koY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotKyAgc3RhdGlj IFN0cmluZyBsb3NzeSAoY29uc3Qgc3RkOjpzdHJpbmcgJikgbm9leGNlcHQ7Ci0rICBzdGF0aWMg U3RyaW5nIGxvc3N5IChjb25zdCBjaGFyICopIG5vZXhjZXB0OwotKyAgc3RhdGljIFN0cmluZyBs b3NzeSAoY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0rICBzdGF0aWMgU3Ry aW5nIGxvc3N5IChjb25zdCBjaGFyMTZfdCAqKSBub2V4Y2VwdDsKLSsgIHN0YXRpYyBTdHJpbmcg bG9zc3kgKGNvbnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLSAKLS0gIFN0 cmluZyAmb3BlcmF0b3I9KGNvbnN0IFN0cmluZyAmKSAmIG5vZXhjZXB0OwotLSAgU3RyaW5nICZv cGVyYXRvcj0oU3RyaW5nICYmKSAmIG5vZXhjZXB0OwotKyAgU3RyaW5nICZvcGVyYXRvcj0gKGNv bnN0IFN0cmluZyAmKSAmIG5vZXhjZXB0OwotKyAgU3RyaW5nICZvcGVyYXRvcj0gKFN0cmluZyAm JikgJiBub2V4Y2VwdDsKLSAKLS0gIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29u c3Q7Ci0rICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnN0cmluZyAoKSBjb25zdDsKLSAKLS0gIGNv bnN0IGNoYXIgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHN0ZDo6c2l6ZV90IHNpemUoKSBj b25zdCBub2V4Y2VwdDsKLS0gIHN0ZDo6c2l6ZV90IGxlbmd0aCgpIGNvbnN0IG5vZXhjZXB0Owot LSAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3QgY2hhciAqZGF0YSAoKSBj b25zdCBub2V4Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90IHNpemUgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICBzdGQ6OnNpemVfdCBsZW5ndGggKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGVtcHR5ICgp IGNvbnN0IG5vZXhjZXB0OwotIAotLSAgY29uc3QgY2hhciAqY19zdHIoKSBub2V4Y2VwdDsKLSsg IGNvbnN0IGNoYXIgKmNfc3RyICgpIG5vZXhjZXB0OwotIAotLSAgc3RkOjpzaXplX3QgY2FwYWNp dHkoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgcmVzZXJ2ZShzaXplX3QgbmV3X2NhcCkgbm9l eGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBjYXBhY2l0eSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZv aWQgcmVzZXJ2ZSAoc2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OwotIAotICAgdXNpbmcgaXRlcmF0 b3IgPSBjaGFyICo7Ci0tICBpdGVyYXRvciBiZWdpbigpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3Ig ZW5kKCkgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciBiZWdpbiAoKSBub2V4Y2VwdDsKLSsgIGl0ZXJh dG9yIGVuZCAoKSBub2V4Y2VwdDsKLSAKLSAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gY29uc3Qg Y2hhciAqOwotLSAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNv bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3RfaXRlcmF0b3IgY2Jl Z2luKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRvciBjZW5kKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNv bnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGNi ZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGNlbmQgKCkgY29uc3Qg bm9leGNlcHQ7Ci0gCi0tICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5v ZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2Vw dDsKLS0gIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLS0g IGJvb2wgb3BlcmF0b3I8PShjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29s IG9wZXJhdG9yPihjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJh dG9yPj0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj09 IChjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yIT0gKGNv bnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBT dHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IFN0cmlu ZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I+IChjb25zdCBTdHJpbmcgJikg Y29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPj0gKGNvbnN0IFN0cmluZyAmKSBjb25z dCBub2V4Y2VwdDsKLSAKLS0gIHZvaWQgc3dhcChTdHJpbmcgJikgbm9leGNlcHQ7Ci0rICB2b2lk IHN3YXAgKFN0cmluZyAmKSBub2V4Y2VwdDsKLSAKLS0gIFN0cmluZyh1bnNhZmVfYml0Y29weV90 LCBjb25zdCBTdHJpbmcgJikgbm9leGNlcHQ7Ci0rICBTdHJpbmcgKHVuc2FmZV9iaXRjb3B5X3Qs IGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLSAKLSBwcml2YXRlOgotICAgc3RydWN0IGxvc3N5 X3Q7Ci0tICBTdHJpbmcobG9zc3lfdCwgY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCkgbm9leGNl cHQ7Ci0tICBTdHJpbmcobG9zc3lfdCwgY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpIG5v ZXhjZXB0OwotLSAgZnJpZW5kIHZvaWQgc3dhcChTdHJpbmcgJmxocywgU3RyaW5nICZyaHMpIG5v ZXhjZXB0IHsgbGhzLnN3YXAocmhzKTsgfQotKyAgU3RyaW5nIChsb3NzeV90LCBjb25zdCBjaGFy ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLSsgIFN0cmluZyAobG9zc3lfdCwgY29uc3QgY2hh cjE2X3QgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotKyAgZnJpZW5kIHZvaWQKLSsgIHN3YXAg KFN0cmluZyAmbGhzLCBTdHJpbmcgJnJocykgbm9leGNlcHQKLSsgIHsKLSsgICAgbGhzLnN3YXAg KHJocyk7Ci0rICB9Ci0gCi0gICBzdGQ6OmFycmF5PHN0ZDo6dWludHB0cl90LCAzPiByZXByOwot IH07Ci1AQCAtMTM1LDQ4ICsxMzgsNDkgQEAgY2xhc3MgU3RyaW5nIGZpbmFsIHsKLSAKLSAjaWZu ZGVmIENYWEJSSURHRTFfUlVTVF9TVFIKLSAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9TVFIKLS1j bGFzcyBTdHIgZmluYWwgewotK2NsYXNzIFN0ciBmaW5hbAotK3sKLSBwdWJsaWM6Ci0tICBTdHIo KSBub2V4Y2VwdDsKLS0gIFN0cihjb25zdCBTdHJpbmcgJikgbm9leGNlcHQ7Ci0tICBTdHIoY29u c3Qgc3RkOjpzdHJpbmcgJik7Ci0tICBTdHIoY29uc3QgY2hhciAqKTsKLS0gIFN0cihjb25zdCBj aGFyICosIHN0ZDo6c2l6ZV90KTsKLSsgIFN0ciAoKSBub2V4Y2VwdDsKLSsgIFN0ciAoY29uc3Qg U3RyaW5nICYpIG5vZXhjZXB0OwotKyAgU3RyIChjb25zdCBzdGQ6OnN0cmluZyAmKTsKLSsgIFN0 ciAoY29uc3QgY2hhciAqKTsKLSsgIFN0ciAoY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCk7Ci0g Ci0tICBTdHIgJm9wZXJhdG9yPShjb25zdCBTdHIgJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0r ICBTdHIgJm9wZXJhdG9yPSAoY29uc3QgU3RyICYpICYgbm9leGNlcHQgPSBkZWZhdWx0OwotIAot LSAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdDsKLSsgIGV4cGxpY2l0IG9w ZXJhdG9yIHN0ZDo6c3RyaW5nICgpIGNvbnN0OwotICNpZiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNM Ci0tICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnN0cmluZ192aWV3KCkgY29uc3Q7Ci0rICBleHBs aWNpdCBvcGVyYXRvciBzdGQ6OnN0cmluZ192aWV3ICgpIGNvbnN0OwotICNlbmRpZgotIAotLSAg Y29uc3QgY2hhciAqZGF0YSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3Qgc2l6ZSgp IGNvbnN0IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdCBjaGFyICpkYXRhICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgc3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4Y2VwdDsK LSsgIHN0ZDo6c2l6ZV90IGxlbmd0aCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZW1wdHkg KCkgY29uc3Qgbm9leGNlcHQ7Ci0gCi0tICBTdHIoY29uc3QgU3RyICYpIG5vZXhjZXB0ID0gZGVm YXVsdDsKLS0gIH5TdHIoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rICBTdHIgKGNvbnN0IFN0ciAm KSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rICB+U3RyICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSAK LSAgIHVzaW5nIGl0ZXJhdG9yID0gY29uc3QgY2hhciAqOwotICAgdXNpbmcgY29uc3RfaXRlcmF0 b3IgPSBjb25zdCBjaGFyICo7Ci0tICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhj ZXB0OwotLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9p dGVyYXRvciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3Rf aXRlcmF0b3IgY2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgY2Vu ZCAoKSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHIgJikg Y29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyICYpIGNvbnN0IG5v ZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvcjwoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0Owot LSAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wg b3BlcmF0b3I+KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3I+ PShjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPT0gKGNvbnN0 IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgU3RyICYp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IFN0ciAmKSBjb25zdCBu b2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I8PSAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0 OwotKyAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJv b2wgb3BlcmF0b3I+PSAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgdm9pZCBz d2FwKFN0ciAmKSBub2V4Y2VwdDsKLSsgIHZvaWQgc3dhcCAoU3RyICYpIG5vZXhjZXB0OwotIAot IHByaXZhdGU6Ci0gICBjbGFzcyB1bmluaXQ7Ci0tICBTdHIodW5pbml0KSBub2V4Y2VwdDsKLSsg IFN0ciAodW5pbml0KSBub2V4Y2VwdDsKLSAgIGZyaWVuZCBpbXBsPFN0cj47Ci0gCi0gICBzdGQ6 OmFycmF5PHN0ZDo6dWludHB0cl90LCAyPiByZXByOwotQEAgLTE4NSw3MiArMTg5LDcyIEBAIGNs YXNzIFN0ciBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfU0xJQ0UKLSAjZGVm aW5lIENYWEJSSURHRTFfUlVTVF9TTElDRQotLW5hbWVzcGFjZSBkZXRhaWwgewotLXRlbXBsYXRl IDxib29sPgotLXN0cnVjdCBjb3B5X2Fzc2lnbmFibGVfaWYge307Ci0rbmFtZXNwYWNlIGRldGFp bAotK3sKLSt0ZW1wbGF0ZSA8Ym9vbD4gc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZgotK3sKLSt9 OwotIAotLXRlbXBsYXRlIDw+Ci0tc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZjxmYWxzZT4gewot LSAgY29weV9hc3NpZ25hYmxlX2lmKCkgbm9leGNlcHQgPSBkZWZhdWx0OwotLSAgY29weV9hc3Np Z25hYmxlX2lmKGNvbnN0IGNvcHlfYXNzaWduYWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7 Ci0tICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPShjb25zdCBjb3B5X2Fzc2lnbmFibGVf aWYgJikgJiBub2V4Y2VwdCA9IGRlbGV0ZTsKLS0gIGNvcHlfYXNzaWduYWJsZV9pZiAmb3BlcmF0 b3I9KGNvcHlfYXNzaWduYWJsZV9pZiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rdGVtcGxh dGUgPD4gc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZjxmYWxzZT4KLSt7Ci0rICBjb3B5X2Fzc2ln bmFibGVfaWYgKCkgbm9leGNlcHQgPSBkZWZhdWx0OwotKyAgY29weV9hc3NpZ25hYmxlX2lmIChj b25zdCBjb3B5X2Fzc2lnbmFibGVfaWYgJikgbm9leGNlcHQgPSBkZWZhdWx0OwotKyAgY29weV9h c3NpZ25hYmxlX2lmICZvcGVyYXRvcj0gKGNvbnN0IGNvcHlfYXNzaWduYWJsZV9pZiAmKSAmIG5v ZXhjZXB0ID0gZGVsZXRlOwotKyAgY29weV9hc3NpZ25hYmxlX2lmICZvcGVyYXRvcj0gKGNvcHlf YXNzaWduYWJsZV9pZiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0gfTsKLSB9IC8vIG5hbWVz cGFjZSBkZXRhaWwKLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jbGFzcyBTbGljZSBmaW5h bAotLSAgICA6IHByaXZhdGUgZGV0YWlsOjpjb3B5X2Fzc2lnbmFibGVfaWY8c3RkOjppc19jb25z dDxUPjo6dmFsdWU+IHsKLStjbGFzcyBTbGljZSBmaW5hbCA6IHByaXZhdGUgZGV0YWlsOjpjb3B5 X2Fzc2lnbmFibGVfaWY8c3RkOjppc19jb25zdDxUPjo6dmFsdWU+Ci0rewotIHB1YmxpYzoKLSAg IHVzaW5nIHZhbHVlX3R5cGUgPSBUOwotIAotLSAgU2xpY2UoKSBub2V4Y2VwdDsKLS0gIFNsaWNl KFQgKiwgc3RkOjpzaXplX3QgY291bnQpIG5vZXhjZXB0OwotKyAgU2xpY2UgKCkgbm9leGNlcHQ7 Ci0rICBTbGljZSAoVCAqLCBzdGQ6OnNpemVfdCBjb3VudCkgbm9leGNlcHQ7Ci0gCi0tICB0ZW1w bGF0ZSA8dHlwZW5hbWUgQz4KLS0gIGV4cGxpY2l0IFNsaWNlKEMgJmMpIDogU2xpY2UoYy5kYXRh KCksIGMuc2l6ZSgpKSB7fQotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIEM+IGV4cGxpY2l0IFNsaWNl IChDICZjKSA6IFNsaWNlIChjLmRhdGEgKCksIGMuc2l6ZSAoKSkge30KLSAKLS0gIFNsaWNlICZv cGVyYXRvcj0oY29uc3QgU2xpY2U8VD4gJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0tICBTbGlj ZSAmb3BlcmF0b3I9KFNsaWNlPFQ+ICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIFNsaWNl ICZvcGVyYXRvcj0gKGNvbnN0IFNsaWNlPFQ+ICYpICYgbm9leGNlcHQgPSBkZWZhdWx0OwotKyAg U2xpY2UgJm9wZXJhdG9yPSAoU2xpY2U8VD4gJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0OwotIAot LSAgVCAqZGF0YSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0 IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBi b29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBUICpkYXRhICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgc3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90 IGxlbmd0aCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZW1wdHkgKCkgY29uc3Qgbm9leGNl cHQ7Ci0gCi0tICBUICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0Owot LSAgVCAmYXQoc3RkOjpzaXplX3QgbikgY29uc3Q7Ci0tICBUICZmcm9udCgpIGNvbnN0IG5vZXhj ZXB0OwotLSAgVCAmYmFjaygpIGNvbnN0IG5vZXhjZXB0OwotKyAgVCAmb3BlcmF0b3JbXSAoc3Rk OjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQ7Ci0rICBUICZhdCAoc3RkOjpzaXplX3QgbikgY29u c3Q7Ci0rICBUICZmcm9udCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIFQgJmJhY2sgKCkgY29uc3Qg bm9leGNlcHQ7Ci0gCi0tICBTbGljZShjb25zdCBTbGljZTxUPiAmKSBub2V4Y2VwdCA9IGRlZmF1 bHQ7Ci0tICB+U2xpY2UoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rICBTbGljZSAoY29uc3QgU2xp Y2U8VD4gJikgbm9leGNlcHQgPSBkZWZhdWx0OwotKyAgflNsaWNlICgpIG5vZXhjZXB0ID0gZGVm YXVsdDsKLSAKLSAgIGNsYXNzIGl0ZXJhdG9yOwotLSAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCBu b2V4Y2VwdDsKLS0gIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IG5vZXhjZXB0OwotKyAgaXRlcmF0b3Ig YmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNl cHQ7Ci0gCi0tICB2b2lkIHN3YXAoU2xpY2UgJikgbm9leGNlcHQ7Ci0rICB2b2lkIHN3YXAgKFNs aWNlICYpIG5vZXhjZXB0OwotIAotIHByaXZhdGU6Ci0gICBjbGFzcyB1bmluaXQ7Ci0tICBTbGlj ZSh1bmluaXQpIG5vZXhjZXB0OwotKyAgU2xpY2UgKHVuaW5pdCkgbm9leGNlcHQ7Ci0gICBmcmll bmQgaW1wbDxTbGljZT47Ci0tICBmcmllbmQgdm9pZCBzbGljZUluaXQodm9pZCAqLCBjb25zdCB2 b2lkICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLS0gIGZyaWVuZCB2b2lkICpzbGljZVB0cihj b25zdCB2b2lkICopIG5vZXhjZXB0OwotLSAgZnJpZW5kIHN0ZDo6c2l6ZV90IHNsaWNlTGVuKGNv bnN0IHZvaWQgKikgbm9leGNlcHQ7Ci0rICBmcmllbmQgdm9pZCBzbGljZUluaXQgKHZvaWQgKiwg Y29uc3Qgdm9pZCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0rICBmcmllbmQgdm9pZCAqc2xp Y2VQdHIgKGNvbnN0IHZvaWQgKikgbm9leGNlcHQ7Ci0rICBmcmllbmQgc3RkOjpzaXplX3Qgc2xp Y2VMZW4gKGNvbnN0IHZvaWQgKikgbm9leGNlcHQ7Ci0gCi0gICBzdGQ6OmFycmF5PHN0ZDo6dWlu dHB0cl90LCAyPiByZXByOwotIH07Ci0gCi0gI2lmZGVmIF9fY3BwX2RlZHVjdGlvbl9ndWlkZXMK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KLS1leHBsaWNpdCBTbGljZShDICZjKQotLSAgICAtPiBT bGljZTxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxkZWNsdHlwZSgqc3RkOjpkZWNsdmFsPEM+KCku ZGF0YSgpKT4+OwotK2V4cGxpY2l0IFNsaWNlIChDICZjKSAtPiBTbGljZTxzdGQ6OnJlbW92ZV9y ZWZlcmVuY2VfdDxkZWNsdHlwZSAoKnN0ZDo6ZGVjbHZhbDxDPiAoKS5kYXRhICgpKT4+OwotICNl bmRpZiAvLyBfX2NwcF9kZWR1Y3Rpb25fZ3VpZGVzCi0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tY2xhc3MgU2xpY2U8VD46Oml0ZXJhdG9yIGZpbmFsIHsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gY2xhc3MgU2xpY2U8VD46Oml0ZXJhdG9yIGZpbmFsCi0rewotIHB1YmxpYzoKLSAjaWYgX19j cGx1c3BsdXMgPj0gMjAyMDAyTAotICAgdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmNv bnRpZ3VvdXNfaXRlcmF0b3JfdGFnOwotQEAgLTI2MiwzMCArMjY2LDMyIEBAIGNsYXNzIFNsaWNl PFQ+OjppdGVyYXRvciBmaW5hbCB7Ci0gICB1c2luZyBwb2ludGVyID0gdHlwZW5hbWUgc3RkOjph ZGRfcG9pbnRlcjxUPjo6dHlwZTsKLSAgIHVzaW5nIHJlZmVyZW5jZSA9IHR5cGVuYW1lIHN0ZDo6 YWRkX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnR5cGU7Ci0gCi0tICByZWZlcmVuY2Ugb3BlcmF0b3Iq KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICByZWZlcmVuY2Ugb3BlcmF0b3IqICgpIGNvbnN0IG5vZXhj ZXB0OwotICAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OwotLQotLSAgaXRl cmF0b3IgJm9wZXJhdG9yKysoKSBub2V4Y2VwdDsKLS0gIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50 KSBub2V4Y2VwdDsKLS0gIGl0ZXJhdG9yICZvcGVyYXRvci0tKCkgbm9leGNlcHQ7Ci0tICBpdGVy YXRvciBvcGVyYXRvci0tKGludCkgbm9leGNlcHQ7Ci0tCi0tICBpdGVyYXRvciAmb3BlcmF0b3Ir PShkaWZmZXJlbmNlX3R5cGUpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3IgJm9wZXJhdG9yLT0oZGlm ZmVyZW5jZV90eXBlKSBub2V4Y2VwdDsKLS0gIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNl X3R5cGUpIGNvbnN0IG5vZXhjZXB0OwotLSAgZnJpZW5kIGlubGluZSBpdGVyYXRvciBvcGVyYXRv cisoZGlmZmVyZW5jZV90eXBlIGxocywgaXRlcmF0b3IgcmhzKSBub2V4Y2VwdCB7Ci0rICByZWZl cmVuY2Ugb3BlcmF0b3JbXSAoZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKLSsKLSsg IGl0ZXJhdG9yICZvcGVyYXRvcisrICgpIG5vZXhjZXB0OwotKyAgaXRlcmF0b3Igb3BlcmF0b3Ir KyAoaW50KSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yICZvcGVyYXRvci0tICgpIG5vZXhjZXB0Owot KyAgaXRlcmF0b3Igb3BlcmF0b3ItLSAoaW50KSBub2V4Y2VwdDsKLSsKLSsgIGl0ZXJhdG9yICZv cGVyYXRvcis9IChkaWZmZXJlbmNlX3R5cGUpIG5vZXhjZXB0OwotKyAgaXRlcmF0b3IgJm9wZXJh dG9yLT0gKGRpZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciBvcGVyYXRvcisg KGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7Ci0rICBmcmllbmQgaW5saW5lIGl0ZXJh dG9yCi0rICBvcGVyYXRvcisgKGRpZmZlcmVuY2VfdHlwZSBsaHMsIGl0ZXJhdG9yIHJocykgbm9l eGNlcHQKLSsgIHsKLSAgICAgcmV0dXJuIHJocyArIGxoczsKLSAgIH0KLS0gIGl0ZXJhdG9yIG9w ZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OwotLSAgZGlmZmVyZW5jZV90 eXBlIG9wZXJhdG9yLShjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGl0ZXJh dG9yIG9wZXJhdG9yLSAoZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKLSsgIGRpZmZl cmVuY2VfdHlwZSBvcGVyYXRvci0gKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0Owot IAotLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0Owot LSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotLSAg Ym9vbCBvcGVyYXRvcjwoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29s IG9wZXJhdG9yPD0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9w ZXJhdG9yPihjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0 b3I+PShjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I9 PSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yIT0g KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjwgKGNv bnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjw9IChjb25z dCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I+IChjb25zdCBp dGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgaXRl cmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCBjbGFzcyBT bGljZTsKLUBAIC0yOTQsMzY3ICszMDAsNDM3IEBAIGNsYXNzIFNsaWNlPFQ+OjppdGVyYXRvciBm aW5hbCB7Ci0gfTsKLSAKLSAjaWYgX19jcGx1c3BsdXMgPj0gMjAyMDAyTAotLXN0YXRpY19hc3Nl cnQoc3RkOjpyYW5nZXM6OmNvbnRpZ3VvdXNfcmFuZ2U8cnVzdDo6U2xpY2U8Y29uc3QgdWludDhf dD4+KTsKLS1zdGF0aWNfYXNzZXJ0KHN0ZDo6Y29udGlndW91c19pdGVyYXRvcjxydXN0OjpTbGlj ZTxjb25zdCB1aW50OF90Pjo6aXRlcmF0b3I+KTsKLStzdGF0aWNfYXNzZXJ0IChzdGQ6OnJhbmdl czo6Y29udGlndW91c19yYW5nZTxydXN0OjpTbGljZTxjb25zdCB1aW50OF90Pj4pOwotK3N0YXRp Y19hc3NlcnQgKHN0ZDo6Y29udGlndW91c19pdGVyYXRvcjxydXN0OjpTbGljZTxjb25zdCB1aW50 OF90Pjo6aXRlcmF0b3I+KTsKLSAjZW5kaWYKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1T bGljZTxUPjo6U2xpY2UoKSBub2V4Y2VwdCB7Ci0tICBzbGljZUluaXQodGhpcywgcmVpbnRlcnBy ZXRfY2FzdDx2b2lkICo+KGFsaWduX29mPFQ+KCkpLCAwKTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gU2xpY2U8VD46OlNsaWNlICgpIG5vZXhjZXB0Ci0rewotKyAgc2xpY2VJbml0ICh0aGlzLCBy ZWludGVycHJldF9jYXN0PHZvaWQgKj4gKGFsaWduX29mPFQ+ICgpKSwgMCk7Ci0gfQotIAotLXRl bXBsYXRlIDx0eXBlbmFtZSBUPgotLVNsaWNlPFQ+OjpTbGljZShUICpzLCBzdGQ6OnNpemVfdCBj b3VudCkgbm9leGNlcHQgewotLSAgYXNzZXJ0KHMgIT0gbnVsbHB0ciB8fCBjb3VudCA9PSAwKTsK LS0gIHNsaWNlSW5pdCh0aGlzLAotLSAgICAgICAgICAgIHMgPT0gbnVsbHB0ciAmJiBjb3VudCA9 PSAwCi0tICAgICAgICAgICAgICAgID8gcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+KGFsaWduX29m PFQ+KCkpCi0tICAgICAgICAgICAgICAgIDogY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92 ZV9jb25zdDxUPjo6dHlwZSAqPihzKSwKLS0gICAgICAgICAgICBjb3VudCk7Ci0rdGVtcGxhdGUg PHR5cGVuYW1lIFQ+IFNsaWNlPFQ+OjpTbGljZSAoVCAqcywgc3RkOjpzaXplX3QgY291bnQpIG5v ZXhjZXB0Ci0rewotKyAgYXNzZXJ0IChzICE9IG51bGxwdHIgfHwgY291bnQgPT0gMCk7Ci0rICBz bGljZUluaXQgKHRoaXMsCi0rICAgICAgICAgICAgIHMgPT0gbnVsbHB0ciAmJiBjb3VudCA9PSAw ID8gcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+IChhbGlnbl9vZjxUPiAoKSkKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6 cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlICo+IChzKSwKLSsgICAgICAgICAgICAgY291bnQpOwotIH0K LSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICpTbGljZTxUPjo6ZGF0YSgpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIHJldHVybiByZWludGVycHJldF9jYXN0PFQgKj4oc2xpY2VQdHIodGhpcykp OwotK1QgKgotK1NsaWNlPFQ+OjpkYXRhICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAoc2xpY2VQdHIgKHRoaXMpKTsKLSB9Ci0gCi0gdGVtcGxh dGUgPHR5cGVuYW1lIFQ+Ci0tc3RkOjpzaXplX3QgU2xpY2U8VD46OnNpemUoKSBjb25zdCBub2V4 Y2VwdCB7Ci0tICByZXR1cm4gc2xpY2VMZW4odGhpcyk7Ci0rc3RkOjpzaXplX3QKLStTbGljZTxU Pjo6c2l6ZSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBzbGljZUxlbiAodGhpcyk7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXN0ZDo6c2l6ZV90IFNsaWNlPFQ+Ojps ZW5ndGgoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gdGhpcy0+c2l6ZSgpOwotK3N0ZDo6 c2l6ZV90Ci0rU2xpY2U8VD46Omxlbmd0aCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVy biB0aGlzLT5zaXplICgpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNs aWNlPFQ+OjplbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiB0aGlzLT5zaXplKCkg PT0gMDsKLStib29sCi0rU2xpY2U8VD46OmVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAg cmV0dXJuIHRoaXMtPnNpemUgKCkgPT0gMDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tVCAmU2xpY2U8VD46Om9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQg ewotLSAgYXNzZXJ0KG4gPCB0aGlzLT5zaXplKCkpOwotLSAgYXV0byBwdHIgPSBzdGF0aWNfY2Fz dDxjaGFyICo+KHNsaWNlUHRyKHRoaXMpKSArIHNpemVfb2Y8VD4oKSAqIG47Ci0tICByZXR1cm4g KnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihwdHIpOwotK1QgJgotK1NsaWNlPFQ+OjpvcGVyYXRvcltd IChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIGFzc2VydCAobiA8IHRoaXMt PnNpemUgKCkpOwotKyAgYXV0byBwdHIgPSBzdGF0aWNfY2FzdDxjaGFyICo+IChzbGljZVB0ciAo dGhpcykpICsgc2l6ZV9vZjxUPiAoKSAqIG47Ci0rICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8 VCAqPiAocHRyKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAmU2xpY2U8VD46 OmF0KHN0ZDo6c2l6ZV90IG4pIGNvbnN0IHsKLS0gIGlmIChuID49IHRoaXMtPnNpemUoKSkgewot LSAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4oInJ1c3Q6OlNsaWNlIGluZGV4IG91dCBvZiBy YW5nZSIpOwotLSAgfQotK1QgJgotK1NsaWNlPFQ+OjphdCAoc3RkOjpzaXplX3QgbikgY29uc3QK LSt7Ci0rICBpZiAobiA+PSB0aGlzLT5zaXplICgpKQotKyAgICB7Ci0rICAgICAgcGFuaWM8c3Rk OjpvdXRfb2ZfcmFuZ2U+ICgicnVzdDo6U2xpY2UgaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0rICAg IH0KLSAgIHJldHVybiAoKnRoaXMpW25dOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS1UICZTbGljZTxUPjo6ZnJvbnQoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhc3NlcnQoIXRoaXMt PmVtcHR5KCkpOwotK1QgJgotK1NsaWNlPFQ+Ojpmcm9udCAoKSBjb25zdCBub2V4Y2VwdAotK3sK LSsgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKLSAgIHJldHVybiAoKnRoaXMpWzBdOwotIH0K LSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICZTbGljZTxUPjo6YmFjaygpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7Ci0tICByZXR1cm4gKCp0aGlzKVt0 aGlzLT5zaXplKCkgLSAxXTsKLStUICYKLStTbGljZTxUPjo6YmFjayAoKSBjb25zdCBub2V4Y2Vw dAotK3sKLSsgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKLSsgIHJldHVybiAoKnRoaXMpW3Ro aXMtPnNpemUgKCkgLSAxXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gdHlwZW5h bWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpyZWZlcmVuY2UKLS1TbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiAqc3RhdGljX2Nhc3Q8VCAqPih0 aGlzLT5wb3MpOwotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IqICgpIGNvbnN0IG5vZXhj ZXB0Ci0rewotKyAgcmV0dXJuICpzdGF0aWNfY2FzdDxUICo+ICh0aGlzLT5wb3MpOwotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OnBv aW50ZXIKLS1TbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdCB7 Ci0tICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPih0aGlzLT5wb3MpOwotK1NsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHN0YXRpY19j YXN0PFQgKj4gKHRoaXMtPnBvcyk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5 cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6cmVmZXJlbmNlIFNsaWNlPFQ+OjppdGVyYXRvcjo6 b3BlcmF0b3JbXSgKLS0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNl X3R5cGUgbikgY29uc3Qgbm9leGNlcHQgewotLSAgYXV0byBwdHIgPSBzdGF0aWNfY2FzdDxjaGFy ICo+KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOwotLSAgcmV0dXJuICpyZWludGVycHJl dF9jYXN0PFQgKj4ocHRyKTsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OnJlZmVyZW5j ZQotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3JbXSAodHlwZW5hbWUgU2xpY2U8VD46Oml0 ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBhdXRvIHB0 ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOwot KyAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQgKj4gKHB0cik7Ci0gfQotIAotIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcisrKCkgbm9leGNlcHQgewotLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nh c3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlOwotK3R5cGVuYW1lIFNsaWNlPFQ+ OjppdGVyYXRvciAmCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisrICgpIG5vZXhjZXB0 Ci0rewotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRo aXMtPnN0cmlkZTsKLSAgIHJldHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3Bl cmF0b3IrKyhpbnQpIG5vZXhjZXB0IHsKLS0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOwot LSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3Ry aWRlOwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcgotK1NsaWNlPFQ+OjppdGVyYXRvcjo6 b3BlcmF0b3IrKyAoaW50KSBub2V4Y2VwdAotK3sKLSsgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0 aGlzKTsKLSsgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgKyB0 aGlzLT5zdHJpZGU7Ci0gICByZXR1cm4gcmV0OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3Bl cmF0b3ItLSgpIG5vZXhjZXB0IHsKLS0gIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4o dGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZTsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3Ig JgotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItLSAoKSBub2V4Y2VwdAotK3sKLSsgIHRo aXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGU7 Ci0gICByZXR1cm4gKnRoaXM7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLS0oaW50 KSBub2V4Y2VwdCB7Ci0tICBhdXRvIHJldCA9IGl0ZXJhdG9yKCp0aGlzKTsKLS0gIHRoaXMtPnBv cyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZTsKLSt0eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLS0g KGludCkgbm9leGNlcHQKLSt7Ci0rICBhdXRvIHJldCA9IGl0ZXJhdG9yICgqdGhpcyk7Ci0rICB0 aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRl OwotICAgcmV0dXJuIHJldDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5h bWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKz0oCi0t ICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhj ZXB0IHsKLS0gIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRo aXMtPnN0cmlkZSAqIG47Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICYKLStTbGljZTxU Pjo6aXRlcmF0b3I6Om9wZXJhdG9yKz0gKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlm ZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0Ci0rewotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8 Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47Ci0gICByZXR1cm4gKnRoaXM7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvciAmU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci09KAotLSAgICB0eXBlbmFtZSBTbGlj ZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBub2V4Y2VwdCB7Ci0tICB0aGlzLT5w b3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGUgKiBuOwot K3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVy YXRvci09ICh0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBu b2V4Y2VwdAotK3sKLSsgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBv cykgLSB0aGlzLT5zdHJpZGUgKiBuOwotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcisoCi0tICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlm ZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0IHsKLS0gIGF1dG8gcmV0ID0gaXRlcmF0b3Io KnRoaXMpOwotLSAgcmV0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRo aXMtPnN0cmlkZSAqIG47Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvcisgKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVy ZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgYXV0byByZXQgPSBpdGVyYXRvciAo KnRoaXMpOwotKyAgcmV0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgKyB0 aGlzLT5zdHJpZGUgKiBuOwotICAgcmV0dXJuIHJldDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6 b3BlcmF0b3ItKAotLSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2Vf dHlwZSBuKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhdXRvIHJldCA9IGl0ZXJhdG9yKCp0aGlzKTsK LS0gIHJldC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgLSB0aGlzLT5zdHJp ZGUgKiBuOwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcgotK1NsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3ItICh0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlw ZSBuKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlzKTsK LSsgIHJldC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpIC0gdGhpcy0+c3Ry aWRlICogbjsKLSAgIHJldHVybiByZXQ7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot IHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlCi0tU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvci0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICBhdXRvIGRpZmYgPSBzdGQ6OmRpc3RhbmNlKHN0YXRpY19jYXN0PGNoYXIgKj4ob3Ro ZXIucG9zKSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y2hhciAq Pih0aGlzLT5wb3MpKTsKLS0gIHJldHVybiBkaWZmIC8gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgU2xp Y2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGU+KAotLSAgICAgICAgICAgICAgICAgICAg dGhpcy0+c3RyaWRlKTsKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLSAoY29uc3QgaXRl cmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIGF1dG8gZGlmZiA9IHN0ZDo6ZGlz dGFuY2UgKHN0YXRpY19jYXN0PGNoYXIgKj4gKG90aGVyLnBvcyksIHN0YXRpY19jYXN0PGNoYXIg Kj4gKHRoaXMtPnBvcykpOwotKyAgcmV0dXJuIGRpZmYgLyBzdGF0aWNfY2FzdDx0eXBlbmFtZSBT bGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZT4gKHRoaXMtPnN0cmlkZSk7Ci0gfQot IAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVy YXRvcj09KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewotK2Jvb2wKLStT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29u c3Qgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cG9zID09IG90aGVyLnBvczsKLSB9Ci0g Ci0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yIT0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0rYm9vbAotK1Ns aWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IhPSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25z dCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgIT0gb3RoZXIucG9zOwotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0 b3I8KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewotK2Jvb2wKLStTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPCAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBu b2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPCBvdGhlci5wb3M7Ci0gfQotIAotIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcjw9 KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewotK2Jvb2wKLStTbGljZTxU Pjo6aXRlcmF0b3I6Om9wZXJhdG9yPD0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9l eGNlcHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cG9zIDw9IG90aGVyLnBvczsKLSB9Ci0gCi0gdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPihj b25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKLStib29sCi0rU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvcj4gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNl cHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cG9zID4gb3RoZXIucG9zOwotIH0KLSAKLSB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I+PShjb25z dCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKLStib29sCi0rU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcj49IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0 Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyA+PSBvdGhlci5wb3M7Ci0gfQotIAotIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6YmVn aW4oKSBjb25zdCBub2V4Y2VwdCB7Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xp Y2U8VD46OmJlZ2luICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgaXRlcmF0b3IgaXQ7Ci0tICBp dC5wb3MgPSBzbGljZVB0cih0aGlzKTsKLS0gIGl0LnN0cmlkZSA9IHNpemVfb2Y8VD4oKTsKLSsg IGl0LnBvcyA9IHNsaWNlUHRyICh0aGlzKTsKLSsgIGl0LnN0cmlkZSA9IHNpemVfb2Y8VD4gKCk7 Ci0gICByZXR1cm4gaXQ7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1l IFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6ZW5kKCkgY29uc3Qgbm9leGNlcHQgewotLSAg aXRlcmF0b3IgaXQgPSB0aGlzLT5iZWdpbigpOwotLSAgaXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hh ciAqPihpdC5wb3MpICsgaXQuc3RyaWRlICogdGhpcy0+c2l6ZSgpOwotK3R5cGVuYW1lIFNsaWNl PFQ+OjppdGVyYXRvcgotK1NsaWNlPFQ+OjplbmQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBp dGVyYXRvciBpdCA9IHRoaXMtPmJlZ2luICgpOwotKyAgaXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hh ciAqPiAoaXQucG9zKSArIGl0LnN0cmlkZSAqIHRoaXMtPnNpemUgKCk7Ci0gICByZXR1cm4gaXQ7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXZvaWQgU2xpY2U8VD46OnN3YXAoU2xp Y2UgJnJocykgbm9leGNlcHQgewotLSAgc3RkOjpzd2FwKCp0aGlzLCByaHMpOwotK3ZvaWQKLStT bGljZTxUPjo6c3dhcCAoU2xpY2UgJnJocykgbm9leGNlcHQKLSt7Ci0rICBzdGQ6OnN3YXAgKCp0 aGlzLCByaHMpOwotIH0KLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX1NMSUNFCi0gCi0gI2lm bmRlZiBDWFhCUklER0UxX1JVU1RfQk9YCi0gI2RlZmluZSBDWFhCUklER0UxX1JVU1RfQk9YCi0t dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY2xhc3MgQm94IGZpbmFsIHsKLSt0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gY2xhc3MgQm94IGZpbmFsCi0rewotIHB1YmxpYzoKLSAgIHVzaW5nIGVsZW1lbnRf dHlwZSA9IFQ7Ci0tICB1c2luZyBjb25zdF9wb2ludGVyID0KLS0gICAgICB0eXBlbmFtZSBzdGQ6 OmFkZF9wb2ludGVyPHR5cGVuYW1lIHN0ZDo6YWRkX2NvbnN0PFQ+Ojp0eXBlPjo6dHlwZTsKLSsg IHVzaW5nIGNvbnN0X3BvaW50ZXIgPSB0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPHR5cGVuYW1l IHN0ZDo6YWRkX2NvbnN0PFQ+Ojp0eXBlPjo6dHlwZTsKLSAgIHVzaW5nIHBvaW50ZXIgPSB0eXBl bmFtZSBzdGQ6OmFkZF9wb2ludGVyPFQ+Ojp0eXBlOwotIAotLSAgQm94KCkgPSBkZWxldGU7Ci0t ICBCb3goQm94ICYmKSBub2V4Y2VwdDsKLS0gIH5Cb3goKSBub2V4Y2VwdDsKLSsgIEJveCAoKSA9 IGRlbGV0ZTsKLSsgIEJveCAoQm94ICYmKSBub2V4Y2VwdDsKLSsgIH5Cb3ggKCkgbm9leGNlcHQ7 Ci0gCi0tICBleHBsaWNpdCBCb3goY29uc3QgVCAmKTsKLS0gIGV4cGxpY2l0IEJveChUICYmKTsK LSsgIGV4cGxpY2l0IEJveCAoY29uc3QgVCAmKTsKLSsgIGV4cGxpY2l0IEJveCAoVCAmJik7Ci0g Ci0tICBCb3ggJm9wZXJhdG9yPShCb3ggJiYpICYgbm9leGNlcHQ7Ci0rICBCb3ggJm9wZXJhdG9y PSAoQm94ICYmKSAmIG5vZXhjZXB0OwotIAotICAgY29uc3QgVCAqb3BlcmF0b3ItPigpIGNvbnN0 IG5vZXhjZXB0OwotLSAgY29uc3QgVCAmb3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBj b25zdCBUICZvcGVyYXRvciogKCkgY29uc3Qgbm9leGNlcHQ7Ci0gICBUICpvcGVyYXRvci0+KCkg bm9leGNlcHQ7Ci0tICBUICZvcGVyYXRvciooKSBub2V4Y2VwdDsKLSsgIFQgJm9wZXJhdG9yKiAo KSBub2V4Y2VwdDsKLSAKLS0gIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBGaWVsZHM+Ci0tICBzdGF0 aWMgQm94IGluX3BsYWNlKEZpZWxkcyAmJi4uLik7Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g RmllbGRzPiBzdGF0aWMgQm94IGluX3BsYWNlIChGaWVsZHMgJiYuLi4pOwotIAotLSAgdm9pZCBz d2FwKEJveCAmKSBub2V4Y2VwdDsKLSsgIHZvaWQgc3dhcCAoQm94ICYpIG5vZXhjZXB0OwotIAot LSAgc3RhdGljIEJveCBmcm9tX3JhdyhUICopIG5vZXhjZXB0OwotKyAgc3RhdGljIEJveCBmcm9t X3JhdyAoVCAqKSBub2V4Y2VwdDsKLSAKLS0gIFQgKmludG9fcmF3KCkgbm9leGNlcHQ7Ci0rICBU ICppbnRvX3JhdyAoKSBub2V4Y2VwdDsKLSAKLSAgIC8qIERlcHJlY2F0ZWQgKi8gdXNpbmcgdmFs dWVfdHlwZSA9IGVsZW1lbnRfdHlwZTsKLSAKLSBwcml2YXRlOgotICAgY2xhc3MgdW5pbml0Owot ICAgY2xhc3MgYWxsb2NhdGlvbjsKLS0gIEJveCh1bmluaXQpIG5vZXhjZXB0OwotLSAgdm9pZCBk cm9wKCkgbm9leGNlcHQ7Ci0rICBCb3ggKHVuaW5pdCkgbm9leGNlcHQ7Ci0rICB2b2lkIGRyb3Ag KCkgbm9leGNlcHQ7Ci0gCi0tICBmcmllbmQgdm9pZCBzd2FwKEJveCAmbGhzLCBCb3ggJnJocykg bm9leGNlcHQgeyBsaHMuc3dhcChyaHMpOyB9Ci0rICBmcmllbmQgdm9pZAotKyAgc3dhcCAoQm94 ICZsaHMsIEJveCAmcmhzKSBub2V4Y2VwdAotKyAgewotKyAgICBsaHMuc3dhcCAocmhzKTsKLSsg IH0KLSAKLSAgIFQgKnB0cjsKLSB9OwotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNz IEJveDxUPjo6dW5pbml0IHt9OwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBCb3g8VD46 OnVuaW5pdAotK3sKLSt9OwotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIEJveDxU Pjo6YWxsb2NhdGlvbiB7Ci0tICBzdGF0aWMgVCAqYWxsb2MoKSBub2V4Y2VwdDsKLS0gIHN0YXRp YyB2b2lkIGRlYWxsb2MoVCAqKSBub2V4Y2VwdDsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh c3MgQm94PFQ+OjphbGxvY2F0aW9uCi0rewotKyAgc3RhdGljIFQgKmFsbG9jICgpIG5vZXhjZXB0 OwotKyAgc3RhdGljIHZvaWQgZGVhbGxvYyAoVCAqKSBub2V4Y2VwdDsKLSAKLSBwdWJsaWM6Ci0t ICBhbGxvY2F0aW9uKCkgbm9leGNlcHQgOiBwdHIoYWxsb2MoKSkge30KLS0gIH5hbGxvY2F0aW9u KCkgbm9leGNlcHQgewotLSAgICBpZiAodGhpcy0+cHRyKSB7Ci0tICAgICAgZGVhbGxvYyh0aGlz LT5wdHIpOwotLSAgICB9Ci0rICBhbGxvY2F0aW9uICgpIG5vZXhjZXB0IDogcHRyIChhbGxvYyAo KSkge30KLSsgIH5hbGxvY2F0aW9uICgpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIGlmICh0aGlzLT5w dHIpCi0rICAgICAgewotKyAgICAgICAgZGVhbGxvYyAodGhpcy0+cHRyKTsKLSsgICAgICB9Ci0g ICB9Ci0gICBUICpwdHI7Ci0gfTsKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1Cb3g8VD46 OkJveChCb3ggJiZvdGhlcikgbm9leGNlcHQgOiBwdHIob3RoZXIucHRyKSB7Ci0tICBvdGhlci5w dHIgPSBudWxscHRyOwotLX0KLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+OjpCb3ggKEJv eCAmJm90aGVyKSBub2V4Y2VwdCA6IHB0ciAob3RoZXIucHRyKSB7IG90aGVyLnB0ciA9IG51bGxw dHI7IH0KLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1Cb3g8VD46OkJveChjb25zdCBUICZ2 YWwpIHsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+OjpCb3ggKGNvbnN0IFQgJnZhbCkK LSt7Ci0gICBhbGxvY2F0aW9uIGFsbG9jOwotLSAgOjpuZXcgKGFsbG9jLnB0cikgVCh2YWwpOwot KyAgOjpuZXcgKGFsbG9jLnB0cikgVCAodmFsKTsKLSAgIHRoaXMtPnB0ciA9IGFsbG9jLnB0cjsK LSAgIGFsbG9jLnB0ciA9IG51bGxwdHI7Ci0gfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LUJveDxUPjo6Qm94KFQgJiZ2YWwpIHsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+OjpC b3ggKFQgJiZ2YWwpCi0rewotICAgYWxsb2NhdGlvbiBhbGxvYzsKLS0gIDo6bmV3IChhbGxvYy5w dHIpIFQoc3RkOjptb3ZlKHZhbCkpOwotKyAgOjpuZXcgKGFsbG9jLnB0cikgVCAoc3RkOjptb3Zl ICh2YWwpKTsKLSAgIHRoaXMtPnB0ciA9IGFsbG9jLnB0cjsKLSAgIGFsbG9jLnB0ciA9IG51bGxw dHI7Ci0gfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLUJveDxUPjo6fkJveCgpIG5vZXhj ZXB0IHsKLS0gIGlmICh0aGlzLT5wdHIpIHsKLS0gICAgdGhpcy0+ZHJvcCgpOwotLSAgfQotK3Rl bXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46On5Cb3ggKCkgbm9leGNlcHQKLSt7Ci0rICBpZiAo dGhpcy0+cHRyKQotKyAgICB7Ci0rICAgICAgdGhpcy0+ZHJvcCAoKTsKLSsgICAgfQotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1Cb3g8VD4gJkJveDxUPjo6b3BlcmF0b3I9KEJveCAm Jm90aGVyKSAmIG5vZXhjZXB0IHsKLS0gIGlmICh0aGlzLT5wdHIpIHsKLS0gICAgdGhpcy0+ZHJv cCgpOwotLSAgfQotK0JveDxUPiAmCi0rQm94PFQ+OjpvcGVyYXRvcj0gKEJveCAmJm90aGVyKSAm IG5vZXhjZXB0Ci0rewotKyAgaWYgKHRoaXMtPnB0cikKLSsgICAgewotKyAgICAgIHRoaXMtPmRy b3AgKCk7Ci0rICAgIH0KLSAgIHRoaXMtPnB0ciA9IG90aGVyLnB0cjsKLSAgIG90aGVyLnB0ciA9 IG51bGxwdHI7Ci0gICByZXR1cm4gKnRoaXM7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotLWNvbnN0IFQgKkJveDxUPjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0IHsKLStjb25z dCBUICoKLStCb3g8VD46Om9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVy biB0aGlzLT5wdHI7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNvbnN0IFQgJkJv eDxUPjo6b3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQgewotK2NvbnN0IFQgJgotK0JveDxUPjo6 b3BlcmF0b3IqICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuICp0aGlzLT5wdHI7Ci0g fQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgKkJveDxUPjo6b3BlcmF0b3ItPigpIG5v ZXhjZXB0IHsKLStUICoKLStCb3g8VD46Om9wZXJhdG9yLT4oKSBub2V4Y2VwdAotK3sKLSAgIHJl dHVybiB0aGlzLT5wdHI7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJkJveDxU Pjo6b3BlcmF0b3IqKCkgbm9leGNlcHQgewotK1QgJgotK0JveDxUPjo6b3BlcmF0b3IqICgpIG5v ZXhjZXB0Ci0rewotICAgcmV0dXJuICp0aGlzLT5wdHI7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBGaWVsZHM+Ci0tQm94PFQ+IEJveDxUPjo6 aW5fcGxhY2UoRmllbGRzICYmLi4uZmllbGRzKSB7Ci0rQm94PFQ+Ci0rQm94PFQ+Ojppbl9wbGFj ZSAoRmllbGRzICYmLi4uZmllbGRzKQotK3sKLSAgIGFsbG9jYXRpb24gYWxsb2M7Ci0gICBhdXRv IHB0ciA9IGFsbG9jLnB0cjsKLS0gIDo6bmV3IChwdHIpIFR7c3RkOjpmb3J3YXJkPEZpZWxkcz4o ZmllbGRzKS4uLn07Ci0rICA6Om5ldyAocHRyKSBUeyBzdGQ6OmZvcndhcmQ8RmllbGRzPiAoZmll bGRzKS4uLiB9OwotICAgYWxsb2MucHRyID0gbnVsbHB0cjsKLS0gIHJldHVybiBmcm9tX3Jhdyhw dHIpOwotKyAgcmV0dXJuIGZyb21fcmF3IChwdHIpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KLS12b2lkIEJveDxUPjo6c3dhcChCb3ggJnJocykgbm9leGNlcHQgewotK3ZvaWQKLStC b3g8VD46OnN3YXAgKEJveCAmcmhzKSBub2V4Y2VwdAotK3sKLSAgIHVzaW5nIHN0ZDo6c3dhcDsK LS0gIHN3YXAodGhpcy0+cHRyLCByaHMucHRyKTsKLSsgIHN3YXAgKHRoaXMtPnB0ciwgcmhzLnB0 cik7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLUJveDxUPiBCb3g8VD46OmZyb21f cmF3KFQgKnJhdykgbm9leGNlcHQgewotK0JveDxUPgotK0JveDxUPjo6ZnJvbV9yYXcgKFQgKnJh dykgbm9leGNlcHQKLSt7Ci0gICBCb3ggYm94ID0gdW5pbml0e307Ci0gICBib3gucHRyID0gcmF3 OwotICAgcmV0dXJuIGJveDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAqQm94 PFQ+OjppbnRvX3JhdygpIG5vZXhjZXB0IHsKLStUICoKLStCb3g8VD46OmludG9fcmF3ICgpIG5v ZXhjZXB0Ci0rewotICAgVCAqcmF3ID0gdGhpcy0+cHRyOwotICAgdGhpcy0+cHRyID0gbnVsbHB0 cjsKLSAgIHJldHVybiByYXc7Ci0gfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLUJveDxU Pjo6Qm94KHVuaW5pdCkgbm9leGNlcHQge30KLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+ OjpCb3ggKHVuaW5pdCkgbm9leGNlcHQge30KLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX0JP WAotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX0JJVENPUFlfVAotICNkZWZpbmUgQ1hYQlJJ REdFMV9SVVNUX0JJVENPUFlfVAotLXN0cnVjdCB1bnNhZmVfYml0Y29weV90IGZpbmFsIHsKLS0g IGV4cGxpY2l0IHVuc2FmZV9iaXRjb3B5X3QoKSA9IGRlZmF1bHQ7Ci0rc3RydWN0IHVuc2FmZV9i aXRjb3B5X3QgZmluYWwKLSt7Ci0rICBleHBsaWNpdCB1bnNhZmVfYml0Y29weV90ICgpID0gZGVm YXVsdDsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCi0gCi1AQCAt NjY1LDI1NyArNzQxLDMwNyBAQCBjb25zdGV4cHIgdW5zYWZlX2JpdGNvcHlfdCB1bnNhZmVfYml0 Y29weXt9OwotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX1ZFQwotICNkZWZpbmUgQ1hYQlJJ REdFMV9SVVNUX1ZFQwotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIFZlYyBmaW5hbCB7 Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFZlYyBmaW5hbAotK3sKLSBwdWJsaWM6Ci0g ICB1c2luZyB2YWx1ZV90eXBlID0gVDsKLSAKLS0gIFZlYygpIG5vZXhjZXB0OwotLSAgVmVjKHN0 ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPik7Ci0tICBWZWMoY29uc3QgVmVjICYpOwotLSAgVmVjKFZl YyAmJikgbm9leGNlcHQ7Ci0tICB+VmVjKCkgbm9leGNlcHQ7Ci0tCi0tICBWZWMgJm9wZXJhdG9y PShWZWMgJiYpICYgbm9leGNlcHQ7Ci0tICBWZWMgJm9wZXJhdG9yPShjb25zdCBWZWMgJikgJjsK LS0KLS0gIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZW1wdHko KSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0IFQgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKLS0g IFQgKmRhdGEoKSBub2V4Y2VwdDsKLS0gIHN0ZDo6c2l6ZV90IGNhcGFjaXR5KCkgY29uc3Qgbm9l eGNlcHQ7Ci0tCi0tICBjb25zdCBUICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5v ZXhjZXB0OwotLSAgY29uc3QgVCAmYXQoc3RkOjpzaXplX3QgbikgY29uc3Q7Ci0tICBjb25zdCBU ICZmcm9udCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3QgVCAmYmFjaygpIGNvbnN0IG5vZXhj ZXB0OwotLQotLSAgVCAmb3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdDsKLS0gIFQg JmF0KHN0ZDo6c2l6ZV90IG4pOwotLSAgVCAmZnJvbnQoKSBub2V4Y2VwdDsKLS0gIFQgJmJhY2so KSBub2V4Y2VwdDsKLS0KLS0gIHZvaWQgcmVzZXJ2ZShzdGQ6OnNpemVfdCBuZXdfY2FwKTsKLS0g IHZvaWQgcHVzaF9iYWNrKGNvbnN0IFQgJnZhbHVlKTsKLS0gIHZvaWQgcHVzaF9iYWNrKFQgJiZ2 YWx1ZSk7Ci0tICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KLS0gIHZvaWQgZW1wbGFjZV9i YWNrKEFyZ3MgJiYuLi5hcmdzKTsKLS0gIHZvaWQgdHJ1bmNhdGUoc3RkOjpzaXplX3QgbGVuKTsK LS0gIHZvaWQgY2xlYXIoKTsKLSsgIFZlYyAoKSBub2V4Y2VwdDsKLSsgIFZlYyAoc3RkOjppbml0 aWFsaXplcl9saXN0PFQ+KTsKLSsgIFZlYyAoY29uc3QgVmVjICYpOwotKyAgVmVjIChWZWMgJiYp IG5vZXhjZXB0OwotKyAgflZlYyAoKSBub2V4Y2VwdDsKLSsKLSsgIFZlYyAmb3BlcmF0b3I9IChW ZWMgJiYpICYgbm9leGNlcHQ7Ci0rICBWZWMgJm9wZXJhdG9yPSAoY29uc3QgVmVjICYpICY7Ci0r Ci0rICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBlbXB0eSAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0IFQgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICBUICpkYXRhICgpIG5vZXhjZXB0OwotKyAgc3RkOjpzaXplX3QgY2FwYWNpdHkgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rCi0rICBjb25zdCBUICZvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25z dCBub2V4Y2VwdDsKLSsgIGNvbnN0IFQgJmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdDsKLSsgIGNv bnN0IFQgJmZyb250ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3QgVCAmYmFjayAoKSBjb25z dCBub2V4Y2VwdDsKLSsKLSsgIFQgJm9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0 OwotKyAgVCAmYXQgKHN0ZDo6c2l6ZV90IG4pOwotKyAgVCAmZnJvbnQgKCkgbm9leGNlcHQ7Ci0r ICBUICZiYWNrICgpIG5vZXhjZXB0OwotKwotKyAgdm9pZCByZXNlcnZlIChzdGQ6OnNpemVfdCBu ZXdfY2FwKTsKLSsgIHZvaWQgcHVzaF9iYWNrIChjb25zdCBUICZ2YWx1ZSk7Ci0rICB2b2lkIHB1 c2hfYmFjayAoVCAmJnZhbHVlKTsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPiB2b2lk IGVtcGxhY2VfYmFjayAoQXJncyAmJi4uLmFyZ3MpOwotKyAgdm9pZCB0cnVuY2F0ZSAoc3RkOjpz aXplX3QgbGVuKTsKLSsgIHZvaWQgY2xlYXIgKCk7Ci0gCi0gICB1c2luZyBpdGVyYXRvciA9IHR5 cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjsKLS0gIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7 Ci0tICBpdGVyYXRvciBlbmQoKSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhj ZXB0OwotKyAgaXRlcmF0b3IgZW5kICgpIG5vZXhjZXB0OwotIAotICAgdXNpbmcgY29uc3RfaXRl cmF0b3IgPSB0eXBlbmFtZSBTbGljZTxjb25zdCBUPjo6aXRlcmF0b3I7Ci0tICBjb25zdF9pdGVy YXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u c3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsK LS0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJh dG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNv bnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgY2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgY29uc3RfaXRlcmF0b3IgY2VuZCAoKSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIHZvaWQg c3dhcChWZWMgJikgbm9leGNlcHQ7Ci0rICB2b2lkIHN3YXAgKFZlYyAmKSBub2V4Y2VwdDsKLSAK LS0gIFZlYyh1bnNhZmVfYml0Y29weV90LCBjb25zdCBWZWMgJikgbm9leGNlcHQ7Ci0rICBWZWMg KHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFZlYyAmKSBub2V4Y2VwdDsKLSAKLSBwcml2YXRlOgot LSAgdm9pZCByZXNlcnZlX3RvdGFsKHN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OwotLSAg dm9pZCBzZXRfbGVuKHN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0tICB2b2lkIGRyb3AoKSBu b2V4Y2VwdDsKLSsgIHZvaWQgcmVzZXJ2ZV90b3RhbCAoc3RkOjpzaXplX3QgbmV3X2NhcCkgbm9l eGNlcHQ7Ci0rICB2b2lkIHNldF9sZW4gKHN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0rICB2 b2lkIGRyb3AgKCkgbm9leGNlcHQ7Ci0gCi0tICBmcmllbmQgdm9pZCBzd2FwKFZlYyAmbGhzLCBW ZWMgJnJocykgbm9leGNlcHQgeyBsaHMuc3dhcChyaHMpOyB9Ci0rICBmcmllbmQgdm9pZAotKyAg c3dhcCAoVmVjICZsaHMsIFZlYyAmcmhzKSBub2V4Y2VwdAotKyAgewotKyAgICBsaHMuc3dhcCAo cmhzKTsKLSsgIH0KLSAKLSAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+IHJlcHI7Ci0g fTsKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1WZWM8VD46OlZlYyhzdGQ6OmluaXRpYWxp emVyX2xpc3Q8VD4gaW5pdCkgOiBWZWN7fSB7Ci0tICB0aGlzLT5yZXNlcnZlX3RvdGFsKGluaXQu c2l6ZSgpKTsKLS0gIHN0ZDo6bW92ZShpbml0LmJlZ2luKCksIGluaXQuZW5kKCksIHN0ZDo6YmFj a19pbnNlcnRlcigqdGhpcykpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAo c3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXQpIDogVmVje30KLSt7Ci0rICB0aGlzLT5yZXNl cnZlX3RvdGFsIChpbml0LnNpemUgKCkpOwotKyAgc3RkOjptb3ZlIChpbml0LmJlZ2luICgpLCBp bml0LmVuZCAoKSwgc3RkOjpiYWNrX2luc2VydGVyICgqdGhpcykpOwotIH0KLSAKLS10ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLS1WZWM8VD46OlZlYyhjb25zdCBWZWMgJm90aGVyKSA6IFZlYygpIHsK LS0gIHRoaXMtPnJlc2VydmVfdG90YWwob3RoZXIuc2l6ZSgpKTsKLS0gIHN0ZDo6Y29weShvdGhl ci5iZWdpbigpLCBvdGhlci5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKCp0aGlzKSk7Ci0rdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IFZlYzxUPjo6VmVjIChjb25zdCBWZWMgJm90aGVyKSA6IFZlYyAo KQotK3sKLSsgIHRoaXMtPnJlc2VydmVfdG90YWwgKG90aGVyLnNpemUgKCkpOwotKyAgc3RkOjpj b3B5IChvdGhlci5iZWdpbiAoKSwgb3RoZXIuZW5kICgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIgKCp0 aGlzKSk7Ci0gfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVZlYzxUPjo6VmVjKFZlYyAm Jm90aGVyKSBub2V4Y2VwdCA6IHJlcHIob3RoZXIucmVwcikgewotLSAgbmV3ICgmb3RoZXIpIFZl YygpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAoVmVjICYmb3RoZXIpIG5v ZXhjZXB0IDogcmVwciAob3RoZXIucmVwcikKLSt7Ci0rICBuZXcgKCZvdGhlcikgVmVjICgpOwot IH0KLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1WZWM8VD46On5WZWMoKSBub2V4Y2VwdCB7 Ci0tICB0aGlzLT5kcm9wKCk7Ci0tfQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46On5W ZWMgKCkgbm9leGNlcHQgeyB0aGlzLT5kcm9wICgpOyB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Ci0tVmVjPFQ+ICZWZWM8VD46Om9wZXJhdG9yPShWZWMgJiZvdGhlcikgJiBub2V4Y2VwdCB7 Ci0tICB0aGlzLT5kcm9wKCk7Ci0rVmVjPFQ+ICYKLStWZWM8VD46Om9wZXJhdG9yPSAoVmVjICYm b3RoZXIpICYgbm9leGNlcHQKLSt7Ci0rICB0aGlzLT5kcm9wICgpOwotICAgdGhpcy0+cmVwciA9 IG90aGVyLnJlcHI7Ci0tICBuZXcgKCZvdGhlcikgVmVjKCk7Ci0rICBuZXcgKCZvdGhlcikgVmVj ICgpOwotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1W ZWM8VD4gJlZlYzxUPjo6b3BlcmF0b3I9KGNvbnN0IFZlYyAmb3RoZXIpICYgewotLSAgaWYgKHRo aXMgIT0gJm90aGVyKSB7Ci0tICAgIHRoaXMtPmRyb3AoKTsKLS0gICAgbmV3ICh0aGlzKSBWZWMo b3RoZXIpOwotLSAgfQotK1ZlYzxUPiAmCi0rVmVjPFQ+OjpvcGVyYXRvcj0gKGNvbnN0IFZlYyAm b3RoZXIpICYKLSt7Ci0rICBpZiAodGhpcyAhPSAmb3RoZXIpCi0rICAgIHsKLSsgICAgICB0aGlz LT5kcm9wICgpOwotKyAgICAgIG5ldyAodGhpcykgVmVjIChvdGhlcik7Ci0rICAgIH0KLSAgIHJl dHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBWZWM8VD46 OmVtcHR5KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOwot K2Jvb2wKLStWZWM8VD46OmVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHRo aXMtPnNpemUgKCkgPT0gMDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAqVmVj PFQ+OjpkYXRhKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIGNvbnN0X2Nhc3Q8VCAqPihjb25zdF9j YXN0PGNvbnN0IFZlYzxUPiAqPih0aGlzKS0+ZGF0YSgpKTsKLStUICoKLStWZWM8VD46OmRhdGEg KCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY29uc3RfY2FzdDxUICo+IChjb25zdF9jYXN0PGNv bnN0IFZlYzxUPiAqPiAodGhpcyktPmRhdGEgKCkpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KLS1jb25zdCBUICZWZWM8VD46Om9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qg bm9leGNlcHQgewotLSAgYXNzZXJ0KG4gPCB0aGlzLT5zaXplKCkpOwotLSAgYXV0byBkYXRhID0g cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KHRoaXMtPmRhdGEoKSk7Ci0tICByZXR1cm4g KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCAqPihkYXRhICsgbiAqIHNpemVfb2Y8VD4oKSk7Ci0r Y29uc3QgVCAmCi0rVmVjPFQ+OjpvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4 Y2VwdAotK3sKLSsgIGFzc2VydCAobiA8IHRoaXMtPnNpemUgKCkpOwotKyAgYXV0byBkYXRhID0g cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+ICh0aGlzLT5kYXRhICgpKTsKLSsgIHJldHVy biAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+IChkYXRhICsgbiAqIHNpemVfb2Y8VD4gKCkp OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jb25zdCBUICZWZWM8VD46OmF0KHN0 ZDo6c2l6ZV90IG4pIGNvbnN0IHsKLS0gIGlmIChuID49IHRoaXMtPnNpemUoKSkgewotLSAgICBw YW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4oInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsK LS0gIH0KLStjb25zdCBUICYKLStWZWM8VD46OmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdAotK3sK LSsgIGlmIChuID49IHRoaXMtPnNpemUgKCkpCi0rICAgIHsKLSsgICAgICBwYW5pYzxzdGQ6Om91 dF9vZl9yYW5nZT4gKCJydXN0OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0rICAgIH0KLSAg IHJldHVybiAoKnRoaXMpW25dOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jb25z dCBUICZWZWM8VD46OmZyb250KCkgY29uc3Qgbm9leGNlcHQgewotLSAgYXNzZXJ0KCF0aGlzLT5l bXB0eSgpKTsKLStjb25zdCBUICYKLStWZWM8VD46OmZyb250ICgpIGNvbnN0IG5vZXhjZXB0Ci0r ewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotICAgcmV0dXJuICgqdGhpcylbMF07Ci0g fQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNvbnN0IFQgJlZlYzxUPjo6YmFjaygpIGNv bnN0IG5vZXhjZXB0IHsKLS0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7Ci0tICByZXR1cm4gKCp0 aGlzKVt0aGlzLT5zaXplKCkgLSAxXTsKLStjb25zdCBUICYKLStWZWM8VD46OmJhY2sgKCkgY29u c3Qgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0rICByZXR1cm4g KCp0aGlzKVt0aGlzLT5zaXplICgpIC0gMV07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotLVQgJlZlYzxUPjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdCB7Ci0tICBh c3NlcnQobiA8IHRoaXMtPnNpemUoKSk7Ci0tICBhdXRvIGRhdGEgPSByZWludGVycHJldF9jYXN0 PGNoYXIgKj4odGhpcy0+ZGF0YSgpKTsKLS0gIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+ KGRhdGEgKyBuICogc2l6ZV9vZjxUPigpKTsKLStUICYKLStWZWM8VD46Om9wZXJhdG9yW10gKHN0 ZDo6c2l6ZV90IG4pIG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAoKSk7 Ci0rICBhdXRvIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIgKj4gKHRoaXMtPmRhdGEgKCkp OwotKyAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQgKj4gKGRhdGEgKyBuICogc2l6ZV9vZjxU PiAoKSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJlZlYzxUPjo6YXQoc3Rk OjpzaXplX3QgbikgewotLSAgaWYgKG4gPj0gdGhpcy0+c2l6ZSgpKSB7Ci0tICAgIHBhbmljPHN0 ZDo6b3V0X29mX3JhbmdlPigicnVzdDo6VmVjIGluZGV4IG91dCBvZiByYW5nZSIpOwotLSAgfQot K1QgJgotK1ZlYzxUPjo6YXQgKHN0ZDo6c2l6ZV90IG4pCi0rewotKyAgaWYgKG4gPj0gdGhpcy0+ c2l6ZSAoKSkKLSsgICAgewotKyAgICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPiAoInJ1c3Q6 OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSsgICAgfQotICAgcmV0dXJuICgqdGhpcylbbl07 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJlZlYzxUPjo6ZnJvbnQoKSBub2V4 Y2VwdCB7Ci0tICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOwotK1QgJgotK1ZlYzxUPjo6ZnJvbnQg KCkgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0gICByZXR1cm4g KCp0aGlzKVswXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAmVmVjPFQ+Ojpi YWNrKCkgbm9leGNlcHQgewotLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKLS0gIHJldHVybiAo KnRoaXMpW3RoaXMtPnNpemUoKSAtIDFdOwotK1QgJgotK1ZlYzxUPjo6YmFjayAoKSBub2V4Y2Vw dAotK3sKLSsgIGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKLSsgIHJldHVybiAoKnRoaXMpW3Ro aXMtPnNpemUgKCkgLSAxXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBW ZWM8VD46OnJlc2VydmUoc3RkOjpzaXplX3QgbmV3X2NhcCkgewotLSAgdGhpcy0+cmVzZXJ2ZV90 b3RhbChuZXdfY2FwKTsKLSt2b2lkCi0rVmVjPFQ+OjpyZXNlcnZlIChzdGQ6OnNpemVfdCBuZXdf Y2FwKQotK3sKLSsgIHRoaXMtPnJlc2VydmVfdG90YWwgKG5ld19jYXApOwotIH0KLSAKLSB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KLS12b2lkIFZlYzxUPjo6cHVzaF9iYWNrKGNvbnN0IFQgJnZhbHVl KSB7Ci0tICB0aGlzLT5lbXBsYWNlX2JhY2sodmFsdWUpOwotK3ZvaWQKLStWZWM8VD46OnB1c2hf YmFjayAoY29uc3QgVCAmdmFsdWUpCi0rewotKyAgdGhpcy0+ZW1wbGFjZV9iYWNrICh2YWx1ZSk7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXZvaWQgVmVjPFQ+OjpwdXNoX2JhY2so VCAmJnZhbHVlKSB7Ci0tICB0aGlzLT5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHZhbHVlKSk7Ci0r dm9pZAotK1ZlYzxUPjo6cHVzaF9iYWNrIChUICYmdmFsdWUpCi0rewotKyAgdGhpcy0+ZW1wbGFj ZV9iYWNrIChzdGQ6Om1vdmUgKHZhbHVlKSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgotLXZvaWQgVmVjPFQ+OjplbXBsYWNlX2Jh Y2soQXJncyAmJi4uLmFyZ3MpIHsKLS0gIGF1dG8gc2l6ZSA9IHRoaXMtPnNpemUoKTsKLS0gIHRo aXMtPnJlc2VydmVfdG90YWwoc2l6ZSArIDEpOwotLSAgOjpuZXcgKHJlaW50ZXJwcmV0X2Nhc3Q8 VCAqPihyZWludGVycHJldF9jYXN0PGNoYXIgKj4odGhpcy0+ZGF0YSgpKSArCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemUgKiBzaXplX29mPFQ+KCkpKQotLSAgICAgIFQoc3Rk Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLS0gIHRoaXMtPnNldF9sZW4oc2l6ZSArIDEpOwot K3ZvaWQKLStWZWM8VD46OmVtcGxhY2VfYmFjayAoQXJncyAmJi4uLmFyZ3MpCi0rewotKyAgYXV0 byBzaXplID0gdGhpcy0+c2l6ZSAoKTsKLSsgIHRoaXMtPnJlc2VydmVfdG90YWwgKHNpemUgKyAx KTsKLSsgIDo6bmV3IChyZWludGVycHJldF9jYXN0PFQgKj4gKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh ciAqPiAodGhpcy0+ZGF0YSAoKSkgKyBzaXplICogc2l6ZV9vZjxUPiAoKSkpCi0rICAgICAgVCAo c3RkOjpmb3J3YXJkPEFyZ3M+IChhcmdzKS4uLik7Ci0rICB0aGlzLT5zZXRfbGVuIChzaXplICsg MSk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXZvaWQgVmVjPFQ+OjpjbGVhcigp IHsKLS0gIHRoaXMtPnRydW5jYXRlKDApOwotK3ZvaWQKLStWZWM8VD46OmNsZWFyICgpCi0rewot KyAgdGhpcy0+dHJ1bmNhdGUgKDApOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS10 eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yIFZlYzxUPjo6YmVnaW4oKSBub2V4Y2VwdCB7Ci0tICBy ZXR1cm4gU2xpY2U8VD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmJlZ2luKCk7Ci0rdHlw ZW5hbWUgVmVjPFQ+OjppdGVyYXRvcgotK1ZlYzxUPjo6YmVnaW4gKCkgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gU2xpY2U8VD4gKHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmJlZ2luICgp OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBWZWM8VD46Oml0ZXJh dG9yIFZlYzxUPjo6ZW5kKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIFNsaWNlPFQ+KHRoaXMtPmRh dGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmQoKTsKLSt0eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yCi0r VmVjPFQ+OjplbmQgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gU2xpY2U8VD4gKHRoaXMtPmRh dGEgKCksIHRoaXMtPnNpemUgKCkpLmVuZCAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Ci0tdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmJlZ2luKCkgY29u c3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMtPmNiZWdpbigpOwotK3R5cGVuYW1lIFZlYzxU Pjo6Y29uc3RfaXRlcmF0b3IKLStWZWM8VD46OmJlZ2luICgpIGNvbnN0IG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHRoaXMtPmNiZWdpbiAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmVuZCgpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIHJldHVybiB0aGlzLT5jZW5kKCk7Ci0rdHlwZW5hbWUgVmVjPFQ+Ojpjb25z dF9pdGVyYXRvcgotK1ZlYzxUPjo6ZW5kICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IHRoaXMtPmNlbmQgKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1l IFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IgVmVjPFQ+OjpjYmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7 Ci0tICByZXR1cm4gU2xpY2U8Y29uc3QgVD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmJl Z2luKCk7Ci0rdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvcgotK1ZlYzxUPjo6Y2JlZ2lu ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+ICh0aGlzLT5k YXRhICgpLCB0aGlzLT5zaXplICgpKS5iZWdpbiAoKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmNlbmQoKSBj b25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gU2xpY2U8Y29uc3QgVD4odGhpcy0+ZGF0YSgpLCB0 aGlzLT5zaXplKCkpLmVuZCgpOwotK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IKLStW ZWM8VD46OmNlbmQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gU2xpY2U8Y29uc3Qg VD4gKHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmVuZCAoKTsKLSB9Ci0gCi0gdGVtcGxh dGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBWZWM8VD46OnN3YXAoVmVjICZyaHMpIG5vZXhjZXB0IHsK LSt2b2lkCi0rVmVjPFQ+Ojpzd2FwIChWZWMgJnJocykgbm9leGNlcHQKLSt7Ci0gICB1c2luZyBz dGQ6OnN3YXA7Ci0tICBzd2FwKHRoaXMtPnJlcHIsIHJocy5yZXByKTsKLSsgIHN3YXAgKHRoaXMt PnJlcHIsIHJocy5yZXByKTsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVmVjPFQ+ OjpWZWModW5zYWZlX2JpdGNvcHlfdCwgY29uc3QgVmVjICZiaXRzKSBub2V4Y2VwdCA6IHJlcHIo Yml0cy5yZXByKSB7fQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAodW5zYWZl X2JpdGNvcHlfdCwgY29uc3QgVmVjICZiaXRzKSBub2V4Y2VwdCA6IHJlcHIgKGJpdHMucmVwcikg e30KLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX1ZFQwotIAotICNpZm5kZWYgQ1hYQlJJREdF MV9SVVNUX0VSUk9SCi0gI2RlZmluZSBDWFhCUklER0UxX1JVU1RfRVJST1IKLS1jbGFzcyBFcnJv ciBmaW5hbCA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7Ci0rY2xhc3MgRXJyb3IgZmluYWwgOiBw dWJsaWMgc3RkOjpleGNlcHRpb24KLSt7Ci0gcHVibGljOgotLSAgRXJyb3IoY29uc3QgRXJyb3Ig Jik7Ci0tICBFcnJvcihFcnJvciAmJikgbm9leGNlcHQ7Ci0tICB+RXJyb3IoKSBub2V4Y2VwdCBv dmVycmlkZTsKLSsgIEVycm9yIChjb25zdCBFcnJvciAmKTsKLSsgIEVycm9yIChFcnJvciAmJikg bm9leGNlcHQ7Ci0rICB+RXJyb3IgKCkgbm9leGNlcHQgb3ZlcnJpZGU7Ci0gCi0tICBFcnJvciAm b3BlcmF0b3I9KGNvbnN0IEVycm9yICYpICY7Ci0tICBFcnJvciAmb3BlcmF0b3I9KEVycm9yICYm KSAmIG5vZXhjZXB0OwotKyAgRXJyb3IgJm9wZXJhdG9yPSAoY29uc3QgRXJyb3IgJikgJjsKLSsg IEVycm9yICZvcGVyYXRvcj0gKEVycm9yICYmKSAmIG5vZXhjZXB0OwotIAotLSAgY29uc3QgY2hh ciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IG92ZXJyaWRlOwotKyAgY29uc3QgY2hhciAqd2hhdCAo KSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZTsKLSAKLSBwcml2YXRlOgotLSAgRXJyb3IoKSBub2V4 Y2VwdCA9IGRlZmF1bHQ7Ci0rICBFcnJvciAoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0gICBmcmll bmQgaW1wbDxFcnJvcj47Ci0gICBjb25zdCBjaGFyICptc2c7Ci0gICBzdGQ6OnNpemVfdCBsZW47 Ci1AQCAtOTI0LDE4OCArMTA1MCwyMzkgQEAgY2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgc3Rk OjpleGNlcHRpb24gewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX09QQVFVRQotICNkZWZp bmUgQ1hYQlJJREdFMV9SVVNUX09QQVFVRQotLWNsYXNzIE9wYXF1ZSB7Ci0rY2xhc3MgT3BhcXVl Ci0rewotIHB1YmxpYzoKLS0gIE9wYXF1ZSgpID0gZGVsZXRlOwotLSAgT3BhcXVlKGNvbnN0IE9w YXF1ZSAmKSA9IGRlbGV0ZTsKLS0gIH5PcGFxdWUoKSA9IGRlbGV0ZTsKLSsgIE9wYXF1ZSAoKSA9 IGRlbGV0ZTsKLSsgIE9wYXF1ZSAoY29uc3QgT3BhcXVlICYpID0gZGVsZXRlOwotKyAgfk9wYXF1 ZSAoKSA9IGRlbGV0ZTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfT1BBUVVFCi0g Ci0gI2lmbmRlZiBDWFhCUklER0UxX0lTX0NPTVBMRVRFCi0gI2RlZmluZSBDWFhCUklER0UxX0lT X0NPTVBMRVRFCi0tbmFtZXNwYWNlIGRldGFpbCB7Ci0tbmFtZXNwYWNlIHsKLS10ZW1wbGF0ZSA8 dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OnNpemVfdD4KLS1zdHJ1Y3QgaXNfY29tcGxldGUg OiBzdGQ6OmZhbHNlX3R5cGUge307Ci0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tc3RydWN0IGlz X2NvbXBsZXRlPFQsIGRlY2x0eXBlKHNpemVvZihUKSk+IDogc3RkOjp0cnVlX3R5cGUge307Ci0r bmFtZXNwYWNlIGRldGFpbAotK3sKLStuYW1lc3BhY2UKLSt7Ci0rdGVtcGxhdGUgPHR5cGVuYW1l IFQsIHR5cGVuYW1lID0gc3RkOjpzaXplX3Q+IHN0cnVjdCBpc19jb21wbGV0ZSA6IHN0ZDo6ZmFs c2VfdHlwZQotK3sKLSt9OwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfY29tcGxl dGU8VCwgZGVjbHR5cGUgKHNpemVvZiAoVCkpPiA6IHN0ZDo6dHJ1ZV90eXBlCi0rewotK307Ci0g fSAvLyBuYW1lc3BhY2UKLSB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKLSAjZW5kaWYgLy8gQ1hYQlJJ REdFMV9JU19DT01QTEVURQotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9MQVlPVVQKLSAjZGVmaW5l IENYWEJSSURHRTFfTEFZT1VUCi0tY2xhc3MgbGF5b3V0IHsKLS0gIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLSAgZnJpZW5kIHN0ZDo6c2l6ZV90IHNpemVfb2YoKTsKLStjbGFzcyBsYXlvdXQKLSt7 Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIHN0ZDo6c2l6ZV90IHNpemVfb2YgKCk7 Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIHN0ZDo6c2l6ZV90IGFsaWduX29mICgp OwotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBmcmllbmQgc3RkOjpzaXplX3QgYWxpZ25f b2YoKTsKLS0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLSAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6 ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUKLS0gIGRvX3NpemVfb2Yo KSB7Ci0tICAgIHJldHVybiBUOjpsYXlvdXQ6OnNpemUoKTsKLSsgIHN0YXRpYyB0eXBlbmFtZSBz dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6 ZV90Pjo6dHlwZQotKyAgZG9fc2l6ZV9vZiAoKQotKyAgewotKyAgICByZXR1cm4gVDo6bGF5b3V0 OjpzaXplICgpOwotICAgfQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBzdGF0aWMgdHlw ZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwK LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUKLS0g IGRvX3NpemVfb2YoKSB7Ci0tICAgIHJldHVybiBzaXplb2YoVCk7Ci0rICBzdGF0aWMgdHlwZW5h bWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3Rk OjpzaXplX3Q+Ojp0eXBlCi0rICBkb19zaXplX29mICgpCi0rICB7Ci0rICAgIHJldHVybiBzaXpl b2YgKFQpOwotICAgfQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBzdGF0aWMKLS0gICAg ICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwg c3RkOjpzaXplX3Q+Ojp0eXBlCi0tICAgICAgc2l6ZV9vZigpIHsKLS0gICAgcmV0dXJuIGRvX3Np emVfb2Y8VD4oKTsKLSsgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6Omlz X2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCi0rICBzaXplX29mICgpCi0r ICB7Ci0rICAgIHJldHVybiBkb19zaXplX29mPFQ+ICgpOwotICAgfQotICAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0tICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNl X29mPE9wYXF1ZSwgVD46OnZhbHVlLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0ZDo6c2l6ZV90Pjo6dHlwZQotLSAgZG9fYWxpZ25fb2YoKSB7Ci0tICAgIHJldHVybiBUOjps YXlvdXQ6OmFsaWduKCk7Ci0rICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp c19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKLSsgIGRvX2Fs aWduX29mICgpCi0rICB7Ci0rICAgIHJldHVybiBUOjpsYXlvdXQ6OmFsaWduICgpOwotICAgfQot ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVf aWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUKLS0gIGRvX2FsaWduX29mKCkgewot LSAgICByZXR1cm4gYWxpZ25vZihUKTsKLSsgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p Zjwhc3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUK LSsgIGRvX2FsaWduX29mICgpCi0rICB7Ci0rICAgIHJldHVybiBhbGlnbm9mIChUKTsKLSAgIH0K LSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLSAgc3RhdGljCi0tICAgICAgdHlwZW5hbWUgc3Rk OjplbmFibGVfaWY8ZGV0YWlsOjppc19jb21wbGV0ZTxUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6 dHlwZQotLSAgICAgIGFsaWduX29mKCkgewotLSAgICByZXR1cm4gZG9fYWxpZ25fb2Y8VD4oKTsK LSsgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+ Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCi0rICBhbGlnbl9vZiAoKQotKyAgewotKyAgICBy ZXR1cm4gZG9fYWxpZ25fb2Y8VD4gKCk7Ci0gICB9Ci0gfTsKLSAKLSB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KLS1zdGQ6OnNpemVfdCBzaXplX29mKCkgewotLSAgcmV0dXJuIGxheW91dDo6c2l6ZV9v ZjxUPigpOwotK3N0ZDo6c2l6ZV90Ci0rc2l6ZV9vZiAoKQotK3sKLSsgIHJldHVybiBsYXlvdXQ6 OnNpemVfb2Y8VD4gKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXN0ZDo6c2l6 ZV90IGFsaWduX29mKCkgewotLSAgcmV0dXJuIGxheW91dDo6YWxpZ25fb2Y8VD4oKTsKLStzdGQ6 OnNpemVfdAotK2FsaWduX29mICgpCi0rewotKyAgcmV0dXJuIGxheW91dDo6YWxpZ25fb2Y8VD4g KCk7Ci0gfQotICNlbmRpZiAvLyBDWFhCUklER0UxX0xBWU9VVAotIAotLWNsYXNzIFN0cjo6dW5p bml0IHt9OwotLWlubGluZSBTdHI6OlN0cih1bmluaXQpIG5vZXhjZXB0IHt9Ci0rY2xhc3MgU3Ry Ojp1bmluaXQKLSt7Ci0rfTsKLStpbmxpbmUgU3RyOjpTdHIgKHVuaW5pdCkgbm9leGNlcHQge30K LSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jbGFzcyBTbGljZTxUPjo6dW5pbml0IHt9Owot LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWlubGluZSBTbGljZTxUPjo6U2xpY2UodW5pbml0KSBu b2V4Y2VwdCB7fQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBTbGljZTxUPjo6dW5pbml0 Ci0rewotK307Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBTbGljZTxUPjo6U2xpY2Ug KHVuaW5pdCkgbm9leGNlcHQge30KLSAKLS1uYW1lc3BhY2UgcmVwciB7Ci0rbmFtZXNwYWNlIHJl cHIKLSt7Ci0gdXNpbmcgRmF0ID0gOjpzdGQ6OmFycmF5PDo6c3RkOjp1aW50cHRyX3QsIDI+Owot IAotLXN0cnVjdCBQdHJMZW4gZmluYWwgewotK3N0cnVjdCBQdHJMZW4gZmluYWwKLSt7Ci0gICB2 b2lkICpwdHI7Ci0gICA6OnN0ZDo6c2l6ZV90IGxlbjsKLSB9OwotIH0gLy8gbmFtZXNwYWNlIHJl cHIKLSAKLS1uYW1lc3BhY2UgZGV0YWlsIHsKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h bWUgPSB2b2lkICo+Ci0tc3RydWN0IG9wZXJhdG9yX25ldyB7Ci0tICB2b2lkICpvcGVyYXRvcigp KDo6c3RkOjpzaXplX3Qgc3opIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KHN6KTsgfQotK25hbWVz cGFjZSBkZXRhaWwKLSt7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZCAq PiBzdHJ1Y3Qgb3BlcmF0b3JfbmV3Ci0rewotKyAgdm9pZCAqCi0rICBvcGVyYXRvcigpICg6OnN0 ZDo6c2l6ZV90IHN6KQotKyAgewotKyAgICByZXR1cm4gOjpvcGVyYXRvciBuZXcgKHN6KTsKLSsg IH0KLSB9OwotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXN0cnVjdCBvcGVyYXRvcl9uZXc8 VCwgZGVjbHR5cGUoVDo6b3BlcmF0b3IgbmV3KHNpemVvZihUKSkpPiB7Ci0tICB2b2lkICpvcGVy YXRvcigpKDo6c3RkOjpzaXplX3Qgc3opIHsgcmV0dXJuIFQ6Om9wZXJhdG9yIG5ldyhzeik7IH0K LSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IG9wZXJhdG9yX25ldzxULCBkZWNsdHlwZSAo VDo6b3BlcmF0b3IgbmV3IChzaXplb2YgKFQpKSk+Ci0rewotKyAgdm9pZCAqCi0rICBvcGVyYXRv cigpICg6OnN0ZDo6c2l6ZV90IHN6KQotKyAgewotKyAgICByZXR1cm4gVDo6b3BlcmF0b3IgbmV3 IChzeik7Ci0rICB9Ci0gfTsKLSAKLS1jbGFzcyBGYWlsIGZpbmFsIHsKLStjbGFzcyBGYWlsIGZp bmFsCi0rewotICAgOjpydXN0OjpyZXByOjpQdHJMZW4gJnRocm93JDsKLSsKLSBwdWJsaWM6Ci0t ICBGYWlsKDo6cnVzdDo6cmVwcjo6UHRyTGVuICZ0aHJvdyQpIG5vZXhjZXB0IDogdGhyb3ckKHRo cm93JCkge30KLS0gIHZvaWQgb3BlcmF0b3IoKShjaGFyIGNvbnN0ICopIG5vZXhjZXB0OwotLSAg dm9pZCBvcGVyYXRvcigpKHN0ZDo6c3RyaW5nIGNvbnN0ICYpIG5vZXhjZXB0OwotKyAgRmFpbCAo OjpydXN0OjpyZXByOjpQdHJMZW4gJnRocm93JCkgbm9leGNlcHQgOiB0aHJvdyQgKHRocm93JCkg e30KLSsgIHZvaWQgb3BlcmF0b3IoKSAoY2hhciBjb25zdCAqKSBub2V4Y2VwdDsKLSsgIHZvaWQg b3BlcmF0b3IoKSAoc3RkOjpzdHJpbmcgY29uc3QgJikgbm9leGNlcHQ7Ci0gfTsKLSB9IC8vIG5h bWVzcGFjZSBkZXRhaWwKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS11bmlvbiBNYW51YWxs eURyb3AgewotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB1bmlvbiBNYW51YWxseURyb3AKLSt7Ci0g ICBUIHZhbHVlOwotLSAgTWFudWFsbHlEcm9wKFQgJiZ2YWx1ZSkgOiB2YWx1ZSg6OnN0ZDo6bW92 ZSh2YWx1ZSkpIHt9Ci0tICB+TWFudWFsbHlEcm9wKCkge30KLSsgIE1hbnVhbGx5RHJvcCAoVCAm JnZhbHVlKSA6IHZhbHVlICg6OnN0ZDo6bW92ZSAodmFsdWUpKSB7fQotKyAgfk1hbnVhbGx5RHJv cCAoKSB7fQotIH07Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdW5pb24gTWF5YmVVbmlu aXQgewotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB1bmlvbiBNYXliZVVuaW5pdAotK3sKLSAgIFQg dmFsdWU7Ci0tICB2b2lkICpvcGVyYXRvciBuZXcoOjpzdGQ6OnNpemVfdCBzeikgeyByZXR1cm4g ZGV0YWlsOjpvcGVyYXRvcl9uZXc8VD57fShzeik7IH0KLS0gIE1heWJlVW5pbml0KCkge30KLS0g IH5NYXliZVVuaW5pdCgpIHt9Ci0rICB2b2lkICoKLSsgIG9wZXJhdG9yIG5ldyAoOjpzdGQ6OnNp emVfdCBzeikKLSsgIHsKLSsgICAgcmV0dXJuIGRldGFpbDo6b3BlcmF0b3JfbmV3PFQ+e30oc3op OwotKyAgfQotKyAgTWF5YmVVbmluaXQgKCkge30KLSsgIH5NYXliZVVuaW5pdCAoKSB7fQotIH07 Ci0gCi0tbmFtZXNwYWNlIHsKLS10ZW1wbGF0ZSA8PgotLWNsYXNzIGltcGw8U3RyPiBmaW5hbCB7 Ci0rbmFtZXNwYWNlCi0rewotK3RlbXBsYXRlIDw+IGNsYXNzIGltcGw8U3RyPiBmaW5hbAotK3sK LSBwdWJsaWM6Ci0tICBzdGF0aWMgU3RyIG5ld191bmNoZWNrZWQocmVwcjo6RmF0IHJlcHIpIG5v ZXhjZXB0IHsKLSsgIHN0YXRpYyBTdHIKLSsgIG5ld191bmNoZWNrZWQgKHJlcHI6OkZhdCByZXBy KSBub2V4Y2VwdAotKyAgewotICAgICBTdHIgc3RyID0gU3RyOjp1bmluaXR7fTsKLSAgICAgc3Ry LnJlcHIgPSByZXByOwotICAgICByZXR1cm4gc3RyOwotICAgfQotIH07Ci0gCi0tdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0tY2xhc3MgaW1wbDxTbGljZTxUPj4gZmluYWwgewotK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiBjbGFzcyBpbXBsPFNsaWNlPFQ+PiBmaW5hbAotK3sKLSBwdWJsaWM6Ci0tICBz dGF0aWMgU2xpY2U8VD4gc2xpY2UocmVwcjo6RmF0IHJlcHIpIG5vZXhjZXB0IHsKLSsgIHN0YXRp YyBTbGljZTxUPgotKyAgc2xpY2UgKHJlcHI6OkZhdCByZXByKSBub2V4Y2VwdAotKyAgewotICAg ICBTbGljZTxUPiBzbGljZSA9IHR5cGVuYW1lIFNsaWNlPFQ+Ojp1bmluaXR7fTsKLSAgICAgc2xp Y2UucmVwciA9IHJlcHI7Ci0gICAgIHJldHVybiBzbGljZTsKLSAgIH0KLSB9OwotIAotLXRlbXBs YXRlIDw+Ci0tY2xhc3MgaW1wbDxFcnJvcj4gZmluYWwgewotK3RlbXBsYXRlIDw+IGNsYXNzIGlt cGw8RXJyb3I+IGZpbmFsCi0rewotIHB1YmxpYzoKLS0gIHN0YXRpYyBFcnJvciBlcnJvcihyZXBy OjpQdHJMZW4gcmVwcikgbm9leGNlcHQgewotKyAgc3RhdGljIEVycm9yCi0rICBlcnJvciAocmVw cjo6UHRyTGVuIHJlcHIpIG5vZXhjZXB0Ci0rICB7Ci0gICAgIEVycm9yIGVycm9yOwotLSAgICBl cnJvci5tc2cgPSBzdGF0aWNfY2FzdDxjaGFyIGNvbnN0ICo+KHJlcHIucHRyKTsKLSsgICAgZXJy b3IubXNnID0gc3RhdGljX2Nhc3Q8Y2hhciBjb25zdCAqPiAocmVwci5wdHIpOwotICAgICBlcnJv ci5sZW4gPSByZXByLmxlbjsKLSAgICAgcmV0dXJuIGVycm9yOwotICAgfQotIH07Ci0gCi0tdGVt cGxhdGUgPGJvb2w+IHN0cnVjdCBkZWxldGVyX2lmIHsKLS0gIHRlbXBsYXRlIDx0eXBlbmFtZSBU PiB2b2lkIG9wZXJhdG9yKCkoVCAqKSB7fQotK3RlbXBsYXRlIDxib29sPiBzdHJ1Y3QgZGVsZXRl cl9pZgotK3sKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZAotKyAgb3BlcmF0b3Io KSAoVCAqKQotKyAgewotKyAgfQotIH07Ci0tdGVtcGxhdGUgPD4gc3RydWN0IGRlbGV0ZXJfaWY8 dHJ1ZT4gewotLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgb3BlcmF0b3IoKShUICpwdHIp IHsgcHRyLT5+VCgpOyB9Ci0rdGVtcGxhdGUgPD4gc3RydWN0IGRlbGV0ZXJfaWY8dHJ1ZT4KLSt7 Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSsgIHZvaWQKLSsgIG9wZXJhdG9yKCkgKFQgKnB0 cikKLSsgIHsKLSsgICAgcHRyLT5+VCAoKTsKLSsgIH0KLSB9OwotIH0gLy8gbmFtZXNwYWNlCi0g fSAvLyBuYW1lc3BhY2UgY3h4YnJpZGdlMQotIAotLW5hbWVzcGFjZSBiZWhhdmlvciB7Ci0tY2xh c3MgbWlzc2luZyB7fTsKLS1taXNzaW5nIHRyeWNhdGNoKC4uLik7Ci0rbmFtZXNwYWNlIGJlaGF2 aW9yCi0rewotK2NsYXNzIG1pc3NpbmcKLSt7Ci0rfTsKLSttaXNzaW5nIHRyeWNhdGNoICguLi4p OwotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUcnksIHR5cGVuYW1lIEZhaWw+Ci0gc3RhdGljIHR5 cGVuYW1lIDo6c3RkOjplbmFibGVfaWY8OjpzdGQ6OmlzX3NhbWU8Ci0tICAgIGRlY2x0eXBlKHRy eWNhdGNoKDo6c3RkOjpkZWNsdmFsPFRyeT4oKSwgOjpzdGQ6OmRlY2x2YWw8RmFpbD4oKSkpLAot LSAgICBtaXNzaW5nPjo6dmFsdWU+Ojp0eXBlCi0tdHJ5Y2F0Y2goVHJ5ICYmZnVuYywgRmFpbCAm JmZhaWwpIG5vZXhjZXB0IHRyeSB7Ci0tICBmdW5jKCk7Ci0tfSBjYXRjaCAoOjpzdGQ6OmV4Y2Vw dGlvbiBjb25zdCAmZSkgewotLSAgZmFpbChlLndoYXQoKSk7Ci0tfQotKyAgICBkZWNsdHlwZSAo dHJ5Y2F0Y2ggKDo6c3RkOjpkZWNsdmFsPFRyeT4gKCksIDo6c3RkOjpkZWNsdmFsPEZhaWw+ICgp KSksIG1pc3Npbmc+Ojp2YWx1ZT46OnR5cGUKLSt0cnljYXRjaCAoVHJ5ICYmZnVuYywgRmFpbCAm JmZhaWwpIG5vZXhjZXB0Ci0rdHJ5Ci0rICB7Ci0rICAgIGZ1bmMgKCk7Ci0rICB9Ci0rY2F0Y2gg KDo6c3RkOjpleGNlcHRpb24gY29uc3QgJmUpCi0rICB7Ci0rICAgIGZhaWwgKGUud2hhdCAoKSk7 Ci0rICB9Ci0gfSAvLyBuYW1lc3BhY2UgYmVoYXZpb3IKLSB9IC8vIG5hbWVzcGFjZSBydXN0Ci0g Ci1AQCAtMTExNSw1MSArMTI5Miw1MyBAQCB0cnljYXRjaChUcnkgJiZmdW5jLCBGYWlsICYmZmFp bCkgbm9leGNlcHQgdHJ5IHsKLSAjZGVmaW5lIENYWF9ERUZBVUxUX1ZBTFVFKHZhbHVlKQotICNl bmRpZgotIAotLW5hbWVzcGFjZSBycG1vc3RyZWVjeHggewotLSAgc3RydWN0IFN0cmluZ01hcHBp bmc7Ci0tICBlbnVtIGNsYXNzIFN5c3RlbUhvc3RUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7Ci0tICBl bnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3Q7Ci0tICBzdHJ1 Y3QgQnViYmxld3JhcDsKLS0gIHN0cnVjdCBDb250YWluZXJJbWFnZVN0YXRlOwotLSAgc3RydWN0 IEV4cG9ydGVkTWFuaWZlc3REaWZmOwotLSAgc3RydWN0IFBydW5lZENvbnRhaW5lckluZm87Ci0t ICBlbnVtIGNsYXNzIFJlZnNwZWNUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7Ci0tICBzdHJ1Y3QgVGVt cEV0Y0d1YXJkOwotLSAgc3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQcmVwOwotLSAgc3RydWN0IERl cGxveW1lbnRMYXllcmVkTWV0YTsKLS0gIHN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNl OwotLSAgZW51bSBjbGFzcyBQYXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdDsKLS0g IHN0cnVjdCBQYXJzZWRSZXZpc2lvbjsKLS0gIHN0cnVjdCBScG1JbXBvcnRlckZsYWdzOwotLSAg c3RydWN0IFJwbUltcG9ydGVyOwotLSAgc3RydWN0IEhpc3RvcnlFbnRyeTsKLS0gIHN0cnVjdCBI aXN0b3J5Q3R4OwotLSAgc3RydWN0IFRva2lvSGFuZGxlOwotLSAgc3RydWN0IFRva2lvRW50ZXJH dWFyZDsKLS0gIGVudW0gY2xhc3MgUmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7 Ci0tICBlbnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90 OwotLSAgc3RydWN0IFJlZnNwZWM7Ci0tICBlbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1lbnRU eXBlIDogOjpzdGQ6OnVpbnQ4X3Q7Ci0tICBzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudDsKLS0g IGVudW0gY2xhc3MgT3B0VXNyTG9jYWwgOiA6OnN0ZDo6dWludDhfdDsKLS0gIHN0cnVjdCBUcmVl ZmlsZTsKLS0gIHN0cnVjdCBSZXBvUGFja2FnZTsKLS0gIHN0cnVjdCBMaXZlQXBwbHlTdGF0ZTsK LS0gIHN0cnVjdCBQYXNzd2REQjsKLS0gIHN0cnVjdCBQYXNzd2RFbnRyaWVzOwotLSAgc3RydWN0 IEV4dGVuc2lvbnM7Ci0tICBzdHJ1Y3QgTG9ja2VkUGFja2FnZTsKLS0gIHN0cnVjdCBMb2NrZmls ZUNvbmZpZzsKLS0gIHVzaW5nIEN4eEdPYmplY3RBcnJheSA9IDo6cnBtb3N0cmVlY3h4OjpDeHhH T2JqZWN0QXJyYXk7Ci0tICB1c2luZyBDbGllbnRDb25uZWN0aW9uID0gOjpycG1vc3RyZWVjeHg6 OkNsaWVudENvbm5lY3Rpb247Ci0tICB1c2luZyBSUE1EaWZmID0gOjpycG1vc3RyZWVjeHg6OlJQ TURpZmY7Ci0tICB1c2luZyBScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQgPSA6OnJwbW9zdHJlZWN4 eDo6UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OwotLSAgdXNpbmcgUHJvZ3Jlc3MgPSA6OnJwbW9z dHJlZWN4eDo6UHJvZ3Jlc3M7Ci0tICB1c2luZyBScG1UcyA9IDo6cnBtb3N0cmVlY3h4OjpScG1U czsKLS0gIHVzaW5nIFBhY2thZ2VNZXRhID0gOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOwot LX0KLS0KLS1uYW1lc3BhY2UgcnBtb3N0cmVlY3h4IHsKLStuYW1lc3BhY2UgcnBtb3N0cmVlY3h4 Ci0rewotK3N0cnVjdCBTdHJpbmdNYXBwaW5nOwotK2VudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUg OiA6OnN0ZDo6dWludDhfdDsKLStlbnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpz dGQ6OnVpbnQ4X3Q7Ci0rc3RydWN0IEJ1YmJsZXdyYXA7Ci0rc3RydWN0IENvbnRhaW5lckltYWdl U3RhdGU7Ci0rc3RydWN0IEV4cG9ydGVkTWFuaWZlc3REaWZmOwotK3N0cnVjdCBQcnVuZWRDb250 YWluZXJJbmZvOwotK2VudW0gY2xhc3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdDsKLStz dHJ1Y3QgVGVtcEV0Y0d1YXJkOwotK3N0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcDsKLStzdHJ1 Y3QgRGVwbG95bWVudExheWVyZWRNZXRhOwotK3N0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291 cmNlOwotK2VudW0gY2xhc3MgUGFyc2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3Q7Ci0r c3RydWN0IFBhcnNlZFJldmlzaW9uOwotK3N0cnVjdCBScG1JbXBvcnRlckZsYWdzOwotK3N0cnVj dCBScG1JbXBvcnRlcjsKLStzdHJ1Y3QgSGlzdG9yeUVudHJ5OwotK3N0cnVjdCBIaXN0b3J5Q3R4 OwotK3N0cnVjdCBUb2tpb0hhbmRsZTsKLStzdHJ1Y3QgVG9raW9FbnRlckd1YXJkOwotK2VudW0g Y2xhc3MgUmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7Ci0rZW51bSBjbGFzcyBB ZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsKLStzdHJ1Y3QgUmVmc3Bl YzsKLStlbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7 Ci0rc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnQ7Ci0rZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6 IDo6c3RkOjp1aW50OF90OwotK3N0cnVjdCBUcmVlZmlsZTsKLStzdHJ1Y3QgUmVwb1BhY2thZ2U7 Ci0rc3RydWN0IExpdmVBcHBseVN0YXRlOwotK3N0cnVjdCBQYXNzd2REQjsKLStzdHJ1Y3QgUGFz c3dkRW50cmllczsKLStzdHJ1Y3QgRXh0ZW5zaW9uczsKLStzdHJ1Y3QgTG9ja2VkUGFja2FnZTsK LStzdHJ1Y3QgTG9ja2ZpbGVDb25maWc7Ci0rdXNpbmcgQ3h4R09iamVjdEFycmF5ID0gOjpycG1v c3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTsKLSt1c2luZyBDbGllbnRDb25uZWN0aW9uID0gOjpy cG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb247Ci0rdXNpbmcgUlBNRGlmZiA9IDo6cnBtb3N0 cmVlY3h4OjpSUE1EaWZmOwotK3VzaW5nIFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCA9IDo6cnBt b3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ7Ci0rdXNpbmcgUHJvZ3Jlc3MgPSA6 OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M7Ci0rdXNpbmcgUnBtVHMgPSA6OnJwbW9zdHJlZWN4eDo6 UnBtVHM7Ci0rdXNpbmcgUGFja2FnZU1ldGEgPSA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE7 Ci0rfQotKwotK25hbWVzcGFjZSBycG1vc3RyZWVjeHgKLSt7Ci0gI2lmbmRlZiBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZwotICNkZWZpbmUgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmcKLSAvLyBDdXJyZW50bHkgY3h4LXJzIGRv ZXNuJ3Qgc3VwcG9ydCBtYXBwaW5nczsgbGlrZSBwcm9iYWJseSBtb3N0IHByb2plY3RzLAotQEAg LTExNjcsNyArMTM0Niw4IEBAIG5hbWVzcGFjZSBycG1vc3RyZWVjeHggewotIC8vIG91ciBkYXRh IHNpemVzIGFyZW4ndCBsYXJnZSwgd2Ugc2VyaWFsaXplIHRoaXMgYXMgYSB2ZWN0b3Igb2Ygc3Ry aW5ncyBwYWlycy4KLSAvLyBJbiB0aGUgZnV0dXJlIGl0J3MgYWxzbyBsaWtlbHkgdGhhdCBjeHgt cnMgd2lsbCBzdXBwb3J0IGEgQysrIHN0cmluZ192aWV3Ci0gLy8gc28gd2UgY291bGQgYXZvaWQg ZHVwbGljYXRpbmcgaW4gdGhhdCBkaXJlY3Rpb24uCi0tc3RydWN0IFN0cmluZ01hcHBpbmcgZmlu YWwgewotK3N0cnVjdCBTdHJpbmdNYXBwaW5nIGZpbmFsCi0rewotICAgOjpydXN0OjpTdHJpbmcg azsKLSAgIDo6cnVzdDo6U3RyaW5nIHY7Ci0gCi1AQCAtMTE3OCw3ICsxMzU4LDggQEAgc3RydWN0 IFN0cmluZ01hcHBpbmcgZmluYWwgewotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJl ZWN4eCRTeXN0ZW1Ib3N0VHlwZQotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4 eCRTeXN0ZW1Ib3N0VHlwZQotIC8vIENsYXNzaWZ5IHRoZSBydW5uaW5nIHN5c3RlbS4KLS1lbnVt IGNsYXNzIFN5c3RlbUhvc3RUeXBlIDogOjpzdGQ6OnVpbnQ4X3QgewotK2VudW0gY2xhc3MgU3lz dGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAgIE9zdHJlZUNvbnRhaW5lciA9IDAs Ci0gICBPc3RyZWVIb3N0ID0gMSwKLSAgIFVua25vd24gPSAyLAotQEAgLTExODcsNyArMTM2OCw4 IEBAIGVudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdCB7Ci0gCi0gI2lm bmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXBNdXRhYmlsaXR5Ci0g I2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXBNdXRhYmlsaXR5 Ci0tZW51bSBjbGFzcyBCdWJibGV3cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90IHsKLStl bnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBJ bW11dGFibGUgPSAwLAotICAgUm9GaWxlcyA9IDEsCi0gICBNdXRhdGVGcmVlbHkgPSAyLAotQEAg LTExOTYsNDkgKzEzNzgsNTIgQEAgZW51bSBjbGFzcyBCdWJibGV3cmFwTXV0YWJpbGl0eSA6IDo6 c3RkOjp1aW50OF90IHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4 eCRCdWJibGV3cmFwCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkQnVi Ymxld3JhcAotLXN0cnVjdCBCdWJibGV3cmFwIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVl IHsKLS0gIDo6c3RkOjppbnQzMl90IGdldF9yb290ZnNfZmQoKSBjb25zdCBub2V4Y2VwdDsKLS0g IHZvaWQgYXBwZW5kX2J3cmFwX2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OwotLSAgdm9p ZCBhcHBlbmRfY2hpbGRfYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0tICB2b2lkIHNl dGVudig6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdDsKLS0gIHZvaWQgdGFr ZV9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkg bm9leGNlcHQ7Ci0tICB2b2lkIHNldF9pbmhlcml0X3N0ZGluKCkgbm9leGNlcHQ7Ci0tICB2b2lk IHRha2Vfc3RkaW5fZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLS0gIHZv aWQgdGFrZV9zdGRvdXRfZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLS0g IHZvaWQgdGFrZV9zdGRlcnJfZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsK LS0gIHZvaWQgdGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2Vf ZmQpIG5vZXhjZXB0OwotLSAgdm9pZCBiaW5kX3JlYWQoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6 OlN0ciBkZXN0KSBub2V4Y2VwdDsKLS0gIHZvaWQgYmluZF9yZWFkd3JpdGUoOjpydXN0OjpTdHIg c3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsKLS0gIHZvaWQgc2V0dXBfY29tcGF0X3Zh cigpOwotLSAgdm9pZCBydW4oOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2Fu Y2VsbGFibGUpOwotLSAgfkJ1YmJsZXdyYXAoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgQnViYmxld3Jh cCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6c3RkOjppbnQzMl90IGdl dF9yb290ZnNfZmQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIGFwcGVuZF9id3JhcF9hcmcg KDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0rICB2b2lkIGFwcGVuZF9jaGlsZF9hcmcgKDo6 cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0rICB2b2lkIHNldGVudiAoOjpydXN0OjpTdHIgaywg OjpydXN0OjpTdHIgdikgbm9leGNlcHQ7Ci0rICB2b2lkIHRha2VfZmQgKDo6c3RkOjppbnQzMl90 IHNvdXJjZV9mZCwgOjpzdGQ6OmludDMyX3QgdGFyZ2V0X2ZkKSBub2V4Y2VwdDsKLSsgIHZvaWQg c2V0X2luaGVyaXRfc3RkaW4gKCkgbm9leGNlcHQ7Ci0rICB2b2lkIHRha2Vfc3RkaW5fZmQgKDo6 c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0rICB2b2lkIHRha2Vfc3Rkb3V0X2Zk ICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OwotKyAgdm9pZCB0YWtlX3N0ZGVy cl9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFrZV9z dGRvdXRfYW5kX3N0ZGVycl9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsK LSsgIHZvaWQgYmluZF9yZWFkICg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5v ZXhjZXB0OwotKyAgdm9pZCBiaW5kX3JlYWR3cml0ZSAoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6 OlN0ciBkZXN0KSBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0dXBfY29tcGF0X3ZhciAoKTsKLSsgIHZv aWQgcnVuICg6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7 Ci0rICB+QnViYmxld3JhcCAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6 cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6 ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBu b2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXpl X3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkg bm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRCdWJibGV3cmFwCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkRXhwb3J0ZWRNYW5pZmVzdERpZmYKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3Jw bW9zdHJlZWN4eCRFeHBvcnRlZE1hbmlmZXN0RGlmZgotLXN0cnVjdCBFeHBvcnRlZE1hbmlmZXN0 RGlmZiBmaW5hbCB7Ci0rc3RydWN0IEV4cG9ydGVkTWFuaWZlc3REaWZmIGZpbmFsCi0rewotICAg Ly8gQ2hlY2sgaWYgdGhlIHN0cnVjdCBpcyBpbml0aWFsaXplZAotLSAgYm9vbCBpbml0aWFsaXpl ZCBDWFhfREVGQVVMVF9WQUxVRShmYWxzZSk7Ci0rICBib29sIGluaXRpYWxpemVkIENYWF9ERUZB VUxUX1ZBTFVFIChmYWxzZSk7Ci0gICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2thZ2VzIGlu IHRoZSBuZXh0IHVwZ3JhZGUKLS0gIDo6c3RkOjp1aW50NjRfdCB0b3RhbCBDWFhfREVGQVVMVF9W QUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCB0b3RhbCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7 Ci0gICAvLyBUaGUgc2l6ZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHBhY2thZ2VzIGluIHRoZSBu ZXh0IHVwZ3JhZGUKLS0gIDo6c3RkOjp1aW50NjRfdCB0b3RhbF9zaXplIENYWF9ERUZBVUxUX1ZB TFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUg KDApOwotICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiByZW1vdmVkIHBhY2thZ2VzIGluIHRoZSBu ZXh0IHVwZ3JhZGUKLS0gIDo6c3RkOjp1aW50NjRfdCBuX3JlbW92ZWQgQ1hYX0RFRkFVTFRfVkFM VUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3Qgbl9yZW1vdmVkIENYWF9ERUZBVUxUX1ZBTFVFICgw KTsKLSAgIC8vIFRoZSBzaXplIG9mIHRvdGFsIG51bWJlciBvZiByZW1vdmVkIHBhY2thZ2VzIGlu IHRoZSBuZXh0IHVwZ3JhZGUKLS0gIDo6c3RkOjp1aW50NjRfdCByZW1vdmVkX3NpemUgQ1hYX0RF RkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgcmVtb3ZlZF9zaXplIENYWF9ERUZB VUxUX1ZBTFVFICgwKTsKLSAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgYWRkZWQgcGFja2FnZXMg aW4gdGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IG5fYWRkZWQgQ1hYX0RFRkFV TFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3Qgbl9hZGRlZCBDWFhfREVGQVVMVF9WQUxV RSAoMCk7Ci0gICAvLyBUaGUgc2l6ZSBvZiB0b3RhbCBudW1iZXIgb2YgYWRkZWQgcGFja2FnZXMg aW4gdGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IGFkZGVkX3NpemUgQ1hYX0RF RkFVTFRfVkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgYWRkZWRfc2l6ZSBDWFhfREVGQVVM VF9WQUxVRSAoMCk7Ci0gICAvLyBUaGUgdmVyc2lvbiBvZiB0aGUgbmV4dCB1cGdyYWRlCi0gICA6 OnJ1c3Q6OlN0cmluZyB2ZXJzaW9uOwotIAotQEAgLTEyNDgsMTAgKzE0MzMsMTEgQEAgc3RydWN0 IEV4cG9ydGVkTWFuaWZlc3REaWZmIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlCi0gI2RlZmluZSBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZQotLS8vIGBDb250YWluZXJJ bWFnZVN0YXRlYCBpcyBjdXJyZW50bHkgaWRlbnRpY2FsIHRvIG9zdHJlZS1ycy1leHQncyBgTGF5 ZXJlZEltYWdlU3RhdGVgIHN0cnVjdCwgYmVjYXVzZQotLS8vIGN4eC5ycyBjdXJyZW50bHkgcmVx dWlyZXMgdHlwZXMgdXNlZCBhcyBleHRlcm4gUnVzdCB0eXBlcyB0byBiZSBkZWZpbmVkIGJ5IHRo ZSBzYW1lIGNyYXRlCi0rLy8gYENvbnRhaW5lckltYWdlU3RhdGVgIGlzIGN1cnJlbnRseSBpZGVu dGljYWwgdG8gb3N0cmVlLXJzLWV4dCdzIGBMYXllcmVkSW1hZ2VTdGF0ZWAgc3RydWN0LAotKy8v IGJlY2F1c2UgY3h4LnJzIGN1cnJlbnRseSByZXF1aXJlcyB0eXBlcyB1c2VkIGFzIGV4dGVybiBS dXN0IHR5cGVzIHRvIGJlIGRlZmluZWQgYnkgdGhlIHNhbWUgY3JhdGUKLSAvLyB0aGF0IGNvbnRh aW5zIHRoZSBicmlkZ2UgdXNpbmcgdGhlbSwgc28gd2UgcmVkZWZpbmUgYW4gYENvbnRhaW5lcklt cG9ydGAgc3RydWN0IGhlcmUuCi0tc3RydWN0IENvbnRhaW5lckltYWdlU3RhdGUgZmluYWwgewot K3N0cnVjdCBDb250YWluZXJJbWFnZVN0YXRlIGZpbmFsCi0rewotICAgOjpydXN0OjpTdHJpbmcg YmFzZV9jb21taXQ7Ci0gICA6OnJ1c3Q6OlN0cmluZyBtZXJnZV9jb21taXQ7Ci0gICA6OnJ1c3Q6 OlN0cmluZyBpbWFnZV9kaWdlc3Q7Ci1AQCAtMTI2NSwxOSArMTQ1MSwyMSBAQCBzdHJ1Y3QgQ29u dGFpbmVySW1hZ2VTdGF0ZSBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkUHJ1bmVkQ29udGFpbmVySW5mbwotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JFBydW5lZENvbnRhaW5lckluZm8KLS1zdHJ1Y3QgUHJ1bmVkQ29udGFp bmVySW5mbyBmaW5hbCB7Ci0tICA6OnN0ZDo6dWludDMyX3QgaW1hZ2VzIENYWF9ERUZBVUxUX1ZB TFVFKDApOwotLSAgOjpzdGQ6OnVpbnQzMl90IGxheWVycyBDWFhfREVGQVVMVF9WQUxVRSgwKTsK LStzdHJ1Y3QgUHJ1bmVkQ29udGFpbmVySW5mbyBmaW5hbAotK3sKLSsgIDo6c3RkOjp1aW50MzJf dCBpbWFnZXMgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwotKyAgOjpzdGQ6OnVpbnQzMl90IGxheWVy cyBDWFhfREVGQVVMVF9WQUxVRSAoMCk7Ci0gCi0tICBib29sIG9wZXJhdG9yPT0oUHJ1bmVkQ29u dGFpbmVySW5mbyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3IhPShQ cnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVy YXRvcj09IChQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAg Ym9vbCBvcGVyYXRvciE9IChQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIGNvbnN0IG5vZXhj ZXB0OwotICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7Ci0gfTsKLSAj ZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBydW5lZENvbnRhaW5lcklu Zm8KLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUmVmc3BlY1R5cGUK LSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUmVmc3BlY1R5cGUKLS1lbnVt IGNsYXNzIFJlZnNwZWNUeXBlIDogOjpzdGQ6OnVpbnQ4X3QgewotK2VudW0gY2xhc3MgUmVmc3Bl Y1R5cGUgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAgIE9zdHJlZSA9IDAsCi0gICBDaGVja3N1bSA9 IDEsCi0gICBDb250YWluZXIgPSAyLAotQEAgLTEyODYsNDAgKzE0NzQsNDUgQEAgZW51bSBjbGFz cyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90IHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQKLS1zdHJ1Y3QgVGVtcEV0Y0d1YXJkIGZpbmFs IDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIHZvaWQgdW5kbygpIGNvbnN0OwotLSAgflRl bXBFdGNHdWFyZCgpID0gZGVsZXRlOwotK3N0cnVjdCBUZW1wRXRjR3VhcmQgZmluYWwgOiBwdWJs aWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICB2b2lkIHVuZG8gKCkgY29uc3Q7Ci0rICB+VGVtcEV0 Y0d1YXJkICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlv dXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgp IG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0Owot KyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgp IG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsK LSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRl bXBFdGNHdWFyZAotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEZp bGVzeXN0ZW1TY3JpcHRQcmVwCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVj eHgkRmlsZXN5c3RlbVNjcmlwdFByZXAKLS1zdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXAgZmlu YWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgdm9pZCB1bmRvKCk7Ci0tICB+RmlsZXN5 c3RlbVNjcmlwdFByZXAoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXAg ZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICB2b2lkIHVuZG8gKCk7Ci0rICB+ RmlsZXN5c3RlbVNjcmlwdFByZXAgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVu ZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWdu KCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6 c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWdu ICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCREZXBsb3ltZW50TGF5ZXJlZE1ldGEKLSAjZGVmaW5lIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCREZXBsb3ltZW50TGF5ZXJlZE1ldGEKLS1zdHJ1Y3Qg RGVwbG95bWVudExheWVyZWRNZXRhIGZpbmFsIHsKLS0gIGJvb2wgaXNfbGF5ZXJlZCBDWFhfREVG QVVMVF9WQUxVRShmYWxzZSk7Ci0rc3RydWN0IERlcGxveW1lbnRMYXllcmVkTWV0YSBmaW5hbAot K3sKLSsgIGJvb2wgaXNfbGF5ZXJlZCBDWFhfREVGQVVMVF9WQUxVRSAoZmFsc2UpOwotICAgOjpy dXN0OjpTdHJpbmcgYmFzZV9jb21taXQ7Ci0tICA6OnN0ZDo6dWludDMyX3QgY2xpZW50bGF5ZXJf dmVyc2lvbiBDWFhfREVGQVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50MzJfdCBjbGllbnRs YXllcl92ZXJzaW9uIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKLSAKLSAgIHVzaW5nIElzUmVsb2Nh dGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBlOwotIH07Ci1AQCAtMTMyNyw3ICsxNTIwLDggQEAgc3Ry dWN0IERlcGxveW1lbnRMYXllcmVkTWV0YSBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZQotICNkZWZpbmUg Q1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UK LS1zdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBmaW5hbCB7Ci0rc3RydWN0IE92ZXJy aWRlUmVwbGFjZW1lbnRTb3VyY2UgZmluYWwKLSt7Ci0gICA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJp ZGVSZXBsYWNlbWVudFR5cGUga2luZDsKLSAgIDo6cnVzdDo6U3RyaW5nIG5hbWU7Ci0gCi1AQCAt MTMzNyw3ICsxNTMxLDggQEAgc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UgZmluYWwg ewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lv bktpbmQKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUGFyc2VkUmV2aXNp b25LaW5kCi0tZW51bSBjbGFzcyBQYXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdCB7 Ci0rZW51bSBjbGFzcyBQYXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAg IFZlcnNpb24gPSAwLAotICAgQ2hlY2tzdW0gPSAxLAotIH07Ci1AQCAtMTM0NSw3ICsxNTQwLDgg QEAgZW51bSBjbGFzcyBQYXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdCB7Ci0gCi0g I2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFyc2VkUmV2aXNpb24KLSAj ZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbgotLXN0 cnVjdCBQYXJzZWRSZXZpc2lvbiBmaW5hbCB7Ci0rc3RydWN0IFBhcnNlZFJldmlzaW9uIGZpbmFs Ci0rewotICAgOjpycG1vc3RyZWVjeHg6OlBhcnNlZFJldmlzaW9uS2luZCBraW5kOwotICAgOjpy dXN0OjpTdHJpbmcgdmFsdWU7Ci0gCi1AQCAtMTM1NSw0NCArMTU1MSw1MCBAQCBzdHJ1Y3QgUGFy c2VkUmV2aXNpb24gZmluYWwgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRScG1JbXBvcnRlckZsYWdzCi0tc3RydWN0IFJwbUltcG9ydGVyRmxhZ3MgZmluYWwg OiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgYm9vbCBpc19pbWFfZW5hYmxlZCgpIGNvbnN0 IG5vZXhjZXB0OwotLSAgflJwbUltcG9ydGVyRmxhZ3MoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgUnBt SW1wb3J0ZXJGbGFncyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIGJvb2wg aXNfaW1hX2VuYWJsZWQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB+UnBtSW1wb3J0ZXJGbGFncyAo KSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAg c3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2Vw dDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKLSsgIHN0cnVj dCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2Vw dDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7Ci0gICB9Owot IH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBvcnRl ckZsYWdzCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1w b3J0ZXIKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBvcnRl cgotLXN0cnVjdCBScG1JbXBvcnRlciBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0t ICA6OnJ1c3Q6OlN0cmluZyBoYW5kbGVfdHJhbnNsYXRlX3BhdGhuYW1lKDo6cnVzdDo6U3RyIHBh dGgpIG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgb3N0cmVlX2JyYW5jaCgpIGNvbnN0IG5v ZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgcGtnX25hbWUoKSBjb25zdCBub2V4Y2VwdDsKLS0g IGJvb2wgZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCBk b2NfZmlsZXNfaW5zZXJ0KDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotLSAgYm9vbCBkb2Nf ZmlsZXNfY29udGFpbnMoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lk IHJwbWZpX292ZXJyaWRlc19pbnNlcnQoOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90 IGluZGV4KSBub2V4Y2VwdDsKLS0gIGJvb2wgcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zKDo6cnVz dDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpzdGQ6OnVpbnQ2NF90IHJwbWZpX292 ZXJyaWRlc19nZXQoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGlz X2ltYV9lbmFibGVkKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIHR3ZWFrX2ltcG9ydGVkX2Zp bGVfaW5mbyg6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0 IG5vZXhjZXB0OwotLSAgYm9vbCBpc19maWxlX2ZpbHRlcmVkKDo6cnVzdDo6U3RyIHBhdGgsIDo6 cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Q7Ci0tICB2b2lk IHRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1v c3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFt ZSwgOjpydXN0OjpTdHIgZ3JvdXBuYW1lKTsKLS0gIGJvb2wgaGFzX3RtcGZpbGVzX2VudHJpZXMo KSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIHNlcmlhbGl6ZV90bXBmaWxlc19j b250ZW50KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB+UnBtSW1wb3J0ZXIoKSA9IGRlbGV0ZTsKLStz dHJ1Y3QgUnBtSW1wb3J0ZXIgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICA6 OnJ1c3Q6OlN0cmluZyBoYW5kbGVfdHJhbnNsYXRlX3BhdGhuYW1lICg6OnJ1c3Q6OlN0ciBwYXRo KSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIG9zdHJlZV9icmFuY2ggKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBwa2dfbmFtZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IGJvb2wgZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQg ZG9jX2ZpbGVzX2luc2VydCAoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0rICBib29sIGRv Y19maWxlc19jb250YWlucyAoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2 b2lkIHJwbWZpX292ZXJyaWRlc19pbnNlcnQgKDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50 NjRfdCBpbmRleCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbWZpX292ZXJyaWRlc19jb250YWlucyAo OjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6dWludDY0X3QgcnBt Zmlfb3ZlcnJpZGVzX2dldCAoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBi b29sIGlzX2ltYV9lbmFibGVkICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCB0d2Vha19pbXBv cnRlZF9maWxlX2luZm8gKDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5m bykgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGlzX2ZpbGVfZmlsdGVyZWQgKDo6cnVzdDo6U3Ry IHBhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Q7 Ci0rICB2b2lkIHRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSAoOjpydXN0OjpTdHIgYWJzX3Bh dGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpOwot KyAgYm9vbCBoYXNfdG1wZmlsZXNfZW50cmllcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVz dDo6U3RyaW5nIHNlcmlhbGl6ZV90bXBmaWxlc19jb250ZW50ICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgflJwbUltcG9ydGVyICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpy dXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXpl X3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5v ZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBu b2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JFJwbUltcG9ydGVyCi1AQCAtMTQwMSw3MyArMTYwMyw4MSBAQCBzdHJ1Y3QgUnBtSW1w b3J0ZXIgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotICNkZWZpbmUgQ1hYQlJJREdF MV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEhpc3RvcnlFbnRyeQotIC8vIEEgaGlzdG9yeSBlbnRyeSBp biB0aGUgam91cm5hbC4gSXQgbWF5IHJlcHJlc2VudCBtdWx0aXBsZSBjb25zZWN1dGl2ZSBib290 cwotIC8vIGludG8gdGhlIHNhbWUgZGVwbG95bWVudC4gVGhpcyBzdHJ1Y3QgaXMgZXhwb3NlZCBk aXJlY3RseSB2aWEgRkZJIHRvIEMuCi0tc3RydWN0IEhpc3RvcnlFbnRyeSBmaW5hbCB7Ci0rc3Ry dWN0IEhpc3RvcnlFbnRyeSBmaW5hbAotK3sKLSAgIC8vIFRoZSBkZXBsb3ltZW50IHJvb3QgdGlt ZXN0YW1wLgotLSAgOjpzdGQ6OnVpbnQ2NF90IGRlcGxveV90aW1lc3RhbXAgQ1hYX0RFRkFVTFRf VkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgZGVwbG95X3RpbWVzdGFtcCBDWFhfREVGQVVM VF9WQUxVRSAoMCk7Ci0gICAvLyBUaGUgY29tbWFuZC1saW5lIHRoYXQgd2FzIHVzZWQgdG8gY3Jl YXRlIHRoZSBkZXBsb3ltZW50LCBpZiBhbnkuCi0gICA6OnJ1c3Q6OlN0cmluZyBkZXBsb3lfY21k bGluZTsKLSAgIC8vIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdGltZXMgdGhlIGRlcGxveW1l bnQgd2FzIGJvb3RlZC4KLS0gIDo6c3RkOjp1aW50NjRfdCBib290X2NvdW50IENYWF9ERUZBVUxU X1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IGJvb3RfY291bnQgQ1hYX0RFRkFVTFRfVkFM VUUgKDApOwotICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhlIGRlcGxveW1lbnQgd2FzIGJvb3RlZCBp ZiBtdWx0aXBsZSBjb25zZWN1dGl2ZSB0aW1lcy4KLS0gIDo6c3RkOjp1aW50NjRfdCBmaXJzdF9i b290X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBm aXJzdF9ib290X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7Ci0gICAvLyBUaGUgbGFz dCB0aW1lIHRoZSBkZXBsb3ltZW50IHdhcyBib290ZWQgaWYgbXVsdGlwbGUgY29uc2VjdXRpdmUg dGltZXMuCi0tICA6OnN0ZDo6dWludDY0X3QgbGFzdF9ib290X3RpbWVzdGFtcCBDWFhfREVGQVVM VF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBsYXN0X2Jvb3RfdGltZXN0YW1wIENYWF9E RUZBVUxUX1ZBTFVFICgwKTsKLSAgIC8vIGB0cnVlYCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBlbnRy aWVzLgotLSAgYm9vbCBlb2YgQ1hYX0RFRkFVTFRfVkFMVUUoZmFsc2UpOwotKyAgYm9vbCBlb2Yg Q1hYX0RFRkFVTFRfVkFMVUUgKGZhbHNlKTsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9PShIaXN0b3J5 RW50cnkgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yIT0oSGlzdG9y eUVudHJ5IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj09IChIaXN0 b3J5RW50cnkgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yIT0gKEhp c3RvcnlFbnRyeSBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSAgIHVzaW5nIElzUmVsb2NhdGFi bGUgPSA6OnN0ZDo6dHJ1ZV90eXBlOwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRIaXN0b3J5RW50cnkKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4Ci0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1v c3RyZWVjeHgkSGlzdG9yeUN0eAotLXN0cnVjdCBIaXN0b3J5Q3R4IGZpbmFsIDogcHVibGljIDo6 cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgbmV4dF9lbnRy eSgpOwotLSAgfkhpc3RvcnlDdHgoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgSGlzdG9yeUN0eCBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5 RW50cnkgbmV4dF9lbnRyeSAoKTsKLSsgIH5IaXN0b3J5Q3R4ICgpID0gZGVsZXRlOwotIAotIHBy aXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0g ICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgKLSAKLSAjaWZuZGVmIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZQotICNkZWZpbmUgQ1hYQlJJREdF MV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlCi0tc3RydWN0IFRva2lvSGFuZGxlIGZp bmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUb2tpb0VudGVyR3VhcmQ+IGVudGVyKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB+VG9raW9I YW5kbGUoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgVG9raW9IYW5kbGUgZmluYWwgOiBwdWJsaWMgOjpy dXN0OjpPcGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRl ckd1YXJkPiBlbnRlciAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIH5Ub2tpb0hhbmRsZSAoKSA9IGRl bGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0 IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0g ICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlv dXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsg ICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0g I2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZQotIAot ICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZAot ICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZAot LXN0cnVjdCBUb2tpb0VudGVyR3VhcmQgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewot LSAgflRva2lvRW50ZXJHdWFyZCgpID0gZGVsZXRlOwotK3N0cnVjdCBUb2tpb0VudGVyR3VhcmQg ZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0rICB+VG9raW9FbnRlckd1YXJkICgp ID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBz dHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0 OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0 IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0 OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0g fTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJH dWFyZAotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZXBvTWV0YWRh dGFUYXJnZXQKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUmVwb01ldGFk YXRhVGFyZ2V0Ci0tZW51bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhf dCB7Ci0rZW51bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdAotK3sK LSAgIElubGluZSA9IDAsCi0gICBEZXRhY2hlZCA9IDEsCi0gICBEaXNhYmxlZCA9IDIsCi1AQCAt MTQ3Niw3ICsxNjg2LDggQEAgZW51bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6 dWludDhfdCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JEFkdmlz b3JpZXNNZXRhZGF0YVRhcmdldAotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4 eCRBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQKLS1lbnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0 YVRhcmdldCA6IDo6c3RkOjp1aW50OF90IHsKLStlbnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0 YVRhcmdldCA6IDo6c3RkOjp1aW50OF90Ci0rewotICAgSW5saW5lID0gMCwKLSAgIERldGFjaGVk ID0gMSwKLSAgIERpc2FibGVkID0gMiwKLUBAIC0xNDg1LDM5ICsxNjk2LDQzIEBAIGVudW0gY2xh c3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QgewotIAotICNpZm5k ZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlZnNwZWMKLSAjZGVmaW5lIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZWZzcGVjCi0tc3RydWN0IFJlZnNwZWMgZmluYWwg ewotK3N0cnVjdCBSZWZzcGVjIGZpbmFsCi0rewotICAgOjpycG1vc3RyZWVjeHg6OlJlZnNwZWNU eXBlIGtpbmQ7Ci0gICA6OnJ1c3Q6OlN0cmluZyByZWZzcGVjOwotIAotLSAgYm9vbCBvcGVyYXRv cj09KFJlZnNwZWMgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yIT0o UmVmc3BlYyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I9PSAoUmVm c3BlYyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3IhPSAoUmVmc3Bl YyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0 ZDo6dHJ1ZV90eXBlOwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRSZWZzcGVjCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE92 ZXJyaWRlUmVwbGFjZW1lbnRUeXBlCi0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVl Y3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlCi0tZW51bSBjbGFzcyBPdmVycmlkZVJlcGxhY2Vt ZW50VHlwZSA6IDo6c3RkOjp1aW50OF90IHsKLStlbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1l bnRUeXBlIDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBSZXBvID0gMCwKLSB9OwotICNlbmRpZiAv LyBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlCi0g Ci0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNl bWVudAotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVw bGFjZW1lbnQKLS1zdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudCBmaW5hbCB7Ci0rc3RydWN0IE92 ZXJyaWRlUmVwbGFjZW1lbnQgZmluYWwKLSt7Ci0gICA6OnJ1c3Q6OlN0cmluZyBmcm9tOwotICAg OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlIGZyb21fa2luZDsKLSAgIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlczsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9 PShPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBv cGVyYXRvciE9KE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0r ICBib29sIG9wZXJhdG9yPT0gKE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9l eGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yIT0gKE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikg Y29uc3Qgbm9leGNlcHQ7Ci0gICB1c2luZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlw ZTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJp ZGVSZXBsYWNlbWVudAotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRP cHRVc3JMb2NhbAotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRPcHRVc3JM b2NhbAotLWVudW0gY2xhc3MgT3B0VXNyTG9jYWwgOiA6OnN0ZDo6dWludDhfdCB7Ci0rZW51bSBj bGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90Ci0rewotICAgVmFyID0gMCwKLSAgIFJv b3QgPSAxLAotICAgU3RhdGVPdmVybGF5ID0gMiwKLUBAIC0xNTI2LDEyNSArMTc0MSwxMzEgQEAg ZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90IHsKLSAKLSAjaWZuZGVmIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUcmVlZmlsZQotICNkZWZpbmUgQ1hYQlJJREdF MV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRyZWVmaWxlCi0tc3RydWN0IFRyZWVmaWxlIGZpbmFsIDog cHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVzdDo6U3RyIGdldF93b3JrZGlyKCkgY29u c3Qgbm9leGNlcHQ7Ci0tICA6OnN0ZDo6aW50MzJfdCBnZXRfcGFzc3dkX2ZkKCkgbm9leGNlcHQ7 Ci0tICA6OnN0ZDo6aW50MzJfdCBnZXRfZ3JvdXBfZmQoKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6 U3RyaW5nIGdldF9qc29uX3N0cmluZygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGdldF9vc3RyZWVfbGF5ZXJzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMoKSBj b25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfYWxsX29z dHJlZV9sYXllcnMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBnZXRfcmVwb3MoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5n IHJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4KCkgY29uc3Q7Ci0tICBib29sIGFkZF9w YWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3df ZXhpc3RpbmcpOwotLSAgYm9vbCBoYXNfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9jYWxfcGFja2FnZXMoKSBjb25zdCBub2V4 Y2VwdDsKLS0gIGJvb2wgYWRkX2xvY2FsX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gZ2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcygpIGNvbnN0IG5vZXhj ZXB0OwotLSAgYm9vbCBhZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7Ci0tICBib29s IHJlbW92ZV9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJv b2wgYWxsb3dfbm9lbnQpOwotLSAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRl UmVwbGFjZW1lbnQ+IGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKCkgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKCkgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4 OjpPdmVycmlkZVJlcGxhY2VtZW50IHJlcGxhY2VtZW50KSBub2V4Y2VwdDsKLS0gIGJvb2wgcmVt b3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZSg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2Vw dDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVf cmVwbGFjZV9sb2NhbCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCBhZGRfcGFja2FnZXNfb3Zl cnJpZGVfcmVwbGFjZV9sb2NhbCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMp OwotLSAgYm9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlX2xvY2FsKDo6cnVzdDo6 U3RyIHBhY2thZ2UpIG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdl dF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgYWRk X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFj a2FnZXMpOwotLSAgYm9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUoOjpydXN0OjpT dHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0tICBib29sIGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1v dmVfbmFtZSg6OnJ1c3Q6OlN0ciBuYW1lKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgcmVtb3Zl X2FsbF9vdmVycmlkZXMoKSBub2V4Y2VwdDsKLS0gIGJvb2wgcmVtb3ZlX2FsbF9wYWNrYWdlcygp IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9leGNsdWRlX3Bh Y2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBnZXRfcGxhdGZvcm1f bW9kdWxlKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Z2V0X2luc3RhbGxfbGFuZ3MoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGZv cm1hdF9pbnN0YWxsX2xhbmdzX21hY3JvKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2tmaWxlX3JlcG9zKCkgY29uc3Qgbm9leGNlcHQ7Ci0t ICA6OnJ1c3Q6OlN0ciBnZXRfcmVmKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9jbGl3 cmFwKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X2NsaXdyYXBfYmluYXJpZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgc2V0X2NsaXdyYXAo Ym9vbCBlbmFibGVkKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBn ZXRfY29udGFpbmVyX2NtZCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfcmVhZG9ubHlf ZXhlY3V0YWJsZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X2RvY3VtZW50YXRpb24o KSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X3JlY29tbWVuZHMoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIGJvb2wgZ2V0X3NlbGludXgoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X3N5 c3VzZXJzX2lzX2ZvcmNlZCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpzdGQ6OnVpbnQzMl90IGdl dF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24oKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3Ry aW5nIGdldF9ncGdfa2V5KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBnZXRf YXV0b21hdGljX3ZlcnNpb25fc3VmZml4KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9j b250YWluZXIoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X21hY2hpbmVpZF9jb21wYXQo KSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZXRj X2dyb3VwX21lbWJlcnMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X2Jvb3RfbG9jYXRp b25faXNfbW9kdWxlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCB1c2Vfa2VybmVsX2luc3Rh bGwoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X2ltYSgpIGNvbnN0IG5vZXhjZXB0Owot LSAgOjpydXN0OjpTdHJpbmcgZ2V0X3JlbGVhc2V2ZXIoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6 cnBtb3N0cmVlY3h4OjpSZXBvTWV0YWRhdGFUYXJnZXQgZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0 KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01ldGFkYXRh VGFyZ2V0IGdldF9hZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0Owot LSAgYm9vbCBycG1kYl9iYWNrZW5kX2lzX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCBzaG91bGRfbm9ybWFsaXplX3JwbWRiKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJwbW9zdHJl ZWN4eDo6T3B0VXNyTG9jYWwgZ2V0X29wdF91c3Jsb2NhbCgpIGNvbnN0IG5vZXhjZXB0OwotLSAg OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9maWxlc19yZW1vdmVfcmVnZXgoOjpydXN0 OjpTdHIgcGFja2FnZSkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBnZXRfY2hl Y2tzdW0oOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIGNvbnN0OwotLSAg OjpydXN0OjpTdHJpbmcgZ2V0X29zdHJlZV9yZWYoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVz dDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0PiBnZXRfcmVwb19wYWNr YWdlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCBjbGVhcl9yZXBvX3BhY2thZ2VzKCkgbm9l eGNlcHQ7Ci0tICB2b2lkIHByZXR0eXByaW50X2pzb25fc3Rkb3V0KCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICB2b2lkIHByaW50X2RlcHJlY2F0aW9uX3dhcm5pbmdzKCkgY29uc3Qgbm9leGNlcHQ7Ci0t ICB2b2lkIHByaW50X2V4cGVyaW1lbnRhbF9ub3RpY2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2 b2lkIHNhbml0eWNoZWNrX2V4dGVybmFscygpIGNvbnN0OwotLSAgOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+IGltcG9ydGVyX2ZsYWdzKDo6cnVzdDo6U3RyIHBr Z19uYW1lKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIHdyaXRlX3JlcG92YXJz KDo6c3RkOjppbnQzMl90IHdvcmtkaXJfZGZkX3JhdykgY29uc3Q7Ci0tICB2b2lkIHNldF9yZWxl YXNldmVyKDo6cnVzdDo6U3RyIHJlbGVhc2V2ZXIpOwotLSAgdm9pZCBzZXRfcmVjb21tZW5kcyhi b29sIHZhbCk7Ci0tICB2b2lkIGVuYWJsZV9yZXBvKDo6cnVzdDo6U3RyIHJlcG8pOwotLSAgdm9p ZCBkaXNhYmxlX3JlcG8oOjpydXN0OjpTdHIgcmVwbyk7Ci0tICB2b2lkIHZhbGlkYXRlX2Zvcl9j b250YWluZXIoKSBjb25zdDsKLS0gIDo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjIGdldF9iYXNlX3Jl ZnNwZWMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgcmViYXNlKDo6cnVzdDo6U3RyIG5ld19y ZWZzcGVjLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX3VybCwgOjpydXN0OjpTdHIgY3VzdG9t X29yaWdpbl9kZXNjcmlwdGlvbikgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3Jp Z2luX2N1c3RvbV91cmwoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9v cmlnaW5fY3VzdG9tX2Rlc2NyaXB0aW9uKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0 cmluZyBnZXRfb3ZlcnJpZGVfY29tbWl0KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIHNldF9v dmVycmlkZV9jb21taXQoOjpydXN0OjpTdHIgY2hlY2tzdW0pIG5vZXhjZXB0OwotLSAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzKCkgY29uc3Qgbm9l eGNlcHQ7Ci0tICBib29sIGhhc19pbml0cmFtZnNfZXRjX2ZpbGVzKCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICBib29sIGluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2soOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsKLS0gIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc191bnRy YWNrKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQ7Ci0tICBib29s IGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwoKSBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0 X2luaXRyYW1mc19yZWdlbmVyYXRlKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X2luaXRyYW1mc19hcmdzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2 b2lkIHNldF9pbml0cmFtZnNfcmVnZW5lcmF0ZShib29sIGVuYWJsZWQsIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBhcmdzKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF91bmNv bmZpZ3VyZWRfc3RhdGUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgbWF5X3JlcXVpcmVfbG9j YWxfYXNzZW1ibHkoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgaGFzX2FueV9wYWNrYWdlcygp IGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBtZXJnZV90cmVlZmlsZSg6OnJ1c3Q6OlN0ciB0cmVl ZmlsZSk7Ci0tICBib29sIGdldF9ub19pbml0cmFtZnMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIH5U cmVlZmlsZSgpID0gZGVsZXRlOwotK3N0cnVjdCBUcmVlZmlsZSBmaW5hbCA6IHB1YmxpYyA6OnJ1 c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6cnVzdDo6U3RyIGdldF93b3JrZGlyICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgOjpzdGQ6OmludDMyX3QgZ2V0X3Bhc3N3ZF9mZCAoKSBub2V4Y2VwdDsKLSsgIDo6 c3RkOjppbnQzMl90IGdldF9ncm91cF9mZCAoKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5n IGdldF9qc29uX3N0cmluZyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBnZXRfb3N0cmVlX2xheWVycyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycyAoKSBjb25z dCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfYWxsX29zdHJl ZV9sYXllcnMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gZ2V0X3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5n IHJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4ICgpIGNvbnN0OwotKyAgYm9vbCBhZGRf cGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxv d19leGlzdGluZyk7Ci0rICBib29sIGhhc19wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9jYWxfcGFja2FnZXMgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBib29sIGFkZF9sb2NhbF9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKLSsgIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICgpIGNvbnN0 IG5vZXhjZXB0OwotKyAgYm9vbCBhZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOwot KyAgYm9vbCByZW1vdmVfcGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNr YWdlcywgYm9vbCBhbGxvd19ub2VudCk7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6 T3ZlcnJpZGVSZXBsYWNlbWVudD4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICBib29sIGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICgpIGNv bnN0IG5vZXhjZXB0OwotKyAgYm9vbCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoOjpy cG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgcmVwbGFjZW1lbnQpIG5vZXhjZXB0Owot KyAgYm9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlICg6OnJ1c3Q6OlN0ciBwYWNr YWdlKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2Fn ZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgYWRk X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBwYWNrYWdlcyk7Ci0rICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2Vf bG9jYWwgKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICB2b2lkIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUgKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBwYWNrYWdlcyk7Ci0rICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRl X3JlbW92ZSAoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0rICBib29sIGhhc19wYWNr YWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSAoOjpydXN0OjpTdHIgbmFtZSkgY29uc3Qgbm9leGNl cHQ7Ci0rICBib29sIHJlbW92ZV9hbGxfb3ZlcnJpZGVzICgpIG5vZXhjZXB0OwotKyAgYm9vbCBy ZW1vdmVfYWxsX3BhY2thZ2VzICgpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9leGNsdWRlX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0 OjpTdHJpbmcgZ2V0X3BsYXRmb3JtX21vZHVsZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5zdGFsbF9sYW5ncyAoKSBjb25zdCBub2V4Y2Vw dDsKLSsgIDo6cnVzdDo6U3RyaW5nIGZvcm1hdF9pbnN0YWxsX2xhbmdzX21hY3JvICgpIGNvbnN0 IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NrZmlsZV9y ZXBvcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyIGdldF9yZWYgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBib29sIGdldF9jbGl3cmFwICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9jbGl3cmFwX2JpbmFyaWVzICgpIGNvbnN0IG5v ZXhjZXB0OwotKyAgdm9pZCBzZXRfY2xpd3JhcCAoYm9vbCBlbmFibGVkKSBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfY29udGFpbmVyX2NtZCAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X3JlYWRvbmx5X2V4ZWN1dGFibGVzICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgYm9vbCBnZXRfZG9jdW1lbnRhdGlvbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJv b2wgZ2V0X3JlY29tbWVuZHMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9zZWxpbnV4 ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfc3lzdXNlcnNfaXNfZm9yY2VkICgpIGNv bnN0IG5vZXhjZXB0OwotKyAgOjpzdGQ6OnVpbnQzMl90IGdldF9zZWxpbnV4X2xhYmVsX3ZlcnNp b24gKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRfZ3BnX2tleSAoKSBj b25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9hdXRvbWF0aWNfdmVyc2lvbl9z dWZmaXggKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9jb250YWluZXIgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBib29sIGdldF9tYWNoaW5laWRfY29tcGF0ICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9ldGNfZ3JvdXBfbWVtYmVycyAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2Jvb3RfbG9jYXRpb25faXNfbW9kdWxlcyAo KSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsICgpIGNvbnN0IG5v ZXhjZXB0OwotKyAgYm9vbCBnZXRfaW1hICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpT dHJpbmcgZ2V0X3JlbGVhc2V2ZXIgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJwbW9zdHJlZWN4 eDo6UmVwb01ldGFkYXRhVGFyZ2V0IGdldF9yZXBvX21ldGFkYXRhX3RhcmdldCAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgZ2V0 X2Fkdmlzb3JpZXNfbWV0YWRhdGFfdGFyZ2V0ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBy cG1kYl9iYWNrZW5kX2lzX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgc2hvdWxk X25vcm1hbGl6ZV9ycG1kYiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpP cHRVc3JMb2NhbCBnZXRfb3B0X3VzcmxvY2FsICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9maWxlc19yZW1vdmVfcmVnZXggKDo6cnVzdDo6U3Ry IHBhY2thZ2UpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2NoZWNrc3Vt ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgY29uc3Q7Ci0rICA6OnJ1 c3Q6OlN0cmluZyBnZXRfb3N0cmVlX3JlZiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0PiBnZXRfcmVwb19wYWNrYWdl cyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgY2xlYXJfcmVwb19wYWNrYWdlcyAoKSBub2V4 Y2VwdDsKLSsgIHZvaWQgcHJldHR5cHJpbnRfanNvbl9zdGRvdXQgKCkgY29uc3Qgbm9leGNlcHQ7 Ci0rICB2b2lkIHByaW50X2RlcHJlY2F0aW9uX3dhcm5pbmdzICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgdm9pZCBwcmludF9leHBlcmltZW50YWxfbm90aWNlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IHZvaWQgc2FuaXR5Y2hlY2tfZXh0ZXJuYWxzICgpIGNvbnN0OwotKyAgOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+Ci0rICBpbXBvcnRlcl9mbGFncyAoOjpydXN0 OjpTdHIgcGtnX25hbWUpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgd3JpdGVf cmVwb3ZhcnMgKDo6c3RkOjppbnQzMl90IHdvcmtkaXJfZGZkX3JhdykgY29uc3Q7Ci0rICB2b2lk IHNldF9yZWxlYXNldmVyICg6OnJ1c3Q6OlN0ciByZWxlYXNldmVyKTsKLSsgIHZvaWQgc2V0X3Jl Y29tbWVuZHMgKGJvb2wgdmFsKTsKLSsgIHZvaWQgZW5hYmxlX3JlcG8gKDo6cnVzdDo6U3RyIHJl cG8pOwotKyAgdm9pZCBkaXNhYmxlX3JlcG8gKDo6cnVzdDo6U3RyIHJlcG8pOwotKyAgdm9pZCB2 YWxpZGF0ZV9mb3JfY29udGFpbmVyICgpIGNvbnN0OwotKyAgOjpycG1vc3RyZWVjeHg6OlJlZnNw ZWMgZ2V0X2Jhc2VfcmVmc3BlYyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgcmViYXNlICg6 OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsCi0r ICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl9kZXNjcmlwdGlvbikgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3JpZ2luX2N1c3RvbV91cmwgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlv biAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9vdmVycmlkZV9jb21t aXQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIHNldF9vdmVycmlkZV9jb21taXQgKDo6cnVz dDo6U3RyIGNoZWNrc3VtKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfaW5pdHJhbWZzX2V0Y19maWxlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgaGFz X2luaXRyYW1mc19ldGNfZmlsZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGluaXRyYW1m c19ldGNfZmlsZXNfdHJhY2sgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9l eGNlcHQ7Ci0rICBib29sIGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFjayAoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsKLSsgIGJvb2wgaW5pdHJhbWZzX2V0Y19m aWxlc191bnRyYWNrX2FsbCAoKSBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2luaXRyYW1mc19yZWdl bmVyYXRlICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9pbml0cmFtZnNfYXJncyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0X2luaXRy YW1mc19yZWdlbmVyYXRlIChib29sIGVuYWJsZWQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBhcmdzKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF91bmNvbmZpZ3VyZWRfc3Rh dGUgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG1heV9yZXF1aXJlX2xvY2FsX2Fzc2VtYmx5 ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBoYXNfYW55X3BhY2thZ2VzICgpIGNvbnN0IG5v ZXhjZXB0OwotKyAgYm9vbCBtZXJnZV90cmVlZmlsZSAoOjpydXN0OjpTdHIgdHJlZWZpbGUpOwot KyAgYm9vbCBnZXRfbm9faW5pdHJhbWZzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgflRyZWVmaWxl ICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0t ICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhj ZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3Ry dWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhj ZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07 Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRyZWVmaWxl Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVwb1BhY2thZ2UK LSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZXBvUGFja2FnZQotLXN0 cnVjdCBSZXBvUGFja2FnZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1 c3Q6OlN0ciBnZXRfcmVwbygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGdldF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgflJlcG9QYWNrYWdl KCkgPSBkZWxldGU7Ci0rc3RydWN0IFJlcG9QYWNrYWdlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6 T3BhcXVlCi0rewotKyAgOjpydXN0OjpTdHIgZ2V0X3JlcG8gKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgflJlcG9QYWNrYWdlICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmll bmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3Rk OjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGln bigpIG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGln biAoKSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFJlcG9QYWNrYWdlCi1AQCAtMTY1NCw3ICsxODc1LDggQEAgc3RydWN0IFJl cG9QYWNrYWdlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLSAvLyBBIGNvcHkgb2Yg TGl2ZUZzU3RhdGUgdGhhdCBpcyBicmlkZ2VkIHRvIEMrKzsgdGhlIG1haW4KLSAvLyBjaGFuZ2Ug aGVyZSBpcyB3ZSBjYW4ndCB1c2UgT3B0aW9uPD4geWV0LCBzbyBlbXB0eSB2YWx1ZXMKLSAvLyBh cmUgcmVwcmVzZW50ZWQgYnkgdGhlIGVtcHR5IHN0cmluZy4KLS1zdHJ1Y3QgTGl2ZUFwcGx5U3Rh dGUgZmluYWwgewotK3N0cnVjdCBMaXZlQXBwbHlTdGF0ZSBmaW5hbAotK3sKLSAgIDo6cnVzdDo6 U3RyaW5nIGlucHJvZ3Jlc3M7Ci0gICA6OnJ1c3Q6OlN0cmluZyBjb21taXQ7Ci0gCi1AQCAtMTY2 NCw2NCArMTg4Niw3MiBAQCBzdHJ1Y3QgTGl2ZUFwcGx5U3RhdGUgZmluYWwgewotIAotICNpZm5k ZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhc3N3ZERCCi0gI2RlZmluZSBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkREIKLS1zdHJ1Y3QgUGFzc3dkREIgZmlu YWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgOjpydXN0OjpTdHJpbmcgbG9va3VwX3Vz ZXIoOjpzdGQ6OnVpbnQzMl90IHVpZCkgY29uc3Q7Ci0tICA6OnJ1c3Q6OlN0cmluZyBsb29rdXBf Z3JvdXAoOjpzdGQ6OnVpbnQzMl90IGdpZCkgY29uc3Q7Ci0tICB+UGFzc3dkREIoKSA9IGRlbGV0 ZTsKLStzdHJ1Y3QgUGFzc3dkREIgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKLSt7Ci0r ICA6OnJ1c3Q6OlN0cmluZyBsb29rdXBfdXNlciAoOjpzdGQ6OnVpbnQzMl90IHVpZCkgY29uc3Q7 Ci0rICA6OnJ1c3Q6OlN0cmluZyBsb29rdXBfZ3JvdXAgKDo6c3RkOjp1aW50MzJfdCBnaWQpIGNv bnN0OwotKyAgflBhc3N3ZERCICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQg OjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpz aXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigp IG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNp emVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAo KSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBt b3N0cmVlY3h4JFBhc3N3ZERCCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkUGFzc3dkRW50cmllcwotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JFBhc3N3ZEVudHJpZXMKLS1zdHJ1Y3QgUGFzc3dkRW50cmllcyBmaW5hbCA6IHB1YmxpYyA6 OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICB2b2lkIGFkZF9ncm91cF9jb250ZW50KDo6c3RkOjppbnQzMl90 IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCk7Ci0tICB2b2lkIGFkZF9wYXNzd2RfY29udGVudCg6 OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpOwotLSAgYm9vbCBjb250YWlu c19ncm91cCg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgY29udGFp bnNfdXNlcig6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6c3RkOjp1aW50 MzJfdCBsb29rdXBfdXNlcl9pZCg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdDsKLS0gIDo6c3RkOjp1 aW50MzJfdCBsb29rdXBfZ3JvdXBfaWQoOjpydXN0OjpTdHIgZ3JvdXApIGNvbnN0OwotLSAgflBh c3N3ZEVudHJpZXMoKSA9IGRlbGV0ZTsKLStzdHJ1Y3QgUGFzc3dkRW50cmllcyBmaW5hbCA6IHB1 YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIHZvaWQgYWRkX2dyb3VwX2NvbnRlbnQgKDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCk7Ci0rICB2b2lkIGFkZF9wYXNzd2Rf Y29udGVudCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKLSsgIGJv b2wgY29udGFpbnNfZ3JvdXAgKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OwotKyAg Ym9vbCBjb250YWluc191c2VyICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdDsKLSsg IDo6c3RkOjp1aW50MzJfdCBsb29rdXBfdXNlcl9pZCAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Q7 Ci0rICA6OnN0ZDo6dWludDMyX3QgbG9va3VwX2dyb3VwX2lkICg6OnJ1c3Q6OlN0ciBncm91cCkg Y29uc3Q7Ci0rICB+UGFzc3dkRW50cmllcyAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAg ZnJpZW5kIDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6 OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg YWxpZ24oKSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6 c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qg YWxpZ24gKCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucwotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMKLS1zdHJ1Y3QgRXh0ZW5zaW9ucyBmaW5hbCA6IHB1Ymxp YyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3Jl cG9zKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X29zX2V4dGVuc2lvbl9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGdldF9kZXZlbG9wbWVudF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0 OwotLSAgYm9vbCBzdGF0ZV9jaGVja3N1bV9jaGFuZ2VkKDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpy dXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7Ci0tICB2b2lkIHVwZGF0ZV9zdGF0ZV9jaGVja3N1 bSg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OwotLSAg dm9pZCBzZXJpYWxpemVfdG9fZGlyKDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OwotLSAg OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiBnZW5lcmF0ZV90cmVlZmlsZSg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYykgY29uc3Q7Ci0tICB+RXh0ZW5zaW9u cygpID0gZGVsZXRlOwotK3N0cnVjdCBFeHRlbnNpb25zIGZpbmFsIDogcHVibGljIDo6cnVzdDo6 T3BhcXVlCi0rewotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9yZXBvcyAoKSBj b25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3NfZXh0 ZW5zaW9uX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGdldF9kZXZlbG9wbWVudF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IGJvb2wgc3RhdGVfY2hlY2tzdW1fY2hhbmdlZCAoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6 OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKLSsgIHZvaWQgdXBkYXRlX3N0YXRlX2NoZWNrc3VtICg6 OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OwotKyAgdm9p ZCBzZXJpYWxpemVfdG9fZGlyICg6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKLSsgIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4KLSsgIGdlbmVyYXRlX3RyZWVmaWxl ICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYykgY29uc3Q7Ci0rICB+RXh0ZW5z aW9ucyAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0 OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBu b2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKLSsg IHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBu b2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7Ci0g ICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRFeHRl bnNpb25zCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2Vk UGFja2FnZQotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JExvY2tlZFBh Y2thZ2UKLS1zdHJ1Y3QgTG9ja2VkUGFja2FnZSBmaW5hbCB7Ci0rc3RydWN0IExvY2tlZFBhY2th Z2UgZmluYWwKLSt7Ci0gICA6OnJ1c3Q6OlN0cmluZyBuYW1lOwotICAgOjpydXN0OjpTdHJpbmcg ZXZyOwotICAgOjpydXN0OjpTdHJpbmcgYXJjaDsKLUBAIC0xNzMzLDMyNjIgKzE5NjMsNDk4NSBA QCBzdHJ1Y3QgTG9ja2VkUGFja2FnZSBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWcKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZwotLXN0cnVjdCBMb2NrZmlsZUNvbmZpZyBm aW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJl ZWN4eDo6TG9ja2VkUGFja2FnZT4gZ2V0X2xvY2tlZF9wYWNrYWdlcygpIGNvbnN0OwotLSAgfkxv Y2tmaWxlQ29uZmlnKCkgPSBkZWxldGU7Ci0rc3RydWN0IExvY2tmaWxlQ29uZmlnIGZpbmFsIDog cHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 OkxvY2tlZFBhY2thZ2U+IGdldF9sb2NrZWRfcGFja2FnZXMgKCkgY29uc3Q7Ci0rICB+TG9ja2Zp bGVDb25maWcgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6Omxh eW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXpl KCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7 Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUg KCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0 OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk TG9ja2ZpbGVDb25maWcKLSAKLS1zdGF0aWNfYXNzZXJ0KDo6c3RkOjppc19lbnVtPFJwbU9zdHJl ZURpZmZQcmludEZvcm1hdD46OnZhbHVlLCAiZXhwZWN0ZWQgZW51bSIpOwotLXN0YXRpY19hc3Nl cnQoc2l6ZW9mKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCkgPT0gc2l6ZW9mKDo6c3RkOjp1aW50 OF90KSwgImluY29ycmVjdCBzaXplIik7Ci0tc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0 ZDo6dWludDhfdD4oUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklO VF9GT1JNQVRfU1VNTUFSWSkgPT0gMCwgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4 eDo6YnJpZGdlXSIpOwotLXN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+ KFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZV TExfQUxJR05FRCkgPT0gMSwgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJp ZGdlXSIpOwotLXN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+KFJwbU9z dHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfTVVM VElMSU5FKSA9PSAyLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2Vd Iik7Ci0tCi0tZXh0ZXJuICJDIiB7Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGlzX2JhcmVfc3BsaXRfeGF0dHJzKGJvb2wgKnJldHVybiQpIG5vZXhj ZXB0OwotLQotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2h0dHBfYXJnKDo6 cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX29zdHJlZV9jb250YWluZXIoYm9vbCAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGdldF9zeXN0ZW1faG9zdF90eXBlKDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlw ZSAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHJlcXVpcmVfc3lzdGVtX2hvc3RfdHlwZSg6OnJwbW9zdHJlZWN4 eDo6U3lzdGVtSG9zdFR5cGUgdCkgbm9leGNlcHQ7Ci0rc3RhdGljX2Fzc2VydCAoOjpzdGQ6Omlz X2VudW08UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0Pjo6dmFsdWUsICJleHBlY3RlZCBlbnVtIik7 Ci0rc3RhdGljX2Fzc2VydCAoc2l6ZW9mIChScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQpID09IHNp emVvZiAoOjpzdGQ6OnVpbnQ4X3QpLCAiaW5jb3JyZWN0IHNpemUiKTsKLStzdGF0aWNfYXNzZXJ0 ICgKLSsgICAgc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+IChScG1Pc3RyZWVEaWZmUHJpbnRG b3JtYXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZPUk1BVF9TVU1NQVJZKQotKyAgICAgICAgPT0g MCwKLSsgICAgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOwot K3N0YXRpY19hc3NlcnQgKAotKyAgICBzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4gKFJwbU9z dHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfQUxJ R05FRCkKLSsgICAgICAgID09IDEsCi0rICAgICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4g I1tjeHg6OmJyaWRnZV0iKTsKLStzdGF0aWNfYXNzZXJ0IChzdGF0aWNfY2FzdDw6OnN0ZDo6dWlu dDhfdD4gKAotKyAgICAgICAgICAgICAgICAgICBScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQ TU9TVFJFRV9ESUZGX1BSSU5UX0ZPUk1BVF9GVUxMX01VTFRJTElORSkKLSsgICAgICAgICAgICAg ICAgICAgPT0gMiwKLSsgICAgICAgICAgICAgICAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGlu ICNbY3h4OjpicmlkZ2VdIik7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk aXNfcnBtX2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OwotK2V4dGVybiAiQyIKLSt7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfYmFy ZV9zcGxpdF94YXR0cnMgKGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfc3RhcnRfZGFlbW9u KCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19odHRw X2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50X2hhbmRsZV9mZF9hcmd1bWVudCg6 OnJ1c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsIGJvb2wgaXNfcmVwbGFjZSwgOjpydXN0 OjpWZWM8OjpzdGQ6OmludDMyX3Q+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19vc3RyZWVfY29udGFpbmVy IChib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRjbGllbnRfcmVuZGVyX2Rvd25sb2FkX3Byb2dyZXNzKDo6cnBtb3N0cmVlY3h4OjpH VmFyaWFudCBjb25zdCAmcHJvZ3Jlc3MsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRn ZXRfc3lzdGVtX2hvc3RfdHlwZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RU eXBlICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRydW5uaW5nX2luX2NvbnRhaW5lcigpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXF1aXJlX3N5c3RlbV9ob3N0 X3R5cGUgKDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSB0KSBub2V4Y2VwdDsKLSAKLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybShi b29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGlzX3JwbV9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm1fb3JfYWJvcnQo KSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRC dWJibGV3cmFwJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3IkYWxpZ25vZigpIG5v ZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNsaWVudF9zdGFydF9kYWVtb24gKCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfc2VsZnRlc3QoKSBu b2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjbGllbnRfaGFuZGxlX2ZkX2FyZ3VtZW50ICgKLSsgICAgICA6OnJ1c3Q6OlN0ciBhcmcs IDo6cnVzdDo6U3RyIGFyY2gsIGJvb2wgaXNfcmVwbGFjZSwKLSsgICAgICA6OnJ1c3Q6OlZlYzw6 OnN0ZDo6aW50MzJfdD4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX3J1bl9zeW5jKDo6c3Rk OjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAm YXJncywgYm9vbCBjYXB0dXJlX3N0ZG91dCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRh YmlsaXR5IG11dGFiaWxpdHksIDo6cnVzdDo6VmVjPDo6c3RkOjp1aW50OF90PiAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfcmVu ZGVyX2Rvd25sb2FkX3Byb2dyZXNzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQg Y29uc3QgJnByb2dyZXNzLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0t OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdy YXBfbmV3KDo6c3RkOjppbnQzMl90IHJvb3Rmc19mZCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OkJ1YmJsZXdyYXA+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHJ1bm5pbmdfaW5fY29udGFpbmVyICgpIG5vZXhjZXB0OwotIAotLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFw X25ld193aXRoX211dGFiaWxpdHkoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSwgOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OkJ1YmJsZXdyYXA+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25maXJtIChib29sICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS06OnN0ZDo6aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkQnViYmxld3JhcCRnZXRfcm9vdGZzX2ZkKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFw IGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25maXJtX29yX2Fib3J0ICgpIG5vZXhjZXB0OwotKyAgOjpz dGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRvcGVyYXRv ciRzaXplb2YgKCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRCdWJibGV3cmFwJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Ci0gCi0t dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfYndyYXBf YXJnKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnJ1c3Q6OlN0ciBhcmcpIG5v ZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGJ1YmJsZXdyYXBfc2VsZnRlc3QgKCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfY2hpbGRfYXJnKDo6cnBtb3N0cmVl Y3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBf cnVuX3N5bmMgKAotKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncywgYm9vbCBjYXB0dXJlX3N0ZG91dCwKLSsgICAg ICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSwKLSsgICAg ICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDhfdD4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0ZW52KDo6cnBtb3N0 cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBu b2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRidWJibGV3cmFwX25ldyAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gKnJldHVybiQpIG5vZXhjZXB0 OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9m ZCg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNl X2ZkLCA6OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3X3dpdGhf bXV0YWJpbGl0eSAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSwKLSsgICAgICA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0X2luaGVyaXRfc3Rk aW4oOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpzdGQ6 OmludDMyX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkZ2V0X3Jvb3Rm c19mZCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgY29uc3QgJnNlbGYpIG5v ZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAk dGFrZV9zdGRpbl9mZCg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpzdGQ6Omlu dDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEJ1YmJsZXdyYXAkYXBwZW5kX2J3cmFwX2FyZyAoOjpycG1vc3RyZWVjeHg6OkJ1YmJs ZXdyYXAgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0gCi0tdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZG91dF9mZCg6 OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNlX2Zk KSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdy YXAkYXBwZW5kX2NoaWxkX2FyZyAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGVycl9mZCg6OnJwbW9zdHJlZWN4eDo6 QnViYmxld3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSsg IHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0ZW52ICg6OnJw bW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2 KSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3 cmFwJHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAg JnNlbGYsIDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2VfZmQgKDo6cnBtb3N0cmVlY3h4 OjpCdWJibGV3cmFwICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQz Ml90IHRhcmdldF9mZCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWQoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNl bGYsIDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7Ci0rICB2b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHNldF9pbmhlcml0X3N0ZGlu ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9leGNlcHQ7Ci0g Ci0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWR3 cml0ZSg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpydXN0OjpTdHIgc3JjLCA6 OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRpbl9mZCAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdy YXAgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0gCi0t OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdy YXAkc2V0dXBfY29tcGF0X3Zhcig6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9l eGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRh a2Vfc3Rkb3V0X2ZkICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkcnVuKDo6cnBtb3N0cmVl Y3h4OjpCdWJibGV3cmFwICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0 ICZjYW5jZWxsYWJsZSkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRCdWJibGV3cmFwJHRha2Vfc3RkZXJyX2ZkICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0gCi0t OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRtdXRhYmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUoYm9vbCB1bmlmaWVkX2NvcmUpIG5v ZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0 YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxl d3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSAKLS06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdXNyb3ZlcmxheV9l bnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykgbm9leGNl cHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRf cmVhZCAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgc3Jj LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZW50cnlwb2ludCg6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWR3cml0ZSAoOjpycG1v c3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBzcmMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX2ZpbmlzaCg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXR1cF9j b21wYXRfdmFyICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9l eGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNvbXBvc2V1dGlsX2xlZ2FjeV9wcmVwX2Rldl9hbmRfcnVuKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkcnVuICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 QnViYmxld3JhcCAmc2VsZiwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2Fu Y2VsbGFibGUpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHByaW50X29zdHJlZV90eG5fc3RhdHMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG9UcmFuc2Fj dGlvblN0YXRzICZzdGF0cykgbm9leGNlcHQ7Ci0rICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cE11dGFiaWxpdHkKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtdXRhYmlsaXR5X2Zv cl91bmlmaWVkX2NvcmUgKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkd3JpdGVfY29tbWl0X2lk KDo6cnVzdDo6U3RyIHRhcmdldF9wYXRoLCA6OnJ1c3Q6OlN0ciByZXZpc2lvbikgbm9leGNlcHQ7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdXNy b3ZlcmxheV9lbnRyeXBvaW50ICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Y29uc3QgJmFyZ3MpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGl3cmFwX3dyaXRlX3dyYXBwZXJzKDo6c3RkOjppbnQzMl90 IHJvb3Rmcykgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX2VudHJ5cG9pbnQgKAotKyAgICAgIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfc29tZV93 cmFwcGVycyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBjb25zdCAmYXJncykgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX2ZpbmlzaCAoCi0rICAgICAgOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIG5vZXhjZXB0OwotIAotLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfZGVzdGRpcig6OnJ1c3Q6OlN0cmlu ZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZXV0aWxfbGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4gKAot KyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfZW5jYXBz dWxhdGUoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICphcmdzKSBub2V4Y2VwdDsKLSsgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X29zdHJlZV90eG5fc3RhdHMgKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvVHJhbnNhY3Rpb25TdGF0cyAmc3RhdHMp IG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRkZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+ICphcmdzKSBub2V4Y2VwdDsKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRQcnVuZWRDb250YWluZXJJbmZvJG9wZXJhdG9yJGVxKFBydW5lZENvbnRhaW5lckluZm8gY29u c3QgJiwgUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3cml0ZV9jb21taXRfaWQg KDo6cnVzdDo6U3RyIHRhcmdldF9wYXRoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmV2aXNp b24pIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRwdWxsX2NvbnRhaW5lcig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25z dCAmcmVwbywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUs IDo6cnVzdDo6U3RyIGltZ3JlZiwgOjpydXN0OjpTdHIgZGlnZXN0X292ZXJyaWRlLCA6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnJldHVybiQpIG5vZXhj ZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjbGl3cmFwX3dyaXRlX3dyYXBwZXJzICg6OnN0ZDo6aW50MzJfdCByb290ZnMpIG5vZXhj ZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb250YWluZXJfcHJ1bmUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5 c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjbGl3cmFwX3dyaXRlX3NvbWVfd3JhcHBlcnMgKAotKyAgICAgIDo6c3RkOjppbnQzMl90IHJv b3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSBub2V4Y2VwdDsK LSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcXVl cnlfY29udGFpbmVyX2ltYWdlX2NvbW1pdCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25z dCAmcmVwbywgOjpydXN0OjpTdHIgYywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRh aW5lckltYWdlU3RhdGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfZGVzdGRpciAoOjpydXN0OjpTdHJpbmcgKnJldHVybiQp IG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRwdXJnZV9yZWZzcGVjKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udGFpbmVyX2VuY2Fwc3VsYXRl ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OwotIAotLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19jb250YWlu ZXJfdXBkYXRlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9z dHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1n cmVmLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7 Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVGVtcEV0Y0d1YXJk JG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRzaXplb2YoKSBu b2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxl c3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95X2Zyb21fc2Vs Zl9lbnRyeXBvaW50ICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3Mp IG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUHJ1bmVkQ29u dGFpbmVySW5mbyRvcGVyYXRvciRlcSAoCi0rICAgICAgUHJ1bmVkQ29udGFpbmVySW5mbyBjb25z dCAmLCBQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX3RlbXBldGNf Z3VhcmQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VGVtcEV0Y0d1YXJkPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHVsbF9jb250YWluZXIgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0Nh bmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwKLSsgICAgICA6OnJ1c3Q6OlN0ciBpbWdyZWYs IDo6cnVzdDo6U3RyIGRpZ2VzdF9vdmVycmlkZSwKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3Vh cmQkdW5kbyg6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkIGNvbnN0ICZzZWxmKSBub2V4Y2Vw dDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b250YWluZXJfcHJ1bmUgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNv bnN0ICZzeXNyb290LAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZv ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV9maWxlc3lzdGVtX3NjcmlwdF9wcmVwKDo6c3RkOjpp bnQzMl90IHJvb3RmcywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3Jp cHRQcmVwPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJHVuZG8oOjpycG1v c3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwICZzZWxmKSBub2V4Y2VwdDsKLS0KLS06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVuX2RlcG1vZCg6 OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlN0ciBrdmVyLCBib29sIHVuaWZpZWRf Y29yZSkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHJ1bl9zeXN1c2Vycyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCBib29s IGZvcmNlKSBub2V4Y2VwdDsKLS0KLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRs b2dfdHJlZWZpbGUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0Zikgbm9leGNlcHQ7 Ci0tCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfY29udGFpbmVyX2ltYWdl X3JlZmVyZW5jZSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKLS0KLS1ib29sIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5j ZSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKLS0KLS06OnJwbW9zdHJlZWN4eDo6UmVm c3BlY1R5cGUgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJlZnNwZWNfY2xhc3NpZnkoOjpy dXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHZlcmlmeV9rZXJuZWxfaG1hYyg6OnN0ZDo6aW50MzJf dCByb290ZnMsIDo6cnVzdDo6U3RyIG1vZGRpcikgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1z KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcnBtcywgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVyX3JwbV9yYXdfZmRzKDo6cnVz dDo6VmVjPDo6c3RkOjppbnQzMl90PiAqZmRzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g KnJldHVybiQpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb21taXRfaGFzX21hdGNoaW5nX3NlcG9saWN5KDo6cnBtb3N0cmVl Y3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU2VQb2xp Y3kgY29uc3QgJnBvbGljeSwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9oZWFkZXJfdmFyaWFu dCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgY2Fj aGVicmFuY2gsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0Owot LQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21w b3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICphcmdzKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9pbWFnZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gKmFyZ3MpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Jvb3Rmc19lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFy Z2V0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZidWlsZF9yZXBvLCA6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmdGFyZ2V0X3JlcG8pIG5vZXhjZXB0OwotLQotLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3By ZXBhcmVfcm9vdGZzKDo6c3RkOjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50MzJf dCBkZXN0X3Jvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUpIG5v ZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZGZkKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZk LCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLCA6OnJ1c3Q6OlN0ciBuZXh0X3Zl cnNpb24sIGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKLS0KLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5h bF9wcmUoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZ0cmVlZmlsZSkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVl ZmlsZSkgbm9leGNlcHQ7Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNvbnZlcnRfdmFyX3RvX3RtcGZpbGVzX2QoOjpzdGQ6OmludDMyX3Qgcm9v dGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUp IG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRyb290ZnNfcHJlcGFyZV9saW5rcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlLCBib29sIHNraXBfdXNybG9j YWwpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCR3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFiZWxpbmcoOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUp IG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRwb3N0cHJvY2Vzc19jbGVhbnVwX3JwbWRiKDo6c3RkOjppbnQzMl90IHJvb3Rmc19k ZmQpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRyZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQoOjpzdGQ6OmludDMyX3Qgcm9vdGZz X2RmZCwgYm9vbCBub3JtYWxpemUpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJlY3Rvcnlfc2l6ZSg6OnN0ZDo6aW50MzJf dCBkZmQsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6 OnN0ZDo6dWludDY0X3QgKnJldHVybiQpIG5vZXhjZXB0OwotLQotLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfcmVidWlsZCg6OnJ1c3Q6 OlN0ciB0cmVlZmlsZSkgbm9leGNlcHQgewotLSAgdm9pZCAoKmNvbnRhaW5lcl9yZWJ1aWxkJCko OjpydXN0OjpTdHIpID0gOjpycG1vc3RyZWVjeHg6OmNvbnRhaW5lcl9yZWJ1aWxkOwotLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2go Ci0tICAgICAgWyZdIHsKLS0gICAgICAgIGNvbnRhaW5lcl9yZWJ1aWxkJCh0cmVlZmlsZSk7Ci0t ICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVzdDo6 ZGV0YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcXVlcnlfY29udGFpbmVy X2ltYWdlX2NvbW1pdCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3Qg JnJlcG8sIDo6cnVzdDo6U3RyIGMsCi0rICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OkNvbnRhaW5lckltYWdlU3RhdGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9mb3JfaWQo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxv eV9pZCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgKipyZXR1cm4kKSBub2V4Y2Vw dDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcHVyZ2VfcmVmc3BlYyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHIgcmVmc3BlYykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQsIDo6cnVz dDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19jb250YWluZXJfdXBkYXRlICgKLSsgICAg ICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsCi0rICAgICAgOjpydXN0OjpTdHIgaW1n cmVmLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNl cHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRj R3VhcmQkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJHNp emVvZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7 Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRl cGxveW1lbnRfZ2V0X2Jhc2UoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3Qs IDo6cnVzdDo6U3RyIG9wdF9kZXBsb3lfaWQsIDo6cnVzdDo6U3RyIG9wdF9vc19uYW1lLCA6OnJw bW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfdGVt cGV0Y19ndWFyZCAoCi0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlm Zig6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0LCA6OnJwbW9zdHJlZWN4 eDo6RXhwb3J0ZWRNYW5pZmVzdERpZmYgY29uc3QgJmRpZmYpIG5vZXhjZXB0OwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3Vh cmQkdW5kbyAoOjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCBjb25zdCAmc2VsZikgbm9leGNl cHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRhZW1vbl9zYW5pdHljaGVja19lbnZpcm9ubWVudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lz cm9vdCBjb25zdCAmc3lzcm9vdCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV9maWxlc3lzdGVtX3NjcmlwdF9wcmVw ICgKLSsgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZ2VuZXJhdGVfaWQoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnVzdDo6U3Ry aW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCR1bmRvICgKLSsgICAgICA6 OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgJnNlbGYpIG5vZXhjZXB0OwotIAot LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lt ZW50X3BvcHVsYXRlX3ZhcmlhbnQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3Qg JnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3lt ZW50LCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KSBub2V4Y2VwdDsK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5f ZGVwbW9kICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGt2 ZXIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9iYXNlbGF5ZXJf cmVmcyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5fc3lzdXNlcnMgKDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlKSBub2V4Y2VwdDsKLSAKLS06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyaWFudF9hZGRf cmVtb3RlX3N0YXR1cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpy dXN0OjpTdHIgcmVmc3BlYywgOjpydXN0OjpTdHIgYmFzZV9jaGVja3N1bSwgOjpycG1vc3RyZWVj eHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2dfdHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmdGYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0KDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9z dHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCwgOjpycG1vc3RyZWVjeHg6OkRlcGxveW1l bnRMYXllcmVkTWV0YSAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNlICg6OnJ1c3Q6OlN0ciBy ZWZzcGVjKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2FkKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVu dCBjb25zdCAmZGVwbG95bWVudCwgOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0 YSAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkaXNfY29udGFpbmVyX2ltYWdlX2RpZ2VzdF9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJl ZnNwZWMpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRwYXJzZV9vdmVycmlkZV9zb3VyY2UoOjpydXN0OjpTdHIgc291cmNlLCA6 OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0rICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5cGUKLSsgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRyZWZzcGVjX2NsYXNzaWZ5ICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2Vw dDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cGFyc2VfcmV2aXNpb24oOjpydXN0OjpTdHIgc291cmNlLCA6OnJwbW9zdHJlZWN4eDo6UGFyc2Vk UmV2aXNpb24gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHZlcmlmeV9rZXJuZWxfaG1hYyAoOjpzdGQ6OmludDMy X3Qgcm9vdGZzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgbW9kZGlyKSBub2V4Y2VwdDsK LSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2Vu ZXJhdGVfb2JqZWN0X3BhdGgoOjpydXN0OjpTdHIgYmFzZSwgOjpydXN0OjpTdHIgbmV4dF9zZWdt ZW50LCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9y cG1zICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJwbXMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGZhaWxwb2ludCg6OnJ1c3Q6OlN0ciBwKSBub2V4Y2Vw dDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ckZsYWdzJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3IkYWxpZ25vZigp IG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1fcmF3X2ZkcyAoCi0rICAgICAgOjpydXN0OjpWZWM8 OjpzdGQ6OmludDMyX3Q+ICpmZHMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJu JCkgbm9leGNlcHQ7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKnJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5KCkgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29tbWl0X2hhc19tYXRjaGluZ19zZXBvbGljeSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6 OkdWYXJpYW50IGNvbnN0ICZjb21taXQsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBj b25zdCAmcG9saWN5LAotKyAgICAgIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3MkaXNfaW1hX2VuYWJs ZWQoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgY29uc3QgJnNlbGYpIG5vZXhjZXB0 OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVy JG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Z2V0X2hlYWRlcl92YXJpYW50ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVw bywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnVzdDo6U3RyIGNhY2hlYnJhbmNoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHJwbV9pbXBvcnRlcl9uZXcoOjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVzdDo6U3RyIG9z dHJlZV9icmFuY2gsIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0ICZmbGFn cywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPiAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29tcG9zZV9idWlsZF9jaHVua2VkX29jaV9lbnRyeXBvaW50ICgKLSsgICAgICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUo OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgot KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfaW1hZ2UgKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiAqYXJncykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkb3N0cmVlX2JyYW5jaCg6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b21wb3NlX3Jvb3Rmc19lbnRyeXBvaW50ICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gKmFyZ3MpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFJwbUltcG9ydGVyJHBrZ19uYW1lKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25z dCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpZ3VyZV9idWlsZF9y ZXBvX2Zyb21fdGFyZ2V0ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25z dCAmYnVpbGRfcmVwbywKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm dGFyZ2V0X3JlcG8pIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19hcmVfZmlsdGVyZWQoOjpycG1vc3RyZWVjeHg6OlJw bUltcG9ydGVyIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wcmVwYXJlX3Jvb3RmcyAo OjpzdGQ6OmludDMyX3Qgc3JjX3Jvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OmludDMyX3QgZGVzdF9yb290ZnNf ZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUpIG5vZXhjZXB0OwotIAotLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19pbnNl cnQoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoKSBu b2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29tcG9zZXBvc3RfbnNzd2l0Y2hfYWx0ZmlsZXMgKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFJwbUltcG9ydGVyJGRvY19maWxlc19jb250YWlucyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nl c3MgKAotKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6U3RyIG5leHRfdmVyc2lvbiwKLSsgICAgICBib29s IHVuaWZpZWRfY29yZSkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2luc2VydCg6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50NjRfdCBpbmRl eCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUgKAotKyAgICAgIDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZp bGUpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJHJwbWZpX292ZXJyaWRlc19jb250YWlucyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nl c3NfZmluYWwgKAotKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpIG5vZXhjZXB0OwotIAotLTo6c3RkOjp1aW50 NjRfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJp ZGVzX2dldCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6 U3RyIHBhdGgpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNvbnZlcnRfdmFyX3RvX3RtcGZpbGVzX2QgKAotKyAgICAgIDo6c3Rk OjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3Qg JmNhbmNlbGxhYmxlKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1JbXBvcnRlciRpc19pbWFfZW5hYmxlZCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXIgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyb290ZnNfcHJlcGFyZV9saW5rcyAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBza2lwX3VzcmxvY2FsKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRScG1JbXBvcnRlciR0d2Vha19pbXBvcnRlZF9maWxlX2luZm8oOjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNv bnN0ICZmaWxlX2luZm8pIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyAo Ci0rICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5j ZWxsYWJsZSAmY2FuY2VsbGFibGUpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRpc19maWxlX2ZpbHRlcmVk KDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0 aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCBib29sICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYiAoOjpzdGQ6OmludDMyX3Qg cm9vdGZzX2RmZCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRy eSg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIGFic19wYXRo LCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3Ry IHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXdyaXRlX3JwbWRi X2Zvcl90YXJnZXQgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZSkg bm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0 ZXIkaGFzX3RtcGZpbGVzX2VudHJpZXMoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0 ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkZGlyZWN0b3J5X3NpemUgKDo6c3RkOjppbnQzMl90IGRmZCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVj eHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjp1aW50NjRfdCAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIk c2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNv bnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9y ZWJ1aWxkICg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSkgbm9leGNlcHQKLSsgIHsKLSsgICAgdm9pZCAo KmNvbnRhaW5lcl9yZWJ1aWxkJCkgKDo6cnVzdDo6U3RyKSA9IDo6cnBtb3N0cmVlY3h4Ojpjb250 YWluZXJfcmVidWlsZDsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotKyAgICA6 OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAgICAgewot KyAgICAgICAgICAgIGNvbnRhaW5lcl9yZWJ1aWxkJCAodHJlZWZpbGUpOwotKyAgICAgICAgICAg IHRocm93JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAgICB9LAotKyAgICAgICAgOjpydXN0Ojpk ZXRhaWw6OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1cm4gdGhyb3ckOwotKyAgfQotIAotLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0bXBmaWxlc190 cmFuc2xhdGUoOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8g Y29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3Vw bmFtZSwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZm9yX2lkICgK LSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpT dHIgZGVwbG95X2lkLAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICoq cmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGFwcGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8oOjpzdGQ6OmludDMyX3Qg ZmQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2NoZWNrc3VtX2Zvcl9pZCAoOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGRlcGxveV9pZCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy dXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSg6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVzLCA6OnJwbW9zdHJlZWN4eDo6 R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSwgOjpzdGQ6OmludDMyX3QgKnJldHVybiQpIG5vZXhj ZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRlcGxveW1lbnRfZ2V0X2Jhc2UgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNy b290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBvcHRfZGVwbG95X2lkLCA6OnJ1c3Q6OlN0ciBvcHRf b3NfbmFtZSwKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqKnJldHVy biQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGpvdXJu YWxfcHJpbnRfc3RhZ2luZ19mYWlsdXJlKCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2FkZF9tYW5pZmVzdF9kaWZmICgKLSsgICAgICA6 OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0LAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpFeHBvcnRlZE1hbmlmZXN0RGlmZiBjb25zdCAmZGlmZikgbm9leGNlcHQ7Ci0gCi0t dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl90 YXNrKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25tZW50 ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkg bm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9w cm9ncmVzc19iZWdpbl9uX2l0ZW1zKDo6cnVzdDo6U3RyIG1zZywgOjpzdGQ6OnVpbnQ2NF90IG4p IG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVu dF9nZW5lcmF0ZV9pZCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQg Y29uc3QgJmRlcGxveW1lbnQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAK LS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2lu X3BlcmNlbnQoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X3BvcHVsYXRlX3Zhcmlh bnQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290 LAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3lt ZW50LAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpIG5v ZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJv Z3Jlc3Nfc2V0X21lc3NhZ2UoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9iYXNlbGF5 ZXJfcmVmcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5 c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSBub2V4Y2VwdDsK LSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3Nl dF9zdWJfbWVzc2FnZSg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHZhcmlhbnRfYWRkX3JlbW90ZV9z dGF0dXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6 OnJ1c3Q6OlN0ciByZWZzcGVjLCA6OnJ1c3Q6OlN0ciBiYXNlX2NoZWNrc3VtLAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpIG5vZXhjZXB0OwotIAotLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfdXBkYXRlKDo6 c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0 ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95 bWVudCwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZjb21taXQsCi0rICAgICAgOjpy cG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0g Ci0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19lbmQo OjpydXN0OjpTdHIgc3VmZml4KSBub2V4Y2VwdDsKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRIaXN0b3J5RW50cnkkb3BlcmF0b3IkZXEoSGlzdG9yeUVudHJ5IGNvbnN0ICYsIEhp c3RvcnlFbnRyeSBjb25zdCAmKSBub2V4Y2VwdDsKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRIaXN0b3J5RW50cnkkb3BlcmF0b3IkbmUoSGlzdG9yeUVudHJ5IGNvbnN0ICYsIEhp c3RvcnlFbnRyeSBjb25zdCAmKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0Owot LTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkb3Bl cmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfbG9hZCAoCi0rICAg ICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LAotKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpEZXBsb3ltZW50TGF5ZXJlZE1ldGEgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X2N0eF9u ZXcoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHg+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRwYXJzZV9vdmVycmlkZV9zb3VyY2UgKAotKyAgICAgIDo6cnVzdDo6U3RyIHNvdXJjZSwgOjpy cG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UgKnJldHVybiQpIG5vZXhjZXB0 OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRI aXN0b3J5Q3R4JG5leHRfZW50cnkoOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggJnNlbGYsIDo6 cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXJzZV9yZXZp c2lvbiAoOjpydXN0OjpTdHIgc291cmNlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb24gKnJldHVybiQp IG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRoaXN0b3J5X3BydW5lKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNl cHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5k bGUkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvRW50ZXJHdWFyZCRvcGVyYXRvciRzaXplb2YoKSBub2V4 Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0Vu dGVyR3VhcmQkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9vYmplY3RfcGF0 aCAoOjpydXN0OjpTdHIgYmFzZSwgOjpydXN0OjpTdHIgbmV4dF9zZWdtZW50LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmlu ZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICpy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG9raW9faGFuZGxlX2dldCgpIG5vZXhjZXB0Owot KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGZhaWxw b2ludCAoOjpydXN0OjpTdHIgcCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJG9wZXJhdG9yJHNpemVvZiAoKSBu b2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9z dHJlZWN4eDo6VG9raW9FbnRlckd1YXJkICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9r aW9IYW5kbGUkZW50ZXIoOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlIGNvbnN0ICZzZWxmKSBu b2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICoKLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5ICgpIG5v ZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNjcmlwdF9pc19p Z25vcmVkKDo6cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LCBib29sIHVzZV9rZXJu ZWxfaW5zdGFsbCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRScG1JbXBvcnRlckZsYWdzJGlzX2ltYV9lbmFibGVkICgKLSsgICAgICA6OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXJGbGFncyBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRzaXpl b2YgKCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OwotIAotLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0ZXN0dXRpbHNfZW50 cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3YpIG5vZXhjZXB0OwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBv cnRlcl9uZXcgKAotKyAgICAgIDo6cnVzdDo6U3RyIHBrZ19uYW1lLCA6OnJ1c3Q6OlN0ciBvc3Ry ZWVfYnJhbmNoLAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0 ICZmbGFncywKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRtYXliZV9zaGVsbF9xdW90ZSg6OnJ1c3Q6OlN0ciBpbnB1dCwgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OwotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlZnNw ZWMkb3BlcmF0b3IkZXEoUmVmc3BlYyBjb25zdCAmLCBSZWZzcGVjIGNvbnN0ICYpIG5vZXhjZXB0 OwotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JE92ZXJyaWRlUmVwbGFjZW1lbnQk b3BlcmF0b3IkZXEoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmLCBPdmVycmlkZVJlcGxhY2Vt ZW50IGNvbnN0ICYpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OwotLTo6c3RkOjpz aXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJGFsaWdu b2YoKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpScG1JbXBvcnRlciAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXcoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6 U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRS cG1JbXBvcnRlciRvc3RyZWVfYnJhbmNoICg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29u c3QgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdf ZW1wdHkoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRw a2dfbmFtZSAoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2Zyb21fc3RyaW5nKDo6cnVz dDo6U3RyIGJ1ZiwgYm9vbCBjbGllbnQsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCAoCi0rICAgICAgOjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2Nv bXBvc2UoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19pbnNl cnQgKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAmc2VsZiwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6 U3RyIHBhdGgpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfY2xpZW50KDo6cnVzdDo6U3RyIGZpbGVuYW1l LCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1JbXBvcnRlciRkb2NfZmlsZXNfY29udGFpbnMgKAotKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7 Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRy ZWVmaWxlX25ld19jbGllbnRfZnJvbV9ldGMoOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVz X2luc2VydCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLCA6OnJ1 c3Q6OlN0ciBwYXRoLCA6OnN0ZDo6dWludDY0X3QgaW5kZXgpIG5vZXhjZXB0OwotIAotLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9kZWxl dGVfY2xpZW50X2V0Yyg6OnN0ZDo6dWludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVz X2NvbnRhaW5zICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNl bGYsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6RmF0IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfd29ya2Rpcig6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnVpbnQ2NF90 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNf Z2V0ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6 cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotIAotLTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFzc3dkX2ZkKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1JbXBvcnRlciRpc19pbWFfZW5hYmxlZCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6 OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06OnN0ZDo6aW50MzJfdCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dyb3VwX2ZkKDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciR0d2Vha19pbXBvcnRlZF9maWxlX2luZm8gKAotKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpycG1vc3RyZWVj eHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfanNvbl9zdHJpbmcoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkaXNfZmlsZV9maWx0ZXJlZCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6 OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLAotKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgYm9vbCAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X29zdHJlZV9sYXllcnMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHRyYW5z bGF0ZV90b190bXBmaWxlc19lbnRyeSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyICZzZWxmLCA6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1lLAotKyAgICAg IDo6cnVzdDo6U3RyIGdyb3VwbmFtZSkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkaGFzX3RtcGZpbGVzX2VudHJpZXMgKAotKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2FsbF9vc3RyZWVfbGF5ZXJzKDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFJwbUltcG9ydGVyJHNlcmlhbGl6ZV90bXBmaWxlc19jb250ZW50ICgKLSsgICAgICA6OnJw bW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfcmVwb3MoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRtcGZpbGVzX3RyYW5zbGF0 ZSAoCi0rICAgICAgOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUlu Zm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUsCi0rICAgICAgOjpydXN0 OjpTdHIgZ3JvdXBuYW1lLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0t dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwZW5kX2RyYWN1dF9yYW5kb21fY3BpbyAoOjpz dGQ6OmludDMyX3QgZmQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9u X3ByZWZpeCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3Ry aW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaW5pdHJhbWZzX292ZXJsYXlfZ2VuZXJhdGUgKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZXMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpH Q2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYs IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3Rp bmcsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkam91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUgKCkgbm9leGNlcHQ7Ci0gCi0t Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICB2b2lkIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2sgKDo6 cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2FsX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jl c3NfYmVnaW5fbl9pdGVtcyAoOjpydXN0OjpTdHIgbXNnLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6dWlu dDY0X3Qgbikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9sb2NhbF9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMs IGJvb2wgYWxsb3dfZXhpc3RpbmcsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50 ICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29uc29sZV9wcm9ncmVzc19zZXRfbWVzc2FnZSAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2Vw dDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkYWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsIGJv b2wgYWxsb3dfZXhpc3RpbmcsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2Ug KDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlcyg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFj a2FnZXMsIGJvb2wgYWxsb3dfbm9lbnQsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc191cGRhdGUgKDo6 c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpP dmVycmlkZVJlcGxhY2VtZW50PiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2VuZCAoOjpydXN0OjpTdHIgc3Vm Zml4KSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3Rv cnlFbnRyeSRvcGVyYXRvciRlcSAoSGlzdG9yeUVudHJ5IGNvbnN0ICYsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcnlF bnRyeSBjb25zdCAmKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRuZSAoSGlzdG9yeUVudHJ5IGNvbnN0ICYsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEhpc3RvcnlFbnRyeSBjb25zdCAmKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhj ZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9y eUN0eCRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGlzdG9yeV9jdHhfbmV3 ICgKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gKnJldHVy biQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSAmc2VsZiwgOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgKnJlcGxhY2VtZW50 KSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRIaXN0b3J5Q3R4JG5leHRfZW50cnkgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpI aXN0b3J5Q3R4ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5ICpyZXR1cm4kKSBu b2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRy ZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAm c2VsZiwgOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGlzdG9yeV9wcnVuZSAoKSBub2V4Y2Vw dDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvSGFu ZGxlJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvSGFuZGxlJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9l eGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tp b0VudGVyR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVf dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJGFs aWdub2YgKCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJl dHVybiQpIG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICpycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG9raW9faGFuZGxlX2dldCAoKSBub2V4Y2VwdDsKLSAKLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzKSBub2V4Y2Vw dDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKgotKyAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRva2lvSGFuZGxlJGVudGVyICg6OnJwbW9zdHJlZWN4eDo6VG9raW9I YW5kbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4 Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNjcmlwdF9pc19pZ25v cmVkICg6OnJ1c3Q6OlN0ciBwa2csIDo6cnVzdDo6U3RyIHNjcmlwdCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9rZXJuZWxf aW5zdGFsbCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHRlc3R1dGlsc19lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gKmFyZ3YpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpwYWNrYWdlcykgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRtYXliZV9zaGVsbF9xdW90ZSAoOjpydXN0OjpTdHIgaW5wdXQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJl dHVybiQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVm c3BlYyRvcGVyYXRvciRlcSAoUmVmc3BlYyBjb25zdCAmLCBSZWZzcGVjIGNvbnN0ICYpIG5vZXhj ZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkT3ZlcnJpZGVSZXBsYWNl bWVudCRvcGVyYXRvciRlcSAoCi0rICAgICAgT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmLCBP dmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0b3Ikc2l6ZW9mICgpIG5v ZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkb3BlcmF0b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR0cmVlZmlsZV9uZXcgKAotKyAgICAgIDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0 ciBiYXNlYXJjaCwKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlX25hbWUoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBuYW1lKSBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmls ZV9uZXdfZW1wdHkgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZT4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfb3ZlcnJpZGVzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2Zyb21fc3RyaW5nICgKLSsgICAgICA6OnJ1c3Q6 OlN0ciBidWYsIGJvb2wgY2xpZW50LCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRyZW1vdmVfYWxsX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NvbXBvc2UgKAotKyAgICAgIDo6cnVzdDo6U3Ry IGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXhjbHVkZV9wYWNrYWdlcyg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudCAoCi0rICAgICAgOjpydXN0 OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLAotKyAgICAgIDo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wbGF0Zm9ybV9tb2R1bGUo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0 dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0YyAoCi0rICAgICAgOjpydXN0 OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJl dHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9pbnN0YWxsX2xhbmdzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm c2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJl ZWZpbGVfZGVsZXRlX2NsaWVudF9ldGMgKDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZm9ybWF0 X2luc3RhbGxfbGFuZ3NfbWFjcm8oOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OkZh dAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF93b3JrZGlyICg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NrZmlsZV9yZXBvcyg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6aW50MzJfdAotKyAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYXNzd2RfZmQgKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpGYXQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWYoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjppbnQzMl90Ci0rICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dyb3VwX2ZkICg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3cmFwKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfanNvbl9zdHJpbmcgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0Owot IAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3cmFw X2JpbmFyaWVzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVfbGF5ZXJzICgKLSsgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkc2V0X2NsaXdyYXAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZz ZWxmLCBib29sIGVuYWJsZWQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfY29udGFpbmVyX2NtZCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf YWxsX29zdHJlZV9sYXllcnMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsK LSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVhZG9u bHlfZXhlY3V0YWJsZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKLSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRn ZXRfcmVwb3MgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2RvY3VtZW50YXRpb24oOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXMgKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X3JlY29tbWVuZHMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRyZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9uX3ByZWZpeCAoCi0rICAgICAgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJu JCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3NlbGludXgoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNl bGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd19leGlzdGlu ZywgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3N5c3VzZXJzX2lzX2ZvcmNlZCg6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgYm9vbAotKyAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlcyAoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06OnN0ZDo6dWludDMyX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24o OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NhbF9wYWNrYWdlcyAo Ci0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ncGdfa2V5KDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0Owot KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGFkZF9sb2NhbF9wYWNrYWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzLCBib29sIGFsbG93 X2V4aXN0aW5nLAotKyAgICAgIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hdXRvbWF0aWNfdmVyc2lvbl9z dWZmaXgoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmlu ZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICgKLSsgICAgICA6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2NvbnRhaW5lcig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMg KAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICpwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZywKLSsgICAgICBib29s ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfbWFjaGluZWlkX2NvbXBhdCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZXMgKDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFj a2FnZXMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIGFsbG93X25vZW50LCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXRjX2dyb3VwX21l bWJlcnMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICA6OnJ1 c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gKnJldHVybiQpIG5v ZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9ib290X2xvY2F0aW9uX2lzX21vZHVsZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICgKLSsgICAgICA6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHVzZV9rZXJuZWxfaW5zdGFsbCg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2Ug KAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpycG1vc3RyZWVjeHg6 Ok92ZXJyaWRlUmVwbGFjZW1lbnQgKnJlcGxhY2VtZW50KSBub2V4Y2VwdDsKLSAKLS1ib29sIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW1hKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlICgK LSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2th Z2UpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9yZWxlYXNldmVyKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwg OjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9j YWwgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9zdHJl ZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9s b2NhbCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9zdHJlZWN4 eDo6QWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90YXJnZXQoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwg KAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgcGFj a2FnZSkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkcnBtZGJfYmFja2VuZF9pc190YXJnZXQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUgKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRzaG91bGRfbm9ybWFsaXplX3JwbWRiKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92 ZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9zdHJlZWN4eDo6 T3B0VXNyTG9jYWwgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcHRf dXNybG9jYWwoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsK LSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNr YWdlX292ZXJyaWRlX3JlbW92ZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZz ZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4KDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGFja2FnZSwgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1v dmVfbmFtZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlN0ciBuYW1lKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NoZWNrc3VtKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnJlcG8sIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfb3ZlcnJpZGVzICgK LSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OwotIAotLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVfcmVmKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVy biQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkcmVtb3ZlX2FsbF9wYWNrYWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl ICZzZWxmKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OkZhdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9leGNsdWRlX3BhY2thZ2VzICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkY2xlYXJfcmVwb19wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg JnNlbGYpIG5vZXhjZXB0OwotKyAgdm9pZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9wbGF0Zm9ybV9tb2R1bGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0t dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJldHR5cHJpbnRfanNv bl9zdGRvdXQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsK LSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbnN0YWxs X2xhbmdzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZGVwcmVjYXRpb25fd2Fy bmluZ3MoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsg IHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGZvcm1hdF9pbnN0YWxs X2xhbmdzX21hY3JvICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmludF9leHBlcmltZW50YWxfbm90aWNlcyg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2tmaWxlX3JlcG9zICgK LSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNhbml0eWNoZWNrX2V4 dGVybmFscyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0Owot KyAgOjpydXN0OjpyZXByOjpGYXQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfcmVmICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhj ZXB0OwotIAotLTo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICpycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW1wb3J0ZXJfZmxhZ3MoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBwa2dfbmFtZSkgbm9leGNlcHQ7Ci0rICBi b29sCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NsaXdyYXAg KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHdy aXRlX3JlcG92YXJzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpzdGQ6 OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3LCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xp d3JhcF9iaW5hcmllcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAot LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRzZXRfcmVsZWFzZXZlcig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6 U3RyIHJlbGVhc2V2ZXIpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkc2V0X2NsaXdyYXAgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2Vs ZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGVuYWJsZWQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfcmVjb21tZW5kcyg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIGJvb2wgdmFsKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXJfY21kICgKLSsg ICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGVuYWJsZV9yZXBvKDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgcmVwbykgbm9leGNlcHQ7Ci0r ICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVhZG9ubHlf ZXhlY3V0YWJsZXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2Vs Zikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGRpc2FibGVfcmVwbyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg JnNlbGYsIDo6cnVzdDo6U3RyIHJlcG8pIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2RvY3VtZW50YXRpb24gKAotKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHZhbGlkYXRl X2Zvcl9jb250YWluZXIoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9y ZWNvbW1lbmRzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYp IG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9iYXNlX3JlZnNwZWMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6 OnJwbW9zdHJlZWN4eDo6UmVmc3BlYyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICBib29sCi0rICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXggKDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmViYXNlKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgbmV3X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9v cmlnaW5fdXJsLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2Vw dDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zeXN1 c2Vyc19pc19mb3JjZWQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm c2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X29yaWdpbl9jdXN0b21fdXJsKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnVp bnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51eF9s YWJlbF92ZXJzaW9uICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9vcmlnaW5fY3VzdG9tX2Rlc2NyaXB0aW9uKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dwZ19rZXkgKDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJu JCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X292ZXJyaWRlX2NvbW1pdCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNl bGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZmaXgg KAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpT dHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJHNldF9vdmVycmlkZV9jb21taXQoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY29udGFpbmVyICgKLSsgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfZXRjX2Zp bGVzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9tYWNoaW5laWRfY29tcGF0ICgKLSsgICAgICA6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19pbml0cmFtZnNfZXRjX2ZpbGVz KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICB2b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXRjX2dyb3VwX21lbWJl cnMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNr KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICpmaWxlcykgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFj ayg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqZmlsZXMpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkdXNlX2tlcm5lbF9pbnN0YWxsICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwoOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbWEgKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVsZWFzZXZlciAoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5p dHJhbWZzX2FyZ3MoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVj eHg6OlJlcG9NZXRhZGF0YVRhcmdldCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHNldF9pbml0cmFtZnNfcmVnZW5lcmF0ZSg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYsIGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICphcmdzKSBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRh dGFUYXJnZXQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYWR2 aXNvcmllc19tZXRhZGF0YV90YXJnZXQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X3VuY29uZmlndXJlZF9zdGF0ZSg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsg IGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJwbWRiX2JhY2tlbmRf aXNfdGFyZ2V0ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYp IG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JG1heV9yZXF1aXJlX2xvY2FsX2Fzc2VtYmx5KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRzaG91bGRfbm9ybWFsaXplX3JwbWRiICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19hbnlfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpPcHRVc3JM b2NhbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29wdF91c3Jsb2Nh bCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2Vw dDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkbWVyZ2VfdHJlZWZpbGUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6 OnJ1c3Q6OlN0ciB0cmVlZmlsZSwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4 ICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6 U3RyIHBhY2thZ2UsCi0rICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4k KSBub2V4Y2VwdDsKLSAKLS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfbm9faW5pdHJhbWZzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikg bm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVw b1BhY2thZ2Ukb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2Ukb3BlcmF0b3IkYWxpZ25vZigpIG5v ZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfY2hlY2tzdW0gKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6RmF0IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRnZXRfcmVwbyg6OnJwbW9zdHJlZWN4eDo6 UmVwb1BhY2thZ2UgY29uc3QgJnNlbGYpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9yZWYgKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2UkZ2V0 X3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdCAmc2VsZiwgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVw cjo6RmF0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb19wYWNr YWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkdmFyc3Vic3RpdHV0ZSg6OnJ1c3Q6OlN0ciBzLCA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJnZhcnMsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGNs ZWFyX3JlcG9fcGFja2FnZXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2Vs Zikgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2Zl YXR1cmVzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0r ICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmV0dHlwcmludF9q c29uX3N0ZG91dCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm KSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcnBt X2Jhc2VhcmNoKDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHByaW50X2RlcHJlY2F0aW9uX3dhcm5p bmdzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhj ZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRzZWFsZWRfbWVtZmQoOjpydXN0OjpTdHIgZGVzY3JpcHRpb24sIDo6cnVzdDo6U2xpY2U8Ojpz dGQ6OnVpbnQ4X3QgY29uc3Q+IGNvbnRlbnQsIDo6c3RkOjppbnQzMl90ICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHByaW50 X2V4cGVyaW1lbnRhbF9ub3RpY2VzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHJ1bm5pbmdfaW5fc3lzdGVtZCgpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNhbml0eWNoZWNrX2V4dGVy bmFscyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY2FsY3VsYXRlX2Fkdmlzb3JpZXNfZGlmZig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBj b25zdCAmcmVwbywgOjpydXN0OjpTdHIgY2hlY2tzdW1fZnJvbSwgOjpydXN0OjpTdHIgY2hlY2tz dW1fdG8sIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0OwotKyAg OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKgotKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGltcG9ydGVyX2ZsYWdzICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHBrZ19uYW1lKSBub2V4Y2VwdDsKLSAKLS12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmFuc2xhdGVfcGF0aF9mb3Jfb3N0cmVlKDo6 cnVzdDo6U3RyIHBhdGgsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkd3JpdGVfcmVwb3ZhcnMgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGdldF9saXZlX2FwcGx5X3N0YXRlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290 IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAm ZGVwbG95bWVudCwgOjpycG1vc3RyZWVjeHg6OkxpdmVBcHBseVN0YXRlICpyZXR1cm4kKSBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkc2V0X3JlbGVhc2V2ZXIgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAm c2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpTdHIgcmVsZWFzZXZlcikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhhc19saXZlX2FwcGx5X3N0YXRl KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgYm9vbCAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHNldF9yZWNvbW1lbmRzICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgdmFsKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX3N5bmNfcmVmKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZW5h YmxlX3JlcG8gKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmVwbykg bm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHRyYW5zYWN0aW9uX2FwcGx5X2xpdmUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jv b3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmdGFyZ2V0 KSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZGlzYWJsZV9yZXBvICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnJ1c3Q6OlN0ciByZXBvKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbm9ybWFsaXplX2V0Y19zaGFkb3coOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdmFsaWRhdGVfZm9yX2NvbnRh aW5lciAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4 Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcHJlcGFyZV9ycG1fbGF5ZXJpbmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnN0ZDo6aW50 MzJfdCBtZXJnZV9wYXNzd2RfZGlyLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsgIHZvaWQK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYmFzZV9yZWZzcGVj ICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OlJlZnNwZWMgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wbGV0ZV9ycG1fbGF5ZXJpbmcoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJHJlYmFzZSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6 OlN0ciBuZXdfcmVmc3BlYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGN1 c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24pIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRy aWVzKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7Ci0rICB2b2lkCi0rICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29yaWdpbl9jdXN0b21fdXJsICg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAq cmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jbGVhbnVwKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9l eGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf b3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlvbiAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0t OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVf Z3JvdXBfZXhjZXB0X3Jvb3QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gY29uc3QgJnByZXNlcnZlZF9ncm91cHMpIG5vZXhjZXB0OwotKyAgdm9pZAot KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vdmVycmlkZV9jb21t aXQgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0 cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVfcGFzc3dkX2V4Y2VwdF9yb290KDo6c3RkOjpp bnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRzZXRfb3ZlcnJpZGVfY29tbWl0ICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7Ci0gCi0t OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9j b21wb3NlX3ByZXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnRyZWVmaWxlKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzICgKLSsgICAgICA6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAq cmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jb21wb3NlX3ByZXBfcmVwbyg6OnN0ZDo6aW50MzJfdCBy b290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19jaGVja3N1bSwg Ym9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkaGFzX2luaXRyYW1mc19ldGNfZmlsZXMgKAotKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc191aWQo OjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCwgYm9vbCAqcmV0dXJuJCkg bm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRp bml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNrICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqZmlsZXMpIG5vZXhjZXB0Owot IAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJf Y29udGFpbnNfZ2lkKDo6c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQsIGJv b2wgKnJldHVybiQpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqZmls ZXMpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjaGVja19wYXNzd2RfZ3JvdXBfZW50cmllcyg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlUmVwbyBjb25zdCAmZmZpX3JlcG8sIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6U3RyIHByZXZpb3VzX3Jldikg bm9leGNlcHQ7Ci0rICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRp bml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2tfYWxsICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RkYl9vcGVuKDo6c3RkOjppbnQzMl90IHJvb3Rm cywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkREIk b3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUGFzc3dkREIkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OwotKyAg Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19y ZWdlbmVyYXRlICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYp IG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRQYXNzd2REQiRsb29rdXBfdXNlcig6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgY29u c3QgJnNlbGYsIDo6c3RkOjp1aW50MzJfdCB1aWQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9pbml0cmFtZnNfYXJncyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0Owot IAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNz d2REQiRsb29rdXBfZ3JvdXAoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCIGNvbnN0ICZzZWxmLCA6 OnN0ZDo6dWludDMyX3QgZ2lkLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0r ICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfaW5pdHJhbWZz X3JlZ2VuZXJhdGUgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgYm9v bCBlbmFibGVkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0Owot IAotLTo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICpycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkbmV3X3Bhc3N3ZF9lbnRyaWVzKCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRzaXplb2YoKSBu b2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNz d2RFbnRyaWVzJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKLSsgIHZvaWQKLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfdW5jb25maWd1cmVkX3N0YXRlICg6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJp bmcgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGFkZF9ncm91cF9jb250ZW50KDo6cnBt b3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICZzZWxmLCA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6 cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkgKAotKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRk X3Bhc3N3ZF9jb250ZW50KDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICZzZWxmLCA6OnN0 ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotKyAgYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX2FueV9wYWNrYWdlcyAoCi0r ICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKLSAK LS1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGNvbnRhaW5z X2dyb3VwKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6 OlN0ciB1c2VyKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRtZXJnZV90cmVlZmlsZSAoCi0rICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciB0cmVlZmlsZSwgYm9vbCAqcmV0 dXJuJCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFz c3dkRW50cmllcyRjb250YWluc191c2VyKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNv bnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyKSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ub19pbml0cmFtZnMgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6 c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRz aXplb2YgKCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OwotIAotLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRy aWVzJGxvb2t1cF91c2VyX2lkKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyLCA6OnN0ZDo6dWludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0 OwotKyAgOjpydXN0OjpyZXByOjpGYXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9Q YWNrYWdlJGdldF9yZXBvICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29u c3QgJnNlbGYpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGxvb2t1cF9ncm91cF9pZCg6OnJwbW9zdHJl ZWN4eDo6UGFzc3dkRW50cmllcyBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgZ3JvdXAsIDo6c3Rk Ojp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsK LS06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9w ZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJlcG9QYWNrYWdlJGdldF9wYWNrYWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6 OlJlcG9QYWNrYWdlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJl dHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRleHRlbnNpb25zX2xvYWQoOjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpT dHIgYmFzZWFyY2gsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBj b25zdCAmYmFzZV9wa2dzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4g KnJldHVybiQpIG5vZXhjZXB0OwotKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Z2V0X3JlcG9zX2RpcnMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9l eGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRn ZXRfcmVwb3MoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHZhcnN1YnN0aXR1dGUgKDo6 cnVzdDo6U3RyIHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZ2YXJz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6 U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRFeHRlbnNpb25zJGdldF9vc19leHRlbnNpb25fcGFja2FnZXMoOjpycG1vc3RyZWVj eHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAq cmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRn ZXRfZmVhdHVyZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNl cHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRf ZGV2ZWxvcG1lbnRfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNl bGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rICB2 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcnBtX2Jhc2VhcmNoICg6OnJ1c3Q6 OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkc3RhdGVfY2hlY2tzdW1fY2hhbmdl ZCg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgY2hr c3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2Vh bGVkX21lbWZkICg6OnJ1c3Q6OlN0ciBkZXNjcmlwdGlvbiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29u c3Q+IGNvbnRlbnQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnN0ZDo6aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkdXBkYXRlX3N0YXRl X2NoZWNrc3VtKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6 OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIG5vZXhjZXB0OwotKyAgYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVubmluZ19pbl9zeXN0ZW1kICgpIG5vZXhjZXB0 OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRF eHRlbnNpb25zJHNlcmlhbGl6ZV90b19kaXIoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29u c3QgJnNlbGYsIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIG5vZXhjZXB0OwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNhbGN1bGF0ZV9hZHZpc29y aWVzX2RpZmYgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBv LCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV9mcm9tLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV90bywKLSsg ICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKipyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9u cyRnZW5lcmF0ZV90cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2Vs ZiwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzcmMsIDo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3Qg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJHNpemVv ZigpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKLSsgIHZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUgKDo6cnVz dDo6U3RyIHBhdGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0g Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvY2tm aWxlX3JlYWQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlbmFtZXMsIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4gKnJldHVybiQpIG5vZXhj ZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGdldF9saXZlX2FwcGx5X3N0YXRlICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lz cm9vdCBjb25zdCAmc3lzcm9vdCwKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95 bWVudCBjb25zdCAmZGVwbG95bWVudCwKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5 U3RhdGUgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2NrZmlsZV93cml0ZSg6OnJ1c3Q6OlN0ciBmaWxlbmFt ZSwgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcGFja2FnZXMsIDo6cnBtb3N0cmVl Y3h4OjpDeHhHT2JqZWN0QXJyYXkgJnJwbW1kX3JlcG9zKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoYXNfbGl2ZV9hcHBseV9z dGF0ZSAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jv b3QsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxv eW1lbnQsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRnZXRfbG9ja2VkX3Bh Y2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyBjb25zdCAmc2VsZiwgOjpydXN0 OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+ICpyZXR1cm4kKSBub2V4Y2VwdDsK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBs eWxpdmVfc3luY19yZWYgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNv bnN0ICZzeXNyb290KSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3RvX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpH S2V5RmlsZSBjb25zdCAma2YsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4g KnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHRyYW5zYWN0aW9uX2FwcGx5X2xpdmUgKAotKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAotKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpHVmFyaWFudCBjb25zdCAmdGFyZ2V0KSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfdG9fb3JpZ2luKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYsIDo6cnBtb3N0cmVlY3h4OjpHS2V5Rmls ZSAqKnJldHVybiQpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRub3JtYWxpemVfZXRjX3NoYWRvdyAoOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJpcCg6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUg Y29uc3QgJmtmKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX3JwbV9sYXllcmluZyAoCi0rICAgICAgOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzLCA6OnN0ZDo6aW50MzJfdCBtZXJnZV9wYXNzd2RfZGlyLCBib29sICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWNo ZV9icmFuY2hfdG9fbmV2cmEoOjpydXN0OjpTdHIgbmV2cmEsIDo6cnVzdDo6U3RyaW5nICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29tcGxldGVfcnBtX2xheWVyaW5nICg6OnN0ZDo6aW50MzJfdCByb290 ZnMpIG5vZXhjZXB0OwotIAotLTo6c3RkOjp1aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkQ3h4R09iamVjdEFycmF5JGxlbmd0aCg6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFy cmF5ICZzZWxmKSBub2V4Y2VwdCB7Ci0tICA6OnN0ZDo6dWludDMyX3QgKDo6cnBtb3N0cmVlY3h4 OjpDeHhHT2JqZWN0QXJyYXk6OipsZW5ndGgkKSgpID0gJjo6cnBtb3N0cmVlY3h4OjpDeHhHT2Jq ZWN0QXJyYXk6Omxlbmd0aDsKLS0gIHJldHVybiAoc2VsZi4qbGVuZ3RoJCkoKTsKLS19Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlZHVw bGljYXRlX3RtcGZpbGVzX2VudHJpZXMgKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7 Ci0gCi0tdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ3h4R09iamVjdEFycmF5JGdl dCg6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZzZWxmLCA6OnN0ZDo6dWludDMyX3Qg aSwgOjpycG1vc3RyZWVjeHg6OkdPYmplY3QgKipyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnJw bW9zdHJlZWN4eDo6R09iamVjdCAmKDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6Oipn ZXQkKSg6OnN0ZDo6dWludDMyX3QpID0gJjo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6 OmdldDsKLS0gIG5ldyAocmV0dXJuJCkgOjpycG1vc3RyZWVjeHg6OkdPYmplY3QgKigmKHNlbGYu KmdldCQpKGkpKTsKLS19Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkcGFzc3dkX2NsZWFudXAgKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNl cHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHV0aWxfbmV4dF92ZXJzaW9uKDo6cnVzdDo6U3RyIGF1dG9fdmVyc2lvbl9wcmVmaXgsIDo6cnVz dDo6U3RyIHZlcnNpb25fc3VmZml4LCA6OnJ1c3Q6OlN0ciBsYXN0X3ZlcnNpb24sIDo6cnVzdDo6 U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6OlN0cmluZyAoKnV0aWxfbmV4 dF92ZXJzaW9uJCkoOjpydXN0OjpTdHIsIDo6cnVzdDo6U3RyLCA6OnJ1c3Q6OlN0cikgPSA6OnJw bW9zdHJlZWN4eDo6dXRpbF9uZXh0X3ZlcnNpb247Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0 aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKLS0gICAgICBbJl0gewotLSAg ICAgICAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlN0cmluZyh1dGlsX25leHRfdmVyc2lvbiQoYXV0 b192ZXJzaW9uX3ByZWZpeCwgdmVyc2lvbl9zdWZmaXgsIGxhc3RfdmVyc2lvbikpOwotLSAgICAg ICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0tICAgICAgfSwKLS0gICAgICA6OnJ1c3Q6OmRldGFp bDo6RmFpbCh0aHJvdyQpKTsKLS0gIHJldHVybiB0aHJvdyQ7Ci0tfQotKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVfZ3JvdXBfZXhjZXB0 X3Jvb3QgKAotKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGNvbnN0ICZwcmVzZXJ2ZWRfZ3JvdXBzKSBub2V4Y2VwdDsKLSAKLS06OnN0ZDo6 aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdGVzdHV0aWxfdmFsaWRhdGVfY3h4 cnNfcGFzc3Rocm91Z2goOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIG5v ZXhjZXB0IHsKLS0gIDo6c3RkOjppbnQzMl90ICgqdGVzdHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFz c3Rocm91Z2gkKSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmKSA9IDo6cnBtb3N0 cmVlY3h4Ojp0ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaDsKLS0gIHJldHVybiB0 ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCQocmVwbyk7Ci0tfQotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtaWdyYXRlX3Bh c3N3ZF9leGNlcHRfcm9vdCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKLSAKLS12 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRlYXJseV9tYWluKCkgbm9leGNlcHQgewot LSAgdm9pZCAoKmVhcmx5X21haW4kKSgpID0gOjpycG1vc3RyZWVjeHg6OmVhcmx5X21haW47Ci0t ICBlYXJseV9tYWluJCgpOwotLX0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcCAoOjpzdGQ6OmludDMyX3Qg cm9vdGZzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUpIG5vZXhjZXB0OwotIAotLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1vc3RyZWVf bWFpbig6OnJ1c3Q6OlNsaWNlPDo6cnVzdDo6U3RyIGNvbnN0PiBhcmdzLCA6OnN0ZDo6aW50MzJf dCAqcmV0dXJuJCkgbm9leGNlcHQgewotLSAgOjpzdGQ6OmludDMyX3QgKCpycG1vc3RyZWVfbWFp biQpKDo6cnVzdDo6U2xpY2U8OjpydXN0OjpTdHIgY29uc3Q+KSA9IDo6cnBtb3N0cmVlY3h4Ojpy cG1vc3RyZWVfbWFpbjsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLS0gIDo6cnVz dDo6YmVoYXZpb3I6OnRyeWNhdGNoKAotLSAgICAgIFsmXSB7Ci0tICAgICAgICBuZXcgKHJldHVy biQpIDo6c3RkOjppbnQzMl90KHJwbW9zdHJlZV9tYWluJChhcmdzKSk7Ci0tICAgICAgICB0aHJv dyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWls KHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcF9yZXBvICgK LSsgICAgICA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAm dHJlZWZpbGUsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8s IDo6cnVzdDo6U3RyIHByZXZpb3VzX2NoZWNrc3VtLAotKyAgICAgIGJvb2wgdW5pZmllZF9jb3Jl KSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1vc3Ry ZWVfcHJvY2Vzc19nbG9iYWxfdGVhcmRvd24oKSBub2V4Y2VwdCB7Ci0tICB2b2lkICgqcnBtb3N0 cmVlX3Byb2Nlc3NfZ2xvYmFsX3RlYXJkb3duJCkoKSA9IDo6cnBtb3N0cmVlY3h4OjpycG1vc3Ry ZWVfcHJvY2Vzc19nbG9iYWxfdGVhcmRvd247Ci0tICBycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxf dGVhcmRvd24kKCk7Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc191aWQgKDo6c3RkOjppbnQzMl90IGRpcmZkLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6c3RkOjp1aW50MzJfdCBpZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpyZXR1cm4k KSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY191bml0X3Rlc3RzKCkgbm9leGNlcHQgewotLSAgdm9pZCAoKmNfdW5pdF90ZXN0 cyQpKCkgPSA6OnJwbW9zdHJlZWN4eDo6Y191bml0X3Rlc3RzOwotLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gdGhyb3ckOwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAgICAgWyZd IHsKLS0gICAgICAgIGNfdW5pdF90ZXN0cyQoKTsKLS0gICAgICAgIHRocm93JC5wdHIgPSBudWxs cHRyOwotLSAgICAgIH0sCi0tICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Ci0t ICByZXR1cm4gdGhyb3ckOwotLX0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRkaXJfY29udGFpbnNfZ2lkICg6OnN0ZDo6aW50MzJfdCBkaXJmZCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnN0ZDo6dWludDMyX3QgaWQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcmV0 dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNsaWVudF9yZXF1aXJlX3Jvb3QoKSBub2V4Y2VwdCB7Ci0tICB2b2lkICgq Y2xpZW50X3JlcXVpcmVfcm9vdCQpKCkgPSA6OnJwbW9zdHJlZWN4eDo6Y2xpZW50X3JlcXVpcmVf cm9vdDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLS0gIDo6cnVzdDo6YmVoYXZp b3I6OnRyeWNhdGNoKAotLSAgICAgIFsmXSB7Ci0tICAgICAgICBjbGllbnRfcmVxdWlyZV9yb290 JCgpOwotLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0tICAgICAgfSwKLS0gICAgICA6 OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKLS0gIHJldHVybiB0aHJvdyQ7Ci0tfQotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX3Bh c3N3ZF9ncm91cF9lbnRyaWVzICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBj b25zdCAmZmZpX3JlcG8sIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCi0rICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgcHJldmlvdXNfcmV2KSBu b2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkbmV3X2NsaWVudF9jb25uZWN0aW9uKDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0 aW9uICoqcmV0dXJuJCkgbm9leGNlcHQgewotLSAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3Ry ZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICgqbmV3X2NsaWVudF9jb25uZWN0aW9uJCkoKSA9IDo6 cnBtb3N0cmVlY3h4OjpuZXdfY2xpZW50X2Nvbm5lY3Rpb247Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKLS0gICAgICBbJl0g ewotLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlv biAqKG5ld19jbGllbnRfY29ubmVjdGlvbiQoKS5yZWxlYXNlKCkpOwotLSAgICAgICAgdGhyb3ck LnB0ciA9IG51bGxwdHI7Ci0tICAgICAgfSwKLS0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0 aHJvdyQpKTsKLS0gIHJldHVybiB0aHJvdyQ7Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZGRiX29wZW4gKAotKyAgICAgIDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiAq cmV0dXJuJCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRQYXNzd2REQiRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6 c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRvcGVyYXRvciRhbGln bm9mICgpIG5vZXhjZXB0OwotIAotLTo6cnBtb3N0cmVlY3h4OjpHREJ1c0Nvbm5lY3Rpb24gY29u c3QgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRDbGllbnRDb25uZWN0aW9uJGdldF9jb25u ZWN0aW9uKDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uICZzZWxmKSBub2V4Y2VwdCB7 Ci0tICA6OnJwbW9zdHJlZWN4eDo6R0RCdXNDb25uZWN0aW9uIGNvbnN0ICYoOjpycG1vc3RyZWVj eHg6OkNsaWVudENvbm5lY3Rpb246OipnZXRfY29ubmVjdGlvbiQpKCkgPSAmOjpycG1vc3RyZWVj eHg6OkNsaWVudENvbm5lY3Rpb246OmdldF9jb25uZWN0aW9uOwotLSAgcmV0dXJuICYoc2VsZi4q Z2V0X2Nvbm5lY3Rpb24kKSgpOwotLX0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBfdXNlciAoCi0rICAgICAgOjpycG1v c3RyZWVjeHg6OlBhc3N3ZERCIGNvbnN0ICZzZWxmLCA6OnN0ZDo6dWludDMyX3QgdWlkLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JENsaWVudENvbm5lY3Rpb24kdHJhbnNhY3Rpb25f Y29ubmVjdF9wcm9ncmVzc19zeW5jKDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uIGNv bnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBhZGRyZXNzKSBub2V4Y2VwdCB7Ci0tICB2b2lkICg6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjo6KnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jl c3Nfc3luYyQpKDo6cnVzdDo6U3RyKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbjo6dHJhbnNhY3Rpb25fY29ubmVjdF9wcm9ncmVzc19zeW5jOwotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gdGhyb3ckOwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAg ICAgWyZdIHsKLS0gICAgICAgIChzZWxmLip0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5 bmMkKShhZGRyZXNzKTsKLS0gICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotLSAgICAgIH0s Ci0tICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Ci0tICByZXR1cm4gdGhyb3ck OwotLX0KLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRQYXNzd2REQiRsb29rdXBfZ3JvdXAgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RE QiBjb25zdCAmc2VsZiwgOjpzdGQ6OnVpbnQzMl90IGdpZCwgOjpydXN0OjpTdHJpbmcgKnJldHVy biQpIG5vZXhjZXB0OwotIAotLTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRSUE1EaWZmJG5fcmVtb3ZlZCg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2Vs Zikgbm9leGNlcHQgewotLSAgOjpzdGQ6OmludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZm Ojoqbl9yZW1vdmVkJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6bl9yZW1v dmVkOwotLSAgcmV0dXJuIChzZWxmLipuX3JlbW92ZWQkKSgpOwotLX0KLS0KLS06OnN0ZDo6aW50 MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUlBNRGlmZiRuX2FkZGVkKDo6cnBtb3N0 cmVlY3h4OjpSUE1EaWZmIGNvbnN0ICZzZWxmKSBub2V4Y2VwdCB7Ci0tICA6OnN0ZDo6aW50MzJf dCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OipuX2FkZGVkJCkoKSBjb25zdCA9ICY6OnJwbW9z dHJlZWN4eDo6UlBNRGlmZjo6bl9hZGRlZDsKLS0gIHJldHVybiAoc2VsZi4qbl9hZGRlZCQpKCk7 Ci0tfQotLQotLTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1E aWZmJG5fbW9kaWZpZWQoOjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhj ZXB0IHsKLS0gIDo6c3RkOjppbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6Km5fbW9k aWZpZWQkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpuX21vZGlmaWVkOwot LSAgcmV0dXJuIChzZWxmLipuX21vZGlmaWVkJCkoKTsKLS19Ci0tCi0tOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbWRiX2RpZmYoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6c3RkOjpzdHJpbmcgY29uc3QgJnNyYywgOjpz dGQ6OnN0cmluZyBjb25zdCAmZGVzdCwgYm9vbCBhbGxvd19ub2VudCwgOjpycG1vc3RyZWVjeHg6 OlJQTURpZmYgKipyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UlBNRGlmZj4gKCpycG1kYl9kaWZmJCkoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVJlcG8gY29uc3QgJiwgOjpzdGQ6OnN0cmluZyBjb25zdCAmLCA6OnN0ZDo6c3RyaW5nIGNvbnN0 ICYsIGJvb2wpID0gOjpycG1vc3RyZWVjeHg6OnJwbWRiX2RpZmY7Ci0tICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKLS0gICAgICBb Jl0gewotLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiAqKHJw bWRiX2RpZmYkKHJlcG8sIHNyYywgZGVzdCwgYWxsb3dfbm9lbnQpLnJlbGVhc2UoKSk7Ci0tICAg ICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVzdDo6ZGV0 YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19Ci0rICA6OnJwbW9zdHJl ZWN4eDo6UGFzc3dkRW50cmllcyAqcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG5ld19wYXNz d2RfZW50cmllcyAoKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0Owot KyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmll cyRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJQTURpZmYkcHJpbnQoOjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3Qg JnNlbGYpIG5vZXhjZXB0IHsKLS0gIHZvaWQgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqcHJp bnQkKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpwcmludDsKLS0gIChzZWxm LipwcmludCQpKCk7Ci0tfQotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX2dyb3VwX2NvbnRlbnQgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICZzZWxmLCA6OnN0ZDo6aW50MzJfdCByb290ZnMs IDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OwotIAotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jvb3RfcGF0aCg6OnJ1c3Q6OlN0 ciBzeXNyb290X3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQg Zm9ybWF0LCA6OnN0ZDo6dWludDMyX3QgbWF4X2tleV9sZW4sIDo6cnBtb3N0cmVlY3h4OjpHQ2Fu Y2VsbGFibGUgKmNhbmNlbGxhYmxlKSBub2V4Y2VwdCB7Ci0tICB2b2lkICgqcHJpbnRfdHJlZXBr Z19kaWZmX2Zyb21fc3lzcm9vdF9wYXRoJCkoOjpydXN0OjpTdHIsIDo6cnBtb3N0cmVlY3h4OjpS cG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQsIDo6c3RkOjp1aW50MzJfdCwgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSAqKSA9IDo6cnBtb3N0cmVlY3h4OjpwcmludF90cmVlcGtnX2RpZmZfZnJv bV9zeXNyb290X3BhdGg7Ci0tICBwcmludF90cmVlcGtnX2RpZmZfZnJvbV9zeXNyb290X3BhdGgk KHN5c3Jvb3RfcGF0aCwgZm9ybWF0LCBtYXhfa2V5X2xlbiwgY2FuY2VsbGFibGUpOwotLX0KLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RF bnRyaWVzJGFkZF9wYXNzd2RfY29udGVudCAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3 ZEVudHJpZXMgJnNlbGYsIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCkg bm9leGNlcHQ7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzICpycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkcHJvZ3Jlc3NfYmVnaW5fdGFzayg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0 IHsKLS0gIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKCpwcm9n cmVzc19iZWdpbl90YXNrJCkoOjpydXN0OjpTdHIpID0gOjpycG1vc3RyZWVjeHg6OnByb2dyZXNz X2JlZ2luX3Rhc2s7Ci0tICByZXR1cm4gcHJvZ3Jlc3NfYmVnaW5fdGFzayQobXNnKS5yZWxlYXNl KCk7Ci0tfQotLQotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFByb2dyZXNzJGVu ZCg6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3MgJnNlbGYsIDo6cnVzdDo6U3RyIG1zZykgbm9leGNl cHQgewotLSAgdm9pZCAoOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzOjoqZW5kJCkoOjpydXN0OjpT dHIpID0gJjo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzczo6ZW5kOwotLSAgKHNlbGYuKmVuZCQpKG1z Zyk7Ci0tfQotLQotLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG91dHB1dF9tZXNz YWdlKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgewotLSAgdm9pZCAoKm91dHB1dF9tZXNzYWdl JCkoOjpydXN0OjpTdHIpID0gOjpycG1vc3RyZWVjeHg6Om91dHB1dF9tZXNzYWdlOwotLSAgb3V0 cHV0X21lc3NhZ2UkKG1zZyk7Ci0tfQotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRuZXZyYV90b19jYWNoZV9icmFuY2goOjpzdGQ6OnN0cmluZyBj b25zdCAmbmV2cmEsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnJ1 c3Q6OlN0cmluZyAoKm5ldnJhX3RvX2NhY2hlX2JyYW5jaCQpKDo6c3RkOjpzdHJpbmcgY29uc3Qg JikgPSA6OnJwbW9zdHJlZWN4eDo6bmV2cmFfdG9fY2FjaGVfYnJhbmNoOwotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gdGhyb3ckOwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAg ICAgWyZdIHsKLS0gICAgICAgIG5ldyAocmV0dXJuJCkgOjpydXN0OjpTdHJpbmcobmV2cmFfdG9f Y2FjaGVfYnJhbmNoJChuZXZyYSkpOwotLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0t ICAgICAgfSwKLS0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKLS0gIHJldHVy biB0aHJvdyQ7Ci0tfQotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIoOjpkbmZjeHg6OkZGSURuZlBhY2th Z2UgJnBrZywgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6 U3RyaW5nICgqZ2V0X3JlcG9kYXRhX2Noa3N1bV9yZXByJCkoOjpkbmZjeHg6OkZGSURuZlBhY2th Z2UgJikgPSA6OnJwbW9zdHJlZWN4eDo6Z2V0X3JlcG9kYXRhX2Noa3N1bV9yZXByOwotLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2go Ci0tICAgICAgWyZdIHsKLS0gICAgICAgIG5ldyAocmV0dXJuJCkgOjpydXN0OjpTdHJpbmcoZ2V0 X3JlcG9kYXRhX2Noa3N1bV9yZXByJChwa2cpKTsKLS0gICAgICAgIHRocm93JC5wdHIgPSBudWxs cHRyOwotLSAgICAgIH0sCi0tICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7Ci0t ICByZXR1cm4gdGhyb3ckOwotLX0KLSsgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFBhc3N3ZEVudHJpZXMkY29udGFpbnNfZ3JvdXAgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyKSBub2V4Y2VwdDsKLSAK LS06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtdHNf Zm9yX2NvbW1pdCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0 OjpTdHIgcmV2LCA6OnJwbW9zdHJlZWN4eDo6UnBtVHMgKipyZXR1cm4kKSBub2V4Y2VwdCB7Ci0t ICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICgqcnBtdHNfZm9yX2Nv bW1pdCQpKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICYsIDo6cnVzdDo6U3RyKSA9 IDo6cnBtb3N0cmVlY3h4OjpycG10c19mb3JfY29tbWl0OwotLSAgOjpydXN0OjpyZXByOjpQdHJM ZW4gdGhyb3ckOwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAgICAgWyZdIHsK LS0gICAgICAgIG5ldyAocmV0dXJuJCkgOjpycG1vc3RyZWVjeHg6OlJwbVRzICoocnBtdHNfZm9y X2NvbW1pdCQocmVwbywgcmV2KS5yZWxlYXNlKCkpOwotLSAgICAgICAgdGhyb3ckLnB0ciA9IG51 bGxwdHI7Ci0tICAgICAgfSwKLS0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsK LS0gIHJldHVybiB0aHJvdyQ7Ci0tfQotKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUGFzc3dkRW50cmllcyRjb250YWluc191c2VyICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 UGFzc3dkRW50cmllcyBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgdXNlcikgbm9leGNlcHQ7Ci0g Ci0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbWRi X3BhY2thZ2VfbmFtZV9saXN0KDo6c3RkOjppbnQzMl90IGRmZCwgOjpydXN0OjpTdHJpbmcgY29u c3QgKnBhdGgsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQg ewotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICgqcnBtZGJfcGFja2FnZV9uYW1lX2xp c3QkKSg6OnN0ZDo6aW50MzJfdCwgOjpydXN0OjpTdHJpbmcpID0gOjpycG1vc3RyZWVjeHg6OnJw bWRiX3BhY2thZ2VfbmFtZV9saXN0OwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwot LSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAgICAgWyZdIHsKLS0gICAgICAgIG5l dyAocmV0dXJuJCkgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+KHJwbWRiX3BhY2thZ2VfbmFt ZV9saXN0JChkZmQsIDo6cnVzdDo6U3RyaW5nKDo6cnVzdDo6dW5zYWZlX2JpdGNvcHksICpwYXRo KSkpOwotLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0tICAgICAgfSwKLS0gICAgICA6 OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKLS0gIHJldHVybiB0aHJvdyQ7Ci0tfQotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVu dHJpZXMkbG9va3VwX3VzZXJfaWQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRy aWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyLAotKyAgICAgIDo6c3RkOjp1aW50MzJf dCAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRsb29rdXBfZ3JvdXBfaWQgKAotKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0 ciBncm91cCwKLSsgICAgICA6OnN0ZDo6dWludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0OwotKyAg OjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRvcGVy YXRvciRzaXplb2YgKCkgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Ci0r Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZXh0 ZW5zaW9uc19sb2FkICgKLSsgICAgICA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0ciBiYXNl YXJjaCwKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4g Y29uc3QgJmJhc2VfcGtncywKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0 ZW5zaW9ucz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1UcyRwYWNrYWdlX21ldGEoOjpycG1vc3RyZWVj eHg6OlJwbVRzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBuYW1lLCA6OnJ1c3Q6OlN0ciBhcmNo LCA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgKipyZXR1cm4kKSBub2V4Y2VwdCB7Ci0tICA6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICg6OnJwbW9zdHJl ZWN4eDo6UnBtVHM6OipwYWNrYWdlX21ldGEkKSg6OnJ1c3Q6OlN0ciwgOjpydXN0OjpTdHIpIGNv bnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpScG1Uczo6cGFja2FnZV9tZXRhOwotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gdGhyb3ckOwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAg ICAgWyZdIHsKLS0gICAgICAgIG5ldyAocmV0dXJuJCkgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VN ZXRhICooKHNlbGYuKnBhY2thZ2VfbWV0YSQpKG5hbWUsIGFyY2gpLnJlbGVhc2UoKSk7Ci0tICAg ICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAgICAgIDo6cnVzdDo6ZGV0 YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19Ci0tCi0tOjpzdGQ6OnVp bnQ2NF90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYWNrYWdlTWV0YSRzaXplKDo6cnBt b3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZikgbm9leGNlcHQgewotLSAgOjpzdGQ6 OnVpbnQ2NF90ICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OipzaXplJCkoKSBjb25zdCA9 ICY6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OnNpemU7Ci0tICByZXR1cm4gKHNlbGYuKnNp emUkKSgpOwotLX0KLS0KLS06OnN0ZDo6dWludDY0X3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFBhY2thZ2VNZXRhJGJ1aWxkdGltZSg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgY29u c3QgJnNlbGYpIG5vZXhjZXB0IHsKLS0gIDo6c3RkOjp1aW50NjRfdCAoOjpycG1vc3RyZWVjeHg6 OlBhY2thZ2VNZXRhOjoqYnVpbGR0aW1lJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGE6OmJ1aWxkdGltZTsKLS0gIHJldHVybiAoc2VsZi4qYnVpbGR0aW1lJCkoKTsKLS19 Ci0rICB2b2lkCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRf cmVwb3MgKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotKwotKyAgdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfb3NfZXh0ZW5zaW9uX3BhY2thZ2VzICgK LSsgICAgICA6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSAKLS12b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRQYWNrYWdlTWV0YSRjaGFuZ2Vsb2dzKDo6cnBtb3N0cmVlY3h4 OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ2NF90PiAq cmV0dXJuJCkgbm9leGNlcHQgewotLSAgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ2NF90PiAoOjpy cG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqY2hhbmdlbG9ncyQpKCkgY29uc3QgPSAmOjpycG1v c3RyZWVjeHg6OlBhY2thZ2VNZXRhOjpjaGFuZ2Vsb2dzOwotLSAgbmV3IChyZXR1cm4kKSA6OnJ1 c3Q6OlZlYzw6OnN0ZDo6dWludDY0X3Q+KChzZWxmLipjaGFuZ2Vsb2dzJCkoKSk7Ci0tfQotKyAg dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfZGV2ZWxvcG1l bnRfcGFja2FnZXMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OwotIAot LXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHNyY19wa2coOjpy cG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciAqcmV0dXJu JCkgbm9leGNlcHQgewotLSAgOjpydXN0OjpTdHIgKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0 YTo6KnNyY19wa2ckKSgpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6c3Jj X3BrZzsKLS0gIG5ldyAocmV0dXJuJCkgOjpydXN0OjpTdHIoKHNlbGYuKnNyY19wa2ckKSgpKTsK LS19Ci0tCi0tOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFBhY2thZ2VNZXRhJHByb3ZpZGVkX3BhdGhzKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBj b25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2Vw dCB7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKDo6cnBtb3N0cmVlY3h4OjpQYWNr YWdlTWV0YTo6KnByb3ZpZGVkX3BhdGhzJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGE6OnByb3ZpZGVkX3BhdGhzOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ck OwotLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCi0tICAgICAgWyZdIHsKLS0gICAgICAg IG5ldyAocmV0dXJuJCkgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+KChzZWxmLipwcm92aWRl ZF9wYXRocyQpKCkpOwotLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0tICAgICAgfSwK LS0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKLS0gIHJldHVybiB0aHJvdyQ7 Ci0tfQotLQotLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRwYWNrYWdlX3ZhcmlhbnRfbGlzdF9mb3JfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZXYsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKipyZXR1 cm4kKSBub2V4Y2VwdCB7Ci0tICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKigqcGFja2FnZV92 YXJpYW50X2xpc3RfZm9yX2NvbW1pdCQpKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0 ICYsIDo6cnVzdDo6U3RyLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICYpID0g OjpycG1vc3RyZWVjeHg6OnBhY2thZ2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQ7Ci0tICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0tICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgK LS0gICAgICBbJl0gewotLSAgICAgICAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6R1Zh cmlhbnQgKihwYWNrYWdlX3ZhcmlhbnRfbGlzdF9mb3JfY29tbWl0JChyZXBvLCByZXYsIGNhbmNl bGxhYmxlKSk7Ci0tICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLS0gICAgICB9LAotLSAg ICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwotLSAgcmV0dXJuIHRocm93JDsKLS19 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0 ZW5zaW9ucyRzdGF0ZV9jaGVja3N1bV9jaGFuZ2VkICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6 RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBv dXRwdXRfZGlyLAotKyAgICAgIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OwotKwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkdXBk YXRlX3N0YXRlX2NoZWNrc3VtICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBj b25zdCAmc2VsZiwgOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBu b2V4Y2VwdDsKLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzZXJpYWxpemVfdG9fZGlyICg6OnJwbW9zdHJlZWN4eDo6 RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIG5vZXhj ZXB0OwotKwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEV4dGVuc2lvbnMkZ2VuZXJhdGVfdHJlZWZpbGUgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNyYywKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKLSsgIDo6c3Rk OjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJh dG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2ZpbGVfcmVhZCAoCi0rICAgICAgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlbmFtZXMsCi0rICAgICAgOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rCi0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2Zp bGVfd3JpdGUgKAotKyAgICAgIDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6 Q3h4R09iamVjdEFycmF5ICZwYWNrYWdlcywKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6Q3h4R09i amVjdEFycmF5ICZycG1tZF9yZXBvcykgbm9leGNlcHQ7Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckZ2V0X2xvY2tl ZF9wYWNrYWdlcyAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnIGNvbnN0 ICZzZWxmLAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdl PiAqcmV0dXJuJCkgbm9leGNlcHQ7Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3RvX3RyZWVmaWxlICgKLSsgICAgICA6OnJwbW9z dHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVu Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfdG9fb3JpZ2luICg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlICoqcmV0 dXJuJCkgbm9leGNlcHQ7Ci0rCi0rICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRv cmlnaW5fdmFsaWRhdGVfcm91bmR0cmlwICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6R0tleUZp bGUgY29uc3QgJmtmKSBub2V4Y2VwdDsKLSsKLSsgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNhY2hlX2JyYW5jaF90b19uZXZyYSAoOjpydXN0OjpTdHIgbmV2cmEsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKLSsKLSsgIDo6c3RkOjp1aW50MzJfdAotKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEN4eEdPYmplY3RBcnJheSRsZW5ndGggKAotKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnNlbGYpIG5vZXhjZXB0Ci0rICB7 Ci0rICAgIDo6c3RkOjp1aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6 Kmxlbmd0aCQpICgpCi0rICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5 OjpsZW5ndGg7Ci0rICAgIHJldHVybiAoc2VsZi4qbGVuZ3RoJCkgKCk7Ci0rICB9Ci0rCi0rICB2 b2lkCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ3h4R09iamVjdEFycmF5JGdldCAo OjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmc2VsZiwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6dWludDMyX3QgaSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6R09iamVjdCAqKnJldHVybiQpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6cnBtb3N0 cmVlY3h4OjpHT2JqZWN0ICYoOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6KmdldCQp ICg6OnN0ZDo6dWludDMyX3QpCi0rICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVj dEFycmF5OjpnZXQ7Ci0rICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6R09iamVjdCAq KCYoc2VsZi4qZ2V0JCkgKGkpKTsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0r ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdXRpbF9uZXh0X3ZlcnNpb24gKDo6cnVzdDo6 U3RyIGF1dG9fdmVyc2lvbl9wcmVmaXgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHZlcnNpb25fc3VmZml4LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBsYXN0 X3ZlcnNpb24sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnJ1c3Q6 OlN0cmluZyAoKnV0aWxfbmV4dF92ZXJzaW9uJCkgKDo6cnVzdDo6U3RyLCA6OnJ1c3Q6OlN0ciwg OjpydXN0OjpTdHIpCi0rICAgICAgICA9IDo6cnBtb3N0cmVlY3h4Ojp1dGlsX25leHRfdmVyc2lv bjsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotKyAgICA6OnJ1c3Q6OmJlaGF2 aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAgICAgewotKyAgICAgICAgICAg IG5ldyAocmV0dXJuJCk6OnJ1c3Q6OlN0cmluZyAoCi0rICAgICAgICAgICAgICAgIHV0aWxfbmV4 dF92ZXJzaW9uJCAoYXV0b192ZXJzaW9uX3ByZWZpeCwgdmVyc2lvbl9zdWZmaXgsIGxhc3RfdmVy c2lvbikpOwotKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAgICB9 LAotKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1cm4g dGhyb3ckOwotKyAgfQotKwotKyAgOjpzdGQ6OmludDMyX3QKLSsgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCR0ZXN0dXRpbF92YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCAoCi0rICAgICAg OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIG5vZXhjZXB0Ci0rICB7Ci0r ICAgIDo6c3RkOjppbnQzMl90ICgqdGVzdHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFzc3Rocm91Z2gk KSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJikKLSsgICAgICAgID0gOjpycG1v c3RyZWVjeHg6OnRlc3R1dGlsX3ZhbGlkYXRlX2N4eHJzX3Bhc3N0aHJvdWdoOwotKyAgICByZXR1 cm4gdGVzdHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFzc3Rocm91Z2gkIChyZXBvKTsKLSsgIH0KLSsK LSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRlYXJseV9tYWluICgpIG5v ZXhjZXB0Ci0rICB7Ci0rICAgIHZvaWQgKCplYXJseV9tYWluJCkgKCkgPSA6OnJwbW9zdHJlZWN4 eDo6ZWFybHlfbWFpbjsKLSsgICAgZWFybHlfbWFpbiQgKCk7Ci0rICB9Ci0rCi0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbW9zdHJlZV9t YWluICg6OnJ1c3Q6OlNsaWNlPDo6cnVzdDo6U3RyIGNvbnN0PiBhcmdzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCAqcmV0dXJu JCkgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpzdGQ6OmludDMyX3QgKCpycG1vc3RyZWVfbWFpbiQp ICg6OnJ1c3Q6OlNsaWNlPDo6cnVzdDo6U3RyIGNvbnN0PikKLSsgICAgICAgID0gOjpycG1vc3Ry ZWVjeHg6OnJwbW9zdHJlZV9tYWluOwotKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7 Ci0rICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKLSsgICAgICAgIFsmXQotKyAgICAg ICAgICB7Ci0rICAgICAgICAgICAgbmV3IChyZXR1cm4kKTo6c3RkOjppbnQzMl90IChycG1vc3Ry ZWVfbWFpbiQgKGFyZ3MpKTsKLSsgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLSsg ICAgICAgICAgfSwKLSsgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKLSsg ICAgcmV0dXJuIHRocm93JDsKLSsgIH0KLSsKLSsgIHZvaWQKLSsgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxfdGVhcmRvd24gKCkgbm9leGNlcHQK LSsgIHsKLSsgICAgdm9pZCAoKnJwbW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93biQpICgp Ci0rICAgICAgICA9IDo6cnBtb3N0cmVlY3h4OjpycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxfdGVh cmRvd247Ci0rICAgIHJwbW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93biQgKCk7Ci0rICB9 Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNfdW5pdF90ZXN0cyAoKSBub2V4Y2VwdAotKyAgewotKyAgICB2b2lkICgqY191bml0X3Rl c3RzJCkgKCkgPSA6OnJwbW9zdHJlZWN4eDo6Y191bml0X3Rlc3RzOwotKyAgICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiB0aHJvdyQ7Ci0rICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKLSsg ICAgICAgIFsmXQotKyAgICAgICAgICB7Ci0rICAgICAgICAgICAgY191bml0X3Rlc3RzJCAoKTsK LSsgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLSsgICAgICAgICAgfSwKLSsgICAg ICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKLSsgICAgcmV0dXJuIHRocm93JDsK LSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY2xpZW50X3JlcXVpcmVfcm9vdCAoKSBub2V4Y2VwdAotKyAgewotKyAgICB2b2lk ICgqY2xpZW50X3JlcXVpcmVfcm9vdCQpICgpID0gOjpycG1vc3RyZWVjeHg6OmNsaWVudF9yZXF1 aXJlX3Jvb3Q7Ci0rICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAgOjpydXN0 OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAgIHsKLSsgICAg ICAgICAgICBjbGllbnRfcmVxdWlyZV9yb290JCAoKTsKLSsgICAgICAgICAgICB0aHJvdyQucHRy ID0gbnVsbHB0cjsKLSsgICAgICAgICAgfSwKLSsgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWls ICh0aHJvdyQpKTsKLSsgICAgcmV0dXJuIHRocm93JDsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV3X2NsaWVudF9jb25u ZWN0aW9uICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbiAqKnJldHVy biQpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpDbGllbnRDb25uZWN0aW9uPiAoKm5ld19jbGllbnRfY29ubmVjdGlvbiQpICgpCi0rICAgICAg ICA9IDo6cnBtb3N0cmVlY3h4OjpuZXdfY2xpZW50X2Nvbm5lY3Rpb247Ci0rICAgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAot KyAgICAgICAgWyZdCi0rICAgICAgICAgIHsKLSsgICAgICAgICAgICBuZXcgKHJldHVybiQpOjpy cG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24gKihuZXdfY2xpZW50X2Nvbm5lY3Rpb24kICgp LnJlbGVhc2UgKCkpOwotKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotKyAgICAg ICAgICB9LAotKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOwotKyAgICBy ZXR1cm4gdGhyb3ckOwotKyAgfQotKwotKyAgOjpycG1vc3RyZWVjeHg6OkdEQnVzQ29ubmVjdGlv biBjb25zdCAqCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ2xpZW50Q29ubmVjdGlv biRnZXRfY29ubmVjdGlvbiAoCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rp b24gJnNlbGYpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6cnBtb3N0cmVlY3h4OjpHREJ1c0Nvbm5l Y3Rpb24gY29uc3QgJig6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjo6KmdldF9jb25u ZWN0aW9uJCkgKCkKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9u OjpnZXRfY29ubmVjdGlvbjsKLSsgICAgcmV0dXJuICYoc2VsZi4qZ2V0X2Nvbm5lY3Rpb24kKSAo KTsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQ2xpZW50Q29ubmVjdGlvbiR0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNz X3N5bmMgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlN0ciBhZGRyZXNzKSBub2V4Y2VwdAotKyAgewotKyAgICB2b2lkICg6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjo6KnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jl c3Nfc3luYyQpICg6OnJ1c3Q6OlN0cikgY29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4 OjpDbGllbnRDb25uZWN0aW9uOjp0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmM7Ci0r ICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAgOjpydXN0OjpiZWhhdmlvcjo6 dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAgIHsKLSsgICAgICAgICAgICAoc2Vs Zi4qdHJhbnNhY3Rpb25fY29ubmVjdF9wcm9ncmVzc19zeW5jJCkgKGFkZHJlc3MpOwotKyAgICAg ICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAgICB9LAotKyAgICAgICAgOjpy dXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1cm4gdGhyb3ckOwotKyAgfQot KwotKyAgOjpzdGQ6OmludDMyX3QKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1E aWZmJG5fcmVtb3ZlZCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhj ZXB0Ci0rICB7Ci0rICAgIDo6c3RkOjppbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6 Km5fcmVtb3ZlZCQpICgpIGNvbnN0Ci0rICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlm Zjo6bl9yZW1vdmVkOwotKyAgICByZXR1cm4gKHNlbGYuKm5fcmVtb3ZlZCQpICgpOwotKyAgfQot KwotKyAgOjpzdGQ6OmludDMyX3QKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1E aWZmJG5fYWRkZWQgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmIGNvbnN0ICZzZWxmKSBub2V4Y2Vw dAotKyAgewotKyAgICA6OnN0ZDo6aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6Oipu X2FkZGVkJCkgKCkgY29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpu X2FkZGVkOwotKyAgICByZXR1cm4gKHNlbGYuKm5fYWRkZWQkKSAoKTsKLSsgIH0KLSsKLSsgIDo6 c3RkOjppbnQzMl90Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUlBNRGlmZiRuX21v ZGlmaWVkICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNlcHQKLSsg IHsKLSsgICAgOjpzdGQ6OmludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqbl9tb2Rp ZmllZCQpICgpIGNvbnN0Ci0rICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6bl9t b2RpZmllZDsKLSsgICAgcmV0dXJuIChzZWxmLipuX21vZGlmaWVkJCkgKCk7Ci0rICB9Ci0rCi0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJw bWRiX2RpZmYgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjpzdHJpbmcgY29uc3Qg JnNyYywgOjpzdGQ6OnN0cmluZyBjb25zdCAmZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X25vZW50LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmICoqcmV0dXJu JCkgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlJQTURpZmY+ICgqcnBtZGJfZGlmZiQpICgKLSsgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICYsIDo6c3RkOjpzdHJpbmcgY29uc3QgJiwgOjpzdGQ6OnN0cmluZyBjb25z dCAmLCBib29sKQotKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6cnBtZGJfZGlmZjsKLSsgICAg OjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwotKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnlj YXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAgICAgewotKyAgICAgICAgICAgIG5ldyAocmV0 dXJuJCk6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiAqKAotKyAgICAgICAgICAgICAgICBycG1kYl9k aWZmJCAocmVwbywgc3JjLCBkZXN0LCBhbGxvd19ub2VudCkucmVsZWFzZSAoKSk7Ci0rICAgICAg ICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0rICAgICAgICAgIH0sCi0rICAgICAgICA6OnJ1 c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7Ci0rICAgIHJldHVybiB0aHJvdyQ7Ci0rICB9Ci0r Ci0rICB2b2lkCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUlBNRGlmZiRwcmludCAo OjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0Ci0rICB7Ci0rICAg IHZvaWQgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqcHJpbnQkKSAoKSBjb25zdCA9ICY6OnJw bW9zdHJlZWN4eDo6UlBNRGlmZjo6cHJpbnQ7Ci0rICAgIChzZWxmLipwcmludCQpICgpOwotKyAg fQotKwotKyAgdm9pZAotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X3RyZWVw a2dfZGlmZl9mcm9tX3N5c3Jvb3RfcGF0aCAoCi0rICAgICAgOjpydXN0OjpTdHIgc3lzcm9vdF9w YXRoLCA6OnJwbW9zdHJlZWN4eDo6UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0IGZvcm1hdCwKLSsg ICAgICA6OnN0ZDo6dWludDMyX3QgbWF4X2tleV9sZW4sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgKmNhbmNlbGxhYmxlKSBub2V4Y2VwdAotKyAgewotKyAgICB2b2lkICgqcHJpbnRfdHJl ZXBrZ19kaWZmX2Zyb21fc3lzcm9vdF9wYXRoJCkgKDo6cnVzdDo6U3RyLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpS cG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OnVpbnQzMl90LCA6OnJwbW9zdHJlZWN4eDo6R0Nh bmNlbGxhYmxlICopCi0rICAgICAgICA9IDo6cnBtb3N0cmVlY3h4OjpwcmludF90cmVlcGtnX2Rp ZmZfZnJvbV9zeXNyb290X3BhdGg7Ci0rICAgIHByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jv b3RfcGF0aCQgKHN5c3Jvb3RfcGF0aCwgZm9ybWF0LCBtYXhfa2V5X2xlbiwgY2FuY2VsbGFibGUp OwotKyAgfQotKwotKyAgOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzICoKLSsgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRwcm9ncmVzc19iZWdpbl90YXNrICg6OnJ1c3Q6OlN0ciBtc2cpIG5v ZXhjZXB0Ci0rICB7Ci0rICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9n cmVzcz4gKCpwcm9ncmVzc19iZWdpbl90YXNrJCkgKDo6cnVzdDo6U3RyKQotKyAgICAgICAgPSA6 OnJwbW9zdHJlZWN4eDo6cHJvZ3Jlc3NfYmVnaW5fdGFzazsKLSsgICAgcmV0dXJuIHByb2dyZXNz X2JlZ2luX3Rhc2skIChtc2cpLnJlbGVhc2UgKCk7Ci0rICB9Ci0rCi0rICB2b2lkCi0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUHJvZ3Jlc3MkZW5kICg6OnJwbW9zdHJlZWN4eDo6UHJv Z3Jlc3MgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHZvaWQgKDo6cnBtb3N0cmVl Y3h4OjpQcm9ncmVzczo6KmVuZCQpICg6OnJ1c3Q6OlN0cikgPSAmOjpycG1vc3RyZWVjeHg6OlBy b2dyZXNzOjplbmQ7Ci0rICAgIChzZWxmLiplbmQkKSAobXNnKTsKLSsgIH0KLSsKLSsgIHZvaWQK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvdXRwdXRfbWVzc2FnZSAoOjpydXN0OjpT dHIgbXNnKSBub2V4Y2VwdAotKyAgewotKyAgICB2b2lkICgqb3V0cHV0X21lc3NhZ2UkKSAoOjpy dXN0OjpTdHIpID0gOjpycG1vc3RyZWVjeHg6Om91dHB1dF9tZXNzYWdlOwotKyAgICBvdXRwdXRf bWVzc2FnZSQgKG1zZyk7Ci0rICB9Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgotKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG5ldnJhX3RvX2NhY2hlX2JyYW5jaCAoOjpzdGQ6OnN0 cmluZyBjb25zdCAmbmV2cmEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQKLSsgIHsK LSsgICAgOjpydXN0OjpTdHJpbmcgKCpuZXZyYV90b19jYWNoZV9icmFuY2gkKSAoOjpzdGQ6OnN0 cmluZyBjb25zdCAmKQotKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6bmV2cmFfdG9fY2FjaGVf YnJhbmNoOwotKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Ci0rICAgIDo6cnVzdDo6 YmVoYXZpb3I6OnRyeWNhdGNoICgKLSsgICAgICAgIFsmXQotKyAgICAgICAgICB7Ci0rICAgICAg ICAgICAgbmV3IChyZXR1cm4kKTo6cnVzdDo6U3RyaW5nIChuZXZyYV90b19jYWNoZV9icmFuY2gk IChuZXZyYSkpOwotKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOwotKyAgICAgICAg ICB9LAotKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOwotKyAgICByZXR1 cm4gdGhyb3ckOwotKyAgfQotKwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KLSsgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIgKDo6ZG5mY3h4OjpG RklEbmZQYWNrYWdlICZwa2csCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQKLSsg IHsKLSsgICAgOjpydXN0OjpTdHJpbmcgKCpnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIkKSAoOjpk bmZjeHg6OkZGSURuZlBhY2thZ2UgJikKLSsgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OmdldF9y ZXBvZGF0YV9jaGtzdW1fcmVwcjsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwot KyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBbJl0KLSsgICAgICAg ICAgewotKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJ1c3Q6OlN0cmluZyAoZ2V0X3JlcG9k YXRhX2Noa3N1bV9yZXByJCAocGtnKSk7Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxw dHI7Ci0rICAgICAgICAgIH0sCi0rICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ck KSk7Ci0rICAgIHJldHVybiB0aHJvdyQ7Ci0rICB9Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl bgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbXRzX2Zvcl9jb21taXQgKDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHJldiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBt VHMgKipyZXR1cm4kKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UnBtVHM+ICgqcnBtdHNfZm9yX2NvbW1pdCQpICgKLSsgICAgICAgIDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICYsIDo6cnVzdDo6U3RyKQotKyAgICAgICAgPSA6 OnJwbW9zdHJlZWN4eDo6cnBtdHNfZm9yX2NvbW1pdDsKLSsgICAgOjpydXN0OjpyZXByOjpQdHJM ZW4gdGhyb3ckOwotKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCi0rICAgICAgICBb Jl0KLSsgICAgICAgICAgewotKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4 eDo6UnBtVHMgKihycG10c19mb3JfY29tbWl0JCAocmVwbywgcmV2KS5yZWxlYXNlICgpKTsKLSsg ICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKLSsgICAgICAgICAgfSwKLSsgICAgICAg IDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKLSsgICAgcmV0dXJuIHRocm93JDsKLSsg IH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkcnBtZGJfcGFja2FnZV9uYW1lX2xpc3QgKAotKyAgICAgIDo6c3RkOjppbnQzMl90IGRm ZCwgOjpydXN0OjpTdHJpbmcgY29uc3QgKnBhdGgsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiAqcmV0dXJuJCkgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+ICgqcnBtZGJfcGFja2FnZV9uYW1lX2xpc3QkKSAoOjpzdGQ6OmludDMyX3QsIDo6cnVzdDo6 U3RyaW5nKQotKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6cnBtZGJfcGFja2FnZV9uYW1lX2xp c3Q7Ci0rICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAgOjpydXN0OjpiZWhh dmlvcjo6dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAgIHsKLSsgICAgICAgICAg ICBuZXcgKHJldHVybiQpOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICgKLSsgICAgICAgICAg ICAgICAgcnBtZGJfcGFja2FnZV9uYW1lX2xpc3QkIChkZmQsIDo6cnVzdDo6U3RyaW5nICg6OnJ1 c3Q6OnVuc2FmZV9iaXRjb3B5LCAqcGF0aCkpKTsKLSsgICAgICAgICAgICB0aHJvdyQucHRyID0g bnVsbHB0cjsKLSsgICAgICAgICAgfSwKLSsgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0 aHJvdyQpKTsKLSsgICAgcmV0dXJuIHRocm93JDsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuCi0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtVHMkcGFja2FnZV9tZXRh ICg6OnJwbW9zdHJlZWN4eDo6UnBtVHMgY29uc3QgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBuYW1lLCA6OnJ1c3Q6 OlN0ciBhcmNoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhICoqcmV0dXJuJCkgbm9leGNlcHQKLSsg IHsKLSsgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAo OjpycG1vc3RyZWVjeHg6OlJwbVRzOjoqcGFja2FnZV9tZXRhJCkgKAotKyAgICAgICAgOjpydXN0 OjpTdHIsIDo6cnVzdDo6U3RyKSBjb25zdAotKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlJw bVRzOjpwYWNrYWdlX21ldGE7Ci0rICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsg ICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAg IHsKLSsgICAgICAgICAgICBuZXcgKHJldHVybiQpOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRh ICooCi0rICAgICAgICAgICAgICAgIChzZWxmLipwYWNrYWdlX21ldGEkKSAobmFtZSwgYXJjaCku cmVsZWFzZSAoKSk7Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0rICAgICAg ICAgIH0sCi0rICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7Ci0rICAgIHJl dHVybiB0aHJvdyQ7Ci0rICB9Ci0rCi0rICA6OnN0ZDo6dWludDY0X3QKLSsgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRQYWNrYWdlTWV0YSRzaXplICg6OnJwbW9zdHJlZWN4eDo6UGFja2Fn ZU1ldGEgY29uc3QgJnNlbGYpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6c3RkOjp1aW50NjRfdCAo OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqc2l6ZSQpICgpIGNvbnN0Ci0rICAgICAgICA9 ICY6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OnNpemU7Ci0rICAgIHJldHVybiAoc2VsZi4q c2l6ZSQpICgpOwotKyAgfQotKwotKyAgOjpzdGQ6OnVpbnQ2NF90Ci0rICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEkYnVpbGR0aW1lICgKLSsgICAgICA6OnJwbW9zdHJl ZWN4eDo6UGFja2FnZU1ldGEgY29uc3QgJnNlbGYpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6c3Rk Ojp1aW50NjRfdCAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqYnVpbGR0aW1lJCkgKCkg Y29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6YnVpbGR0aW1l OwotKyAgICByZXR1cm4gKHNlbGYuKmJ1aWxkdGltZSQpICgpOwotKyAgfQotKwotKyAgdm9pZAot KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJGNoYW5nZWxvZ3MgKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZiwgOjpydXN0OjpW ZWM8OjpzdGQ6OnVpbnQ2NF90PiAqcmV0dXJuJCkgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpydXN0 OjpWZWM8OjpzdGQ6OnVpbnQ2NF90PiAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqY2hh bmdlbG9ncyQpICgpIGNvbnN0Ci0rICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1l dGE6OmNoYW5nZWxvZ3M7Ci0rICAgIG5ldyAocmV0dXJuJCk6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWlu dDY0X3Q+ICgoc2VsZi4qY2hhbmdlbG9ncyQpICgpKTsKLSsgIH0KLSsKLSsgIHZvaWQKLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYWNrYWdlTWV0YSRzcmNfcGtnICg6OnJwbW9zdHJl ZWN4eDo6UGFja2FnZU1ldGEgY29uc3QgJnNlbGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgKnJldHVybiQpIG5vZXhjZXB0 Ci0rICB7Ci0rICAgIDo6cnVzdDo6U3RyICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6Oipz cmNfcGtnJCkgKCkgY29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0 YTo6c3JjX3BrZzsKLSsgICAgbmV3IChyZXR1cm4kKTo6cnVzdDo6U3RyICgoc2VsZi4qc3JjX3Br ZyQpICgpKTsKLSsgIH0KLSsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCi0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUGFja2FnZU1ldGEkcHJvdmlkZWRfcGF0aHMgKAotKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6KnByb3ZpZGVkX3BhdGhz JCkgKCkgY29uc3QKLSsgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6cHJv dmlkZWRfcGF0aHM7Ci0rICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAgOjpy dXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAgIHsKLSsg ICAgICAgICAgICBuZXcgKHJldHVybiQpOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICgoc2Vs Zi4qcHJvdmlkZWRfcGF0aHMkKSAoKSk7Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxw dHI7Ci0rICAgICAgICAgIH0sCi0rICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ck KSk7Ci0rICAgIHJldHVybiB0aHJvdyQ7Ci0rICB9Ci0rCi0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl bgotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhY2thZ2VfdmFyaWFudF9saXN0X2Zv cl9jb21taXQgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBv LCA6OnJ1c3Q6OlN0ciByZXYsCi0rICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBj b25zdCAmY2FuY2VsbGFibGUsIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5v ZXhjZXB0Ci0rICB7Ci0rICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKCpwYWNrYWdlX3Zh cmlhbnRfbGlzdF9mb3JfY29tbWl0JCkgKAotKyAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVJlcG8gY29uc3QgJiwgOjpydXN0OjpTdHIsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUg Y29uc3QgJikKLSsgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnBhY2thZ2VfdmFyaWFudF9saXN0 X2Zvcl9jb21taXQ7Ci0rICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKLSsgICAgOjpy dXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAotKyAgICAgICAgWyZdCi0rICAgICAgICAgIHsKLSsg ICAgICAgICAgICBuZXcgKHJldHVybiQpOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICooCi0rICAg ICAgICAgICAgICAgIHBhY2thZ2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQkIChyZXBvLCByZXYs IGNhbmNlbGxhYmxlKSk7Ci0rICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7Ci0rICAg ICAgICAgIH0sCi0rICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7Ci0rICAg IHJldHVybiB0aHJvdyQ7Ci0rICB9Ci0gfSAvLyBleHRlcm4gIkMiCi0gCi0tYm9vbCBpc19iYXJl X3NwbGl0X3hhdHRycygpIHsKLStib29sCi0raXNfYmFyZV9zcGxpdF94YXR0cnMgKCkKLSt7Ci0g ICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfYmFyZV9zcGxpdF94 YXR0cnMoJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2JhcmVfc3BsaXRfeGF0dHJz ICgmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0K LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgaXNf aHR0cF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGlzX2h0dHBfYXJnKGFyZyk7Ci0rYm9vbAotK2lzX2h0dHBfYXJn ICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRpc19odHRwX2FyZyAoYXJnKTsKLSB9Ci0gCi0tYm9vbCBpc19vc3RyZWVf Y29udGFpbmVyKCkgewotK2Jvb2wKLStpc19vc3RyZWVfY29udGFpbmVyICgpCi0rewotICAgOjpy dXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX29zdHJlZV9jb250YWluZXIo JnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX29zdHJlZV9jb250YWluZXIgKCZyZXR1 cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0 dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6 OlN5c3RlbUhvc3RUeXBlIGdldF9zeXN0ZW1faG9zdF90eXBlKCkgewotKzo6cnBtb3N0cmVlY3h4 OjpTeXN0ZW1Ib3N0VHlwZQotK2dldF9zeXN0ZW1faG9zdF90eXBlICgpCi0rewotICAgOjpydXN0 OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6U3lzdGVtSG9zdFR5cGU+IHJldHVybiQ7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkZ2V0X3N5c3RlbV9ob3N0X3R5cGUoJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdl dF9zeXN0ZW1faG9zdF90eXBlICgmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikK LSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7 Ci0gfQotIAotLXZvaWQgcmVxdWlyZV9zeXN0ZW1faG9zdF90eXBlKDo6cnBtb3N0cmVlY3h4OjpT eXN0ZW1Ib3N0VHlwZSB0KSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmVxdWlyZV9zeXN0ZW1faG9zdF90eXBlKHQpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStyZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUg KDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSB0KQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXF1aXJlX3N5c3Rl bV9ob3N0X3R5cGUgKHQpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0g fQotIAotLWJvb2wgaXNfcnBtX2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0IHsKLS0gIHJl dHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfcnBtX2FyZyhhcmcpOwotK2Jvb2wK LStpc19ycG1fYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19ycG1fYXJnIChhcmcpOwotIH0KLSAKLS12b2lk IGNsaWVudF9zdGFydF9kYWVtb24oKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50X3N0YXJ0X2RhZW1vbigpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStjbGllbnRfc3RhcnRfZGFlbW9uICgpCi0r ewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNsaWVudF9zdGFydF9kYWVtb24gKCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGNsaWVudF9o YW5kbGVfZmRfYXJndW1lbnQoOjpydXN0OjpTdHIgYXJnLCA6OnJ1c3Q6OlN0ciBhcmNoLCBib29s IGlzX3JlcGxhY2UpIHsKLSs6OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4KLStjbGllbnRfaGFu ZGxlX2ZkX2FyZ3VtZW50ICg6OnJ1c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsIGJvb2wg aXNfcmVwbGFjZSkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6c3Rk OjppbnQzMl90Pj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfaGFuZGxlX2ZkX2FyZ3VtZW50KGFyZywg YXJjaCwgaXNfcmVwbGFjZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsK LS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwot LSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9o YW5kbGVfZmRfYXJndW1lbnQgKAotKyAgICAgIGFyZywgYXJjaCwgaXNfcmVwbGFjZSwgJnJldHVy biQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBj bGllbnRfcmVuZGVyX2Rvd25sb2FkX3Byb2dyZXNzKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBj b25zdCAmcHJvZ3Jlc3MpIG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK2NsaWVudF9yZW5k ZXJfZG93bmxvYWRfcHJvZ3Jlc3MgKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmcHJv Z3Jlc3MpIG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmlu Zz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfcmVuZGVy X2Rvd25sb2FkX3Byb2dyZXNzKHByb2dyZXNzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY2xpZW50X3JlbmRlcl9kb3dubG9hZF9wcm9ncmVzcyAocHJvZ3Jlc3MsICZyZXR1cm4kLnZh bHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJv b2wgcnVubmluZ19pbl9jb250YWluZXIoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHJ1bm5pbmdfaW5fY29udGFpbmVyKCk7Ci0rYm9vbAotK3J1bm5p bmdfaW5fY29udGFpbmVyICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRydW5uaW5nX2luX2NvbnRhaW5lciAoKTsKLSB9Ci0gCi0tYm9vbCBjb25m aXJtKCkgewotK2Jvb2wKLStjb25maXJtICgpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDxi b29sPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm0oJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9y JC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbmZpcm0gKCZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0r ICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsK LSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0t dm9pZCBjb25maXJtX29yX2Fib3J0KCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm1fb3JfYWJvcnQoKTsKLS0gIGlm IChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rY29uZmlybV9vcl9hYm9ydCAoKQotK3sKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb25maXJtX29yX2Fib3J0ICgpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAg ICB9Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgQnViYmxld3JhcDo6bGF5b3V0OjpzaXplKCkgbm9l eGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JG9wZXJhdG9yJHNpemVvZigpOwotKzo6c3RkOjpzaXplX3QKLStCdWJibGV3cmFwOjpsYXlvdXQ6 OnNpemUgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90 IEJ1YmJsZXdyYXA6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3IkYWxpZ25vZigpOwotKzo6 c3RkOjpzaXplX3QKLStCdWJibGV3cmFwOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJG9wZXJhdG9y JGFsaWdub2YgKCk7Ci0gfQotIAotLXZvaWQgYnViYmxld3JhcF9zZWxmdGVzdCgpIHsKLS0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRi dWJibGV3cmFwX3NlbGZ0ZXN0KCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAot K2J1YmJsZXdyYXBfc2VsZnRlc3QgKCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9zZWxmdGVzdCAoKTsK LSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnJ1c3Q6OlZl Yzw6OnN0ZDo6dWludDhfdD4gYnViYmxld3JhcF9ydW5fc3luYyg6OnN0ZDo6aW50MzJfdCByb290 ZnNfZGZkLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MsIGJvb2wgY2Fw dHVyZV9zdGRvdXQsIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmls aXR5KSB7Ci0rOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ4X3Q+Ci0rYnViYmxld3JhcF9ydW5fc3lu YyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGNvbnN0ICZhcmdzLAotKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FwdHVyZV9zdGRvdXQs IDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5KQotK3sKLSAg IDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ4X3Q+PiByZXR1cm4k OwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGJ1YmJsZXdyYXBfcnVuX3N5bmMocm9vdGZzX2RmZCwgYXJncywgY2FwdHVyZV9zdGRv dXQsIG11dGFiaWxpdHksICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0t ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0g IH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFw X3J1bl9zeW5jICgKLSsgICAgICByb290ZnNfZGZkLCBhcmdzLCBjYXB0dXJlX3N0ZG91dCwgbXV0 YWJpbGl0eSwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwot KyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gYnViYmxld3JhcF9uZXcoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2ZkKSB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXA+Ci0rYnViYmxld3JhcF9uZXcgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19mZCkKLSt7 Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJi bGV3cmFwPj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX25ldyhyb290ZnNfZmQsICZyZXR1cm4k LnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAg ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3IChyb290ZnNfZmQs ICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQot KyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+IGJ1YmJsZXdyYXBfbmV3X3dpdGhfbXV0YWJp bGl0eSg6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQsIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFw TXV0YWJpbGl0eSBtdXRhYmlsaXR5KSB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXA+Ci0rYnViYmxld3JhcF9uZXdfd2l0aF9tdXRhYmlsaXR5ICg6OnN0ZDo6aW50MzJf dCByb290ZnNfZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSkKLSt7Ci0gICA6OnJ1c3Q6Ok1h eWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPj4gcmV0dXJu JDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRidWJibGV3cmFwX25ld193aXRoX211dGFiaWxpdHkocm9vdGZzX2ZkLCBtdXRhYmls aXR5LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1 cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9uZXdfd2l0aF9t dXRhYmlsaXR5ICgKLSsgICAgICByb290ZnNfZmQsIG11dGFiaWxpdHksICZyZXR1cm4kLnZhbHVl KTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3Rk Ojptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpzdGQ6OmludDMyX3QgQnViYmxld3Jh cDo6Z2V0X3Jvb3Rmc19mZCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRnZXRfcm9vdGZzX2ZkKCp0aGlzKTsKLSs6OnN0 ZDo6aW50MzJfdAotK0J1YmJsZXdyYXA6OmdldF9yb290ZnNfZmQgKCkgY29uc3Qgbm9leGNlcHQK LSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkZ2V0 X3Jvb3Rmc19mZCAoKnRoaXMpOwotIH0KLSAKLS12b2lkIEJ1YmJsZXdyYXA6OmFwcGVuZF9id3Jh cF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfYndyYXBfYXJnKCp0aGlzLCBhcmcpOwotK3ZvaWQK LStCdWJibGV3cmFwOjphcHBlbmRfYndyYXBfYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0 Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkYXBwZW5kX2J3 cmFwX2FyZyAoKnRoaXMsIGFyZyk7Ci0gfQotIAotLXZvaWQgQnViYmxld3JhcDo6YXBwZW5kX2No aWxkX2FyZyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRCdWJibGV3cmFwJGFwcGVuZF9jaGlsZF9hcmcoKnRoaXMsIGFyZyk7Ci0rdm9p ZAotK0J1YmJsZXdyYXA6OmFwcGVuZF9jaGlsZF9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNl cHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRf Y2hpbGRfYXJnICgqdGhpcywgYXJnKTsKLSB9Ci0gCi0tdm9pZCBCdWJibGV3cmFwOjpzZXRlbnYo OjpydXN0OjpTdHIgaywgOjpydXN0OjpTdHIgdikgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0ZW52KCp0aGlzLCBrLCB2KTsKLSt2b2lkCi0r QnViYmxld3JhcDo6c2V0ZW52ICg6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2Vw dAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHNldGVudiAo KnRoaXMsIGssIHYpOwotIH0KLSAKLS12b2lkIEJ1YmJsZXdyYXA6OnRha2VfZmQoOjpzdGQ6Omlu dDMyX3Qgc291cmNlX2ZkLCA6OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0IHsKLS0g IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2VfZmQoKnRoaXMsIHNv dXJjZV9mZCwgdGFyZ2V0X2ZkKTsKLSt2b2lkCi0rQnViYmxld3JhcDo6dGFrZV9mZCAoOjpzdGQ6 OmludDMyX3Qgc291cmNlX2ZkLCA6OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0Ci0r ewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9mZCAoKnRo aXMsIHNvdXJjZV9mZCwgdGFyZ2V0X2ZkKTsKLSB9Ci0gCi0tdm9pZCBCdWJibGV3cmFwOjpzZXRf aW5oZXJpdF9zdGRpbigpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRCdWJibGV3cmFwJHNldF9pbmhlcml0X3N0ZGluKCp0aGlzKTsKLSt2b2lkCi0rQnViYmxld3Jh cDo6c2V0X2luaGVyaXRfc3RkaW4gKCkgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXRfaW5oZXJpdF9zdGRpbiAoKnRoaXMpOwotIH0KLSAK LS12b2lkIEJ1YmJsZXdyYXA6OnRha2Vfc3RkaW5fZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2Zk KSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0 YWtlX3N0ZGluX2ZkKCp0aGlzLCBzb3VyY2VfZmQpOwotK3ZvaWQKLStCdWJibGV3cmFwOjp0YWtl X3N0ZGluX2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0Ci0rewotKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRpbl9mZCAoKnRoaXMs IHNvdXJjZV9mZCk7Ci0gfQotIAotLXZvaWQgQnViYmxld3JhcDo6dGFrZV9zdGRvdXRfZmQoOjpz dGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZG91dF9mZCgqdGhpcywgc291cmNlX2ZkKTsKLSt2 b2lkCi0rQnViYmxld3JhcDo6dGFrZV9zdGRvdXRfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9m ZCkgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3Jh cCR0YWtlX3N0ZG91dF9mZCAoKnRoaXMsIHNvdXJjZV9mZCk7Ci0gfQotIAotLXZvaWQgQnViYmxl d3JhcDo6dGFrZV9zdGRlcnJfZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdCB7 Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGVycl9m ZCgqdGhpcywgc291cmNlX2ZkKTsKLSt2b2lkCi0rQnViYmxld3JhcDo6dGFrZV9zdGRlcnJfZmQg KDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGVycl9mZCAoKnRoaXMsIHNvdXJjZV9m ZCk7Ci0gfQotIAotLXZvaWQgQnViYmxld3JhcDo6dGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCg6 OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQoKnRoaXMsIHNv dXJjZV9mZCk7Ci0rdm9pZAotK0J1YmJsZXdyYXA6OnRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQg KDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkICgqdGhp cywgc291cmNlX2ZkKTsKLSB9Ci0gCi0tdm9pZCBCdWJibGV3cmFwOjpiaW5kX3JlYWQoOjpydXN0 OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWQoKnRoaXMsIHNyYywgZGVzdCk7Ci0r dm9pZAotK0J1YmJsZXdyYXA6OmJpbmRfcmVhZCAoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0 ciBkZXN0KSBub2V4Y2VwdAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJi bGV3cmFwJGJpbmRfcmVhZCAoKnRoaXMsIHNyYywgZGVzdCk7Ci0gfQotIAotLXZvaWQgQnViYmxl d3JhcDo6YmluZF9yZWFkd3JpdGUoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBu b2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5k X3JlYWR3cml0ZSgqdGhpcywgc3JjLCBkZXN0KTsKLSt2b2lkCi0rQnViYmxld3JhcDo6YmluZF9y ZWFkd3JpdGUgKDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQKLSt7 Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWR3cml0 ZSAoKnRoaXMsIHNyYywgZGVzdCk7Ci0gfQotIAotLXZvaWQgQnViYmxld3JhcDo6c2V0dXBfY29t cGF0X3ZhcigpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHNldHVwX2NvbXBhdF92YXIoKnRoaXMpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStCdWJibGV3cmFwOjpzZXR1cF9jb21wYXRf dmFyICgpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0dXBfY29tcGF0X3ZhciAoKnRoaXMpOwotKyAg aWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgQnViYmxld3Jh cDo6cnVuKDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSB7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkQnViYmxld3JhcCRydW4oKnRoaXMsIGNhbmNlbGxhYmxlKTsKLS0gIGlmIChlcnJvciQu cHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKLS0gIH0KLSt2b2lkCi0rQnViYmxld3JhcDo6cnVuICg6OnJwbW9zdHJlZWN4eDo6R0Nh bmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRydW4gKCp0 aGlzLCBjYW5jZWxsYWJsZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0K LSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHlf Zm9yX3VuaWZpZWRfY29yZShib29sIHVuaWZpZWRfY29yZSkgbm9leGNlcHQgewotLSAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtdXRhYmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUo dW5pZmllZF9jb3JlKTsKLSs6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkKLStt dXRhYmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUgKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdAot K3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbXV0YWJpbGl0eV9mb3Jf dW5pZmllZF9jb3JlICh1bmlmaWVkX2NvcmUpOwotIH0KLSAKLS12b2lkIHVzcm92ZXJsYXlfZW50 cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpIHsKLS0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR1 c3JvdmVybGF5X2VudHJ5cG9pbnQoYXJncyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0r dm9pZAotK3Vzcm92ZXJsYXlfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGNvbnN0ICZhcmdzKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR1c3JvdmVybGF5X2VudHJ5cG9pbnQgKGFyZ3MpOwotKyAg aWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgYXBwbHlsaXZl X2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSB7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkYXBwbHlsaXZlX2VudHJ5cG9pbnQoYXJncyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9 Ci0rdm9pZAotK2FwcGx5bGl2ZV9lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gY29uc3QgJmFyZ3MpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFwcGx5bGl2ZV9lbnRyeXBvaW50IChhcmdzKTsKLSsg IGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIGFwcGx5bGl2 ZV9maW5pc2goOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIHsK LS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRhcHBseWxpdmVfZmluaXNoKHN5c3Jvb3QpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAg fQotK3ZvaWQKLSthcHBseWxpdmVfZmluaXNoICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9v dCBjb25zdCAmc3lzcm9vdCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX2ZpbmlzaCAoc3lzcm9vdCk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBjb21wb3Nl dXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5kX3J1big6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSB7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkY29tcG9zZXV0aWxfbGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4ocm9vdGZzX2RmZCk7Ci0t ICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbXBvc2V1dGlsX2xlZ2FjeV9wcmVw X2Rldl9hbmRfcnVuICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKQotK3sKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbXBvc2V1dGlsX2xlZ2FjeV9wcmVwX2Rldl9hbmRfcnVuIChyb290ZnNfZGZkKTsKLSsgIGlm IChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIHByaW50X29zdHJl ZV90eG5fc3RhdHMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG9UcmFuc2FjdGlvblN0YXRzICZz dGF0cykgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X29z dHJlZV90eG5fc3RhdHMoc3RhdHMpOwotK3ZvaWQKLStwcmludF9vc3RyZWVfdHhuX3N0YXRzICg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwb1RyYW5zYWN0aW9uU3RhdHMgJnN0YXRzKSBub2V4Y2Vw dAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmludF9vc3RyZWVfdHhuX3N0 YXRzIChzdGF0cyk7Ci0gfQotIAotLXZvaWQgd3JpdGVfY29tbWl0X2lkKDo6cnVzdDo6U3RyIHRh cmdldF9wYXRoLCA6OnJ1c3Q6OlN0ciByZXZpc2lvbikgewotLSAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHdyaXRlX2NvbW1pdF9pZCh0 YXJnZXRfcGF0aCwgcmV2aXNpb24pOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQK LSt3cml0ZV9jb21taXRfaWQgKDo6cnVzdDo6U3RyIHRhcmdldF9wYXRoLCA6OnJ1c3Q6OlN0ciBy ZXZpc2lvbikKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkd3JpdGVfY29tbWl0X2lkICh0YXJnZXRfcGF0aCwgcmV2aXNpb24p OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgY2xp d3JhcF93cml0ZV93cmFwcGVycyg6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKLS0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGl3cmFw X3dyaXRlX3dyYXBwZXJzKHJvb3Rmcyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9p ZAotK2NsaXdyYXBfd3JpdGVfd3JhcHBlcnMgKDo6c3RkOjppbnQzMl90IHJvb3RmcykKLSt7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY2xpd3JhcF93cml0ZV93cmFwcGVycyAocm9vdGZzKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIGNsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVy cyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25z dCAmYXJncykgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVycyhyb290ZnMsIGFyZ3Mp OwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStjbGl3cmFwX3dyaXRlX3NvbWVf d3JhcHBlcnMgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGNvbnN0ICZhcmdzKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAg ICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfc29tZV93cmFw cGVycyAocm9vdGZzLCBhcmdzKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBjbGl3cmFwX2Rlc3RkaXIoKSBub2V4Y2VwdCB7Ci0r OjpydXN0OjpTdHJpbmcKLStjbGl3cmFwX2Rlc3RkaXIgKCkgbm9leGNlcHQKLSt7Ci0gICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfZGVzdGRpcigmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1 cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0tfQotLQotLXZvaWQgY29udGFpbmVyX2Vu Y2Fwc3VsYXRlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKSB7Ci0tICA6OnJ1c3Q6 Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjpt b3ZlKGFyZ3MpKTsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfZW5jYXBzdWxhdGUoJmFyZ3MkLnZhbHVlKTsKLS0g IGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj bGl3cmFwX2Rlc3RkaXIgKCZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAo cmV0dXJuJC52YWx1ZSk7Ci0rfQotKwotK3ZvaWQKLStjb250YWluZXJfZW5jYXBzdWxhdGUgKDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKQotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlE cm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQgKDo6c3RkOjptb3ZlIChhcmdz KSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29udGFpbmVyX2VuY2Fwc3VsYXRlICgmYXJncyQudmFsdWUpOwotKyAgaWYgKGVy cm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgZGVwbG95X2Zyb21fc2Vs Zl9lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKSB7Ci0tICA6OnJ1 c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3Rk Ojptb3ZlKGFyZ3MpKTsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQoJmFyZ3MkLnZh bHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rZGVwbG95X2Zyb21fc2Vs Zl9lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncykKLSt7Ci0rICA6 OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkICg6 OnN0ZDo6bW92ZSAoYXJncykpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAg ICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95X2Zyb21fc2VsZl9lbnRyeXBv aW50ICgmYXJncyQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9 Ci0gfQotIAotLWJvb2wgUHJ1bmVkQ29udGFpbmVySW5mbzo6b3BlcmF0b3I9PShQcnVuZWRDb250 YWluZXJJbmZvIGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUHJ1bmVkQ29udGFpbmVySW5mbyRvcGVyYXRvciRlcSgqdGhp cywgcmhzKTsKLStib29sCi0rUHJ1bmVkQ29udGFpbmVySW5mbzo6b3BlcmF0b3I9PSAoUHJ1bmVk Q29udGFpbmVySW5mbyBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUHJ1bmVkQ29udGFpbmVySW5mbyRvcGVyYXRvciRl cSAoKnRoaXMsIHJocyk7Ci0gfQotIAotLWJvb2wgUHJ1bmVkQ29udGFpbmVySW5mbzo6b3BlcmF0 b3IhPShQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKLSti b29sCi0rUHJ1bmVkQ29udGFpbmVySW5mbzo6b3BlcmF0b3IhPSAoUHJ1bmVkQ29udGFpbmVySW5m byBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiAhKCp0aGlzID09IHJo cyk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0 YXRlPiBwdWxsX2NvbnRhaW5lcig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVw bywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVz dDo6U3RyIGltZ3JlZiwgOjpydXN0OjpTdHIgZGlnZXN0X292ZXJyaWRlKSB7Ci0rOjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+Ci0rcHVsbF9jb250YWluZXIg KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAgICAgICAgICAg ICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0 OjpTdHIgaW1ncmVmLAotKyAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJp ZGUpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHVsbF9jb250YWluZXIocmVw bywgY2FuY2VsbGFibGUsIGltZ3JlZiwgZGlnZXN0X292ZXJyaWRlLCAmcmV0dXJuJC52YWx1ZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcHVsbF9jb250YWluZXIgKAotKyAgICAgIHJlcG8sIGNhbmNlbGxhYmxl LCBpbWdyZWYsIGRpZ2VzdF9vdmVycmlkZSwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9y JC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6UHJ1bmVkQ29udGFpbmVySW5mbyBjb250 YWluZXJfcHJ1bmUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qp IHsKLSs6OnJwbW9zdHJlZWN4eDo6UHJ1bmVkQ29udGFpbmVySW5mbwotK2NvbnRhaW5lcl9wcnVu ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpCi0rewotICAg OjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6UHJ1bmVkQ29udGFpbmVySW5mbz4g cmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb250YWluZXJfcHJ1bmUoc3lzcm9vdCwgJnJldHVybiQudmFsdWUpOwot LSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udGFpbmVyX3BydW5lIChzeXNyb290LCAmcmV0dXJuJC52 YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiBxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0 KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjKSB7 Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+Ci0rcXVl cnlfY29udGFpbmVyX2ltYWdlX2NvbW1pdCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnJlcG8sIDo6cnVzdDo6U3RyIGMpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4+IHJldHVybiQ7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcXVlcnlfY29udGFpbmVyX2ltYWdlX2NvbW1pdChyZXBvLCBjLCAmcmV0dXJuJC52YWx1ZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0IChyZXBv LCBjLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAg IH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQg cHVyZ2VfcmVmc3BlYyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpy dXN0OjpTdHIgcmVmc3BlYykgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHB1cmdlX3JlZnNwZWMocmVwbywgcmVmc3BlYyk7Ci0t ICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK3B1cmdlX3JlZnNwZWMgKDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjKQotK3sK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRwdXJnZV9yZWZzcGVjIChyZXBvLCByZWZzcGVjKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS1ib29sIGNoZWNrX2NvbnRhaW5lcl91cGRhdGUoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2Fu Y2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnJ1c3Q6OlN0ciBpbWdyZWYpIHsKLStib29s Ci0rY2hlY2tfY29udGFpbmVyX3VwZGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29u c3QgJnJlcG8sCi0rICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5j ZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZikKLSt7Ci0gICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2hlY2tfY29udGFpbmVyX3Vw ZGF0ZShyZXBvLCBjYW5jZWxsYWJsZSwgaW1ncmVmLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkY2hlY2tfY29udGFpbmVyX3VwZGF0ZSAoCi0rICAgICAgcmVwbywgY2FuY2VsbGFibGUs IGltZ3JlZiwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwot KyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06 OnN0ZDo6c2l6ZV90IFRlbXBFdGNHdWFyZDo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgewotLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3Ik c2l6ZW9mKCk7Ci0rOjpzdGQ6OnNpemVfdAotK1RlbXBFdGNHdWFyZDo6bGF5b3V0OjpzaXplICgp IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1w RXRjR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IFRlbXBF dGNHdWFyZDo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVGVtcEV0Y0d1YXJkJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0 ZDo6c2l6ZV90Ci0rVGVtcEV0Y0d1YXJkOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0 b3IkYWxpZ25vZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBGaWxlc3lzdGVtU2NyaXB0UHJl cDo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRzaXplb2YoKTsKLSs6OnN0 ZDo6c2l6ZV90Ci0rRmlsZXN5c3RlbVNjcmlwdFByZXA6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2Vw dAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNj cmlwdFByZXAkb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IEZpbGVz eXN0ZW1TY3JpcHRQcmVwOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRh bGlnbm9mKCk7Ci0rOjpzdGQ6OnNpemVfdAotK0ZpbGVzeXN0ZW1TY3JpcHRQcmVwOjpsYXlvdXQ6 OmFsaWduICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRhbGlnbm9mICgpOwotIH0KLSAKLS06 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPiBwcmVwYXJlX3RlbXBldGNf Z3VhcmQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OlRlbXBFdGNHdWFyZD4KLStwcmVwYXJlX3RlbXBldGNfZ3VhcmQgKDo6c3RkOjppbnQzMl90 IHJvb3RmcykKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUZW1wRXRjR3VhcmQ+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfdGVtcGV0Y19ndWFy ZChyb290ZnMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVf dGVtcGV0Y19ndWFyZCAocm9vdGZzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0 cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1 ZSk7Ci0gfQotIAotLXZvaWQgVGVtcEV0Y0d1YXJkOjp1bmRvKCkgY29uc3QgewotLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBF dGNHdWFyZCR1bmRvKCp0aGlzKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0r VGVtcEV0Y0d1YXJkOjp1bmRvICgpIGNvbnN0Ci0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCR1bmRvICgq dGhpcyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPiBwcmVwYXJlX2Zp bGVzeXN0ZW1fc2NyaXB0X3ByZXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7Ci0rOjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPgotK3ByZXBhcmVfZmlsZXN5 c3RlbV9zY3JpcHRfcHJlcCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKQotK3sKLSAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQ cmVwPj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX2ZpbGVzeXN0ZW1fc2NyaXB0X3ByZXAocm9vdGZz LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX2ZpbGVzeXN0 ZW1fc2NyaXB0X3ByZXAgKHJvb3RmcywgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5w dHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFs dWUpOwotIH0KLSAKLS12b2lkIEZpbGVzeXN0ZW1TY3JpcHRQcmVwOjp1bmRvKCkgewotLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZp bGVzeXN0ZW1TY3JpcHRQcmVwJHVuZG8oKnRoaXMpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAg fQotK3ZvaWQKLStGaWxlc3lzdGVtU2NyaXB0UHJlcDo6dW5kbyAoKQotK3sKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lz dGVtU2NyaXB0UHJlcCR1bmRvICgqdGhpcyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBydW5fZGVwbW9kKDo6c3RkOjppbnQzMl90IHJvb3Rmc19k ZmQsIDo6cnVzdDo6U3RyIGt2ZXIsIGJvb2wgdW5pZmllZF9jb3JlKSB7Ci0tICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVuX2RlcG1v ZChyb290ZnNfZGZkLCBrdmVyLCB1bmlmaWVkX2NvcmUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsK LS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwot LSAgfQotK3ZvaWQKLStydW5fZGVwbW9kICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1 c3Q6OlN0ciBrdmVyLCBib29sIHVuaWZpZWRfY29yZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5fZGVw bW9kIChyb290ZnNfZGZkLCBrdmVyLCB1bmlmaWVkX2NvcmUpOwotKyAgaWYgKGVycm9yJC5wdHIp Ci0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgcnVuX3N5c3VzZXJzKDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsIGJvb2wgZm9yY2UpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5fc3lzdXNlcnMocm9vdGZzX2Rm ZCwgZm9yY2UpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStydW5fc3lzdXNl cnMgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgZm9yY2UpCi0rewotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9z eXN1c2VycyAocm9vdGZzX2RmZCwgZm9yY2UpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsK LSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQp OwotKyAgICB9Ci0gfQotIAotLXZvaWQgbG9nX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmdGYpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRsb2dfdHJlZWZpbGUodGYpOwotK3ZvaWQKLStsb2dfdHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmdGYpIG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGxvZ190cmVlZmlsZSAodGYpOwotIH0KLSAKLS1ib29sIGlzX2NvbnRhaW5lcl9p bWFnZV9yZWZlcmVuY2UoOjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQgewotLSAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNl KHJlZnNwZWMpOwotK2Jvb2wKLStpc19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNlICg6OnJ1c3Q6 OlN0ciByZWZzcGVjKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkaXNfY29udGFpbmVyX2ltYWdlX3JlZmVyZW5jZSAocmVmc3BlYyk7Ci0gfQotIAot LWJvb2wgaXNfY29udGFpbmVyX2ltYWdlX2RpZ2VzdF9yZWZlcmVuY2UoOjpydXN0OjpTdHIgcmVm c3BlYykgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRp c19jb250YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZShyZWZzcGVjKTsKLStib29sCi0raXNf Y29udGFpbmVyX2ltYWdlX2RpZ2VzdF9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5v ZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250 YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZSAocmVmc3BlYyk7Ci0gfQotIAotLTo6cnBtb3N0 cmVlY3h4OjpSZWZzcGVjVHlwZSByZWZzcGVjX2NsYXNzaWZ5KDo6cnVzdDo6U3RyIHJlZnNwZWMp IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmVmc3Bl Y19jbGFzc2lmeShyZWZzcGVjKTsKLSs6OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5cGUKLStyZWZz cGVjX2NsYXNzaWZ5ICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdAotK3sKLSsgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmVmc3BlY19jbGFzc2lmeSAocmVmc3BlYyk7 Ci0gfQotIAotLXZvaWQgdmVyaWZ5X2tlcm5lbF9obWFjKDo6c3RkOjppbnQzMl90IHJvb3Rmcywg OjpydXN0OjpTdHIgbW9kZGlyKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmVyaWZ5X2tlcm5lbF9obWFjKHJvb3RmcywgbW9k ZGlyKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rdmVyaWZ5X2tlcm5lbF9o bWFjICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIG1vZGRpcikKLSt7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk dmVyaWZ5X2tlcm5lbF9obWFjIChyb290ZnMsIG1vZGRpcik7Ci0rICBpZiAoZXJyb3IkLnB0cikK LSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHN0 YWdlX2NvbnRhaW5lcl9ycG1zKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBycG1zKSB7Ci0t ICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJwbXMk KDo6c3RkOjptb3ZlKHJwbXMpKTsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStzdGFn ZV9jb250YWluZXJfcnBtcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHJwbXMpCi0rewot KyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBycG1z JCAoOjpzdGQ6Om1vdmUgKHJwbXMpKTsKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1zKCZy cG1zJC52YWx1ZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQot LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2Vf Y29udGFpbmVyX3JwbXMgKCZycG1zJC52YWx1ZSwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVy cm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gc3RhZ2VfY29u dGFpbmVyX3JwbV9yYXdfZmRzKDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PiBmZHMpIHsKLS0g IDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90Pj4gZmRzJCg6 OnN0ZDo6bW92ZShmZHMpKTsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStzdGFnZV9j b250YWluZXJfcnBtX3Jhd19mZHMgKDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PiBmZHMpCi0r ewotKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+PiBm ZHMkICg6OnN0ZDo6bW92ZSAoZmRzKSk7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzdGFnZV9jb250YWluZXJfcnBtX3Jh d19mZHMoJmZkcyQudmFsdWUsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7 Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK LS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHN0YWdlX2NvbnRhaW5lcl9ycG1fcmF3X2ZkcyAoJmZkcyQudmFsdWUsICZyZXR1cm4kLnZhbHVl KTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3Rk Ojptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBjb21taXRfaGFzX21hdGNoaW5n X3NlcG9saWN5KDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0LCA6OnJwbW9z dHJlZWN4eDo6T3N0cmVlU2VQb2xpY3kgY29uc3QgJnBvbGljeSkgewotK2Jvb2wKLStjb21taXRf aGFzX21hdGNoaW5nX3NlcG9saWN5ICg6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNv bW1pdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU2VQb2xpY3kgY29uc3QgJnBvbGljeSkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJv b2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY29tbWl0X2hhc19tYXRjaGluZ19zZXBvbGljeShjb21taXQsIHBv bGljeSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tbWl0X2hhc19t YXRjaGluZ19zZXBvbGljeSAoY29tbWl0LCBwb2xpY3ksICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlm IChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChy ZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICpnZXRfaGVh ZGVyX3ZhcmlhbnQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVz dDo6U3RyIGNhY2hlYnJhbmNoKSB7Ci0rOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICoKLStnZXRf aGVhZGVyX3ZhcmlhbnQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6 OnJ1c3Q6OlN0ciBjYWNoZWJyYW5jaCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBt b3N0cmVlY3h4OjpHVmFyaWFudCAqPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9oZWFkZXJfdmFyaWFudChy ZXBvLCBjYWNoZWJyYW5jaCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsK LS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwot LSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotLX0KLS0KLS12b2lk IGNvbXBvc2VfYnVpbGRfY2h1bmtlZF9vY2lfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gYXJncykgewotLSAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+PiBhcmdzJCg6OnN0ZDo6bW92ZShhcmdzKSk7Ci0tICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9idWls ZF9jaHVua2VkX29jaV9lbnRyeXBvaW50KCZhcmdzJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0 cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7Ci0tICB9Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfaGVhZGVyX3ZhcmlhbnQgKHJlcG8sIGNhY2hlYnJh bmNoLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAg IH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0rfQotKwotK3ZvaWQK LStjb21wb3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBhcmdzKQotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gYXJncyQgKDo6c3RkOjptb3ZlIChhcmdzKSk7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb21wb3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQgKCZhcmdzJC52YWx1ZSk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBjb21wb3Nl X2ltYWdlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKSB7Ci0tICA6OnJ1c3Q6Ok1h bnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjptb3Zl KGFyZ3MpKTsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb21wb3NlX2ltYWdlKCZhcmdzJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbXBvc2VfaW1hZ2UgKDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBhcmdzKQotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPj4gYXJncyQgKDo6c3RkOjptb3ZlIChhcmdzKSk7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9p bWFnZSAoJmFyZ3MkLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotIH0KLSAKLS12b2lkIGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGFyZ3MpIHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gYXJncyQoOjpzdGQ6Om1vdmUoYXJncykpOwotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vf cm9vdGZzX2VudHJ5cG9pbnQoJmFyZ3MkLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0t ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0g IH0KLSt2b2lkCi0rY29tcG9zZV9yb290ZnNfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGFyZ3MpCi0rewotKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKLSsgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQgKCZhcmdzJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3Ik LnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBjb25maWd1cmVfYnVpbGRfcmVw b19mcm9tX3RhcmdldCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmYnVpbGRfcmVw bywgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnRhcmdldF9yZXBvKSB7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y29uZmlndXJlX2J1aWxkX3JlcG9fZnJvbV90YXJnZXQoYnVpbGRfcmVwbywgdGFyZ2V0X3JlcG8p OwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStjb25maWd1cmVfYnVpbGRfcmVw b19mcm9tX3RhcmdldCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmJ1aWxkX3Jl cG8sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVSZXBvIGNvbnN0ICZ0YXJnZXRfcmVwbykKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25maWd1cmVf YnVpbGRfcmVwb19mcm9tX3RhcmdldCAoYnVpbGRfcmVwbywgdGFyZ2V0X3JlcG8pOwotKyAgaWYg KGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgY29tcG9zZV9wcmVw YXJlX3Jvb3Rmcyg6OnN0ZDo6aW50MzJfdCBzcmNfcm9vdGZzX2RmZCwgOjpzdGQ6OmludDMyX3Qg ZGVzdF9yb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKSB7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29tcG9zZV9wcmVwYXJlX3Jvb3RmcyhzcmNfcm9vdGZzX2RmZCwgZGVzdF9yb290ZnNfZGZk LCB0cmVlZmlsZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbXBvc2Vf cHJlcGFyZV9yb290ZnMgKDo6c3RkOjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50 MzJfdCBkZXN0X3Jvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wcmVwYXJlX3Jvb3Rm cyAoCi0rICAgICAgc3JjX3Jvb3Rmc19kZmQsIGRlc3Rfcm9vdGZzX2RmZCwgdHJlZWZpbGUpOwot KyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgY29tcG9z ZXBvc3RfbnNzd2l0Y2hfYWx0ZmlsZXMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgewotLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbXBvc2Vwb3N0X25zc3dpdGNoX2FsdGZpbGVzKHJvb3Rmc19kZmQpOwotLSAgaWYgKGVycm9y JC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOwotLSAgfQotK3ZvaWQKLStjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlcG9zdF9uc3N3 aXRjaF9hbHRmaWxlcyAocm9vdGZzX2RmZCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzKDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6 U3RyIG5leHRfdmVyc2lvbiwgYm9vbCB1bmlmaWVkX2NvcmUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rw cm9jZXNzKHJvb3Rmc19kZmQsIHRyZWVmaWxlLCBuZXh0X3ZlcnNpb24sIHVuaWZpZWRfY29yZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbXBvc2VfcG9zdHByb2Nlc3Mg KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJl ZWZpbGUsCi0rICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLCBi b29sIHVuaWZpZWRfY29yZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2VzcyAoCi0rICAgICAg cm9vdGZzX2RmZCwgdHJlZWZpbGUsIG5leHRfdmVyc2lvbiwgdW5pZmllZF9jb3JlKTsKLSsgIGlm IChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIGNvbXBvc2VfcG9z dHByb2Nlc3NfZmluYWxfcHJlKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNz X2ZpbmFsX3ByZShyb290ZnNfZGZkLCB0cmVlZmlsZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewot LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0t ICB9Ci0rdm9pZAotK2NvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWxfcHJlICg6OnN0ZDo6aW50MzJf dCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKQot K3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWxfcHJlIChyb290ZnNfZGZk LCB0cmVlZmlsZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0g Ci0tdm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsKDo6c3RkOjppbnQzMl90IHJvb3Rmc19k ZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpIHsKLS0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21w b3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsKHJvb3Rmc19kZmQsIHRyZWVmaWxlKTsKLS0gIGlmIChlcnJv ciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVl ZmlsZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsIChyb290ZnNf ZGZkLCB0cmVlZmlsZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9 Ci0gCi0tdm9pZCBjb252ZXJ0X3Zhcl90b190bXBmaWxlc19kKDo6c3RkOjppbnQzMl90IHJvb3Rm c19kZmQsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSB7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkY29udmVydF92YXJfdG9fdG1wZmlsZXNfZChyb290ZnNfZGZkLCBjYW5jZWxsYWJsZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK2NvbnZlcnRfdmFyX3RvX3RtcGZp bGVzX2QgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpCi0r ewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29udmVydF92YXJfdG9fdG1wZmlsZXNfZCAocm9vdGZzX2RmZCwgY2Fu Y2VsbGFibGUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAot LXZvaWQgcm9vdGZzX3ByZXBhcmVfbGlua3MoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSwgYm9vbCBza2lwX3VzcmxvY2Fs KSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkcm9vdGZzX3ByZXBhcmVfbGlua3Mocm9vdGZzX2RmZCwgdHJlZWZpbGUsIHNraXBf dXNybG9jYWwpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStyb290ZnNfcHJl cGFyZV9saW5rcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSwKLSsgICAgICAgICAgICAgICAgICAgICAgYm9vbCBza2lw X3VzcmxvY2FsKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJvb3Rmc19wcmVwYXJlX2xpbmtzIChyb290ZnNf ZGZkLCB0cmVlZmlsZSwgc2tpcF91c3Jsb2NhbCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCB3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFiZWxp bmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJs ZSAmY2FuY2VsbGFibGUpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFiZWxpbmco cm9vdGZzX2RmZCwgY2FuY2VsbGFibGUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3Zv aWQKLSt3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFiZWxpbmcgKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJl ZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3b3JrYXJv dW5kX3NlbGludXhfY3Jvc3NfbGFiZWxpbmcgKHJvb3Rmc19kZmQsIGNhbmNlbGxhYmxlKTsKLSsg IGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lkIHBvc3Rwcm9j ZXNzX2NsZWFudXBfcnBtZGIoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgewotLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBvc3Rw cm9jZXNzX2NsZWFudXBfcnBtZGIocm9vdGZzX2RmZCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewot LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0t ICB9Ci0rdm9pZAotK3Bvc3Rwcm9jZXNzX2NsZWFudXBfcnBtZGIgKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHBvc3Rwcm9jZXNzX2NsZWFudXBfcnBtZGIgKHJvb3Rmc19kZmQp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgcmV3 cml0ZV9ycG1kYl9mb3JfdGFyZ2V0KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgbm9y bWFsaXplKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcmV3cml0ZV9ycG1kYl9mb3JfdGFyZ2V0KHJvb3Rmc19kZmQsIG5vcm1h bGl6ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK3Jld3JpdGVfcnBtZGJf Zm9yX3RhcmdldCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBub3JtYWxpemUpCi0r ewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcmV3cml0ZV9ycG1kYl9mb3JfdGFyZ2V0IChyb290ZnNfZGZkLCBub3Jt YWxpemUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLTo6 c3RkOjp1aW50NjRfdCBkaXJlY3Rvcnlfc2l6ZSg6OnN0ZDo6aW50MzJfdCBkZmQsIDo6cnBtb3N0 cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSB7Ci0rOjpzdGQ6OnVpbnQ2 NF90Ci0rZGlyZWN0b3J5X3NpemUgKDo6c3RkOjppbnQzMl90IGRmZCwgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpCi0rewotICAgOjpydXN0OjpNYXliZVVu aW5pdDw6OnN0ZDo6dWludDY0X3Q+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyZWN0b3J5X3NpemUoZGZkLCBj YW5jZWxsYWJsZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQot LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyZWN0 b3J5X3NpemUgKGRmZCwgY2FuY2VsbGFibGUsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJv ciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4k LnZhbHVlKTsKLSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgKmRlcGxv eW1lbnRfZm9yX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1 c3Q6OlN0ciBkZXBsb3lfaWQpIHsKLSs6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAq Ci0rZGVwbG95bWVudF9mb3JfaWQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNy b290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqPiByZXR1cm4kOwotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1l bnRfZm9yX2lkKHN5c3Jvb3QsIGRlcGxveV9pZCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVy cm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv cihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwot KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkZGVwbG95bWVudF9mb3JfaWQgKHN5c3Jvb3QsIGRlcGxveV9pZCwgJnJldHVy biQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBk ZXBsb3ltZW50X2NoZWNrc3VtX2Zvcl9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAm c3lzcm9vdCwgOjpydXN0OjpTdHIgZGVwbG95X2lkKSB7Ci0rOjpydXN0OjpTdHJpbmcKLStkZXBs b3ltZW50X2NoZWNrc3VtX2Zvcl9pZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5 c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxveV9pZCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lk KHN5c3Jvb3QsIGRlcGxveV9pZCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIp IHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkZGVwbG95bWVudF9jaGVja3N1bV9mb3JfaWQgKHN5c3Jvb3QsIGRlcGxveV9pZCwgJnJldHVy biQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6 T3N0cmVlRGVwbG95bWVudCAqZGVwbG95bWVudF9nZXRfYmFzZSg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIgb3B0X2RlcGxveV9pZCwgOjpydXN0OjpT dHIgb3B0X29zX25hbWUpIHsKLSs6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqCi0r ZGVwbG95bWVudF9nZXRfYmFzZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jv b3QsIDo6cnVzdDo6U3RyIG9wdF9kZXBsb3lfaWQsCi0rICAgICAgICAgICAgICAgICAgICAgOjpy dXN0OjpTdHIgb3B0X29zX25hbWUpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9z dHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZ2V0 X2Jhc2Uoc3lzcm9vdCwgb3B0X2RlcGxveV9pZCwgb3B0X29zX25hbWUsICZyZXR1cm4kLnZhbHVl KTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1 cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2dldF9iYXNlICgKLSsgICAgICBzeXNyb290LCBv cHRfZGVwbG95X2lkLCBvcHRfb3NfbmFtZSwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9y JC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOwotIH0KLSAKLS1ib29sIGRlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYoOjpycG1v c3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCwgOjpycG1vc3RyZWVjeHg6OkV4cG9y dGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYoZGljdCwg ZGlmZik7Ci0rYm9vbAotK2RlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYgKDo6cnBtb3N0cmVl Y3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpycG1vc3RyZWVjeHg6OkV4cG9ydGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBu b2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95 bWVudF9hZGRfbWFuaWZlc3RfZGlmZiAoZGljdCwgZGlmZik7Ci0gfQotIAotLXZvaWQgZGFlbW9u X3Nhbml0eWNoZWNrX2Vudmlyb25tZW50KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNv bnN0ICZzeXNyb290KSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25tZW50KHN5c3Jv b3QpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStkYWVtb25fc2FuaXR5Y2hl Y2tfZW52aXJvbm1lbnQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNy b290KQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRhZW1vbl9zYW5pdHljaGVja19lbnZpcm9ubWVudCAoc3lz cm9vdCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpy dXN0OjpTdHJpbmcgZGVwbG95bWVudF9nZW5lcmF0ZV9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl RGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCkgbm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5n Ci0rZGVwbG95bWVudF9nZW5lcmF0ZV9pZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1l bnQgY29uc3QgJmRlcGxveW1lbnQpIG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5p dDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRkZXBsb3ltZW50X2dlbmVyYXRlX2lkKGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLS19Ci0tCi0tdm9pZCBkZXBsb3lt ZW50X3BvcHVsYXRlX3ZhcmlhbnQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3Qg JnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3lt ZW50LCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KSB7Ci0tICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVw bG95bWVudF9wb3B1bGF0ZV92YXJpYW50KHN5c3Jvb3QsIGRlcGxveW1lbnQsIGRpY3QpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRl cGxveW1lbnRfZ2VuZXJhdGVfaWQgKGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0rfQotKwotK3ZvaWQKLStkZXBsb3lt ZW50X3BvcHVsYXRlX3ZhcmlhbnQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0 ICZzeXNyb290LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KQotK3sK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfcG9wdWxhdGVfdmFyaWFudCAoc3lzcm9vdCwgZGVwbG95 bWVudCwgZGljdCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0g Ci0tdm9pZCBnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lz cm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJl cG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSB7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkZ2VuZXJhdGVfYmFzZWxheWVyX3JlZnMoc3lzcm9vdCwgcmVwbywgY2FuY2VsbGFibGUpOwot LSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVm cyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBv LAotKyAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxl IGNvbnN0ICZjYW5jZWxsYWJsZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQK LSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9iYXNlbGF5ZXJf cmVmcyAoc3lzcm9vdCwgcmVwbywgY2FuY2VsbGFibGUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0r ICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChl cnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmVmc3Bl YywgOjpydXN0OjpTdHIgYmFzZV9jaGVja3N1bSwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGlj dCBjb25zdCAmZGljdCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHZhcmlhbnRfYWRkX3JlbW90ZV9zdGF0dXMocmVwbywgcmVm c3BlYywgYmFzZV9jaGVja3N1bSwgZGljdCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0r dm9pZAotK3ZhcmlhbnRfYWRkX3JlbW90ZV9zdGF0dXMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6U3RyIGJhc2VfY2hlY2tzdW0sIDo6cnBtb3N0cmVlY3h4OjpHVmFy aWFudERpY3QgY29uc3QgJmRpY3QpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik Ci0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyaWFudF9hZGRfcmVtb3Rl X3N0YXR1cyAocmVwbywgcmVmc3BlYywgYmFzZV9jaGVja3N1bSwgZGljdCk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkRlcGxv eW1lbnRMYXllcmVkTWV0YSBkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0KDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJl ZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCkgewotKzo6cnBtb3N0cmVlY3h4OjpEZXBsb3lt ZW50TGF5ZXJlZE1ldGEKLStkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0ICg6OnJw bW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29u c3QgJmNvbW1pdCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpE ZXBsb3ltZW50TGF5ZXJlZE1ldGE+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9sYXllcmVkbWV0 YV9mcm9tX2NvbW1pdChkZXBsb3ltZW50LCBjb21taXQsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlm IChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVl KTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0ICgKLSsgICAgICBkZXBs b3ltZW50LCBjb21taXQsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAg ICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9 Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSBkZXBsb3ltZW50X2xh eWVyZWRtZXRhX2xvYWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KSB7Ci0rOjpy cG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YQotK2RlcGxveW1lbnRfbGF5ZXJlZG1l dGFfbG9hZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBj b25zdCAmZGVwbG95bWVudCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVl Y3h4OjpEZXBsb3ltZW50TGF5ZXJlZE1ldGE+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9sYXll cmVkbWV0YV9sb2FkKHJlcG8sIGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChl cnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfbG9hZCAocmVwbywgZGVwbG95bWVu dCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9 Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBwYXJzZV9vdmVycmlkZV9zb3VyY2Uo OjpydXN0OjpTdHIgc291cmNlKSB7Ci0rOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1l bnRTb3VyY2UKLStwYXJzZV9vdmVycmlkZV9zb3VyY2UgKDo6cnVzdDo6U3RyIHNvdXJjZSkKLSt7 Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50U291cmNlPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX292ZXJyaWRlX3NvdXJjZShzb3VyY2UsICZy ZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0 ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAot KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX292ZXJyaWRlX3NvdXJj ZSAoc291cmNlLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAot LTo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbiBwYXJzZV9yZXZpc2lvbig6OnJ1c3Q6OlN0 ciBzb3VyY2UpIHsKLSs6OnJwbW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb24KLStwYXJzZV9yZXZp c2lvbiAoOjpydXN0OjpTdHIgc291cmNlKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpy cG1vc3RyZWVjeHg6OlBhcnNlZFJldmlzaW9uPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX3JldmlzaW9u KHNvdXJjZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAg cmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX3JldmlzaW9uIChz b3VyY2UsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsg ICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpy dXN0OjpTdHJpbmcgZ2VuZXJhdGVfb2JqZWN0X3BhdGgoOjpydXN0OjpTdHIgYmFzZSwgOjpydXN0 OjpTdHIgbmV4dF9zZWdtZW50KSB7Ci0rOjpydXN0OjpTdHJpbmcKLStnZW5lcmF0ZV9vYmplY3Rf cGF0aCAoOjpydXN0OjpTdHIgYmFzZSwgOjpydXN0OjpTdHIgbmV4dF9zZWdtZW50KQotK3sKLSAg IDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2VuZXJh dGVfb2JqZWN0X3BhdGgoYmFzZSwgbmV4dF9zZWdtZW50LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBp ZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9vYmplY3RfcGF0aCAoYmFzZSwgbmV4dF9zZWdtZW50 LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0K LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgZmFp bHBvaW50KDo6cnVzdDo6U3RyIHApIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRmYWlscG9pbnQocCk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0rdm9pZAotK2ZhaWxwb2ludCAoOjpydXN0OjpTdHIgcCkKLSt7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk ZmFpbHBvaW50IChwKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0K LSAKLS06OnN0ZDo6c2l6ZV90IFJwbUltcG9ydGVyRmxhZ3M6OmxheW91dDo6c2l6ZSgpIG5vZXhj ZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJG bGFncyRvcGVyYXRvciRzaXplb2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rUnBtSW1wb3J0ZXJGbGFn czo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJG9wZXJhdG9yJHNpemVvZiAoKTsKLSB9Ci0g Ci0tOjpzdGQ6OnNpemVfdCBScG1JbXBvcnRlckZsYWdzOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNl cHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZs YWdzJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rUnBtSW1wb3J0ZXJGbGFn czo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRvcGVyYXRvciRhbGlnbm9mICgpOwotIH0K LSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gcnBtX2lt cG9ydGVyX2ZsYWdzX25ld19lbXB0eSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz46OmZyb21fcmF3KHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5KCkpOwotKzo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPgotK3JwbV9pbXBvcnRlcl9m bGFnc19uZXdfZW1wdHkgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+Ojpmcm9tX3JhdyAoCi0rICAgICAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkgKCkpOwot IH0KLSAKLS1ib29sIFJwbUltcG9ydGVyRmxhZ3M6OmlzX2ltYV9lbmFibGVkKCkgY29uc3Qgbm9l eGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ckZsYWdzJGlzX2ltYV9lbmFibGVkKCp0aGlzKTsKLStib29sCi0rUnBtSW1wb3J0ZXJGbGFnczo6 aXNfaW1hX2VuYWJsZWQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3MkaXNfaW1hX2VuYWJsZWQgKCp0aGlz KTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBScG1JbXBvcnRlcjo6bGF5b3V0OjpzaXplKCkgbm9l eGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ciRvcGVyYXRvciRzaXplb2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rUnBtSW1wb3J0ZXI6OmxheW91 dDo6c2l6ZSAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUnBtSW1wb3J0ZXIkb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6c2l6 ZV90IFJwbUltcG9ydGVyOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRhbGlnbm9mKCk7 Ci0rOjpzdGQ6OnNpemVfdAotK1JwbUltcG9ydGVyOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0 Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRv cGVyYXRvciRhbGlnbm9mICgpOwotIH0KLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXI+IHJwbV9pbXBvcnRlcl9uZXcoOjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVz dDo6U3RyIG9zdHJlZV9icmFuY2gsIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNv bnN0ICZmbGFncykgewotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj4K LStycG1faW1wb3J0ZXJfbmV3ICg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSwgOjpydXN0OjpTdHIgb3N0 cmVlX2JyYW5jaCwKLSsgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXJGbGFncyBjb25zdCAmZmxhZ3MpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+PiByZXR1cm4kOwotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBv cnRlcl9uZXcocGtnX25hbWUsIG9zdHJlZV9icmFuY2gsIGZsYWdzLCAmcmV0dXJuJC52YWx1ZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcnBtX2ltcG9ydGVyX25ldyAoCi0rICAgICAgcGtnX25hbWUsIG9zdHJl ZV9icmFuY2gsIGZsYWdzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsg ICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0g fQotIAotLTo6cnVzdDo6U3RyaW5nIFJwbUltcG9ydGVyOjpoYW5kbGVfdHJhbnNsYXRlX3BhdGhu YW1lKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1JwbUlt cG9ydGVyOjpoYW5kbGVfdHJhbnNsYXRlX3BhdGhuYW1lICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4 Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7 Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFuZGxlX3RyYW5z bGF0ZV9wYXRobmFtZSgqdGhpcywgcGF0aCwgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFJwbUltcG9ydGVyJGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUgKCp0aGlzLCBwYXRoLCAmcmV0 dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0K LSAKLS06OnJ1c3Q6OlN0cmluZyBScG1JbXBvcnRlcjo6b3N0cmVlX2JyYW5jaCgpIGNvbnN0IG5v ZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1JwbUltcG9ydGVyOjpvc3RyZWVfYnJhbmNoICgp IGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmlu Zz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRv c3RyZWVfYnJhbmNoKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1v dmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXIkb3N0cmVlX2JyYW5jaCAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFJwbUlt cG9ydGVyOjpwa2dfbmFtZSgpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1Jw bUltcG9ydGVyOjpwa2dfbmFtZSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5 YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcGtnX25hbWUoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRScG1JbXBvcnRlciRwa2dfbmFtZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsK LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgUnBt SW1wb3J0ZXI6OmRvY19maWxlc19hcmVfZmlsdGVyZWQoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19h cmVfZmlsdGVyZWQoKnRoaXMpOwotK2Jvb2wKLStScG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2FyZV9m aWx0ZXJlZCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCAoKnRoaXMpOwot IH0KLSAKLS12b2lkIFJwbUltcG9ydGVyOjpkb2NfZmlsZXNfaW5zZXJ0KDo6cnVzdDo6U3RyIHBh dGgpIG5vZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ciRkb2NfZmlsZXNfaW5zZXJ0KCp0aGlzLCBwYXRoKTsKLSt2b2lkCi0rUnBtSW1wb3J0ZXI6OmRv Y19maWxlc19pbnNlcnQgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19pbnNlcnQgKCp0aGlz LCBwYXRoKTsKLSB9Ci0gCi0tYm9vbCBScG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2NvbnRhaW5zKDo6 cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9jX2ZpbGVzX2NvbnRhaW5zKCp0aGlzLCBwYXRo KTsKLStib29sCi0rUnBtSW1wb3J0ZXI6OmRvY19maWxlc19jb250YWlucyAoOjpydXN0OjpTdHIg cGF0aCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19jb250YWlucyAoKnRoaXMsIHBhdGgpOwotIH0K LSAKLS12b2lkIFJwbUltcG9ydGVyOjpycG1maV9vdmVycmlkZXNfaW5zZXJ0KDo6cnVzdDo6U3Ry IHBhdGgsIDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHJwbWZpX292ZXJyaWRlc19pbnNlcnQoKnRoaXMs IHBhdGgsIGluZGV4KTsKLSt2b2lkCi0rUnBtSW1wb3J0ZXI6OnJwbWZpX292ZXJyaWRlc19pbnNl cnQgKDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNlcHQKLSt7 Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJp ZGVzX2luc2VydCAoKnRoaXMsIHBhdGgsIGluZGV4KTsKLSB9Ci0gCi0tYm9vbCBScG1JbXBvcnRl cjo6cnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhj ZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIk cnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zKCp0aGlzLCBwYXRoKTsKLStib29sCi0rUnBtSW1wb3J0 ZXI6OnJwbWZpX292ZXJyaWRlc19jb250YWlucyAoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9l eGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9y dGVyJHJwbWZpX292ZXJyaWRlc19jb250YWlucyAoKnRoaXMsIHBhdGgpOwotIH0KLSAKLS06OnN0 ZDo6dWludDY0X3QgUnBtSW1wb3J0ZXI6OnJwbWZpX292ZXJyaWRlc19nZXQoOjpydXN0OjpTdHIg cGF0aCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNfZ2V0KCp0aGlzLCBwYXRoKTsKLSs6OnN0 ZDo6dWludDY0X3QKLStScG1JbXBvcnRlcjo6cnBtZmlfb3ZlcnJpZGVzX2dldCAoOjpydXN0OjpT dHIgcGF0aCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFJwbUltcG9ydGVyJHJwbWZpX292ZXJyaWRlc19nZXQgKCp0aGlzLCBwYXRoKTsK LSB9Ci0gCi0tYm9vbCBScG1JbXBvcnRlcjo6aXNfaW1hX2VuYWJsZWQoKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlz X2ltYV9lbmFibGVkKCp0aGlzKTsKLStib29sCi0rUnBtSW1wb3J0ZXI6OmlzX2ltYV9lbmFibGVk ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1JbXBvcnRlciRpc19pbWFfZW5hYmxlZCAoKnRoaXMpOwotIH0KLSAKLS12b2lkIFJw bUltcG9ydGVyOjp0d2Vha19pbXBvcnRlZF9maWxlX2luZm8oOjpycG1vc3RyZWVjeHg6OkdGaWxl SW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkdHdlYWtfaW1wb3J0ZWRfZmlsZV9pbmZvKCp0aGlz LCBmaWxlX2luZm8pOwotK3ZvaWQKLStScG1JbXBvcnRlcjo6dHdlYWtfaW1wb3J0ZWRfZmlsZV9p bmZvICg6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0IG5v ZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHR3 ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyAoKnRoaXMsIGZpbGVfaW5mbyk7Ci0gfQotIAotLWJvb2wg UnBtSW1wb3J0ZXI6OmlzX2ZpbGVfZmlsdGVyZWQoOjpydXN0OjpTdHIgcGF0aCwgOjpycG1vc3Ry ZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdCB7Ci0rYm9vbAotK1JwbUlt cG9ydGVyOjppc19maWxlX2ZpbHRlcmVkICg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJwbW9zdHJlZWN4 eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0Ci0rewotICAgOjpydXN0OjpNYXli ZVVuaW5pdDxib29sPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ZpbGVfZmlsdGVyZWQo KnRoaXMsIHBhdGgsIGZpbGVfaW5mbywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotLX0KLS0K LS12b2lkIFJwbUltcG9ydGVyOjp0cmFuc2xhdGVfdG9fdG1wZmlsZXNfZW50cnkoOjpydXN0OjpT dHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywg OjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSkgewotLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJHRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSgqdGhpcywgYWJzX3BhdGgsIGZpbGVf aW5mbywgdXNlcm5hbWUsIGdyb3VwbmFtZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUnBtSW1wb3J0ZXIkaXNfZmlsZV9maWx0ZXJlZCAoCi0rICAgICAgKnRoaXMsIHBhdGgsIGZp bGVfaW5mbywgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwot KyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotK30KLSsKLSt2 b2lkCi0rUnBtSW1wb3J0ZXI6OnRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSAoOjpydXN0OjpT dHIgYWJzX3BhdGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1 c3Q6OlN0ciBncm91cG5hbWUpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0r ICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkdHJhbnNsYXRl X3RvX3RtcGZpbGVzX2VudHJ5ICgKLSsgICAgICAgICAgKnRoaXMsIGFic19wYXRoLCBmaWxlX2lu Zm8sIHVzZXJuYW1lLCBncm91cG5hbWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwot KyAgICB9Ci0gfQotIAotLWJvb2wgUnBtSW1wb3J0ZXI6Omhhc190bXBmaWxlc19lbnRyaWVzKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRS cG1JbXBvcnRlciRoYXNfdG1wZmlsZXNfZW50cmllcygqdGhpcyk7Ci0rYm9vbAotK1JwbUltcG9y dGVyOjpoYXNfdG1wZmlsZXNfZW50cmllcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFzX3RtcGZpbGVzX2Vu dHJpZXMgKCp0aGlzKTsKLSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcgUnBtSW1wb3J0ZXI6OnNlcmlh bGl6ZV90bXBmaWxlc19jb250ZW50KCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5n Ci0rUnBtSW1wb3J0ZXI6OnNlcmlhbGl6ZV90bXBmaWxlc19jb250ZW50ICgpIGNvbnN0IG5vZXhj ZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsK LS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRzZXJpYWxpemVfdG1w ZmlsZXNfY29udGVudCgqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjpt b3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJHNlcmlhbGl6ZV90bXBmaWxlc19jb250ZW50ICgqdGhpcywgJnJldHVybiQudmFsdWUp OwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0 OjpTdHJpbmcgdG1wZmlsZXNfdHJhbnNsYXRlKDo6cnVzdDo6U3RyIGFic19wYXRoLCA6OnJwbW9z dHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1l LCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpIHsKLSs6OnJ1c3Q6OlN0cmluZwotK3RtcGZpbGVzX3Ry YW5zbGF0ZSAoOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8g Y29uc3QgJmZpbGVfaW5mbywKLSsgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHVzZXJu YW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0bXBmaWxlc190cmFuc2xhdGUoYWJzX3BhdGgs IGZpbGVfaW5mbywgdXNlcm5hbWUsIGdyb3VwbmFtZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYg KGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUp OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHRtcGZpbGVzX3RyYW5zbGF0ZSAoCi0rICAgICAgYWJzX3BhdGgsIGZpbGVfaW5mbywg dXNlcm5hbWUsIGdyb3VwbmFtZSwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIp Ci0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OwotIH0KLSAKLS12b2lkIGFwcGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8oOjpzdGQ6OmludDMyX3Qg ZmQpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRhcHBlbmRfZHJhY3V0X3JhbmRvbV9jcGlvKGZkKTsKLS0gIGlmIChlcnJvciQu cHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKLS0gIH0KLSt2b2lkCi0rYXBwZW5kX2RyYWN1dF9yYW5kb21fY3BpbyAoOjpzdGQ6Omlu dDMyX3QgZmQpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGFwcGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8gKGZkKTsKLSsgIGlm IChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnN0ZDo6aW50MzJfdCBp bml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29u c3QgJmZpbGVzLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSkgewot Kzo6c3RkOjppbnQzMl90Ci0raW5pdHJhbWZzX292ZXJsYXlfZ2VuZXJhdGUgKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmZmlsZXMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlKQotK3sKLSAgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8OjpzdGQ6OmludDMyX3Q+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaW5pdHJhbWZz X292ZXJsYXlfZ2VuZXJhdGUoZmlsZXMsIGNhbmNlbGxhYmxlLCAmcmV0dXJuJC52YWx1ZSk7Ci0t ICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSAoZmlsZXMsIGNh bmNlbGxhYmxlLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAot LXZvaWQgam91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUoKSBub2V4Y2VwdCB7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkam91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUoKTsK LSt2b2lkCi0ram91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUgKCkgbm9leGNlcHQKLSt7Ci0r ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkam91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1 cmUgKCk7Ci0gfQotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl90YXNrKDo6cnVzdDo6 U3RyIG1zZykgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNv bGVfcHJvZ3Jlc3NfYmVnaW5fdGFzayhtc2cpOwotK3ZvaWQKLStjb25zb2xlX3Byb2dyZXNzX2Jl Z2luX3Rhc2sgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl90YXNrIChtc2cpOwotIH0KLSAK LS12b2lkIGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fbl9pdGVtcyg6OnJ1c3Q6OlN0ciBtc2csIDo6 c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1zKG1zZywgbik7Ci0rdm9pZAotK2NvbnNv bGVfcHJvZ3Jlc3NfYmVnaW5fbl9pdGVtcyAoOjpydXN0OjpTdHIgbXNnLCA6OnN0ZDo6dWludDY0 X3Qgbikgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29s ZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1zIChtc2csIG4pOwotIH0KLSAKLS12b2lkIGNvbnNvbGVf cHJvZ3Jlc3NfYmVnaW5fcGVyY2VudCg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0IHsKLS0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQo bXNnKTsKLSt2b2lkCi0rY29uc29sZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50ICg6OnJ1c3Q6OlN0 ciBtc2cpIG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNv bGVfcHJvZ3Jlc3NfYmVnaW5fcGVyY2VudCAobXNnKTsKLSB9Ci0gCi0tdm9pZCBjb25zb2xlX3By b2dyZXNzX3NldF9tZXNzYWdlKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgewotLSAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X21lc3NhZ2UobXNnKTsK LSt2b2lkCi0rY29uc29sZV9wcm9ncmVzc19zZXRfbWVzc2FnZSAoOjpydXN0OjpTdHIgbXNnKSBu b2V4Y2VwdAotK3sKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dy ZXNzX3NldF9tZXNzYWdlIChtc2cpOwotIH0KLSAKLS12b2lkIGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0 X3N1Yl9tZXNzYWdlKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgewotLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X3N1Yl9tZXNzYWdlKG1zZyk7Ci0r dm9pZAotK2NvbnNvbGVfcHJvZ3Jlc3Nfc2V0X3N1Yl9tZXNzYWdlICg6OnJ1c3Q6OlN0ciBtc2cp IG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJv Z3Jlc3Nfc2V0X3N1Yl9tZXNzYWdlIChtc2cpOwotIH0KLSAKLS12b2lkIGNvbnNvbGVfcHJvZ3Jl c3NfdXBkYXRlKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc191cGRhdGUobik7Ci0rdm9pZAotK2NvbnNv bGVfcHJvZ3Jlc3NfdXBkYXRlICg6OnN0ZDo6dWludDY0X3Qgbikgbm9leGNlcHQKLSt7Ci0rICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc191cGRhdGUgKG4pOwot IH0KLSAKLS12b2lkIGNvbnNvbGVfcHJvZ3Jlc3NfZW5kKDo6cnVzdDo6U3RyIHN1ZmZpeCkgbm9l eGNlcHQgewotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3Nf ZW5kKHN1ZmZpeCk7Ci0rdm9pZAotK2NvbnNvbGVfcHJvZ3Jlc3NfZW5kICg6OnJ1c3Q6OlN0ciBz dWZmaXgpIG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNv bGVfcHJvZ3Jlc3NfZW5kIChzdWZmaXgpOwotIH0KLSAKLS1ib29sIEhpc3RvcnlFbnRyeTo6b3Bl cmF0b3I9PShIaXN0b3J5RW50cnkgY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5RW50cnkkb3BlcmF0b3IkZXEo KnRoaXMsIHJocyk7Ci0rYm9vbAotK0hpc3RvcnlFbnRyeTo6b3BlcmF0b3I9PSAoSGlzdG9yeUVu dHJ5IGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5RW50cnkkb3BlcmF0b3IkZXEgKCp0aGlzLCByaHMpOwot IH0KLSAKLS1ib29sIEhpc3RvcnlFbnRyeTo6b3BlcmF0b3IhPShIaXN0b3J5RW50cnkgY29uc3Qg JnJocykgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRIaXN0b3J5RW50cnkkb3BlcmF0b3IkbmUoKnRoaXMsIHJocyk7Ci0rYm9vbAotK0hpc3Rv cnlFbnRyeTo6b3BlcmF0b3IhPSAoSGlzdG9yeUVudHJ5IGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhj ZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5RW50 cnkkb3BlcmF0b3IkbmUgKCp0aGlzLCByaHMpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IEhpc3Rv cnlDdHg6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkSGlzdG9yeUN0eCRvcGVyYXRvciRzaXplb2YoKTsKLSs6OnN0ZDo6c2l6 ZV90Ci0rSGlzdG9yeUN0eDo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJHNpemVvZiAo KTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBIaXN0b3J5Q3R4OjpsYXlvdXQ6OmFsaWduKCkgbm9l eGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4 JG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rSGlzdG9yeUN0eDo6bGF5b3V0 OjphbGlnbiAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkSGlzdG9yeUN0eCRvcGVyYXRvciRhbGlnbm9mICgpOwotIH0KLSAKLS06OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gaGlzdG9yeV9jdHhfbmV3KCkgewotKzo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4PgotK2hpc3RvcnlfY3R4X25ldyAoKQot K3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6Okhp c3RvcnlDdHg+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhpc3RvcnlfY3R4X25ldygmcmV0dXJuJC52YWx1ZSk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkaGlzdG9yeV9jdHhfbmV3ICgmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAo ZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgSGlzdG9y eUN0eDo6bmV4dF9lbnRyeSgpIHsKLSs6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5Ci0rSGlz dG9yeUN0eDo6bmV4dF9lbnRyeSAoKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1v c3RyZWVjeHg6Okhpc3RvcnlFbnRyeT4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG5leHRfZW50 cnkoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlD dHgkbmV4dF9lbnRyeSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRy KQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKLSB9Ci0gCi0tdm9pZCBoaXN0b3J5X3BydW5lKCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhpc3RvcnlfcHJ1bmUoKTsK LS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0raGlzdG9yeV9wcnVuZSAoKQotK3sK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRoaXN0b3J5X3BydW5lICgpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAg ICB9Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgVG9raW9IYW5kbGU6OmxheW91dDo6c2l6ZSgpIG5v ZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5k bGUkb3BlcmF0b3Ikc2l6ZW9mKCk7Ci0rOjpzdGQ6OnNpemVfdAotK1Rva2lvSGFuZGxlOjpsYXlv dXQ6OnNpemUgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRva2lvSGFuZGxlJG9wZXJhdG9yJHNpemVvZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNp emVfdCBUb2tpb0hhbmRsZTo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3IkYWxpZ25vZigp OwotKzo6c3RkOjpzaXplX3QKLStUb2tpb0hhbmRsZTo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2Vw dAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUk b3BlcmF0b3IkYWxpZ25vZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBUb2tpb0VudGVyR3Vh cmQ6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJHNpemVvZigpOwotKzo6c3RkOjpz aXplX3QKLStUb2tpb0VudGVyR3VhcmQ6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAotK3sKLSsg IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJh dG9yJHNpemVvZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBUb2tpb0VudGVyR3VhcmQ6Omxh eW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRva2lvRW50ZXJHdWFyZCRvcGVyYXRvciRhbGlnbm9mKCk7Ci0rOjpzdGQ6OnNpemVf dAotK1Rva2lvRW50ZXJHdWFyZDo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAotK3sKLSsgIHJl dHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9y JGFsaWdub2YgKCk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hh bmRsZT4gdG9raW9faGFuZGxlX2dldCgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+Ojpmcm9tX3JhdyhycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdG9raW9faGFuZGxlX2dldCgpKTsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6VG9raW9IYW5kbGU+Ci0rdG9raW9faGFuZGxlX2dldCAoKSBub2V4Y2VwdAotK3sKLSsg IHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+Ojpmcm9tX3Jh dyAoCi0rICAgICAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRva2lvX2hhbmRsZV9nZXQg KCkpOwotIH0KLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJk PiBUb2tpb0hhbmRsZTo6ZW50ZXIoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD46OmZyb21fcmF3KHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0hhbmRsZSRlbnRlcigqdGhpcykpOwotKzo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+Ci0rVG9raW9IYW5kbGU6OmVudGVy ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUb2tpb0VudGVyR3VhcmQ+Ojpmcm9tX3JhdyAoCi0rICAgICAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRva2lvSGFuZGxlJGVudGVyICgqdGhpcykpOwotIH0KLSAKLS1ib29sIHNj cmlwdF9pc19pZ25vcmVkKDo6cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LCBib29s IHVzZV9rZXJuZWxfaW5zdGFsbCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRzY3JpcHRfaXNfaWdub3JlZChwa2csIHNjcmlwdCwgdXNlX2tlcm5lbF9p bnN0YWxsKTsKLStib29sCi0rc2NyaXB0X2lzX2lnbm9yZWQgKDo6cnVzdDo6U3RyIHBrZywgOjpy dXN0OjpTdHIgc2NyaXB0LCBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCkgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNjcmlwdF9pc19pZ25vcmVkIChw a2csIHNjcmlwdCwgdXNlX2tlcm5lbF9pbnN0YWxsKTsKLSB9Ci0gCi0tdm9pZCB0ZXN0dXRpbHNf ZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJndikgewotLSAgOjpydXN0 OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmd2JCg6OnN0ZDo6 bW92ZShhcmd2KSk7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkdGVzdHV0aWxzX2VudHJ5cG9pbnQoJmFyZ3YkLnZhbHVlKTsKLS0g IGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rdGVzdHV0aWxzX2VudHJ5cG9pbnQgKDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmd2KQotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlE cm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJndiQgKDo6c3RkOjptb3ZlIChhcmd2 KSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkdGVzdHV0aWxzX2VudHJ5cG9pbnQgKCZhcmd2JC52YWx1ZSk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcgbWF5YmVf c2hlbGxfcXVvdGUoOjpydXN0OjpTdHIgaW5wdXQpIG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmlu ZwotK21heWJlX3NoZWxsX3F1b3RlICg6OnJ1c3Q6OlN0ciBpbnB1dCkgbm9leGNlcHQKLSt7Ci0g ICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1heWJlX3NoZWxsX3F1b3RlKGlucHV0LCAmcmV0dXJuJC52 YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWF5YmVfc2hlbGxfcXVvdGUgKGlucHV0LCAmcmV0dXJuJC52 YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1i b29sIFJlZnNwZWM6Om9wZXJhdG9yPT0oUmVmc3BlYyBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlZnNwZWMkb3BlcmF0 b3IkZXEoKnRoaXMsIHJocyk7Ci0rYm9vbAotK1JlZnNwZWM6Om9wZXJhdG9yPT0gKFJlZnNwZWMg Y29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJlZnNwZWMkb3BlcmF0b3IkZXEgKCp0aGlzLCByaHMpOwotIH0KLSAKLS1i b29sIFJlZnNwZWM6Om9wZXJhdG9yIT0oUmVmc3BlYyBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2Vw dCB7Ci0rYm9vbAotK1JlZnNwZWM6Om9wZXJhdG9yIT0gKFJlZnNwZWMgY29uc3QgJnJocykgY29u c3Qgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gISgqdGhpcyA9PSByaHMpOwotIH0KLSAKLS1ib29s IE92ZXJyaWRlUmVwbGFjZW1lbnQ6Om9wZXJhdG9yPT0oT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25z dCAmcmhzKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JE92ZXJyaWRlUmVwbGFjZW1lbnQkb3BlcmF0b3IkZXEoKnRoaXMsIHJocyk7Ci0rYm9v bAotK092ZXJyaWRlUmVwbGFjZW1lbnQ6Om9wZXJhdG9yPT0gKE92ZXJyaWRlUmVwbGFjZW1lbnQg Y29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JE92ZXJyaWRlUmVwbGFjZW1lbnQkb3BlcmF0b3IkZXEgKCp0aGlzLCByaHMp OwotIH0KLSAKLS1ib29sIE92ZXJyaWRlUmVwbGFjZW1lbnQ6Om9wZXJhdG9yIT0oT3ZlcnJpZGVS ZXBsYWNlbWVudCBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdCB7Ci0rYm9vbAotK092ZXJyaWRl UmVwbGFjZW1lbnQ6Om9wZXJhdG9yIT0gKE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJnJocykg Y29uc3Qgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gISgqdGhpcyA9PSByaHMpOwotIH0KLSAKLS06 OnN0ZDo6c2l6ZV90IFRyZWVmaWxlOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7Ci0tICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJHNpemVvZigp OwotKzo6c3RkOjpzaXplX3QKLStUcmVlZmlsZTo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0r ewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRvcGVyYXRv ciRzaXplb2YgKCk7Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgVHJlZWZpbGU6OmxheW91dDo6YWxp Z24oKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rVHJlZWZpbGU6Omxh eW91dDo6YWxpZ24gKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJGFsaWdub2YgKCk7Ci0gfQotIAotLTo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3KDo6cnVzdDo6U3RyIGZp bGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCkgewotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT4KLSt0cmVlZmlsZV9uZXcgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1 c3Q6OlN0ciBiYXNlYXJjaCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3KGZp bGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsK LS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwot LSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk dHJlZWZpbGVfbmV3IChmaWxlbmFtZSwgYmFzZWFyY2gsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlm IChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChy ZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlPiB0cmVlZmlsZV9uZXdfZW1wdHkoKSB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlPgotK3RyZWVmaWxlX25ld19lbXB0eSAoKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR0cmVlZmlsZV9uZXdfZW1wdHkoJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIp IHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVm aWxlX25ld19lbXB0eSAoJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAg IHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0K LSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19m cm9tX3N0cmluZyg6OnJ1c3Q6OlN0ciBidWYsIGJvb2wgY2xpZW50KSB7Ci0rOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgotK3RyZWVmaWxlX25ld19mcm9tX3N0cmluZyAoOjpy dXN0OjpTdHIgYnVmLCBib29sIGNsaWVudCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZp bGVfbmV3X2Zyb21fc3RyaW5nKGJ1ZiwgY2xpZW50LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcgKGJ1ZiwgY2xpZW50LCAmcmV0 dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NvbXBvc2UoOjpydXN0OjpTdHIg ZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKSB7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlPgotK3RyZWVmaWxlX25ld19jb21wb3NlICg6OnJ1c3Q6OlN0ciBmaWxl bmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+PiByZXR1cm4kOwotLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVm aWxlX25ld19jb21wb3NlKGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NvbXBvc2UgKGZpbGVuYW1lLCBiYXNlYXJj aCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9 Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnQoOjpydXN0 OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKSB7Ci0rOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPgotK3RyZWVmaWxlX25ld19jbGllbnQgKDo6cnVzdDo6U3Ry IGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCkKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk dHJlZWZpbGVfbmV3X2NsaWVudChmaWxlbmFtZSwgYmFzZWFyY2gsICZyZXR1cm4kLnZhbHVlKTsK LS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19jbGllbnQgKGZpbGVuYW1lLCBiYXNl YXJjaCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAg ICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnRfZnJv bV9ldGMoOjpydXN0OjpTdHIgYmFzZWFyY2gpIHsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGU+Ci0rdHJlZWZpbGVfbmV3X2NsaWVudF9mcm9tX2V0YyAoOjpydXN0OjpTdHIg YmFzZWFyY2gpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGU+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19jbGllbnRfZnJv bV9ldGMoYmFzZWFyY2gsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0t ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0g IH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRy ZWVmaWxlX25ld19jbGllbnRfZnJvbV9ldGMgKGJhc2VhcmNoLCAmcmV0dXJuJC52YWx1ZSk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6c3RkOjp1aW50MzJfdCB0cmVlZmlsZV9kZWxl dGVfY2xpZW50X2V0YygpIHsKLSs6OnN0ZDo6dWludDMyX3QKLSt0cmVlZmlsZV9kZWxldGVfY2xp ZW50X2V0YyAoKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpzdGQ6OnVpbnQzMl90PiBy ZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHRyZWVmaWxlX2RlbGV0ZV9jbGllbnRfZXRjKCZyZXR1cm4kLnZhbHVlKTsK LS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX2RlbGV0ZV9jbGllbnRfZXRjICgmcmV0dXJu JC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVy biA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyIFRyZWVm aWxlOjpnZXRfd29ya2RpcigpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpTdHI+OjpuZXdfdW5jaGVja2VkKHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfd29ya2RpcigqdGhpcykpOwotKzo6cnVzdDo6U3RyCi0rVHJlZWZpbGU6 OmdldF93b3JrZGlyICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OlN0cj46Om5ld191bmNoZWNrZWQgKAotKyAgICAgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfd29ya2RpciAoKnRoaXMpKTsKLSB9Ci0gCi0tOjpzdGQ6 OmludDMyX3QgVHJlZWZpbGU6OmdldF9wYXNzd2RfZmQoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYXNzd2RfZmQoKnRoaXMp OwotKzo6c3RkOjppbnQzMl90Ci0rVHJlZWZpbGU6OmdldF9wYXNzd2RfZmQgKCkgbm9leGNlcHQK LSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9w YXNzd2RfZmQgKCp0aGlzKTsKLSB9Ci0gCi0tOjpzdGQ6OmludDMyX3QgVHJlZWZpbGU6OmdldF9n cm91cF9mZCgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2dyb3VwX2ZkKCp0aGlzKTsKLSs6OnN0ZDo6aW50MzJfdAotK1RyZWVm aWxlOjpnZXRfZ3JvdXBfZmQgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ncm91cF9mZCAoKnRoaXMpOwotIH0KLSAKLS06 OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X2pzb25fc3RyaW5nKCkgY29uc3Qgbm9leGNlcHQg ewotKzo6cnVzdDo6U3RyaW5nCi0rVHJlZWZpbGU6OmdldF9qc29uX3N0cmluZyAoKSBjb25zdCBu b2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVy biQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2pzb25fc3Ry aW5nKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2pz b25fc3RyaW5nICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3Zl IChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRy ZWVmaWxlOjpnZXRfb3N0cmVlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6Z2V0X29zdHJlZV9sYXllcnMgKCkgY29uc3Qg bm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfb3N0cmVlX2xheWVycygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9vc3RyZWVfbGF5ZXJzICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycygpIGNv bnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6 Z2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0g IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX292ZXJyaWRl X2xheWVycygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJl dHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJzICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0 dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfYWxsX29zdHJlZV9sYXllcnMoKSBjb25zdCBub2V4 Y2VwdCB7Ci0rOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rVHJlZWZpbGU6OmdldF9hbGxf b3N0cmVlX2xheWVycyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hbGxfb3N0cmVlX2xheWVycygqdGhpcywgJnJl dHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hbGxfb3N0cmVlX2xheWVy cyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6 Z2V0X3JlcG9zKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PgotK1RyZWVmaWxlOjpnZXRfcmVwb3MgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb3MoKnRoaXMsICZyZXR1 cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb3MgKCp0aGlzLCAmcmV0 dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0K LSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9wYWNrYWdlcygp IGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmls ZTo6Z2V0X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVu aW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52 YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzICgqdGhpcywgJnJldHVy biQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0g Ci0tOjpydXN0OjpTdHJpbmcgVHJlZWZpbGU6OnJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJl Zml4KCkgY29uc3QgewotKzo6cnVzdDo6U3RyaW5nCi0rVHJlZWZpbGU6OnJlcXVpcmVfYXV0b21h dGljX3ZlcnNpb25fcHJlZml4ICgpIGNvbnN0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZXF1aXJlX2F1dG9tYXRpY192 ZXJzaW9uX3ByZWZpeCgqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIp IHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkcmVxdWlyZV9hdXRvbWF0aWNfdmVyc2lvbl9wcmVmaXggKCp0aGlzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikK LSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7 Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OmFkZF9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpIHsKLS0gIDo6cnVzdDo6TWFu dWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjpt b3ZlKHBhY2thZ2VzKSk7Ci0rYm9vbAotK1RyZWVmaWxlOjphZGRfcGFja2FnZXMgKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZykKLSt7Ci0r ICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2th Z2VzJCAoOjpzdGQ6Om1vdmUgKHBhY2thZ2VzKSk7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJv b2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzKCp0aGlzLCAmcGFja2FnZXMk LnZhbHVlLCBhbGxvd19leGlzdGluZywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGFkZF9wYWNrYWdlcyAoCi0rICAgICAgKnRoaXMsICZwYWNrYWdlcyQudmFsdWUsIGFs bG93X2V4aXN0aW5nLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQot IAotLWJvb2wgVHJlZWZpbGU6Omhhc19wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJl dHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzKCp0 aGlzKTsKLStib29sCi0rVHJlZWZpbGU6Omhhc19wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3Bh Y2thZ2VzICgqdGhpcyk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVl ZmlsZTo6Z2V0X2xvY2FsX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPgotK1RyZWVmaWxlOjpnZXRfbG9jYWxfcGFja2FnZXMgKCkgY29uc3Qg bm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfbG9jYWxfcGFja2FnZXMoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6 OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfbG9jYWxfcGFja2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0r ICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVm aWxlOjphZGRfbG9jYWxfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2th Z2VzLCBib29sIGFsbG93X2V4aXN0aW5nKSB7Ci0tICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCg6OnN0ZDo6bW92ZShwYWNrYWdlcykp OwotK2Jvb2wKLStUcmVlZmlsZTo6YWRkX2xvY2FsX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpCi0rewotKyAgOjpydXN0 OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQgKDo6 c3RkOjptb3ZlIChwYWNrYWdlcykpOwotICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1 cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9sb2NhbF9wYWNrYWdlcygqdGhpcywgJnBhY2thZ2VzJC52 YWx1ZSwgYWxsb3dfZXhpc3RpbmcsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRy KSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3Ik KTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRhZGRfbG9jYWxfcGFja2FnZXMgKAotKyAgICAgICp0aGlzLCAmcGFja2FnZXMkLnZhbHVl LCBhbGxvd19leGlzdGluZywgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0r ICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChl cnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwot IH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9sb2NhbF9m aWxlb3ZlcnJpZGVfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+Ci0rVHJlZWZpbGU6OmdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMg KCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJu JC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9w YWNrYWdlcyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAo cmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OmFkZF9sb2NhbF9maWxlb3Zl cnJpZGVfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29s IGFsbG93X2V4aXN0aW5nKSB7Ci0tICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCg6OnN0ZDo6bW92ZShwYWNrYWdlcykpOwotK2Jvb2wK LStUcmVlZmlsZTo6YWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIGFsbG93X2V4aXN0aW5nKQotK3sKLSsgIDo6cnVzdDo6TWFudWFs bHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkICg6OnN0ZDo6bW92 ZSAocGFja2FnZXMpKTsKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRhZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCp0aGlzLCAmcGFja2Fn ZXMkLnZhbHVlLCBhbGxvd19leGlzdGluZywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9y JC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkYWRkX2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoCi0rICAg ICAgICAgICp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19leGlzdGluZywgJnJldHVybiQu dmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4g OjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpyZW1v dmVfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFs bG93X25vZW50KSB7Ci0tICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4+IHBhY2thZ2VzJCg6OnN0ZDo6bW92ZShwYWNrYWdlcykpOwotK2Jvb2wKLStUcmVl ZmlsZTo6cmVtb3ZlX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2Fn ZXMsIGJvb2wgYWxsb3dfbm9lbnQpCi0rewotKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQgKDo6c3RkOjptb3ZlIChwYWNrYWdlcykp OwotICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJl bW92ZV9wYWNrYWdlcygqdGhpcywgJnBhY2thZ2VzJC52YWx1ZSwgYWxsb3dfbm9lbnQsICZyZXR1 cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6 bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZXMgKAotKyAg ICAgICp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19ub2VudCwgJnJldHVybiQudmFsdWUp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gVHJlZWZpbGU6OmdldF9wYWNrYWdlc19vdmVycmlkZV9y ZXBsYWNlKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpP dmVycmlkZVJlcGxhY2VtZW50PgotK1RyZWVmaWxlOjpnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVw bGFjZSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0 OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+PiByZXR1cm4kOwotLSAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlc19vdmVycmlk ZV9yZXBsYWNlKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0r ICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVm aWxlOjpoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSgpIGNvbnN0IG5vZXhjZXB0IHsKLS0g IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2Vz X292ZXJyaWRlX3JlcGxhY2UoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6aGFzX3BhY2thZ2Vz X292ZXJyaWRlX3JlcGxhY2UgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBs YWNlICgqdGhpcyk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OmFkZF9wYWNrYWdlc19vdmVycmlk ZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50IHJlcGxhY2VtZW50 KSBub2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJwbW9zdHJlZWN4eDo6T3Zl cnJpZGVSZXBsYWNlbWVudD4gcmVwbGFjZW1lbnQkKDo6c3RkOjptb3ZlKHJlcGxhY2VtZW50KSk7 Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlKCp0aGlzLCAmcmVwbGFjZW1lbnQkLnZhbHVlKTsKLStib29s Ci0rVHJlZWZpbGU6OmFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICg6OnJwbW9zdHJlZWN4 eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCByZXBsYWNlbWVudCkgbm9leGNlcHQKLSt7Ci0rICA6OnJ1 c3Q6Ok1hbnVhbGx5RHJvcDw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gcmVw bGFjZW1lbnQkICgKLSsgICAgICA6OnN0ZDo6bW92ZSAocmVwbGFjZW1lbnQpKTsKLSsgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJy aWRlX3JlcGxhY2UgKCp0aGlzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcGxhY2VtZW50JC52 YWx1ZSk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3Jl cGxhY2UoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBs YWNlKCp0aGlzLCBwYWNrYWdlKTsKLStib29sCi0rVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292 ZXJyaWRlX3JlcGxhY2UgKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0Ci0rewotKyAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9v dmVycmlkZV9yZXBsYWNlICgqdGhpcywgcGFja2FnZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9j YWwoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Ci0rVHJl ZWZpbGU6OmdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgpIGNvbnN0IG5vZXhj ZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsK LS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLS19Ci0tCi0tdm9pZCBUcmVl ZmlsZTo6YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IHBhY2thZ2VzKSB7Ci0tICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCg6OnN0ZDo6bW92ZShwYWNrYWdlcykpOwot LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsKCp0aGlzLCAm cGFja2FnZXMkLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSsgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFj ZV9sb2NhbCAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAo cmV0dXJuJC52YWx1ZSk7Ci0rfQotKwotK3ZvaWQKLStUcmVlZmlsZTo6YWRkX3BhY2thZ2VzX292 ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdl cykKLSt7Ci0rICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4+IHBhY2thZ2VzJCAoOjpzdGQ6Om1vdmUgKHBhY2thZ2VzKSk7Ci0rICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoKnRoaXMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZwYWNrYWdlcyQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIp Ci0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdl X292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQgewot LSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFj a2FnZV9vdmVycmlkZV9yZXBsYWNlX2xvY2FsKCp0aGlzLCBwYWNrYWdlKTsKLStib29sCi0rVHJl ZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKDo6cnVzdDo6U3Ry IHBhY2thZ2UpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgqdGhp cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSk7Ci0gfQotIAotLTo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3Jl bW92ZSgpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStU cmVlZmlsZTo6Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBy ZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNr YWdlc19vdmVycmlkZV9yZW1vdmUoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6 OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLS19Ci0tCi0tdm9pZCBUcmVlZmlsZTo6YWRkX3Bh Y2thZ2VzX292ZXJyaWRlX3JlbW92ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2Fn ZXMpIHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n Pj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3Bh Y2thZ2VzX292ZXJyaWRlX3JlbW92ZSgqdGhpcywgJnBhY2thZ2VzJC52YWx1ZSk7Ci0tICBpZiAo ZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7Ci0tICB9Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsK LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0rfQotKwotK3ZvaWQKLStU cmVlZmlsZTo6YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IHBhY2thZ2VzKQotK3sKLSsgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkICg6OnN0ZDo6bW92ZSAocGFja2FnZXMpKTsK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUgKCp0aGlz LCAmcGFja2FnZXMkLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAg fQotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUo OjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUoKnRo aXMsIHBhY2thZ2UpOwotK2Jvb2wKLStUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVf cmVtb3ZlICg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVf cmVtb3ZlICgqdGhpcywgcGFja2FnZSk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6Omhhc19wYWNr YWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSg6OnJ1c3Q6OlN0ciBuYW1lKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19w YWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSgqdGhpcywgbmFtZSk7Ci0rYm9vbAotK1RyZWVm aWxlOjpoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlX25hbWUgKDo6cnVzdDo6U3RyIG5hbWUp IGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRoYXNfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlX25hbWUgKCp0aGlzLCBuYW1l KTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6cmVtb3ZlX2FsbF9vdmVycmlkZXMoKSBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92 ZV9hbGxfb3ZlcnJpZGVzKCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6OnJlbW92ZV9hbGxfb3Zl cnJpZGVzICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRyZW1vdmVfYWxsX292ZXJyaWRlcyAoKnRoaXMpOwotIH0KLSAKLS1ib29s IFRyZWVmaWxlOjpyZW1vdmVfYWxsX3BhY2thZ2VzKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfYWxsX3BhY2thZ2VzKCp0 aGlzKTsKLStib29sCi0rVHJlZWZpbGU6OnJlbW92ZV9hbGxfcGFja2FnZXMgKCkgbm9leGNlcHQK LSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92 ZV9hbGxfcGFja2FnZXMgKCp0aGlzKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IFRyZWVmaWxlOjpnZXRfZXhjbHVkZV9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6Z2V0X2V4Y2x1ZGVfcGFja2Fn ZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfZXhjbHVkZV9wYWNrYWdlcygqdGhpcywgJnJldHVybiQudmFsdWUp OwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9leGNsdWRlX3BhY2thZ2VzICgqdGhpcywgJnJl dHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9 Ci0gCi0tOjpydXN0OjpTdHJpbmcgVHJlZWZpbGU6OmdldF9wbGF0Zm9ybV9tb2R1bGUoKSBjb25z dCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0X3BsYXRmb3JtX21v ZHVsZSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0 OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3BsYXRmb3JtX21vZHVsZSgqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9wbGF0Zm9ybV9tb2R1bGUgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7 Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9pbnN0YWxsX2xhbmdzKCkgY29uc3Qg bm9leGNlcHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK1RyZWVmaWxlOjpnZXRf aW5zdGFsbF9sYW5ncyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbnN0YWxsX2xhbmdzKCp0aGlzLCAmcmV0dXJu JC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luc3RhbGxfbGFuZ3MgKCp0aGlz LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Zm9ybWF0X2luc3RhbGxfbGFuZ3Nf bWFjcm8oKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Zm9y bWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8gKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6 Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGZvcm1hdF9pbnN0YWxsX2xhbmdzX21hY3JvKCp0aGlzLCAm cmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0r ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZm9ybWF0X2luc3RhbGxfbGFu Z3NfbWFjcm8gKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUg KHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJl ZWZpbGU6OmdldF9sb2NrZmlsZV9yZXBvcygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6Z2V0X2xvY2tmaWxlX3JlcG9zICgpIGNvbnN0 IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X2xvY2tmaWxlX3JlcG9zKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2xvY2tmaWxlX3JlcG9zICgqdGhpcywgJnJldHVybiQudmFsdWUpOwot KyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpydXN0OjpT dHIgVHJlZWZpbGU6OmdldF9yZWYoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gOjpydXN0 OjppbXBsPDo6cnVzdDo6U3RyPjo6bmV3X3VuY2hlY2tlZChycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X3JlZigqdGhpcykpOwotKzo6cnVzdDo6U3RyCi0rVHJlZWZpbGU6 OmdldF9yZWYgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gOjpydXN0OjppbXBsPDo6 cnVzdDo6U3RyPjo6bmV3X3VuY2hlY2tlZCAoCi0rICAgICAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9yZWYgKCp0aGlzKSk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6 OmdldF9jbGl3cmFwKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xpd3JhcCgqdGhpcyk7Ci0rYm9vbAotK1RyZWVm aWxlOjpnZXRfY2xpd3JhcCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NsaXdyYXAgKCp0aGlzKTsKLSB9Ci0g Ci0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfY2xpd3JhcF9iaW5h cmllcygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStU cmVlZmlsZTo6Z2V0X2NsaXdyYXBfYmluYXJpZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsK LS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xpd3JhcF9iaW5h cmllcygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVy biQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9j bGl3cmFwX2JpbmFyaWVzICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3Rk Ojptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6c2V0X2NsaXdy YXAoYm9vbCBlbmFibGVkKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkc2V0X2NsaXdyYXAoKnRoaXMsIGVuYWJsZWQpOwotK3ZvaWQKLStUcmVlZmls ZTo6c2V0X2NsaXdyYXAgKGJvb2wgZW5hYmxlZCkgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X2NsaXdyYXAgKCp0aGlzLCBlbmFibGVkKTsK LSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfY29udGFp bmVyX2NtZCgpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4K LStUcmVlZmlsZTo6Z2V0X2NvbnRhaW5lcl9jbWQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsK LS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY29udGFpbmVyX2Nt ZCgqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250 YWluZXJfY21kICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3Zl IChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6Z2V0X3JlYWRvbmx5X2V4 ZWN1dGFibGVzKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMoKnRoaXMpOwotK2Jv b2wKLStUcmVlZmlsZTo6Z2V0X3JlYWRvbmx5X2V4ZWN1dGFibGVzICgpIGNvbnN0IG5vZXhjZXB0 Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf cmVhZG9ubHlfZXhlY3V0YWJsZXMgKCp0aGlzKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6Z2V0 X2RvY3VtZW50YXRpb24oKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9kb2N1bWVudGF0aW9uKCp0aGlzKTsKLStib29s Ci0rVHJlZWZpbGU6OmdldF9kb2N1bWVudGF0aW9uICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZG9jdW1lbnRh dGlvbiAoKnRoaXMpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRfcmVjb21tZW5kcygpIGNv bnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X3JlY29tbWVuZHMoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6Z2V0X3JlY29t bWVuZHMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWNvbW1lbmRzICgqdGhpcyk7Ci0gfQotIAotLWJvb2wg VHJlZWZpbGU6OmdldF9zZWxpbnV4KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51eCgqdGhpcyk7Ci0rYm9v bAotK1RyZWVmaWxlOjpnZXRfc2VsaW51eCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXggKCp0aGlz KTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6Z2V0X3N5c3VzZXJzX2lzX2ZvcmNlZCgpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3N5c3VzZXJzX2lzX2ZvcmNlZCgqdGhpcyk7Ci0rYm9vbAotK1RyZWVmaWxlOjpnZXRf c3lzdXNlcnNfaXNfZm9yY2VkICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc3lzdXNlcnNfaXNfZm9yY2VkICgq dGhpcyk7Ci0gfQotIAotLTo6c3RkOjp1aW50MzJfdCBUcmVlZmlsZTo6Z2V0X3NlbGludXhfbGFi ZWxfdmVyc2lvbigpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbigqdGhpcyk7Ci0r OjpzdGQ6OnVpbnQzMl90Ci0rVHJlZWZpbGU6OmdldF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24gKCkg Y29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24gKCp0aGlzKTsKLSB9Ci0gCi0tOjpy dXN0OjpTdHJpbmcgVHJlZWZpbGU6OmdldF9ncGdfa2V5KCkgY29uc3Qgbm9leGNlcHQgewotKzo6 cnVzdDo6U3RyaW5nCi0rVHJlZWZpbGU6OmdldF9ncGdfa2V5ICgpIGNvbnN0IG5vZXhjZXB0Ci0r ewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZ3BnX2tleSgqdGhpcywgJnJl dHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ncGdfa2V5ICgqdGhpcywg JnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK LSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcgVHJlZWZpbGU6OmdldF9hdXRvbWF0aWNfdmVyc2lvbl9z dWZmaXgoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0 X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVz dDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCgqdGhp cywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUp OwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hdXRvbWF0aWNf dmVyc2lvbl9zdWZmaXggKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRfY29udGFp bmVyKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfY29udGFpbmVyKCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6Omdl dF9jb250YWluZXIgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXIgKCp0aGlzKTsKLSB9Ci0gCi0t Ym9vbCBUcmVlZmlsZTo6Z2V0X21hY2hpbmVpZF9jb21wYXQoKSBjb25zdCBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9tYWNoaW5l aWRfY29tcGF0KCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6OmdldF9tYWNoaW5laWRfY29tcGF0 ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfbWFjaGluZWlkX2NvbXBhdCAoKnRoaXMpOwotIH0KLSAKLS06OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9ldGNfZ3JvdXBfbWVtYmVycygp IGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmls ZTo6Z2V0X2V0Y19ncm91cF9tZW1iZXJzICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0 OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2V0Y19ncm91cF9tZW1iZXJz KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2V0Y19n cm91cF9tZW1iZXJzICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6Z2V0X2Jvb3RfbG9j YXRpb25faXNfbW9kdWxlcygpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Jvb3RfbG9jYXRpb25faXNfbW9kdWxlcygq dGhpcyk7Ci0rYm9vbAotK1RyZWVmaWxlOjpnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzICgp IGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzICgqdGhpcyk7Ci0gfQotIAot LWJvb2wgVHJlZWZpbGU6OnVzZV9rZXJuZWxfaW5zdGFsbCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0g IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdXNlX2tlcm5lbF9p bnN0YWxsKCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6OnVzZV9rZXJuZWxfaW5zdGFsbCAoKSBj b25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkdXNlX2tlcm5lbF9pbnN0YWxsICgqdGhpcyk7Ci0gfQotIAotLWJvb2wgVHJlZWZp bGU6OmdldF9pbWEoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbWEoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmlsZTo6 Z2V0X2ltYSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2ltYSAoKnRoaXMpOwotIH0KLSAKLS06OnJ1c3Q6OlN0 cmluZyBUcmVlZmlsZTo6Z2V0X3JlbGVhc2V2ZXIoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0 OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0X3JlbGVhc2V2ZXIgKCkgY29uc3Qgbm9leGNlcHQKLSt7 Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWxlYXNldmVyKCp0aGlzLCAm cmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0r ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlbGVhc2V2ZXIgKCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFs dWUpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0IFRyZWVmaWxl OjpnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvX21ldGFkYXRhX3Rh cmdldCgqdGhpcyk7Ci0rOjpycG1vc3RyZWVjeHg6OlJlcG9NZXRhZGF0YVRhcmdldAotK1RyZWVm aWxlOjpnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvX21ldGFk YXRhX3RhcmdldCAoKnRoaXMpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01l dGFkYXRhVGFyZ2V0IFRyZWVmaWxlOjpnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90YXJnZXQoKSBj b25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9hZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCgqdGhpcyk7Ci0rOjpycG1vc3Ry ZWVjeHg6OkFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldAotK1RyZWVmaWxlOjpnZXRfYWR2aXNvcmll c19tZXRhZGF0YV90YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hZHZpc29yaWVzX21ldGFkYXRhX3Rh cmdldCAoKnRoaXMpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpycG1kYl9iYWNrZW5kX2lzX3Rh cmdldCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkcnBtZGJfYmFja2VuZF9pc190YXJnZXQoKnRoaXMpOwotK2Jvb2wKLStU cmVlZmlsZTo6cnBtZGJfYmFja2VuZF9pc190YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJwbWRiX2JhY2tl bmRfaXNfdGFyZ2V0ICgqdGhpcyk7Ci0gfQotIAotLWJvb2wgVHJlZWZpbGU6OnNob3VsZF9ub3Jt YWxpemVfcnBtZGIoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNob3VsZF9ub3JtYWxpemVfcnBtZGIoKnRoaXMpOwotK2Jv b2wKLStUcmVlZmlsZTo6c2hvdWxkX25vcm1hbGl6ZV9ycG1kYiAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2hvdWxk X25vcm1hbGl6ZV9ycG1kYiAoKnRoaXMpOwotIH0KLSAKLS06OnJwbW9zdHJlZWN4eDo6T3B0VXNy TG9jYWwgVHJlZWZpbGU6OmdldF9vcHRfdXNybG9jYWwoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcHRfdXNybG9j YWwoKnRoaXMpOwotKzo6cnBtb3N0cmVlY3h4OjpPcHRVc3JMb2NhbAotK1RyZWVmaWxlOjpnZXRf b3B0X3VzcmxvY2FsICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3B0X3VzcmxvY2FsICgqdGhpcyk7Ci0gfQot IAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2ZpbGVzX3JlbW92 ZV9yZWdleCg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+Ci0rVHJlZWZpbGU6OmdldF9maWxlc19yZW1vdmVfcmVnZXggKDo6 cnVzdDo6U3RyIHBhY2thZ2UpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVu aW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCgqdGhpcywg cGFja2FnZSwgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9maWxl c19yZW1vdmVfcmVnZXggKCp0aGlzLCBwYWNrYWdlLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBU cmVlZmlsZTo6Z2V0X2NoZWNrc3VtKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvKSBjb25zdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0X2NoZWNrc3VtICg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgY29uc3QKLSt7Ci0gICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9jaGVja3N1bSgqdGhpcywgcmVwbywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2NoZWNrc3VtICgqdGhpcywgcmVwbywgJnJldHVybiQudmFsdWUp OwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6 Z2V0X29zdHJlZV9yZWYoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVl ZmlsZTo6Z2V0X29zdHJlZV9yZWYgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1h eWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVfcmVmKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7 Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9yZWYgKCp0aGlzLCAmcmV0dXJuJC52 YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06 OnJ1c3Q6OlNsaWNlPDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4gVHJlZWZpbGU6 OmdldF9yZXBvX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OlNsaWNlPDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4+Ojpz bGljZShycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fcGFja2Fn ZXMoKnRoaXMpKTsKLSs6OnJ1c3Q6OlNsaWNlPDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBj b25zdD4KLStUcmVlZmlsZTo6Z2V0X3JlcG9fcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7 Ci0rICByZXR1cm4gOjpydXN0OjppbXBsPDo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJl cG9QYWNrYWdlIGNvbnN0Pj46OnNsaWNlICgKLSsgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fcGFja2FnZXMgKCp0aGlzKSk7Ci0gfQotIAotLXZvaWQg VHJlZWZpbGU6OmNsZWFyX3JlcG9fcGFja2FnZXMoKSBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkY2xlYXJfcmVwb19wYWNrYWdlcygqdGhpcyk7Ci0r dm9pZAotK1RyZWVmaWxlOjpjbGVhcl9yZXBvX3BhY2thZ2VzICgpIG5vZXhjZXB0Ci0rewotKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGNsZWFyX3JlcG9fcGFja2FnZXMg KCp0aGlzKTsKLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6cHJldHR5cHJpbnRfanNvbl9zdGRvdXQo KSBjb25zdCBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkcHJldHR5cHJpbnRfanNvbl9zdGRvdXQoKnRoaXMpOwotK3ZvaWQKLStUcmVlZmlsZTo6cHJl dHR5cHJpbnRfanNvbl9zdGRvdXQgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJldHR5cHJpbnRfanNvbl9zdGRvdXQgKCp0aGlz KTsKLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6cHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MoKSBj b25zdCBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk cHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MoKnRoaXMpOwotK3ZvaWQKLStUcmVlZmlsZTo6cHJp bnRfZGVwcmVjYXRpb25fd2FybmluZ3MgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3Mg KCp0aGlzKTsKLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6cHJpbnRfZXhwZXJpbWVudGFsX25vdGlj ZXMoKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkcHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMoKnRoaXMpOwotK3ZvaWQKLStUcmVlZmls ZTo6cHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZXhwZXJpbWVudGFsX25v dGljZXMgKCp0aGlzKTsKLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6c2FuaXR5Y2hlY2tfZXh0ZXJu YWxzKCkgY29uc3QgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNhbml0eWNoZWNrX2V4dGVybmFscygqdGhpcyk7 Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK1RyZWVmaWxlOjpzYW5pdHljaGVj a19leHRlcm5hbHMgKCkgY29uc3QKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2FuaXR5Y2hlY2tfZXh0ZXJu YWxzICgqdGhpcyk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0g Ci0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+IFRyZWVmaWxl OjppbXBvcnRlcl9mbGFncyg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSkgY29uc3Qgbm9leGNlcHQgewot LSAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPjo6 ZnJvbV9yYXcocnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGltcG9ydGVyX2Zs YWdzKCp0aGlzLCBwa2dfbmFtZSkpOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlckZsYWdzPgotK1RyZWVmaWxlOjppbXBvcnRlcl9mbGFncyAoOjpydXN0OjpTdHIgcGtn X25hbWUpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPjo6ZnJvbV9yYXcgKAotKyAgICAgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbXBvcnRlcl9mbGFncyAoKnRoaXMsIHBrZ19uYW1l KSk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjp3cml0ZV9yZXBvdmFycyg6OnN0 ZDo6aW50MzJfdCB3b3JrZGlyX2RmZF9yYXcpIGNvbnN0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1Ry ZWVmaWxlOjp3cml0ZV9yZXBvdmFycyAoOjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3KSBj b25zdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkd3JpdGVfcmVwb3ZhcnMoKnRoaXMsIHdvcmtkaXJfZGZkX3JhdywgJnJl dHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHdyaXRlX3JlcG92YXJzICgKLSsg ICAgICAqdGhpcywgd29ya2Rpcl9kZmRfcmF3LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgVHJlZWZpbGU6OnNldF9yZWxlYXNldmVyKDo6cnVzdDo6 U3RyIHJlbGVhc2V2ZXIpIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfcmVsZWFzZXZlcigqdGhpcywgcmVs ZWFzZXZlcik7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK1RyZWVmaWxlOjpz ZXRfcmVsZWFzZXZlciAoOjpydXN0OjpTdHIgcmVsZWFzZXZlcikKLSt7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRzZXRfcmVsZWFzZXZlciAoKnRoaXMsIHJlbGVhc2V2ZXIpOwotKyAgaWYgKGVycm9y JC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgVHJlZWZpbGU6OnNldF9yZWNv bW1lbmRzKGJvb2wgdmFsKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X3JlY29tbWVuZHMoKnRoaXMsIHZh bCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK1RyZWVmaWxlOjpzZXRfcmVj b21tZW5kcyAoYm9vbCB2YWwpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9yZWNvbW1lbmRzICgqdGhp cywgdmFsKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12 b2lkIFRyZWVmaWxlOjplbmFibGVfcmVwbyg6OnJ1c3Q6OlN0ciByZXBvKSB7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZW5hYmxlX3JlcG8oKnRoaXMsIHJlcG8pOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQot K3ZvaWQKLStUcmVlZmlsZTo6ZW5hYmxlX3JlcG8gKDo6cnVzdDo6U3RyIHJlcG8pCi0rewotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGVuYWJsZV9yZXBvICgqdGhpcywgcmVwbyk7Ci0rICBpZiAoZXJyb3IkLnB0cikK LSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBUcmVlZmlsZTo6ZGlzYWJsZV9yZXBvKDo6 cnVzdDo6U3RyIHJlcG8pIHsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRkaXNhYmxlX3JlcG8oKnRoaXMsIHJlcG8p OwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStUcmVlZmlsZTo6ZGlzYWJsZV9y ZXBvICg6OnJ1c3Q6OlN0ciByZXBvKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRkaXNhYmxlX3JlcG8gKCp0 aGlzLCByZXBvKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAK LS12b2lkIFRyZWVmaWxlOjp2YWxpZGF0ZV9mb3JfY29udGFpbmVyKCkgY29uc3QgewotLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJHZhbGlkYXRlX2Zvcl9jb250YWluZXIoKnRoaXMpOwotLSAgaWYgKGVycm9yJC5wdHIp IHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OwotLSAgfQotK3ZvaWQKLStUcmVlZmlsZTo6dmFsaWRhdGVfZm9yX2NvbnRhaW5lciAoKSBjb25z dAotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSR2YWxpZGF0ZV9mb3JfY29udGFpbmVyICgqdGhpcyk7Ci0rICBp ZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tOjpycG1vc3RyZWVjeHg6 OlJlZnNwZWMgVHJlZWZpbGU6OmdldF9iYXNlX3JlZnNwZWMoKSBjb25zdCBub2V4Y2VwdCB7Ci0r OjpycG1vc3RyZWVjeHg6OlJlZnNwZWMKLStUcmVlZmlsZTo6Z2V0X2Jhc2VfcmVmc3BlYyAoKSBj b25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6 OlJlZnNwZWM+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X2Jhc2VfcmVmc3BlYygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9iYXNlX3JlZnNwZWMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBy ZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS12b2lkIFRyZWVmaWxl OjpyZWJhc2UoOjpydXN0OjpTdHIgbmV3X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmln aW5fdXJsLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdCB7 Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmViYXNlKCp0aGlzLCBu ZXdfcmVmc3BlYywgY3VzdG9tX29yaWdpbl91cmwsIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24p OwotK3ZvaWQKLStUcmVlZmlsZTo6cmViYXNlICg6OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpy dXN0OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsCi0rICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHIgY3VzdG9tX29yaWdpbl9kZXNjcmlwdGlvbikgbm9leGNlcHQKLSt7Ci0rICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmViYXNlICgqdGhpcywgbmV3X3JlZnNwZWMsIGN1 c3RvbV9vcmlnaW5fdXJsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3VzdG9tX29yaWdpbl9kZXNjcmlwdGlvbik7Ci0gfQotIAotLTo6cnVzdDo6U3Ry aW5nIFRyZWVmaWxlOjpnZXRfb3JpZ2luX2N1c3RvbV91cmwoKSBjb25zdCBub2V4Y2VwdCB7Ci0r OjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0X29yaWdpbl9jdXN0b21fdXJsICgpIGNvbnN0 IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0 dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2lu X2N1c3RvbV91cmwoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfb3JpZ2luX2N1c3RvbV91cmwgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBU cmVlZmlsZTo6Z2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7 Ci0rOjpydXN0OjpTdHJpbmcKLStUcmVlZmlsZTo6Z2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRp b24gKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6 U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9vcmlnaW5fY3VzdG9tX2Rlc2NyaXB0aW9uKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0t ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24gKCp0aGlz LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X292ZXJyaWRlX2NvbW1pdCgp IGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVmaWxlOjpnZXRfb3ZlcnJp ZGVfY29tbWl0ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfb3ZlcnJpZGVfY29tbWl0KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X292ZXJyaWRlX2NvbW1pdCAoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZv aWQgVHJlZWZpbGU6OnNldF9vdmVycmlkZV9jb21taXQoOjpydXN0OjpTdHIgY2hlY2tzdW0pIG5v ZXhjZXB0IHsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfb3Zl cnJpZGVfY29tbWl0KCp0aGlzLCBjaGVja3N1bSk7Ci0rdm9pZAotK1RyZWVmaWxlOjpzZXRfb3Zl cnJpZGVfY29tbWl0ICg6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQKLSt7Ci0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X292ZXJyaWRlX2NvbW1pdCAoKnRo aXMsIGNoZWNrc3VtKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVm aWxlOjpnZXRfaW5pdHJhbWZzX2V0Y19maWxlcygpIGNvbnN0IG5vZXhjZXB0IHsKLSs6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStUcmVlZmlsZTo6Z2V0X2luaXRyYW1mc19ldGNfZmlsZXMg KCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfaW5pdHJhbWZzX2V0Y19maWxlcygqdGhpcywgJnJldHVybiQudmFsdWUp OwotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzICgqdGhpcywg JnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK LSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6aGFzX2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBu b2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGhhc19pbml0cmFtZnNfZXRjX2ZpbGVzKCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6Omhhc19p bml0cmFtZnNfZXRjX2ZpbGVzICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfaW5pdHJhbWZzX2V0Y19maWxlcyAo KnRoaXMpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjppbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNr KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQgewotLSAgOjpydXN0 OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBmaWxlcyQoOjpzdGQ6 Om1vdmUoZmlsZXMpKTsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkaW5pdHJhbWZzX2V0Y19maWxlc190cmFjaygqdGhpcywgJmZpbGVzJC52YWx1ZSk7Ci0r Ym9vbAotK1RyZWVmaWxlOjppbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNrICg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0Ci0rewotKyAgOjpydXN0OjpNYW51YWxseURy b3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBmaWxlcyQgKDo6c3RkOjptb3ZlIChmaWxl cykpOwotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0 cmFtZnNfZXRjX2ZpbGVzX3RyYWNrICgqdGhpcywgJmZpbGVzJC52YWx1ZSk7Ci0gfQotIAotLWJv b2wgVHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFjayg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gZmlsZXMkKDo6c3RkOjptb3ZlKGZpbGVzKSk7Ci0t ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19l dGNfZmlsZXNfdW50cmFjaygqdGhpcywgJmZpbGVzJC52YWx1ZSk7Ci0rYm9vbAotK1RyZWVmaWxl Ojppbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2sgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBmaWxlcykgbm9leGNlcHQKLSt7Ci0rICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4+IGZpbGVzJCAoOjpzdGQ6Om1vdmUgKGZpbGVzKSk7Ci0rICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmls ZXNfdW50cmFjayAoKnRoaXMsICZmaWxlcyQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxl Ojppbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2tfYWxsKCkgbm9leGNlcHQgewotLSAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVz X3VudHJhY2tfYWxsKCp0aGlzKTsKLStib29sCi0rVHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmls ZXNfdW50cmFja19hbGwgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwgKCp0 aGlzKTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6Z2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUoKnRoaXMpOwotK2Jvb2wKLStUcmVlZmls ZTo6Z2V0X2luaXRyYW1mc19yZWdlbmVyYXRlICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5pdHJhbWZzX3Jl Z2VuZXJhdGUgKCp0aGlzKTsKLSB9Ci0gCi0tOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRy ZWVmaWxlOjpnZXRfaW5pdHJhbWZzX2FyZ3MoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+Ci0rVHJlZWZpbGU6OmdldF9pbml0cmFtZnNfYXJncyAoKSBjb25z dCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9pbml0cmFtZnNfYXJncygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfYXJncyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsK LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgVHJl ZWZpbGU6OnNldF9pbml0cmFtZnNfcmVnZW5lcmF0ZShib29sIGVuYWJsZWQsIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBhcmdzKSBub2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6Ok1hbnVhbGx5RHJv cDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjptb3ZlKGFyZ3MpKTsK LS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfaW5pdHJhbWZzX3Jl Z2VuZXJhdGUoKnRoaXMsIGVuYWJsZWQsICZhcmdzJC52YWx1ZSk7Ci0rdm9pZAotK1RyZWVmaWxl OjpzZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGFyZ3MpIG5vZXhjZXB0Ci0rewotKyAgOjpydXN0OjpNYW51YWxseURyb3A8 OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsK LSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfaW5pdHJhbWZzX3Jl Z2VuZXJhdGUgKCp0aGlzLCBlbmFibGVkLCAmYXJncyQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6 OlN0cmluZyBUcmVlZmlsZTo6Z2V0X3VuY29uZmlndXJlZF9zdGF0ZSgpIGNvbnN0IG5vZXhjZXB0 IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1RyZWVmaWxlOjpnZXRfdW5jb25maWd1cmVkX3N0YXRlICgp IGNvbnN0IG5vZXhjZXB0Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmlu Zz4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf dW5jb25maWd1cmVkX3N0YXRlKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X3VuY29uZmlndXJlZF9zdGF0ZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsK LSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgVHJl ZWZpbGU6Om1heV9yZXF1aXJlX2xvY2FsX2Fzc2VtYmx5KCkgY29uc3Qgbm9leGNlcHQgewotLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRtYXlfcmVxdWlyZV9s b2NhbF9hc3NlbWJseSgqdGhpcyk7Ci0rYm9vbAotK1RyZWVmaWxlOjptYXlfcmVxdWlyZV9sb2Nh bF9hc3NlbWJseSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkgKCp0aGlz KTsKLSB9Ci0gCi0tYm9vbCBUcmVlZmlsZTo6aGFzX2FueV9wYWNrYWdlcygpIGNvbnN0IG5vZXhj ZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFz X2FueV9wYWNrYWdlcygqdGhpcyk7Ci0rYm9vbAotK1RyZWVmaWxlOjpoYXNfYW55X3BhY2thZ2Vz ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRoYXNfYW55X3BhY2thZ2VzICgqdGhpcyk7Ci0gfQotIAotLWJvb2wgVHJl ZWZpbGU6Om1lcmdlX3RyZWVmaWxlKDo6cnVzdDo6U3RyIHRyZWVmaWxlKSB7Ci0rYm9vbAotK1Ry ZWVmaWxlOjptZXJnZV90cmVlZmlsZSAoOjpydXN0OjpTdHIgdHJlZWZpbGUpCi0rewotICAgOjpy dXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG1lcmdlX3RyZWVm aWxlKCp0aGlzLCB0cmVlZmlsZSwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIp IHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkbWVyZ2VfdHJlZWZpbGUgKCp0aGlzLCB0cmVlZmlsZSwgJnJldHVybiQudmFs dWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS1ib29sIFRyZWVmaWxlOjpnZXRfbm9f aW5pdHJhbWZzKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbm9faW5pdHJhbWZzKCp0aGlzKTsKLStib29sCi0rVHJl ZWZpbGU6OmdldF9ub19pbml0cmFtZnMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ub19pbml0cmFtZnMgKCp0 aGlzKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBSZXBvUGFja2FnZTo6bGF5b3V0OjpzaXplKCkg bm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFj a2FnZSRvcGVyYXRvciRzaXplb2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rUmVwb1BhY2thZ2U6Omxh eW91dDo6c2l6ZSAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUmVwb1BhY2thZ2Ukb3BlcmF0b3Ikc2l6ZW9mICgpOwotIH0KLSAKLS06OnN0ZDo6 c2l6ZV90IFJlcG9QYWNrYWdlOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgewotLSAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRhbGlnbm9m KCk7Ci0rOjpzdGQ6OnNpemVfdAotK1JlcG9QYWNrYWdlOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhj ZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2Fn ZSRvcGVyYXRvciRhbGlnbm9mICgpOwotIH0KLSAKLS06OnJ1c3Q6OlN0ciBSZXBvUGFja2FnZTo6 Z2V0X3JlcG8oKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gOjpydXN0OjppbXBsPDo6cnVz dDo6U3RyPjo6bmV3X3VuY2hlY2tlZChycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1Bh Y2thZ2UkZ2V0X3JlcG8oKnRoaXMpKTsKLSs6OnJ1c3Q6OlN0cgotK1JlcG9QYWNrYWdlOjpnZXRf cmVwbyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpTdHI+OjpuZXdfdW5jaGVja2VkICgKLSsgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUmVwb1BhY2thZ2UkZ2V0X3JlcG8gKCp0aGlzKSk7Ci0rfQotKwotKzo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPgotK1JlcG9QYWNrYWdlOjpnZXRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNl cHQKLSt7Ci0rICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n Pj4gcmV0dXJuJDsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRn ZXRfcGFja2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g UmVwb1BhY2thZ2U6OmdldF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKLSsvLyBSZXR1cm4g dGhlIGxpc3Qgb2YgcmVwbyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAotKy8v IChlLmcuIFsiL2V0Yy95dW0ucmVwb3MuZCIsICIvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCJdKS4K LSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KLStnZXRfcmVwb3NfZGlycyAoKSBub2V4Y2Vw dAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJGdl dF9wYWNrYWdlcygqdGhpcywgJnJldHVybiQudmFsdWUpOwotLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9yZXBv c19kaXJzICgmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyB2YXJzdWJzdGl0dXRlKDo6cnVzdDo6U3Ry IHMsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmdmFy cykgewotKzo6cnVzdDo6U3RyaW5nCi0rdmFyc3Vic3RpdHV0ZSAoOjpydXN0OjpTdHIgcywgOjpy dXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZ2YXJzKQotK3sK LSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFy c3Vic3RpdHV0ZShzLCB2YXJzLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikg ewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyc3Vi c3RpdHV0ZSAocywgdmFycywgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0r ICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChl cnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwot IH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZlYXR1cmVzKCkgbm9leGNl cHQgewotKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK2dldF9mZWF0dXJlcyAoKSBub2V4 Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9mZWF0dXJl cygmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2ZlYXR1cmVzICgmcmV0dXJuJC52 YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06 OnJ1c3Q6OlN0cmluZyBnZXRfcnBtX2Jhc2VhcmNoKCkgbm9leGNlcHQgewotKzo6cnVzdDo6U3Ry aW5nCi0rZ2V0X3JwbV9iYXNlYXJjaCAoKSBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkZ2V0X3JwbV9iYXNlYXJjaCgmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6 Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0 X3JwbV9iYXNlYXJjaCAoJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChy ZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tOjpzdGQ6OmludDMyX3Qgc2VhbGVkX21lbWZkKDo6cnVz dDo6U3RyIGRlc2NyaXB0aW9uLCA6OnJ1c3Q6OlNsaWNlPDo6c3RkOjp1aW50OF90IGNvbnN0PiBj b250ZW50KSB7Ci0rOjpzdGQ6OmludDMyX3QKLStzZWFsZWRfbWVtZmQgKDo6cnVzdDo6U3RyIGRl c2NyaXB0aW9uLCA6OnJ1c3Q6OlNsaWNlPDo6c3RkOjp1aW50OF90IGNvbnN0PiBjb250ZW50KQot K3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpzdGQ6OmludDMyX3Q+IHJldHVybiQ7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk c2VhbGVkX21lbWZkKGRlc2NyaXB0aW9uLCBjb250ZW50LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBp ZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRzZWFsZWRfbWVtZmQgKGRlc2NyaXB0aW9uLCBjb250ZW50LCAmcmV0 dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLWJvb2wgcnVubmluZ19p bl9zeXN0ZW1kKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRydW5uaW5nX2luX3N5c3RlbWQoKTsKLStib29sCi0rcnVubmluZ19pbl9zeXN0ZW1kICgp IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5u aW5nX2luX3N5c3RlbWQgKCk7Ci0gfQotIAotLTo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqY2Fs Y3VsYXRlX2Fkdmlzb3JpZXNfZGlmZig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm cmVwbywgOjpydXN0OjpTdHIgY2hlY2tzdW1fZnJvbSwgOjpydXN0OjpTdHIgY2hlY2tzdW1fdG8p IHsKLSs6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKgotK2NhbGN1bGF0ZV9hZHZpc29yaWVzX2Rp ZmYgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBj aGVja3N1bV9mcm9tLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGNo ZWNrc3VtX3RvKQotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OkdW YXJpYW50ICo+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FsY3VsYXRlX2Fkdmlzb3JpZXNfZGlmZihyZXBvLCBj aGVja3N1bV9mcm9tLCBjaGVja3N1bV90bywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9y JC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihl cnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNhbGN1bGF0ZV9hZHZpc29yaWVzX2RpZmYgKAotKyAgICAgIHJlcG8sIGNoZWNrc3VtX2Zyb20s IGNoZWNrc3VtX3RvLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQot IAotLTo6cnVzdDo6U3RyaW5nIHRyYW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUoOjpydXN0OjpTdHIg cGF0aCkgbm9leGNlcHQgewotKzo6cnVzdDo6U3RyaW5nCi0rdHJhbnNsYXRlX3BhdGhfZm9yX29z dHJlZSAoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHRyYW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUocGF0aCwgJnJldHVybiQudmFsdWUpOwotLSAg cmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHRyYW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUgKHBhdGgsICZyZXR1cm4kLnZhbHVl KTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnBt b3N0cmVlY3h4OjpMaXZlQXBwbHlTdGF0ZSBnZXRfbGl2ZV9hcHBseV9zdGF0ZSg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpIHsKLSs6OnJwbW9zdHJlZWN4eDo6TGl2ZUFw cGx5U3RhdGUKLStnZXRfbGl2ZV9hcHBseV9zdGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KQotK3sKLSAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OkxpdmVBcHBseVN0YXRlPiByZXR1cm4kOwotLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGdldF9saXZlX2FwcGx5X3N0YXRlKHN5c3Jvb3QsIGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVl KTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1 cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9saXZlX2FwcGx5X3N0YXRlIChzeXNyb290LCBk ZXBsb3ltZW50LCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAot LWJvb2wgaGFzX2xpdmVfYXBwbHlfc3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3Qg Y29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZk ZXBsb3ltZW50KSB7Ci0rYm9vbAotK2hhc19saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAg OjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpCi0rewot ICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhhc19saXZlX2FwcGx5 X3N0YXRlKHN5c3Jvb3QsIGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJv ciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGhhc19saXZlX2FwcGx5X3N0YXRlIChzeXNyb290LCBkZXBsb3ltZW50LCAmcmV0 dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgYXBwbHlsaXZl X3N5bmNfcmVmKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSB7 Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkYXBwbHlsaXZlX3N5bmNfcmVmKHN5c3Jvb3QpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsK LS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwot LSAgfQotK3ZvaWQKLSthcHBseWxpdmVfc3luY19yZWYgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVT eXNyb290IGNvbnN0ICZzeXNyb290KQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfc3luY19yZWYgKHN5c3Jv b3QpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQg dHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25z dCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZ0YXJnZXQpIHsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR0cmFuc2FjdGlvbl9hcHBseV9saXZlKHN5c3Jvb3QsIHRhcmdldCk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0rdm9pZAotK3RyYW5zYWN0aW9uX2FwcGx5X2xpdmUgKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAotKyAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmdGFyZ2V0KQotK3sKLSsgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHRyYW5zYWN0aW9uX2FwcGx5X2xpdmUgKHN5c3Jvb3QsIHRhcmdldCk7Ci0rICBpZiAoZXJy b3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBub3JtYWxpemVfZXRjX3No YWRvdyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSB7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbm9ybWFsaXplX2V0Y19zaGFk b3cocm9vdGZzX2RmZCk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK25vcm1h bGl6ZV9ldGNfc2hhZG93ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKQotK3sKLSsgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRub3Jt YWxpemVfZXRjX3NoYWRvdyAocm9vdGZzX2RmZCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAg ewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7Ci0rICAgIH0KLSB9Ci0gCi0tYm9vbCBwcmVwYXJlX3JwbV9sYXllcmluZyg6OnN0ZDo6aW50 MzJfdCByb290ZnMsIDo6c3RkOjppbnQzMl90IG1lcmdlX3Bhc3N3ZF9kaXIpIHsKLStib29sCi0r cHJlcGFyZV9ycG1fbGF5ZXJpbmcgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpzdGQ6OmludDMy X3QgbWVyZ2VfcGFzc3dkX2RpcikKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJl dHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkcHJlcGFyZV9ycG1fbGF5ZXJpbmcocm9vdGZzLCBtZXJnZV9wYXNzd2RfZGly LCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX3JwbV9sYXll cmluZyAocm9vdGZzLCBtZXJnZV9wYXNzd2RfZGlyLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAo ZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgY29tcGxldGVfcnBtX2xheWVyaW5nKDo6c3RkOjpp bnQzMl90IHJvb3RmcykgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBsZXRlX3JwbV9sYXllcmluZyhyb290ZnMpOwotLSAg aWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStjb21wbGV0ZV9ycG1fbGF5ZXJpbmcgKDo6 c3RkOjppbnQzMl90IHJvb3RmcykKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcGxldGVfcnBtX2xheWVyaW5nIChyb290 ZnMpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQg ZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyg6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKLS0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRyaWVzKHJvb3Rmcyk7Ci0tICBpZiAoZXJyb3IkLnB0 cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7Ci0tICB9Ci0rdm9pZAotK2RlZHVwbGljYXRlX3RtcGZpbGVzX2VudHJpZXMgKDo6c3RkOjpp bnQzMl90IHJvb3RmcykKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyAocm9v dGZzKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotIH0KLSAKLS12b2lk IHBhc3N3ZF9jbGVhbnVwKDo6c3RkOjppbnQzMl90IHJvb3RmcykgewotLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jbGVh bnVwKHJvb3Rmcyk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK3Bhc3N3ZF9j bGVhbnVwICg6OnN0ZDo6aW50MzJfdCByb290ZnMpCi0rewotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jbGVhbnVwIChy b290ZnMpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZv aWQgbWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmcHJlc2VydmVkX2dyb3VwcykgewotLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1p Z3JhdGVfZ3JvdXBfZXhjZXB0X3Jvb3Qocm9vdGZzLCBwcmVzZXJ2ZWRfZ3JvdXBzKTsKLS0gIGlm IChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSt2b2lkCi0rbWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCAo OjpzdGQ6OmludDMyX3Qgcm9vdGZzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmcHJlc2VydmVkX2dyb3VwcykKLSt7Ci0rICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRtaWdyYXRlX2dyb3VwX2V4Y2VwdF9yb290IChyb290ZnMsIHByZXNlcnZlZF9ncm91 cHMpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQg bWlncmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7Ci0tICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk bWlncmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3Qocm9vdGZzKTsKLS0gIGlmIChlcnJvciQucHRyKSB7 Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK LS0gIH0KLSt2b2lkCi0rbWlncmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3QgKDo6c3RkOjppbnQzMl90 IHJvb3RmcykKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkbWlncmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3QgKHJvb3Rmcyk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBwYXNzd2Rf Y29tcG9zZV9wcmVwKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZ0cmVlZmlsZSkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jb21wb3NlX3ByZXAocm9vdGZzLCB0cmVlZmls ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK3Bhc3N3ZF9jb21wb3NlX3By ZXAgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVl ZmlsZSkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcCAocm9vdGZzLCB0cmVlZmlsZSk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0tdm9pZCBwYXNzd2Rf Y29tcG9zZV9wcmVwX3JlcG8oOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgJnRyZWVmaWxlLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVw bywgOjpydXN0OjpTdHIgcHJldmlvdXNfY2hlY2tzdW0sIGJvb2wgdW5pZmllZF9jb3JlKSB7Ci0t ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcGFzc3dkX2NvbXBvc2VfcHJlcF9yZXBvKHJvb3RmcywgdHJlZWZpbGUsIHJlcG8sIHByZXZp b3VzX2NoZWNrc3VtLCB1bmlmaWVkX2NvcmUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQot K3ZvaWQKLStwYXNzd2RfY29tcG9zZV9wcmVwX3JlcG8gKDo6c3RkOjppbnQzMl90IHJvb3Rmcywg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0 ciBwcmV2aW91c19jaGVja3N1bSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5p ZmllZF9jb3JlKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RfY29tcG9zZV9wcmVwX3JlcG8gKAotKyAgICAgIHJv b3RmcywgdHJlZWZpbGUsIHJlcG8sIHByZXZpb3VzX2NoZWNrc3VtLCB1bmlmaWVkX2NvcmUpOwot KyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLWJvb2wgZGlyX2Nv bnRhaW5zX3VpZCg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKSB7Ci0r Ym9vbAotK2Rpcl9jb250YWluc191aWQgKDo6c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWlu dDMyX3QgaWQpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOwotLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRpcl9jb250YWluc191aWQoZGlyZmQsIGlkLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJy b3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0r ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRkaXJfY29udGFpbnNfdWlkIChkaXJmZCwgaWQsICZyZXR1cm4kLnZhbHVlKTsK LSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKLSB9Ci0gCi0tYm9vbCBkaXJfY29udGFpbnNfZ2lkKDo6c3Rk OjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQpIHsKLStib29sCi0rZGlyX2NvbnRh aW5zX2dpZCAoOjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCkKLSt7Ci0g ICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyX2NvbnRhaW5zX2dp ZChkaXJmZCwgaWQsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0K LS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLS19Ci0tCi0tdm9pZCBjaGVj a19wYXNzd2RfZ3JvdXBfZW50cmllcyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm ZmZpX3JlcG8sIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6U3RyIHByZXZpb3VzX3JldikgewotLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX3Bh c3N3ZF9ncm91cF9lbnRyaWVzKGZmaV9yZXBvLCByb290ZnNfZGZkLCB0cmVlZmlsZSwgcHJldmlv dXNfcmV2KTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLSsgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250 YWluc19naWQgKGRpcmZkLCBpZCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIp Ci0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OwotK30KLSsKLSt2b2lkCi0rY2hlY2tfcGFzc3dkX2dyb3VwX2VudHJpZXMgKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl ICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgcHJldmlvdXNfcmV2KQotK3sKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19wYXNz d2RfZ3JvdXBfZW50cmllcyAoCi0rICAgICAgZmZpX3JlcG8sIHJvb3Rmc19kZmQsIHRyZWVmaWxl LCBwcmV2aW91c19yZXYpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0g fQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj4gcGFzc3dkZGJfb3Bl big6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UGFzc3dkREI+Ci0rcGFzc3dkZGJfb3BlbiAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKQotK3sKLSAg IDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERC Pj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRwYXNzd2RkYl9vcGVuKHJvb3RmcywgJnJldHVybiQudmFsdWUpOwot LSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHBhc3N3ZGRiX29wZW4gKHJvb3RmcywgJnJldHVybiQudmFsdWUpOwotKyAg aWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUg KHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IFBhc3N3ZERCOjpsYXlvdXQ6 OnNpemUoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFBhc3N3ZERCJG9wZXJhdG9yJHNpemVvZigpOwotKzo6c3RkOjpzaXplX3QKLStQYXNzd2REQjo6 bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRQYXNzd2REQiRvcGVyYXRvciRzaXplb2YgKCk7Ci0gfQotIAotLTo6c3RkOjpz aXplX3QgUGFzc3dkREI6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6 OnN0ZDo6c2l6ZV90Ci0rUGFzc3dkREI6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJhdG9yJGFs aWdub2YgKCk7Ci0gfQotIAotLTo6cnVzdDo6U3RyaW5nIFBhc3N3ZERCOjpsb29rdXBfdXNlcig6 OnN0ZDo6dWludDMyX3QgdWlkKSBjb25zdCB7Ci0rOjpydXN0OjpTdHJpbmcKLStQYXNzd2REQjo6 bG9va3VwX3VzZXIgKDo6c3RkOjp1aW50MzJfdCB1aWQpIGNvbnN0Ci0rewotICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBf dXNlcigqdGhpcywgdWlkLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewot LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0t ICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQ YXNzd2REQiRsb29rdXBfdXNlciAoKnRoaXMsIHVpZCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYg KGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJl dHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlN0cmluZyBQYXNzd2REQjo6bG9va3VwX2dy b3VwKDo6c3RkOjp1aW50MzJfdCBnaWQpIGNvbnN0IHsKLSs6OnJ1c3Q6OlN0cmluZwotK1Bhc3N3 ZERCOjpsb29rdXBfZ3JvdXAgKDo6c3RkOjp1aW50MzJfdCBnaWQpIGNvbnN0Ci0rewotICAgOjpy dXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRs b29rdXBfZ3JvdXAoKnRoaXMsIGdpZCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUGFzc3dkREIkbG9va3VwX2dyb3VwICgqdGhpcywgZ2lkLCAmcmV0dXJuJC52YWx1ZSk7 Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpQYXNzd2RFbnRyaWVzPiBuZXdfcGFzc3dkX2VudHJpZXMoKSBub2V4Y2VwdCB7Ci0tICByZXR1 cm4gOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+Ojpmcm9tX3Jhdyhy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV3X3Bhc3N3ZF9lbnRyaWVzKCkpOwotKzo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzPgotK25ld19wYXNzd2RfZW50cmll cyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UGFzc3dkRW50cmllcz46OmZyb21fcmF3ICgKLSsgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkbmV3X3Bhc3N3ZF9lbnRyaWVzICgpKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBQYXNz d2RFbnRyaWVzOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkb3BlcmF0b3Ikc2l6ZW9mKCk7Ci0rOjpz dGQ6OnNpemVfdAotK1Bhc3N3ZEVudHJpZXM6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAotK3sK LSsgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVy YXRvciRzaXplb2YgKCk7Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgUGFzc3dkRW50cmllczo6bGF5 b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRhbGlnbm9mKCk7Ci0rOjpzdGQ6OnNpemVfdAot K1Bhc3N3ZEVudHJpZXM6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkb3BlcmF0b3IkYWxpZ25v ZiAoKTsKLSB9Ci0gCi0tdm9pZCBQYXNzd2RFbnRyaWVzOjphZGRfZ3JvdXBfY29udGVudCg6OnN0 ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpIHsKLS0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVz JGFkZF9ncm91cF9jb250ZW50KCp0aGlzLCByb290ZnMsIHBhdGgpOwotLSAgaWYgKGVycm9yJC5w dHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOwotLSAgfQotK3ZvaWQKLStQYXNzd2RFbnRyaWVzOjphZGRfZ3JvdXBfY29udGVudCAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKQotK3sKLSsgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBh c3N3ZEVudHJpZXMkYWRkX2dyb3VwX2NvbnRlbnQgKCp0aGlzLCByb290ZnMsIHBhdGgpOwotKyAg aWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0gfQotIAotLXZvaWQgUGFzc3dkRW50 cmllczo6YWRkX3Bhc3N3ZF9jb250ZW50KDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpT dHIgcGF0aCkgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX3Bhc3N3ZF9jb250ZW50KCp0aGlzLCBy b290ZnMsIHBhdGgpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotK3ZvaWQKLStQYXNzd2RF bnRyaWVzOjphZGRfcGFzc3dkX2NvbnRlbnQgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0 OjpTdHIgcGF0aCkKLSt7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGFkZF9wYXNzd2RfY29u dGVudCAoKnRoaXMsIHJvb3RmcywgcGF0aCk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewot KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 Ci0rICAgIH0KLSB9Ci0gCi0tYm9vbCBQYXNzd2RFbnRyaWVzOjpjb250YWluc19ncm91cCg6OnJ1 c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkY29udGFpbnNfZ3JvdXAoKnRoaXMsIHVzZXIpOwot K2Jvb2wKLStQYXNzd2RFbnRyaWVzOjpjb250YWluc19ncm91cCAoOjpydXN0OjpTdHIgdXNlcikg Y29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFBhc3N3ZEVudHJpZXMkY29udGFpbnNfZ3JvdXAgKCp0aGlzLCB1c2VyKTsKLSB9Ci0gCi0tYm9v bCBQYXNzd2RFbnRyaWVzOjpjb250YWluc191c2VyKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50 cmllcyRjb250YWluc191c2VyKCp0aGlzLCB1c2VyKTsKLStib29sCi0rUGFzc3dkRW50cmllczo6 Y29udGFpbnNfdXNlciAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkY29udGFpbnNf dXNlciAoKnRoaXMsIHVzZXIpOwotIH0KLSAKLS06OnN0ZDo6dWludDMyX3QgUGFzc3dkRW50cmll czo6bG9va3VwX3VzZXJfaWQoOjpydXN0OjpTdHIgdXNlcikgY29uc3QgewotKzo6c3RkOjp1aW50 MzJfdAotK1Bhc3N3ZEVudHJpZXM6Omxvb2t1cF91c2VyX2lkICg6OnJ1c3Q6OlN0ciB1c2VyKSBj b25zdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpzdGQ6OnVpbnQzMl90PiByZXR1cm4k OwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX3VzZXJfaWQoKnRoaXMsIHVzZXIsICZyZXR1cm4k LnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAg ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX3VzZXJf aWQgKCp0aGlzLCB1c2VyLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsg ICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Ci0g fQotIAotLTo6c3RkOjp1aW50MzJfdCBQYXNzd2RFbnRyaWVzOjpsb29rdXBfZ3JvdXBfaWQoOjpy dXN0OjpTdHIgZ3JvdXApIGNvbnN0IHsKLSs6OnN0ZDo6dWludDMyX3QKLStQYXNzd2RFbnRyaWVz Ojpsb29rdXBfZ3JvdXBfaWQgKDo6cnVzdDo6U3RyIGdyb3VwKSBjb25zdAotK3sKLSAgIDo6cnVz dDo6TWF5YmVVbmluaXQ8OjpzdGQ6OnVpbnQzMl90PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJp ZXMkbG9va3VwX2dyb3VwX2lkKCp0aGlzLCBncm91cCwgJnJldHVybiQudmFsdWUpOwotLSAgaWYg KGVycm9yJC5wdHIpIHsKLS0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOwotLSAgfQotLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUp OwotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRsb29rdXBfZ3JvdXBfaWQgKCp0aGlzLCBncm91 cCwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9 Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0KLSAKLS06OnN0ZDo6 c2l6ZV90IEV4dGVuc2lvbnM6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRvcGVyYXRvciRzaXplb2YoKTsK LSs6OnN0ZDo6c2l6ZV90Ci0rRXh0ZW5zaW9uczo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0r ewotKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJh dG9yJHNpemVvZiAoKTsKLSB9Ci0gCi0tOjpzdGQ6OnNpemVfdCBFeHRlbnNpb25zOjpsYXlvdXQ6 OmFsaWduKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRFeHRlbnNpb25zJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rRXh0ZW5z aW9uczo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRvcGVyYXRvciRhbGlnbm9mICgpOwotIH0KLSAK LS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4gZXh0ZW5zaW9uc19sb2Fk KDo6cnVzdDo6U3RyIHBhdGgsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6OlZlYzw6OnJw bW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJmJhc2VfcGtncykgewotKzo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPgotK2V4dGVuc2lvbnNfbG9hZCAoOjpydXN0 OjpTdHIgcGF0aCwgOjpydXN0OjpTdHIgYmFzZWFyY2gsCi0rICAgICAgICAgICAgICAgICA6OnJ1 c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJmJhc2VfcGtncykK LSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpF eHRlbnNpb25zPj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRleHRlbnNpb25zX2xvYWQocGF0aCwgYmFzZWFyY2gs IGJhc2VfcGtncywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQot LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZXh0ZW5z aW9uc19sb2FkIChwYXRoLCBiYXNlYXJjaCwgYmFzZV9wa2dzLCAmcmV0dXJuJC52YWx1ZSk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBF eHRlbnNpb25zOjpnZXRfcmVwb3MoKSBjb25zdCBub2V4Y2VwdCB7Ci0rOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+Ci0rRXh0ZW5zaW9uczo6Z2V0X3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0Ci0r ewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJl dHVybiQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfcmVw b3MoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKLSsgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9y ZXBvcyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKLSsgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7Ci0gfQotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBFeHRlbnNp b25zOjpnZXRfb3NfZXh0ZW5zaW9uX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK0V4dGVuc2lvbnM6OmdldF9vc19leHRlbnNpb25fcGFj a2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKLS0gIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRFeHRlbnNpb25zJGdldF9vc19leHRlbnNpb25fcGFja2FnZXMoKnRoaXMsICZyZXR1 cm4kLnZhbHVlKTsKLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKLSsgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9vc19leHRlbnNpb25fcGFj a2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJl dHVybiQudmFsdWUpOwotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gRXh0ZW5z aW9uczo6Z2V0X2RldmVsb3BtZW50X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgewotKzo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPgotK0V4dGVuc2lvbnM6OmdldF9kZXZlbG9wbWVudF9wYWNr YWdlcyAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwotLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEV4dGVuc2lvbnMkZ2V0X2RldmVsb3BtZW50X3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJu JC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfZGV2ZWxvcG1lbnRfcGFja2Fn ZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOwotIH0KLSAKLS1ib29sIEV4dGVuc2lvbnM6OnN0YXRlX2NoZWNrc3VtX2NoYW5n ZWQoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdCB7Ci0r Ym9vbAotK0V4dGVuc2lvbnM6OnN0YXRlX2NoZWNrc3VtX2NoYW5nZWQgKDo6cnVzdDo6U3RyIGNo a3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3QKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJl VW5pbml0PGJvb2w+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzdGF0ZV9jaGVja3N1bV9jaGFu Z2VkKCp0aGlzLCBjaGtzdW0sIG91dHB1dF9kaXIsICZyZXR1cm4kLnZhbHVlKTsKLS0gIGlmIChl cnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsK LSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRFeHRlbnNpb25zJHN0YXRlX2NoZWNrc3VtX2NoYW5nZWQgKAotKyAgICAgICp0aGlzLCBj aGtzdW0sIG91dHB1dF9kaXIsICZyZXR1cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQot KyAgICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK LSB9Ci0gCi0tdm9pZCBFeHRlbnNpb25zOjp1cGRhdGVfc3RhdGVfY2hlY2tzdW0oOjpydXN0OjpT dHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdCB7Ci0tICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9u cyR1cGRhdGVfc3RhdGVfY2hlY2tzdW0oKnRoaXMsIGNoa3N1bSwgb3V0cHV0X2Rpcik7Ci0tICBp ZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK0V4dGVuc2lvbnM6OnVwZGF0ZV9zdGF0ZV9j aGVja3N1bSAoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25z dAotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAotKyAgICAgID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkdXBkYXRlX3N0YXRlX2NoZWNrc3VtICgqdGhp cywgY2hrc3VtLCBvdXRwdXRfZGlyKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsg ICAgfQotIH0KLSAKLS12b2lkIEV4dGVuc2lvbnM6OnNlcmlhbGl6ZV90b19kaXIoOjpydXN0OjpT dHIgb3V0cHV0X2RpcikgY29uc3QgewotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkc2VyaWFsaXplX3RvX2Rpcigq dGhpcywgb3V0cHV0X2Rpcik7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0rdm9pZAotK0V4 dGVuc2lvbnM6OnNlcmlhbGl6ZV90b19kaXIgKDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0 Ci0rewotKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzZXJpYWxpemVfdG9fZGlyICgqdGhpcywgb3V0 cHV0X2Rpcik7Ci0rICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSB9Ci0gCi0t OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiBFeHRlbnNpb25zOjpnZW5lcmF0 ZV90cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYykgY29uc3Qgewot Kzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4KLStFeHRlbnNpb25zOjpnZW5l cmF0ZV90cmVlZmlsZSAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzcmMpIGNvbnN0 Ci0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGU+PiByZXR1cm4kOwotLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2VuZXJhdGVfdHJlZWZpbGUoKnRo aXMsIHNyYywgJnJldHVybiQudmFsdWUpOwotLSAgaWYgKGVycm9yJC5wdHIpIHsKLS0gICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwotLSAgfQotLSAg cmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwotKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkCi0rICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9u cyRnZW5lcmF0ZV90cmVlZmlsZSAoKnRoaXMsIHNyYywgJnJldHVybiQudmFsdWUpOwotKyAgaWYg KGVycm9yJC5wdHIpCi0rICAgIHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yIChlcnJvciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJl dHVybiQudmFsdWUpOwotIH0KLSAKLS06OnN0ZDo6c2l6ZV90IExvY2tmaWxlQ29uZmlnOjpsYXlv dXQ6OnNpemUoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJHNpemVvZigpOwotKzo6c3RkOjpzaXplX3QKLStM b2NrZmlsZUNvbmZpZzo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRvcGVyYXRvciRzaXplb2Yg KCk7Ci0gfQotIAotLTo6c3RkOjpzaXplX3QgTG9ja2ZpbGVDb25maWc6OmxheW91dDo6YWxpZ24o KSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tm aWxlQ29uZmlnJG9wZXJhdG9yJGFsaWdub2YoKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rTG9ja2ZpbGVD b25maWc6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJGFsaWdub2YgKCk7Ci0g fQotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4gbG9ja2Zp bGVfcmVhZCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcykgewot Kzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4KLStsb2NrZmlsZV9y ZWFkICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcykKLSt7Ci0g ICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmls ZUNvbmZpZz4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2ZpbGVfcmVhZChmaWxlbmFtZXMsICZyZXR1cm4k LnZhbHVlKTsKLS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKLS19Ci0tCi0tdm9pZCBsb2NrZmlsZV93cml0ZSg6OnJ1c3Q6OlN0 ciBmaWxlbmFtZSwgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcGFja2FnZXMsIDo6 cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnJwbW1kX3JlcG9zKSB7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2Zp bGVfd3JpdGUoZmlsZW5hbWUsIHBhY2thZ2VzLCBycG1tZF9yZXBvcyk7Ci0tICBpZiAoZXJyb3Ik LnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7Ci0tICB9Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2NrZmlsZV9yZWFkIChmaWxlbmFtZXMsICZyZXR1 cm4kLnZhbHVlKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAgICB7Ci0rICAgICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKLSsgICAgfQotKyAgcmV0 dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZAotK2xvY2tmaWxl X3dyaXRlICg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RB cnJheSAmcGFja2FnZXMsCi0rICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2Jq ZWN0QXJyYXkgJnJwbW1kX3JlcG9zKQotK3sKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JAotKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvY2tmaWxlX3dyaXRlIChm aWxlbmFtZSwgcGFja2FnZXMsIHJwbW1kX3JlcG9zKTsKLSsgIGlmIChlcnJvciQucHRyKQotKyAg ICB7Ci0rICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKLSsgICAgfQotIH0KLSAKLS06OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2Vk UGFja2FnZT4gTG9ja2ZpbGVDb25maWc6OmdldF9sb2NrZWRfcGFja2FnZXMoKSBjb25zdCB7Ci0r OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+Ci0rTG9ja2ZpbGVDb25m aWc6OmdldF9sb2NrZWRfcGFja2FnZXMgKCkgY29uc3QKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPj4gcmV0dXJuJDsK LS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRMb2NrZmlsZUNvbmZpZyRnZXRfbG9ja2VkX3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52 YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewotLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0tICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKLSsgICAgICA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRnZXRfbG9ja2VkX3Bh Y2thZ2VzICgqdGhpcywgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAg IHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0K LSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IG9yaWdpbl90b190cmVl ZmlsZSg6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmKSB7Ci0rOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgotK29yaWdpbl90b190cmVlZmlsZSAoOjpycG1vc3Ry ZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZikKLSt7Ci0gICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7Ci0tICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2lu X3RvX3RyZWVmaWxlKGtmLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICBpZiAoZXJyb3IkLnB0cikgewot LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Ci0t ICB9Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Ci0rICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3Rv X3RyZWVmaWxlIChrZiwgJnJldHVybiQudmFsdWUpOwotKyAgaWYgKGVycm9yJC5wdHIpCi0rICAg IHsKLSsgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOwotKyAgICB9Ci0rICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwotIH0K LSAKLS06OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgKnRyZWVmaWxlX3RvX29yaWdpbig6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKSB7Ci0rOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxl ICoKLSt0cmVlZmlsZV90b19vcmlnaW4gKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm dGYpCi0rewotICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUg Kj4gcmV0dXJuJDsKLS0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV90b19vcmlnaW4odGYsICZyZXR1cm4kLnZhbHVlKTsK LS0gIGlmIChlcnJvciQucHRyKSB7Ci0tICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKLS0gIH0KLS0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4k LnZhbHVlKTsKLSsgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCR0cmVlZmlsZV90b19vcmlnaW4gKHRmLCAmcmV0dXJuJC52YWx1ZSk7Ci0r ICBpZiAoZXJyb3IkLnB0cikKLSsgICAgewotKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Ci0rICAgIH0KLSsgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7Ci0gfQotIAotLXZvaWQgb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJp cCg6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmKSBub2V4Y2VwdCB7Ci0tICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJpcChrZik7Ci0r dm9pZAotK29yaWdpbl92YWxpZGF0ZV9yb3VuZHRyaXAgKDo6cnBtb3N0cmVlY3h4OjpHS2V5Rmls ZSBjb25zdCAma2YpIG5vZXhjZXB0Ci0rewotKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JG9yaWdpbl92YWxpZGF0ZV9yb3VuZHRyaXAgKGtmKTsKLSB9Ci0gCi0tOjpydXN0OjpTdHJpbmcg Y2FjaGVfYnJhbmNoX3RvX25ldnJhKDo6cnVzdDo6U3RyIG5ldnJhKSBub2V4Y2VwdCB7Ci0rOjpy dXN0OjpTdHJpbmcKLStjYWNoZV9icmFuY2hfdG9fbmV2cmEgKDo6cnVzdDo6U3RyIG5ldnJhKSBu b2V4Y2VwdAotK3sKLSAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVy biQ7Ci0tICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FjaGVfYnJhbmNoX3RvX25ldnJh KG5ldnJhLCAmcmV0dXJuJC52YWx1ZSk7Ci0tICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7Ci0rICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FjaGVfYnJhbmNoX3RvX25l dnJhIChuZXZyYSwgJnJldHVybiQudmFsdWUpOwotKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1 cm4kLnZhbHVlKTsKLSB9Ci0gfSAvLyBuYW1lc3BhY2UgcnBtb3N0cmVlY3h4Ci0gCi0tZXh0ZXJu ICJDIiB7Ci0tOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgKmN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRCdWJibGV3cmFwJGFsbG9jKCkgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3 cmFwICopIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJs ZXdyYXAkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gKnB0cikg bm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKmN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlJGFsbG9jKCkgbm9leGNl cHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0 ZSRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICopIG5vZXhjZXB0 OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUk ZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnB0 cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRhbGxvYygpIG5vZXhjZXB0OwotLXZvaWQg Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRkZWFsbG9jKDo6cnBtb3N0 cmVlY3h4OjpUZW1wRXRjR3VhcmQgKikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRlbXBFdGNHdWFyZD4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6OkZpbGVz eXN0ZW1TY3JpcHRQcmVwICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNj cmlwdFByZXAkYWxsb2MoKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lz dGVtU2NyaXB0UHJlcCAqKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyRmxhZ3MgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBv cnRlckZsYWdzJGFsbG9jKCkgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRl ckZsYWdzICopIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJw bUltcG9ydGVyRmxhZ3MkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXJGbGFncz4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy ICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkYWxsb2MoKSBub2V4Y2Vw dDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRkZWFsbG9j KDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAqKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlcj4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6 Okhpc3RvcnlDdHggKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGFsbG9j KCkgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0 eCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICopIG5vZXhjZXB0OwotLXZvaWQg Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgkZHJvcCg6OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3Ry ZWVjeHg6OlRva2lvSGFuZGxlICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5k bGUkYWxsb2MoKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRU b2tpb0hhbmRsZSRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZSAqKSBub2V4Y2Vw dDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZSRkcm9wKDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT4gKnB0cikgbm9leGNlcHQ7Ci0t Ci0tOjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZCAqY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRhbGxvYygpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4 OjpUb2tpb0VudGVyR3VhcmQgKikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRva2lvRW50ZXJHdWFyZD4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkYWxsb2MoKSBub2V4 Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkZWFsbG9j KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAqKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZT4gKnB0cikgbm9leGNlcHQ7Ci0tCi0tdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JG5ldyg6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0tdm9p ZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGRy b3AoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIp IG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVj eHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRsZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92 ZXJyaWRlUmVwbGFjZW1lbnQ+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotLTo6c3RkOjpzaXplX3Qg Y3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRjYXBh Y2l0eSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gY29u c3QgKnB0cikgbm9leGNlcHQ7Ci0tOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQg Y29uc3QgKmN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1l bnQkZGF0YSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4g Y29uc3QgKnB0cikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJl ZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHJlc2VydmVfdG90YWwoOjpydXN0OjpWZWM8OjpycG1v c3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIsIDo6c3RkOjpzaXplX3QgbmV3X2Nh cCkgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVy cmlkZVJlcGxhY2VtZW50JHNldF9sZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJy aWRlUmVwbGFjZW1lbnQ+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKLS12b2lk IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1 bmNhdGUoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpw dHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKLS0KLS12b2lkIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbmV3KDo6cnVzdDo6VmVjPDo6cnBtb3N0 cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckZHJvcCg6OnJ1c3Q6OlZl Yzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0cikgbm9leGNlcHQ7Ci0tOjpzdGQ6 OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGxl big6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikg bm9leGNlcHQ7Ci0tOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4 eCRTdHJpbmdNYXBwaW5nJGNhcGFjaXR5KDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJp bmdNYXBwaW5nPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLS06OnJwbW9zdHJlZWN4eDo6U3RyaW5n TWFwcGluZyBjb25zdCAqY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFw cGluZyRkYXRhKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25z dCAqcHRyKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JFN0cmluZ01hcHBpbmckcmVzZXJ2ZV90b3RhbCg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6 U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKLS12 b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckc2V0X2xl big6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6 OnNpemVfdCBsZW4pIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkU3RyaW5nTWFwcGluZyR0cnVuY2F0ZSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6 U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OwotLQotLTo6 cnBtb3N0cmVlY3h4OjpQYXNzd2REQiAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3 ZERCJGFsbG9jKCkgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk UGFzc3dkREIkZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKikgbm9leGNlcHQ7Ci0t dm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZHJvcCg6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+ICpwdHIpIG5vZXhjZXB0OwotLQotLTo6cnBtb3N0 cmVlY3h4OjpQYXNzd2RFbnRyaWVzICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dk RW50cmllcyRhbGxvYygpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFBhc3N3ZEVudHJpZXMkZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAq KSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRy aWVzJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+ICpwdHIp IG5vZXhjZXB0OwotLQotLTo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICpjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRhbGxvYygpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6 RXh0ZW5zaW9ucyAqKSBub2V4Y2VwdDsKLS12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRFeHRlbnNpb25zJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+ ICpwdHIpIG5vZXhjZXB0OwotLQotLTo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGFsbG9jKCkgbm9leGNlcHQ7 Ci0tdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckZGVhbGxv Yyg6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgKikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckZHJvcCg6OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+ICpwdHIpIG5vZXhjZXB0OwotLQotLXZvaWQg Y3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRuZXcoOjpydXN0 OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0 OwotLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRk cm9wKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyKSBub2V4 Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExv Y2tlZFBhY2thZ2UkbGVuKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdl PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLS06OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92 ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkY2FwYWNpdHkoOjpydXN0OjpWZWM8OjpycG1v c3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotLTo6cnBtb3N0 cmVlY3h4OjpMb2NrZWRQYWNrYWdlIGNvbnN0ICpjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJl ZWN4eCRMb2NrZWRQYWNrYWdlJGRhdGEoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tl ZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRydXN0X3Zl YyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRyZXNlcnZlX3RvdGFsKDo6cnVzdDo6VmVjPDo6 cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IG5ld19jYXAp IG5vZXhjZXB0OwotLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2Vk UGFja2FnZSRzZXRfbGVuKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdl PiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0tdm9pZCBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHRydW5jYXRlKDo6cnVzdDo6VmVjPDo6 cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9l eGNlcHQ7Ci0tCi0tc3RhdGljX2Fzc2VydCg6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8Ojpz dGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojp0eXBl Pjo6dmFsdWUsICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlv bmAgaXMgcmVxdWlyZWQiKTsKLS1zdGF0aWNfYXNzZXJ0KHNpemVvZig6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4pID09IHNpemVvZih2b2lkICopLCAi Iik7Ci0tc3RhdGljX2Fzc2VydChhbGlnbm9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpDbGllbnRDb25uZWN0aW9uPikgPT0gYWxpZ25vZih2b2lkICopLCAiIik7Ci0tdm9pZCBj eHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24kbnVsbCg6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gKnB0cikg bm9leGNlcHQgewotLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OkNsaWVudENvbm5lY3Rpb24+KCk7Ci0tfQotLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRy JHJwbW9zdHJlZWN4eCRDbGllbnRDb25uZWN0aW9uJHJhdyg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gKnB0ciwgOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQgewot LSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENv bm5lY3Rpb24+KHJhdyk7Ci0tfQotLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpD bGllbnRDb25uZWN0aW9uPjo6ZWxlbWVudF90eXBlIGNvbnN0ICpjeHhicmlkZ2UxJHVuaXF1ZV9w dHIkcnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24kZ2V0KDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiBjb25zdCAmcHRyKSBub2V4Y2VwdCB7Ci0t ICByZXR1cm4gcHRyLmdldCgpOwotLX0KLS06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6Q2xpZW50Q29ubmVjdGlvbj46OnBvaW50ZXIgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9z dHJlZWN4eCRDbGllbnRDb25uZWN0aW9uJHJlbGVhc2UoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICZwdHIpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBw dHIucmVsZWFzZSgpOwotLX0KLS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVj eHgkQ2xpZW50Q29ubmVjdGlvbiRkcm9wKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpDbGllbnRDb25uZWN0aW9uPiAqcHRyKSBub2V4Y2VwdCB7Ci0tICA6OnJ1c3Q6OmRlbGV0ZXJf aWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25u ZWN0aW9uPjo6dmFsdWU+e30ocHRyKTsKLS19Ci0tCi0tc3RhdGljX2Fzc2VydCg6OnJ1c3Q6OmRl dGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OlJQ TURpZmY+Ojp0eXBlPjo6dmFsdWUsICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6UlBN RGlmZmAgaXMgcmVxdWlyZWQiKTsKLS1zdGF0aWNfYXNzZXJ0KHNpemVvZig6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4pID09IHNpemVvZih2b2lkICopLCAiIik7Ci0t c3RhdGljX2Fzc2VydChhbGlnbm9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpS UE1EaWZmPikgPT0gYWxpZ25vZih2b2lkICopLCAiIik7Ci0tdm9pZCBjeHhicmlkZ2UxJHVuaXF1 ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkbnVsbCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9z dHJlZWN4eDo6UlBNRGlmZj4gKnB0cikgbm9leGNlcHQgewotLSAgOjpuZXcgKHB0cikgOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+KCk7Ci0tfQotLXZvaWQgY3h4YnJp ZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1EaWZmJHJhdyg6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKnB0ciwgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlJQTURpZmY+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQgewotLSAgOjpuZXcgKHB0 cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+KHJhdyk7Ci0tfQot LTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6ZWxlbWVudF90eXBl IGNvbnN0ICpjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkZ2V0KDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiBjb25zdCAmcHRyKSBub2V4 Y2VwdCB7Ci0tICByZXR1cm4gcHRyLmdldCgpOwotLX0KLS06OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UlBNRGlmZj46OnBvaW50ZXIgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9z dHJlZWN4eCRSUE1EaWZmJHJlbGVhc2UoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlJQTURpZmY+ICZwdHIpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBwdHIucmVsZWFzZSgpOwotLX0K LS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRkcm9wKDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiAqcHRyKSBub2V4Y2VwdCB7 Ci0tICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBt b3N0cmVlY3h4OjpSUE1EaWZmPjo6dmFsdWU+e30ocHRyKTsKLS19Ci0tCi0tc3RhdGljX2Fzc2Vy dCg6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1v c3RyZWVjeHg6OlByb2dyZXNzPjo6dHlwZT46OnZhbHVlLCAiZGVmaW5pdGlvbiBvZiBgOjpycG1v c3RyZWVjeHg6OlByb2dyZXNzYCBpcyByZXF1aXJlZCIpOwotLXN0YXRpY19hc3NlcnQoc2l6ZW9m KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4pID09IHNpemVvZih2 b2lkICopLCAiIik7Ci0tc3RhdGljX2Fzc2VydChhbGlnbm9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4pID09IGFsaWdub2Yodm9pZCAqKSwgIiIpOwotLXZvaWQg Y3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRudWxsKDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKnB0cikgbm9leGNlcHQgewotLSAg OjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPigp OwotLX0KLS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUHJvZ3Jlc3Mk cmF3KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKnB0ciwgOjpz dGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6cG9pbnRlciByYXcpIG5v ZXhjZXB0IHsKLS0gIDo6bmV3IChwdHIpIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzcz4ocmF3KTsKLS19Ci0tOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlByb2dyZXNzPjo6ZWxlbWVudF90eXBlIGNvbnN0ICpjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBt b3N0cmVlY3h4JFByb2dyZXNzJGdldCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UHJvZ3Jlc3M+IGNvbnN0ICZwdHIpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBwdHIuZ2V0KCk7Ci0t fQotLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz46OnBvaW50ZXIg Y3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRyZWxlYXNlKDo6c3Rk Ojp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gJnB0cikgbm9leGNlcHQgewot LSAgcmV0dXJuIHB0ci5yZWxlYXNlKCk7Ci0tfQotLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRy JHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRkcm9wKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpQcm9ncmVzcz4gKnB0cikgbm9leGNlcHQgewotLSAgOjpydXN0OjpkZWxldGVyX2lmPDo6 cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojp2YWx1 ZT57fShwdHIpOwotLX0KLS0KLS1zdGF0aWNfYXNzZXJ0KDo6cnVzdDo6ZGV0YWlsOjppc19jb21w bGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojp0eXBlPjo6 dmFsdWUsICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6UnBtVHNgIGlzIHJlcXVpcmVk Iik7Ci0tc3RhdGljX2Fzc2VydChzaXplb2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OlJwbVRzPikgPT0gc2l6ZW9mKHZvaWQgKiksICIiKTsKLS1zdGF0aWNfYXNzZXJ0KGFsaWdu b2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPikgPT0gYWxpZ25vZih2 b2lkICopLCAiIik7Ci0tdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJw bVRzJG51bGwoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAqcHRyKSBu b2V4Y2VwdCB7Ci0tICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6UnBtVHM+KCk7Ci0tfQotLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4 eCRScG1UcyRyYXcoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAqcHRy LCA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojpwb2ludGVyIHJhdykg bm9leGNlcHQgewotLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OlJwbVRzPihyYXcpOwotLX0KLS06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UnBtVHM+OjplbGVtZW50X3R5cGUgY29uc3QgKmN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3Ry ZWVjeHgkUnBtVHMkZ2V0KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4g Y29uc3QgJnB0cikgbm9leGNlcHQgewotLSAgcmV0dXJuIHB0ci5nZXQoKTsKLS19Ci0tOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPjo6cG9pbnRlciBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJHJlbGVhc2UoOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OlJwbVRzPiAmcHRyKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcHRyLnJlbGVh c2UoKTsKLS19Ci0tdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRz JGRyb3AoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAqcHRyKSBub2V4 Y2VwdCB7Ci0tICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRl PDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OnZhbHVlPnt9KHB0cik7Ci0tfQotLQotLXN0YXRpY19h c3NlcnQoOjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6c3RkOjpyZW1vdmVfZXh0ZW50PDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnR5cGU+Ojp2YWx1ZSwgImRlZmluaXRpb24gb2Yg YDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YWAgaXMgcmVxdWlyZWQiKTsKLS1zdGF0aWNfYXNz ZXJ0KHNpemVvZig6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ KSA9PSBzaXplb2Yodm9pZCAqKSwgIiIpOwotLXN0YXRpY19hc3NlcnQoYWxpZ25vZig6OnN0ZDo6 dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+KSA9PSBhbGlnbm9mKHZvaWQg KiksICIiKTsKLS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2Fn ZU1ldGEkbnVsbCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ ICpwdHIpIG5vZXhjZXB0IHsKLS0gIDo6bmV3IChwdHIpIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4oKTsKLS19Ci0tdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9w dHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRhJHJhdyg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9z dHJlZWN4eDo6UGFja2FnZU1ldGE+ICpwdHIsIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpQYWNrYWdlTWV0YT46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdCB7Ci0tICA6Om5ldyAocHRy KSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+KHJhdyk7Ci0t fQotLTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OmVsZW1l bnRfdHlwZSBjb25zdCAqY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdl TWV0YSRnZXQoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiBj b25zdCAmcHRyKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gcHRyLmdldCgpOwotLX0KLS06OnN0ZDo6 dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+Ojpwb2ludGVyIGN4eGJyaWRn ZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkcmVsZWFzZSg6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICZwdHIpIG5vZXhjZXB0IHsKLS0g IHJldHVybiBwdHIucmVsZWFzZSgpOwotLX0KLS12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRy cG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkZHJvcCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJl ZWN4eDo6UGFja2FnZU1ldGE+ICpwdHIpIG5vZXhjZXB0IHsKLS0gIDo6cnVzdDo6ZGVsZXRlcl9p Zjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRh Pjo6dmFsdWU+e30ocHRyKTsKLS19Ci0rZXh0ZXJuICJDIgotK3sKLSsgIDo6cnBtb3N0cmVlY3h4 OjpCdWJibGV3cmFwICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRhbGxv YyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJs ZXdyYXAkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgKikgbm9leGNlcHQ7Ci0r ICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGRyb3AgKAotKyAg ICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiAqcHRyKSBub2V4Y2Vw dDsKLSsKLSsgIDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICoKLSsgIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlJGFsbG9jICgpIG5vZXhj ZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VT dGF0ZSRkZWFsbG9jICgKLSsgICAgICA6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0 ZSAqKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRh aW5lckltYWdlU3RhdGUkZHJvcCAoCi0rICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OkNvbnRhaW5lckltYWdlU3RhdGU+ICpwdHIpIG5vZXhjZXB0OwotKwotKyAgOjpycG1vc3RyZWVj eHg6OlRlbXBFdGNHdWFyZCAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFy ZCRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JFRlbXBFdGNHdWFyZCRkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICopIG5v ZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJk JGRyb3AgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+ ICpwdHIpIG5vZXhjZXB0OwotKwotKyAgOjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQ cmVwICoKLSsgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJl cCRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRlYWxsb2MgKAotKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpG aWxlc3lzdGVtU2NyaXB0UHJlcCAqKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRyb3AgKAotKyAgICAgIDo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD4gKnB0cikgbm9leGNlcHQ7 Ci0rCi0rICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyAqY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MkYWxsb2MgKCkgbm9leGNlcHQ7Ci0rICB2b2lk IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRlYWxsb2MgKAot KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICopIG5vZXhjZXB0OwotKyAg dm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRkcm9wICgK LSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gKnB0 cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgKmN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZv aWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyJGRlYWxsb2MgKDo6cnBt b3N0cmVlY3h4OjpScG1JbXBvcnRlciAqKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyJGRyb3AgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj4gKnB0cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJwbW9z dHJlZWN4eDo6SGlzdG9yeUN0eCAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlD dHgkYWxsb2MgKCkgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRIaXN0b3J5Q3R4JGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICopIG5vZXhj ZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkcm9w ICgKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gKnB0cikg bm9leGNlcHQ7Ci0rCi0rICA6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKmN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZSRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQg Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRlYWxsb2MgKDo6cnBtb3N0 cmVlY3h4OjpUb2tpb0hhbmRsZSAqKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRyb3AgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpUb2tpb0hhbmRsZT4gKnB0cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJwbW9zdHJl ZWN4eDo6VG9raW9FbnRlckd1YXJkICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9F bnRlckd1YXJkJGFsbG9jICgpIG5vZXhjZXB0OwotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6VG9r aW9FbnRlckd1YXJkICopIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkVG9raW9FbnRlckd1YXJkJGRyb3AgKAotKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+ICpwdHIpIG5vZXhjZXB0OwotKwotKyAgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkYWxs b2MgKCkgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVl ZmlsZSRkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgKikgbm9leGNlcHQ7Ci0rICB2 b2lkCi0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkZHJvcCAoOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcHRyKSBub2V4Y2VwdDsKLSsKLSsgIHZv aWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRu ZXcgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLSsgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRy cG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRkcm9wICgKLSsgICAgICA6OnJ1c3Q6OlZl Yzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gKnB0cikgbm9leGNlcHQ7Ci0r ICA6OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRl UmVwbGFjZW1lbnQkbGVuICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3Zl cnJpZGVSZXBsYWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6c2l6ZV90 IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkY2Fw YWNpdHkgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxh Y2VtZW50PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4OjpPdmVycmlk ZVJlcGxhY2VtZW50IGNvbnN0ICoKLSsgIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JE92ZXJyaWRlUmVwbGFjZW1lbnQkZGF0YSAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3Ry ZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotKyAgdm9p ZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHJl c2VydmVfdG90YWwgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlk ZVJlcGxhY2VtZW50PiAqcHRyLCA6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OwotKyAg dm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50 JHNldF9sZW4gKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJl cGxhY2VtZW50PiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1bmNh dGUgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50PiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0rCi0rICB2b2lkIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbmV3ICgKLSsgICAgICA6 OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikgbm9l eGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01h cHBpbmckZHJvcCAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01h cHBpbmc+ICpwdHIpIG5vZXhjZXB0OwotKyAgOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGxlbiAoCi0rICAgICAgOjpydXN0OjpWZWM8 OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotKyAg OjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBw aW5nJGNhcGFjaXR5ICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5n TWFwcGluZz4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0rICA6OnJwbW9zdHJlZWN4eDo6U3RyaW5n TWFwcGluZyBjb25zdCAqY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFw cGluZyRkYXRhICgKLSsgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFw cGluZz4gY29uc3QgKnB0cikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckcmVzZXJ2ZV90b3RhbCAoCi0rICAgICAgOjpydXN0 OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+ICpwdHIsIDo6c3RkOjpzaXplX3Qg bmV3X2NhcCkgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVl Y3h4JFN0cmluZ01hcHBpbmckc2V0X2xlbiAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3Ry ZWVjeHg6OlN0cmluZ01hcHBpbmc+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsK LSsgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyR0 cnVuY2F0ZSAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBp bmc+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKLSsKLSsgIDo6cnBtb3N0cmVl Y3h4OjpQYXNzd2REQiAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGFsbG9j ICgpIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dk REIkZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCICopIG5vZXhjZXB0OwotKyAgdm9p ZAotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGRyb3AgKDo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj4gKnB0cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJw bW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBh c3N3ZEVudHJpZXMkYWxsb2MgKCkgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RF bnRyaWVzICopIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk UGFzc3dkRW50cmllcyRkcm9wICgKLSsgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UGFzc3dkRW50cmllcz4gKnB0cikgbm9leGNlcHQ7Ci0rCi0rICA6OnJwbW9zdHJlZWN4eDo6RXh0 ZW5zaW9ucyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkYWxsb2MgKCkg bm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25z JGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICopIG5vZXhjZXB0OwotKyAgdm9p ZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRkcm9wICgKLSsgICAgICA6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4gKnB0cikgbm9leGNlcHQ7Ci0r Ci0rICA6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgKmN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRhbGxvYyAoKSBub2V4Y2VwdDsKLSsgIHZvaWQKLSsgIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRkZWFsbG9jICg6OnJwbW9z dHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgKikgbm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZyRkcm9wICgKLSsgICAgICA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+ICpwdHIpIG5vZXhjZXB0OwotKwotKyAg dm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJG5ldyAo Ci0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0 ICpwdHIpIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4 eCRMb2NrZWRQYWNrYWdlJGRyb3AgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4 OjpMb2NrZWRQYWNrYWdlPiAqcHRyKSBub2V4Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRsZW4gKAotKyAgICAgIDo6 cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiBjb25zdCAqcHRyKSBub2V4 Y2VwdDsKLSsgIDo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgk TG9ja2VkUGFja2FnZSRjYXBhY2l0eSAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVj eHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVj eHg6OkxvY2tlZFBhY2thZ2UgY29uc3QgKmN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JExvY2tlZFBhY2thZ2UkZGF0YSAoCi0rICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2Ux JHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHJlc2VydmVfdG90YWwgKAotKyAg ICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyLCA6OnN0 ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OwotKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHNldF9sZW4gKAotKyAgICAgIDo6cnVzdDo6VmVj PDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikg bm9leGNlcHQ7Ci0rICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tl ZFBhY2thZ2UkdHJ1bmNhdGUgKAotKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpM b2NrZWRQYWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7Ci0rCi0rICBz dGF0aWNfYXNzZXJ0ICg6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8Ci0rICAgICAgICAgICAg ICAgICAgICAgOjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5l Y3Rpb24+Ojp0eXBlPjo6dmFsdWUsCi0rICAgICAgICAgICAgICAgICAiZGVmaW5pdGlvbiBvZiBg OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb25gIGlzIHJlcXVpcmVkIik7Ci0rICBzdGF0 aWNfYXNzZXJ0IChzaXplb2YgKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGll bnRDb25uZWN0aW9uPikgPT0gc2l6ZW9mICh2b2lkICopLAotKyAgICAgICAgICAgICAgICAgIiIp OwotKyAgc3RhdGljX2Fzc2VydCAoYWxpZ25vZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3Ry ZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+KSA9PSBhbGlnbm9mICh2b2lkICopLAotKyAgICAgICAg ICAgICAgICAgIiIpOwotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJl ZWN4eCRDbGllbnRDb25uZWN0aW9uJG51bGwgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAqcHRyKSBub2V4Y2VwdAotKyAgewotKyAg ICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25u ZWN0aW9uPiAoKTsKLSsgIH0KLSsgIHZvaWQKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1v c3RyZWVjeHgkQ2xpZW50Q29ubmVjdGlvbiRyYXcgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRy PDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAqcHRyLAotKyAgICAgIDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPjo6cG9pbnRlciByYXcp IG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+IChyYXcpOwotKyAgfQotKyAgOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+OjplbGVtZW50X3R5cGUgY29u c3QgKgotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGllbnRDb25uZWN0 aW9uJGdldCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVu dENvbm5lY3Rpb24+IGNvbnN0ICZwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHJldHVybiBwdHIu Z2V0ICgpOwotKyAgfQotKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVu dENvbm5lY3Rpb24+Ojpwb2ludGVyCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVl Y3h4JENsaWVudENvbm5lY3Rpb24kcmVsZWFzZSAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ICZwdHIpIG5vZXhjZXB0Ci0rICB7Ci0r ICAgIHJldHVybiBwdHIucmVsZWFzZSAoKTsKLSsgIH0KLSsgIHZvaWQKLSsgIGN4eGJyaWRnZTEk dW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkQ2xpZW50Q29ubmVjdGlvbiRkcm9wICgKLSsgICAgICA6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gKnB0cikg bm9leGNlcHQKLSsgIHsKLSsgICAgOjpydXN0OjpkZWxldGVyX2lmPDo6cnVzdDo6ZGV0YWlsOjpp c19jb21wbGV0ZTw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46OnZhbHVlPnt9KHB0 cik7Ci0rICB9Ci0rCi0rICBzdGF0aWNfYXNzZXJ0ICgKLSsgICAgICA6OnJ1c3Q6OmRldGFpbDo6 aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ Ojp0eXBlPjo6dmFsdWUsCi0rICAgICAgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpS UE1EaWZmYCBpcyByZXF1aXJlZCIpOwotKyAgc3RhdGljX2Fzc2VydCAoc2l6ZW9mICg6OnN0ZDo6 dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4pID09IHNpemVvZiAodm9pZCAqKSwg IiIpOwotKyAgc3RhdGljX2Fzc2VydCAoYWxpZ25vZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlJQTURpZmY+KSA9PSBhbGlnbm9mICh2b2lkICopLCAiIik7Ci0rICB2b2lkCi0r ICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkbnVsbCAoCi0rICAg ICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICpwdHIpIG5vZXhj ZXB0Ci0rICB7Ci0rICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OlJQTURpZmY+ICgpOwotKyAgfQotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRy JHJwbW9zdHJlZWN4eCRSUE1EaWZmJHJhdyAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OlJQTURpZmY+ICpwdHIsCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8Ojpy cG1vc3RyZWVjeHg6OlJQTURpZmY+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQKLSsgIHsKLSsgICAg OjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKHJh dyk7Ci0rICB9Ci0rICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46 OmVsZW1lbnRfdHlwZSBjb25zdCAqCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVl Y3h4JFJQTURpZmYkZ2V0ICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6UlBNRGlmZj4gY29uc3QgJnB0cikgbm9leGNlcHQKLSsgIHsKLSsgICAgcmV0dXJuIHB0ci5n ZXQgKCk7Ci0rICB9Ci0rICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlm Zj46OnBvaW50ZXIKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlm ZiRyZWxlYXNlICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBN RGlmZj4gJnB0cikgbm9leGNlcHQKLSsgIHsKLSsgICAgcmV0dXJuIHB0ci5yZWxlYXNlICgpOwot KyAgfQotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1E aWZmJGRyb3AgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1E aWZmPiAqcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0 OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6dmFsdWU+e30o cHRyKTsKLSsgIH0KLSsKLSsgIHN0YXRpY19hc3NlcnQgKAotKyAgICAgIDo6cnVzdDo6ZGV0YWls Ojppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jl c3M+Ojp0eXBlPjo6dmFsdWUsCi0rICAgICAgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzc2AgaXMgcmVxdWlyZWQiKTsKLSsgIHN0YXRpY19hc3NlcnQgKHNpemVvZiAoOjpz dGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPikgPT0gc2l6ZW9mICh2b2lk ICopLCAiIik7Ci0rICBzdGF0aWNfYXNzZXJ0IChhbGlnbm9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+KSA9PSBhbGlnbm9mICh2b2lkICopLCAiIik7Ci0rICB2 b2lkCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJG51bGwg KAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKnB0 cikgbm9leGNlcHQKLSsgIHsKLSsgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UHJvZ3Jlc3M+ICgpOwotKyAgfQotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1 bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRyYXcgKAotKyAgICAgIDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKnB0ciwKLSsgICAgICA6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQK LSsgIHsKLSsgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UHJvZ3Jlc3M+IChyYXcpOwotKyAgfQotKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVj eHg6OlByb2dyZXNzPjo6ZWxlbWVudF90eXBlIGNvbnN0ICoKLSsgIGN4eGJyaWRnZTEkdW5pcXVl X3B0ciRycG1vc3RyZWVjeHgkUHJvZ3Jlc3MkZ2V0ICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0 cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+IGNvbnN0ICZwdHIpIG5vZXhjZXB0Ci0rICB7Ci0r ICAgIHJldHVybiBwdHIuZ2V0ICgpOwotKyAgfQotKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlByb2dyZXNzPjo6cG9pbnRlcgotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJw bW9zdHJlZWN4eCRQcm9ncmVzcyRyZWxlYXNlICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+ICZwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIHJldHVy biBwdHIucmVsZWFzZSAoKTsKLSsgIH0KLSsgIHZvaWQKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0 ciRycG1vc3RyZWVjeHgkUHJvZ3Jlc3MkZHJvcCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPiAqcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICA6OnJ1 c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzcz46OnZhbHVlPnt9KHB0cik7Ci0rICB9Ci0rCi0rICBzdGF0aWNfYXNzZXJ0ICgK LSsgICAgICA6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8 OjpycG1vc3RyZWVjeHg6OlJwbVRzPjo6dHlwZT46OnZhbHVlLAotKyAgICAgICJkZWZpbml0aW9u IG9mIGA6OnJwbW9zdHJlZWN4eDo6UnBtVHNgIGlzIHJlcXVpcmVkIik7Ci0rICBzdGF0aWNfYXNz ZXJ0IChzaXplb2YgKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4pID09 IHNpemVvZiAodm9pZCAqKSwgIiIpOwotKyAgc3RhdGljX2Fzc2VydCAoYWxpZ25vZiAoOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPikgPT0gYWxpZ25vZiAodm9pZCAqKSwg IiIpOwotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRScG1U cyRudWxsICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ ICpwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAoKTsKLSsgIH0KLSsgIHZvaWQKLSsgIGN4eGJyaWRnZTEk dW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkcmF3ICgKLSsgICAgICA6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICpwdHIsCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9w dHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPjo6cG9pbnRlciByYXcpIG5vZXhjZXB0Ci0rICB7Ci0r ICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAo cmF3KTsKLSsgIH0KLSsgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46 OmVsZW1lbnRfdHlwZSBjb25zdCAqCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVl Y3h4JFJwbVRzJGdldCAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OlJwbVRzPiBjb25zdCAmcHRyKSBub2V4Y2VwdAotKyAgewotKyAgICByZXR1cm4gcHRyLmdldCAo KTsKLSsgIH0KLSsgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OnBv aW50ZXIKLSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkcmVsZWFz ZSAoCi0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAmcHRy KSBub2V4Y2VwdAotKyAgewotKyAgICByZXR1cm4gcHRyLnJlbGVhc2UgKCk7Ci0rICB9Ci0rICB2 b2lkCi0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJGRyb3AgKAot KyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gKnB0cikgbm9l eGNlcHQKLSsgIHsKLSsgICAgOjpydXN0OjpkZWxldGVyX2lmPDo6cnVzdDo6ZGV0YWlsOjppc19j b21wbGV0ZTw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojp2YWx1ZT57fShwdHIpOwotKyAgfQotKwot KyAgc3RhdGljX2Fzc2VydCAoCi0rICAgICAgOjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6 c3RkOjpyZW1vdmVfZXh0ZW50PDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnR5cGU+Ojp2 YWx1ZSwKLSsgICAgICAiZGVmaW5pdGlvbiBvZiBgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRh YCBpcyByZXF1aXJlZCIpOwotKyAgc3RhdGljX2Fzc2VydCAoc2l6ZW9mICg6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+KSA9PSBzaXplb2YgKHZvaWQgKiksICIi KTsKLSsgIHN0YXRpY19hc3NlcnQgKGFsaWdub2YgKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpQYWNrYWdlTWV0YT4pID09IGFsaWdub2YgKHZvaWQgKiksICIiKTsKLSsgIHZvaWQK LSsgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkbnVsbCAo Ci0rICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAq cHRyKSBub2V4Y2VwdAotKyAgewotKyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKCk7Ci0rICB9Ci0rICB2b2lkCi0rICBjeHhicmlk Z2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRhJHJhdyAoCi0rICAgICAgOjpz dGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAqcHRyLAotKyAgICAg IDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnBvaW50ZXIg cmF3KSBub2V4Y2VwdAotKyAgewotKyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gKHJhdyk7Ci0rICB9Ci0rICA6OnN0ZDo6dW5pcXVl X3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+OjplbGVtZW50X3R5cGUgY29uc3QgKgot KyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRnZXQgKAot KyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gY29u c3QgJnB0cikgbm9leGNlcHQKLSsgIHsKLSsgICAgcmV0dXJuIHB0ci5nZXQgKCk7Ci0rICB9Ci0r ICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+Ojpwb2ludGVy Ci0rICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRhJHJlbGVh c2UgKAotKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0 YT4gJnB0cikgbm9leGNlcHQKLSsgIHsKLSsgICAgcmV0dXJuIHB0ci5yZWxlYXNlICgpOwotKyAg fQotKyAgdm9pZAotKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdl TWV0YSRkcm9wICgKLSsgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGE+ICpwdHIpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIDo6cnVzdDo6ZGVsZXRlcl9pZjw6 OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6 dmFsdWU+e30ocHRyKTsKLSsgIH0KLSB9IC8vIGV4dGVybiAiQyIKLSAKLS1uYW1lc3BhY2UgcnVz dCB7Ci0taW5saW5lIG5hbWVzcGFjZSBjeHhicmlkZ2UxIHsKLStuYW1lc3BhY2UgcnVzdAotK3sK LStpbmxpbmUgbmFtZXNwYWNlIGN4eGJyaWRnZTEKLSt7Ci0gdGVtcGxhdGUgPD4KLS06OnJwbW9z dHJlZWN4eDo6QnViYmxld3JhcCAqQm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPjo6YWxs b2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JEJ1YmJsZXdyYXAkYWxsb2MoKTsKLSs6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cCAqCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPjo6YWxsb2NhdGlvbjo6YWxsb2Mg KCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1 YmJsZXdyYXAkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1vc3Ry ZWVjeHg6OkJ1YmJsZXdyYXA+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwICpwdHIpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRCdWJibGV3cmFwJGRlYWxsb2MocHRyKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdy YXAgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnVi Ymxld3JhcCRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBt b3N0cmVlY3h4OjpCdWJibGV3cmFwPjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJw bW9zdHJlZWN4eDo6QnViYmxld3JhcD46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRkcm9wICh0aGlzKTsKLSB9Ci0gdGVtcGxh dGUgPD4KLS06OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZSAqQm94PDo6cnBtb3N0 cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdl U3RhdGUkYWxsb2MoKTsKLSs6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZSAqCi0r Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPjo6YWxsb2NhdGlvbjo6YWxs b2MgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JENvbnRhaW5lckltYWdlU3RhdGUkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBC b3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+OjphbGxvY2F0aW9uOjpkZWFs bG9jKDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICpwdHIpIG5vZXhjZXB0IHsK LS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlJGRlYWxs b2MocHRyKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRl Pjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoCi0rICAgIDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJ bWFnZVN0YXRlICpwdHIpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JENvbnRhaW5lckltYWdlU3RhdGUkZGVhbGxvYyAocHRyKTsKLSB9Ci0gdGVtcGxhdGUgPD4K LS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT46OmRyb3AoKSBu b2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VT dGF0ZSRkcm9wKHRoaXMpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lcklt YWdlU3RhdGU+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+ Ci0tOjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1w RXRjR3VhcmQ+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGFsbG9jKCk7Ci0rOjpycG1vc3Ry ZWVjeHg6OlRlbXBFdGNHdWFyZCAqCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+ OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGFsbG9jICgpOwotIH0KLSB0ZW1wbGF0ZSA8 PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+OjphbGxvY2F0aW9uOjpk ZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQgKnB0cikgbm9leGNlcHQgewotLSAg Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRkZWFsbG9jKHB0cik7Ci0r dm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPjo6YWxsb2NhdGlvbjo6ZGVh bGxvYyAoOjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqcHRyKSBub2V4Y2VwdAotK3sKLSsg IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQkZGVhbGxvYyAocHRyKTsK LSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJk Pjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1w RXRjR3VhcmQkZHJvcCh0aGlzKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRj R3VhcmQ+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFRlbXBFdGNHdWFyZCRkcm9wICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnJwbW9z dHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgKkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5 c3RlbVNjcmlwdFByZXA+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJldHVy biBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkYWxsb2Mo KTsKLSs6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgKgotK0JveDw6OnJwbW9z dHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4 Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3Rl bVNjcmlwdFByZXAkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1v c3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJw bW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgKnB0cikgbm9leGNlcHQgewotLSAgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRlYWxsb2MocHRy KTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD46OmFs bG9jYXRpb246OmRlYWxsb2MgKAotKyAgICA6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlw dFByZXAgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk RmlsZXN5c3RlbVNjcmlwdFByZXAkZGVhbGxvYyAocHRyKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12 b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+Ojpkcm9wKCkgbm9l eGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQ cmVwJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNj cmlwdFByZXA+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRyb3AgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8 PgotLTo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICpCb3g8OjpycG1vc3RyZWVjeHg6 OlJwbUltcG9ydGVyRmxhZ3M+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJl dHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRhbGxvYygp OwotKzo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICoKLStCb3g8OjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyRmxhZ3M+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sK LSsgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRh bGxvYyAoKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6UnBt SW1wb3J0ZXJGbGFncz46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlJwbUlt cG9ydGVyRmxhZ3MgKnB0cikgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFJwbUltcG9ydGVyRmxhZ3MkZGVhbGxvYyhwdHIpOwotK3ZvaWQKLStCb3g8OjpycG1vc3Ry ZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+OjphbGxvY2F0aW9uOjpkZWFsbG9jICgKLSsgICAgOjpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRkZWFsbG9jIChwdHIpOwot IH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZs YWdzPjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRS cG1JbXBvcnRlckZsYWdzJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXJGbGFncz46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRkcm9wICh0aGlzKTsKLSB9Ci0gdGVtcGxh dGUgPD4KLS06OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgKkJveDw6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXI+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkYWxsb2MoKTsKLSs6OnJwbW9z dHJlZWN4eDo6UnBtSW1wb3J0ZXIgKgotK0JveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+ OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+ Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPjo6YWxsb2NhdGlvbjo6ZGVh bGxvYyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgKnB0cikgbm9leGNlcHQgewotLSAgY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyJGRlYWxsb2MocHRyKTsKLSt2b2lk Ci0rQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj46OmFsbG9jYXRpb246OmRlYWxsb2Mg KDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAqcHRyKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRkZWFsbG9jIChwdHIpOwotIH0KLSB0 ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj46OmRyb3Ao KSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIk ZHJvcCh0aGlzKTsKLSt2b2lkCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj46OmRy b3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1w b3J0ZXIkZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6Okhp c3RvcnlDdHggKkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD46OmFsbG9jYXRpb246OmFs bG9jKCkgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRI aXN0b3J5Q3R4JGFsbG9jKCk7Ci0rOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKgotK0JveDw6 OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0 Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGFs bG9jICgpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0 b3J5Q3R4Pjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAq cHRyKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0 eCRkZWFsbG9jKHB0cik7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD46 OmFsbG9jYXRpb246OmRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICpwdHIpIG5v ZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgkZGVh bGxvYyAocHRyKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6 SGlzdG9yeUN0eD46OmRyb3AoKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkSGlzdG9yeUN0eCRkcm9wKHRoaXMpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6 Okhpc3RvcnlDdHg+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JEhpc3RvcnlDdHgkZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpy cG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxl Pjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGFsbG9jKCk7Ci0rOjpycG1vc3RyZWVjeHg6OlRv a2lvSGFuZGxlICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPjo6YWxsb2NhdGlv bjo6YWxsb2MgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFRva2lvSGFuZGxlJGFsbG9jICgpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94 PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1v c3RyZWVjeHg6OlRva2lvSGFuZGxlICpwdHIpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZSRkZWFsbG9jKHB0cik7Ci0rdm9pZAotK0JveDw6OnJw bW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJl ZWN4eDo6VG9raW9IYW5kbGUgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkZGVhbGxvYyAocHRyKTsKLSB9Ci0gdGVtcGxhdGUgPD4K LS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+Ojpkcm9wKCkgbm9leGNlcHQg ewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRyb3AodGhpcyk7 Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+Ojpkcm9wICgpIG5vZXhj ZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRyb3Ag KHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3Vh cmQgKkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6YWxsb2NhdGlvbjo6YWxs b2MoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRv a2lvRW50ZXJHdWFyZCRhbGxvYygpOwotKzo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQg KgotK0JveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6YWxsb2NhdGlvbjo6YWxs b2MgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JFRva2lvRW50ZXJHdWFyZCRhbGxvYyAoKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJveDw6 OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJw bW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkICpwdHIpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0VudGVyR3VhcmQkZGVhbGxvYyhwdHIpOwotK3ZvaWQK LStCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD46OmFsbG9jYXRpb246OmRlYWxs b2MgKAotKyAgICA6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkICpwdHIpIG5vZXhjZXB0 Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRkZWFs bG9jIChwdHIpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpU b2tpb0VudGVyR3VhcmQ+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRkcm9wKHRoaXMpOwotK3ZvaWQKLStCb3g8OjpycG1v c3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGRyb3AgKHRoaXMpOwotIH0K LSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAqQm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgewotLSAgcmV0dXJu IGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRhbGxvYygpOwotKzo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAqCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT46OmFsbG9j YXRpb246OmFsbG9jICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRUcmVlZmlsZSRhbGxvYyAoKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJv eDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAqcHRyKSBub2V4Y2VwdCB7Ci0tICBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkVHJlZWZpbGUkZGVhbGxvYyhwdHIpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICpwdHIpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRy ZWVmaWxlJGRlYWxsb2MgKHB0cik7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlPjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkcm9wKHRoaXMpOwotK3ZvaWQKLStCb3g8OjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlPjo6ZHJvcCAoKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkcm9wICh0aGlzKTsKLSB9Ci0tdGVtcGxhdGUgPD4KLS1W ZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpWZWMoKSBub2V4Y2VwdCB7 Ci0tICBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50 JG5ldyh0aGlzKTsKLSt0ZW1wbGF0ZSA8PiBWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVw bGFjZW1lbnQ+OjpWZWMgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJw bW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JG5ldyAodGhpcyk7Ci0gfQotIHRlbXBsYXRl IDw+Ci0tdm9pZCBWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+Ojpkcm9w KCkgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JE92ZXJyaWRlUmVwbGFjZW1lbnQkZHJvcCh0aGlzKTsKLSt2b2lkCi0rVmVjPDo6cnBtb3N0cmVl Y3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6ZHJvcCAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVy biBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGRy b3AgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6c3RkOjpzaXplX3QgVmVjPDo6cnBtb3N0 cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6c2l6ZSgpIGNvbnN0IG5vZXhjZXB0IHsKLS0g IHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2Vt ZW50JGxlbih0aGlzKTsKLSs6OnN0ZDo6c2l6ZV90Ci0rVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVy cmlkZVJlcGxhY2VtZW50Pjo6c2l6ZSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBj eHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGxlbiAo dGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpzdGQ6OnNpemVfdCBWZWM8OjpycG1vc3RyZWVj eHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpjYXBhY2l0eSgpIGNvbnN0IG5vZXhjZXB0IHsKLS0g IHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2Vt ZW50JGNhcGFjaXR5KHRoaXMpOwotKzo6c3RkOjpzaXplX3QKLStWZWM8OjpycG1vc3RyZWVjeHg6 Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpjYXBhY2l0eSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsg IHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2Vt ZW50JGNhcGFjaXR5ICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnJwbW9zdHJlZWN4eDo6 T3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAqVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJl cGxhY2VtZW50Pjo6ZGF0YSgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2Ux JHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGRhdGEodGhpcyk7Ci0r OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgKgotK1ZlYzw6OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OmRhdGEgKCkgY29uc3Qgbm9leGNlcHQKLSt7 Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBs YWNlbWVudCRkYXRhICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIFZlYzw6OnJwbW9z dHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OnJlc2VydmVfdG90YWwoOjpzdGQ6OnNpemVf dCBuZXdfY2FwKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRyZXNlcnZlX3RvdGFsKHRoaXMsIG5ld19jYXAp OwotK3ZvaWQKLStWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpyZXNl cnZlX3RvdGFsICg6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkcmVz ZXJ2ZV90b3RhbCAodGhpcywgbmV3X2NhcCk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBWZWM8 OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpzZXRfbGVuKDo6c3RkOjpzaXpl X3QgbGVuKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRzZXRfbGVuKHRoaXMsIGxlbik7Ci0rdm9pZAotK1Zl Yzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD46OnNldF9sZW4gKDo6c3RkOjpz aXplX3QgbGVuKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJw bW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHNldF9sZW4gKHRoaXMsIGxlbik7Ci0gfQot IHRlbXBsYXRlIDw+Ci0tdm9pZCBWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1l bnQ+Ojp0cnVuY2F0ZSg6OnN0ZDo6c2l6ZV90IGxlbikgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1bmNhdGUodGhpcywg bGVuKTsKLSt2b2lkCi0rVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6 dHJ1bmNhdGUgKDo6c3RkOjpzaXplX3QgbGVuKQotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHRydW5jYXRlICh0aGlzLCBs ZW4pOwotIH0KLS10ZW1wbGF0ZSA8PgotLVZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGlu Zz46OlZlYygpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JFN0cmluZ01hcHBpbmckbmV3KHRoaXMpOwotK3RlbXBsYXRlIDw+IFZlYzw6OnJwbW9zdHJlZWN4 eDo6U3RyaW5nTWFwcGluZz46OlZlYyAoKSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbmV3ICh0aGlzKTsKLSB9Ci0gdGVtcGxh dGUgPD4KLS12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OmRyb3AoKSBu b2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3Ry aW5nTWFwcGluZyRkcm9wKHRoaXMpOwotK3ZvaWQKLStWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmlu Z01hcHBpbmc+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBs YXRlIDw+Ci0tOjpzdGQ6OnNpemVfdCBWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+ OjpzaXplKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbGVuKHRoaXMpOwotKzo6c3RkOjpzaXplX3QKLStW ZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpzaXplICgpIGNvbnN0IG5vZXhjZXB0 Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01h cHBpbmckbGVuICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnN0ZDo6c2l6ZV90IFZlYzw6 OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OmNhcGFjaXR5KCkgY29uc3Qgbm9leGNlcHQg ewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBp bmckY2FwYWNpdHkodGhpcyk7Ci0rOjpzdGQ6OnNpemVfdAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6 U3RyaW5nTWFwcGluZz46OmNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckY2FwYWNpdHkg KHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLTo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5n IGNvbnN0ICpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpkYXRhKCkgY29uc3Qg bm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmckZGF0YSh0aGlzKTsKLSs6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZyBj b25zdCAqCi0rVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6ZGF0YSAoKSBjb25z dCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4 eCRTdHJpbmdNYXBwaW5nJGRhdGEgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVj PDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6cmVzZXJ2ZV90b3RhbCg6OnN0ZDo6c2l6 ZV90IG5ld19jYXApIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJw bW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHJlc2VydmVfdG90YWwodGhpcywgbmV3X2NhcCk7Ci0r dm9pZAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OnJlc2VydmVfdG90YWwg KDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdl MSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRyZXNlcnZlX3RvdGFsICh0aGlz LCBuZXdfY2FwKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6 U3RyaW5nTWFwcGluZz46OnNldF9sZW4oOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0IHsKLS0g IHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHNl dF9sZW4odGhpcywgbGVuKTsKLSt2b2lkCi0rVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBw aW5nPjo6c2V0X2xlbiAoOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJu IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckc2V0X2xlbiAo dGhpcywgbGVuKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6 U3RyaW5nTWFwcGluZz46OnRydW5jYXRlKDo6c3RkOjpzaXplX3QgbGVuKSB7Ci0tICByZXR1cm4g Y3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyR0cnVuY2F0ZSh0 aGlzLCBsZW4pOwotK3ZvaWQKLStWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+Ojp0 cnVuY2F0ZSAoOjpzdGQ6OnNpemVfdCBsZW4pCi0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckdHJ1bmNhdGUgKHRoaXMsIGxlbik7Ci0g fQotIHRlbXBsYXRlIDw+Ci0tOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCICpCb3g8OjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZERCPjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7Ci0tICByZXR1 cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGFsbG9jKCk7Ci0rOjpycG1v c3RyZWVjeHg6OlBhc3N3ZERCICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPjo6YWxs b2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JFBhc3N3ZERCJGFsbG9jICgpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQg Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1v c3RyZWVjeHg6OlBhc3N3ZERCICpwdHIpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRQYXNzd2REQiRkZWFsbG9jKHB0cik7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJl ZWN4eDo6UGFzc3dkREI+OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6UGFz c3dkREIgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk UGFzc3dkREIkZGVhbGxvYyAocHRyKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJveDw6OnJw bW9zdHJlZWN4eDo6UGFzc3dkREI+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJwbW9z dHJlZWN4eDo6UGFzc3dkREI+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGRyb3AgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8Pgot LTo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3 ZEVudHJpZXM+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRhbGxvYygpOwotKzo6cnBtb3N0 cmVlY3h4OjpQYXNzd2RFbnRyaWVzICoKLStCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJp ZXM+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRhbGxvYyAoKTsKLSB9Ci0gdGVtcGxh dGUgPD4KLS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmFsbG9jYXRp b246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKnB0cikgbm9leGNlcHQg ewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMkZGVhbGxvYyhw dHIpOwotK3ZvaWQKLStCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+OjphbGxvY2F0 aW9uOjpkZWFsbG9jICgKLSsgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKnB0cikg bm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmll cyRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVl Y3h4OjpQYXNzd2RFbnRyaWVzPjo6ZHJvcCgpIG5vZXhjZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJw bW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmRyb3AgKCkgbm9leGNlcHQKLSt7Ci0rICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRkcm9wICh0aGlzKTsKLSB9Ci0g dGVtcGxhdGUgPD4KLS06OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyAqQm94PDo6cnBtb3N0cmVl Y3h4OjpFeHRlbnNpb25zPjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7Ci0tICByZXR1 cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkYWxsb2MoKTsKLSs6OnJw bW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyAqCi0rQm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25z Pjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+ Ci0tdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+OjphbGxvY2F0aW9uOjpkZWFs bG9jKDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zICpwdHIpIG5vZXhjZXB0IHsKLS0gIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRlYWxsb2MocHRyKTsKLSt2b2lkCi0r Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoOjpy cG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRkZWFsbG9jIChwdHIpOwotIH0KLSB0ZW1wbGF0 ZSA8PgotLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPjo6ZHJvcCgpIG5vZXhj ZXB0IHsKLS0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRyb3AodGhp cyk7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz46OmRyb3AgKCkgbm9l eGNlcHQKLSt7Ci0rICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRkcm9w ICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS06OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25m aWcgKkJveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+OjphbGxvY2F0aW9uOjphbGxv YygpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9j a2ZpbGVDb25maWckYWxsb2MoKTsKLSs6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgKgot K0JveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+OjphbGxvY2F0aW9uOjphbGxvYyAo KSBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9j a2ZpbGVDb25maWckYWxsb2MgKCk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tdm9pZCBCb3g8OjpycG1v c3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJl ZWN4eDo6TG9ja2ZpbGVDb25maWcgKnB0cikgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGRlYWxsb2MocHRyKTsKLSt2b2lkCi0rQm94PDo6 cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz46OmFsbG9jYXRpb246OmRlYWxsb2MgKAotKyAg ICA6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgKnB0cikgbm9leGNlcHQKLSt7Ci0rICBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckZGVhbGxvYyAocHRyKTsK LSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25m aWc+Ojpkcm9wKCkgbm9leGNlcHQgewotLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExv Y2tmaWxlQ29uZmlnJGRyb3AodGhpcyk7Ci0rdm9pZAotK0JveDw6OnJwbW9zdHJlZWN4eDo6TG9j a2ZpbGVDb25maWc+Ojpkcm9wICgpIG5vZXhjZXB0Ci0rewotKyAgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGRyb3AgKHRoaXMpOwotIH0KLS10ZW1wbGF0ZSA8Pgot LVZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OlZlYygpIG5vZXhjZXB0IHsKLS0g IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkbmV3KHRoaXMp OwotK3RlbXBsYXRlIDw+IFZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OlZlYyAo KSBub2V4Y2VwdAotK3sKLSsgIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tl ZFBhY2thZ2UkbmV3ICh0aGlzKTsKLSB9Ci0gdGVtcGxhdGUgPD4KLS12b2lkIFZlYzw6OnJwbW9z dHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OmRyb3AoKSBub2V4Y2VwdCB7Ci0tICByZXR1cm4gY3h4 YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRkcm9wKHRoaXMpOwot K3ZvaWQKLStWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+Ojpkcm9wICgpIG5vZXhj ZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tl ZFBhY2thZ2UkZHJvcCAodGhpcyk7Ci0gfQotIHRlbXBsYXRlIDw+Ci0tOjpzdGQ6OnNpemVfdCBW ZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+OjpzaXplKCkgY29uc3Qgbm9leGNlcHQg ewotLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2th Z2UkbGVuKHRoaXMpOwotKzo6c3RkOjpzaXplX3QKLStWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tl ZFBhY2thZ2U+OjpzaXplICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkbGVuICh0aGlzKTsKLSB9Ci0g dGVtcGxhdGUgPD4KLS06OnN0ZDo6c2l6ZV90IFZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFj a2FnZT46OmNhcGFjaXR5KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4eGJyaWRnZTEk cnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkY2FwYWNpdHkodGhpcyk7Ci0rOjpz dGQ6OnNpemVfdAotK1ZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OmNhcGFjaXR5 ICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkY2FwYWNpdHkgKHRoaXMpOwotIH0KLSB0ZW1wbGF0ZSA8 PgotLTo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlIGNvbnN0ICpWZWM8OjpycG1vc3RyZWVj eHg6OkxvY2tlZFBhY2thZ2U+OjpkYXRhKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkZGF0YSh0aGlzKTsK LSs6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZSBjb25zdCAqCi0rVmVjPDo6cnBtb3N0cmVl Y3h4OjpMb2NrZWRQYWNrYWdlPjo6ZGF0YSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVy biBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGRhdGEgKHRo aXMpOwotIH0KLSB0ZW1wbGF0ZSA8PgotLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQ YWNrYWdlPjo6cmVzZXJ2ZV90b3RhbCg6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0IHsK LS0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdl JHJlc2VydmVfdG90YWwodGhpcywgbmV3X2NhcCk7Ci0rdm9pZAotK1ZlYzw6OnJwbW9zdHJlZWN4 eDo6TG9ja2VkUGFja2FnZT46OnJlc2VydmVfdG90YWwgKDo6c3RkOjpzaXplX3QgbmV3X2NhcCkg bm9leGNlcHQKLSt7Ci0rICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgk TG9ja2VkUGFja2FnZSRyZXNlcnZlX3RvdGFsICh0aGlzLCBuZXdfY2FwKTsKLSB9Ci0gdGVtcGxh dGUgPD4KLS12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnNldF9sZW4o OjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHNldF9sZW4odGhpcywgbGVuKTsKLSt2b2lk Ci0rVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6c2V0X2xlbiAoOjpzdGQ6OnNp emVfdCBsZW4pIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JExvY2tlZFBhY2thZ2Ukc2V0X2xlbiAodGhpcywgbGVuKTsKLSB9Ci0gdGVtcGxh dGUgPD4KLS12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnRydW5jYXRl KDo6c3RkOjpzaXplX3QgbGVuKSB7Ci0tICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkTG9ja2VkUGFja2FnZSR0cnVuY2F0ZSh0aGlzLCBsZW4pOwotK3ZvaWQKLStWZWM8 OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+Ojp0cnVuY2F0ZSAoOjpzdGQ6OnNpemVfdCBs ZW4pCi0rewotKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tl ZFBhY2thZ2UkdHJ1bmNhdGUgKHRoaXMsIGxlbik7Ci0gfQotIH0gLy8gbmFtZXNwYWNlIGN4eGJy aWRnZTEKLSB9IC8vIG5hbWVzcGFjZSBydXN0Ci1kaWZmIC0tZ2l0IGEvcnBtb3N0cmVlLWN4eHJz LmggYi9ycG1vc3RyZWUtY3h4cnMuaAotaW5kZXggOWFkMWM3MmVlYS4uMWM3MGZmZDkzNSAxMDA2 NDQKLS0tLSBhL3JwbW9zdHJlZS1jeHhycy5oCi0rKysgYi9ycG1vc3RyZWUtY3h4cnMuaAotQEAg LTEsMTYgKzEsMTUgQEAKLSAjcHJhZ21hIG9uY2UKLS0jaW5jbHVkZSAic3JjL2xpYnByaXYvcnBt b3N0cmVlLWN4eHJzLXByZWx1ZGUuaCIKLSsjaW5jbHVkZSAicnBtb3N0cmVlLWNsaWVudGxpYi5o IgotICNpbmNsdWRlICJycG1vc3RyZWUtY29udGFpbmVyLmhwcCIKLSAjaW5jbHVkZSAicnBtb3N0 cmVlLWN4eHJzdXRpbC5ocHAiCi0tI2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCi0tI2luY2x1 ZGUgInJwbW9zdHJlZW1haW4uaCIKLS0jaW5jbHVkZSAicnBtb3N0cmVlLWNsaWVudGxpYi5oIgot ICNpbmNsdWRlICJycG1vc3RyZWUtZGlmZi5ocHAiCi0gI2luY2x1ZGUgInJwbW9zdHJlZS1saWJi dWlsdGluLmgiCi0tI2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCi0gI2luY2x1ZGUgInJwbW9z dHJlZS1vdXRwdXQuaCIKLS0jaW5jbHVkZSAicnBtb3N0cmVlLXJwbS11dGlsLmgiCi0gI2luY2x1 ZGUgInJwbW9zdHJlZS1wYWNrYWdlLXZhcmlhbnRzLmgiCi0rI2luY2x1ZGUgInJwbW9zdHJlZS1y cG0tdXRpbC5oIgotKyNpbmNsdWRlICJycG1vc3RyZWUtdXRpbC5oIgotKyNpbmNsdWRlICJycG1v c3RyZWVtYWluLmgiCi0rI2luY2x1ZGUgInNyYy9saWJwcml2L3JwbW9zdHJlZS1jeHhycy1wcmVs dWRlLmgiCi0gI2luY2x1ZGUgPGFsZ29yaXRobT4KLSAjaW5jbHVkZSA8YXJyYXk+Ci0gI2luY2x1 ZGUgPGNhc3NlcnQ+Ci1AQCAtMzYsOTQgKzM1LDk4IEBACi0gI3ByYWdtYSBjbGFuZyBkaWFnbm9z dGljIGlnbm9yZWQgIi1XZG9sbGFyLWluLWlkZW50aWZpZXItZXh0ZW5zaW9uIgotICNlbmRpZiAv LyBfX2NsYW5nX18KLSAKLS1uYW1lc3BhY2UgcnVzdCB7Ci0taW5saW5lIG5hbWVzcGFjZSBjeHhi cmlkZ2UxIHsKLStuYW1lc3BhY2UgcnVzdAotK3sKLStpbmxpbmUgbmFtZXNwYWNlIGN4eGJyaWRn ZTEKLSt7Ci0gLy8gI2luY2x1ZGUgInJ1c3QvY3h4LmgiCi0gCi0gI2lmbmRlZiBDWFhCUklER0Ux X1BBTklDCi0gI2RlZmluZSBDWFhCUklER0UxX1BBTklDCi0tdGVtcGxhdGUgPHR5cGVuYW1lIEV4 Y2VwdGlvbj4KLS12b2lkIHBhbmljIFtbbm9yZXR1cm5dXSAoY29uc3QgY2hhciAqbXNnKTsKLSt0 ZW1wbGF0ZSA8dHlwZW5hbWUgRXhjZXB0aW9uPiB2b2lkIHBhbmljIFtbbm9yZXR1cm5dXSAoY29u c3QgY2hhciAqbXNnKTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9QQU5JQwotIAotIHN0cnVjdCB1 bnNhZmVfYml0Y29weV90OwotIAotLW5hbWVzcGFjZSB7Ci0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tY2xhc3MgaW1wbDsKLStuYW1lc3BhY2UKLSt7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs YXNzIGltcGw7Ci0gfSAvLyBuYW1lc3BhY2UKLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS06 OnN0ZDo6c2l6ZV90IHNpemVfb2YoKTsKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS06OnN0ZDo6 c2l6ZV90IGFsaWduX29mKCk7Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+OjpzdGQ6OnNpemVfdCBz aXplX29mICgpOwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPjo6c3RkOjpzaXplX3QgYWxpZ25fb2Yg KCk7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfU1RSSU5HCi0gI2RlZmluZSBDWFhCUklE R0UxX1JVU1RfU1RSSU5HCi0tY2xhc3MgU3RyaW5nIGZpbmFsIHsKLStjbGFzcyBTdHJpbmcgZmlu YWwKLSt7Ci0gcHVibGljOgotLSAgU3RyaW5nKCkgbm9leGNlcHQ7Ci0tICBTdHJpbmcoY29uc3Qg U3RyaW5nICYpIG5vZXhjZXB0OwotLSAgU3RyaW5nKFN0cmluZyAmJikgbm9leGNlcHQ7Ci0tICB+ U3RyaW5nKCkgbm9leGNlcHQ7Ci0tCi0tICBTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJik7Ci0t ICBTdHJpbmcoY29uc3QgY2hhciAqKTsKLS0gIFN0cmluZyhjb25zdCBjaGFyICosIHN0ZDo6c2l6 ZV90KTsKLS0gIFN0cmluZyhjb25zdCBjaGFyMTZfdCAqKTsKLS0gIFN0cmluZyhjb25zdCBjaGFy MTZfdCAqLCBzdGQ6OnNpemVfdCk7Ci0rICBTdHJpbmcgKCkgbm9leGNlcHQ7Ci0rICBTdHJpbmcg KGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLSsgIFN0cmluZyAoU3RyaW5nICYmKSBub2V4Y2Vw dDsKLSsgIH5TdHJpbmcgKCkgbm9leGNlcHQ7Ci0rCi0rICBTdHJpbmcgKGNvbnN0IHN0ZDo6c3Ry aW5nICYpOwotKyAgU3RyaW5nIChjb25zdCBjaGFyICopOwotKyAgU3RyaW5nIChjb25zdCBjaGFy ICosIHN0ZDo6c2l6ZV90KTsKLSsgIFN0cmluZyAoY29uc3QgY2hhcjE2X3QgKik7Ci0rICBTdHJp bmcgKGNvbnN0IGNoYXIxNl90ICosIHN0ZDo6c2l6ZV90KTsKLSAjaWZkZWYgX19jcHBfY2hhcjhf dAotLSAgU3RyaW5nKGNvbnN0IGNoYXI4X3QgKnMpOwotLSAgU3RyaW5nKGNvbnN0IGNoYXI4X3Qg KnMsIHN0ZDo6c2l6ZV90IGxlbik7Ci0rICBTdHJpbmcgKGNvbnN0IGNoYXI4X3QgKnMpOwotKyAg U3RyaW5nIChjb25zdCBjaGFyOF90ICpzLCBzdGQ6OnNpemVfdCBsZW4pOwotICNlbmRpZgotIAot LSAgc3RhdGljIFN0cmluZyBsb3NzeShjb25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsKLS0g IHN0YXRpYyBTdHJpbmcgbG9zc3koY29uc3QgY2hhciAqKSBub2V4Y2VwdDsKLS0gIHN0YXRpYyBT dHJpbmcgbG9zc3koY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0tICBzdGF0 aWMgU3RyaW5nIGxvc3N5KGNvbnN0IGNoYXIxNl90ICopIG5vZXhjZXB0OwotLSAgc3RhdGljIFN0 cmluZyBsb3NzeShjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0rICBz dGF0aWMgU3RyaW5nIGxvc3N5IChjb25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsKLSsgIHN0 YXRpYyBTdHJpbmcgbG9zc3kgKGNvbnN0IGNoYXIgKikgbm9leGNlcHQ7Ci0rICBzdGF0aWMgU3Ry aW5nIGxvc3N5IChjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLSsgIHN0YXRp YyBTdHJpbmcgbG9zc3kgKGNvbnN0IGNoYXIxNl90ICopIG5vZXhjZXB0OwotKyAgc3RhdGljIFN0 cmluZyBsb3NzeSAoY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotIAot LSAgU3RyaW5nICZvcGVyYXRvcj0oY29uc3QgU3RyaW5nICYpICYgbm9leGNlcHQ7Ci0tICBTdHJp bmcgJm9wZXJhdG9yPShTdHJpbmcgJiYpICYgbm9leGNlcHQ7Ci0rICBTdHJpbmcgJm9wZXJhdG9y PSAoY29uc3QgU3RyaW5nICYpICYgbm9leGNlcHQ7Ci0rICBTdHJpbmcgJm9wZXJhdG9yPSAoU3Ry aW5nICYmKSAmIG5vZXhjZXB0OwotIAotLSAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmco KSBjb25zdDsKLSsgIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nICgpIGNvbnN0OwotIAot LSAgY29uc3QgY2hhciAqZGF0YSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3Qgc2l6 ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgc3RkOjpzaXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdCBjaGFyICpkYXRh ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgc3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4Y2Vw dDsKLSsgIHN0ZDo6c2l6ZV90IGxlbmd0aCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZW1w dHkgKCkgY29uc3Qgbm9leGNlcHQ7Ci0gCi0tICBjb25zdCBjaGFyICpjX3N0cigpIG5vZXhjZXB0 OwotKyAgY29uc3QgY2hhciAqY19zdHIgKCkgbm9leGNlcHQ7Ci0gCi0tICBzdGQ6OnNpemVfdCBj YXBhY2l0eSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCByZXNlcnZlKHNpemVfdCBuZXdfY2Fw KSBub2V4Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90IGNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgdm9pZCByZXNlcnZlIChzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7Ci0gCi0gICB1c2luZyBp dGVyYXRvciA9IGNoYXIgKjsKLS0gIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7Ci0tICBpdGVy YXRvciBlbmQoKSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhjZXB0OwotKyAg aXRlcmF0b3IgZW5kICgpIG5vZXhjZXB0OwotIAotICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBj b25zdCBjaGFyICo7Ci0tICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0Owot LSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRv ciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25z dCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0Owot KyAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0 b3IgY2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgY2VuZCAoKSBj b25zdCBub2V4Y2VwdDsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcgJikgY29u c3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5v ZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvcjwoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0 OwotLSAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLS0g IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wg b3BlcmF0b3I+PShjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJh dG9yPT0gKGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3Ih PSAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjwgKGNv bnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I8PSAoY29uc3Qg U3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IFN0cmlu ZyAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgU3RyaW5nICYp IGNvbnN0IG5vZXhjZXB0OwotIAotLSAgdm9pZCBzd2FwKFN0cmluZyAmKSBub2V4Y2VwdDsKLSsg IHZvaWQgc3dhcCAoU3RyaW5nICYpIG5vZXhjZXB0OwotIAotLSAgU3RyaW5nKHVuc2FmZV9iaXRj b3B5X3QsIGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLSsgIFN0cmluZyAodW5zYWZlX2JpdGNv cHlfdCwgY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0OwotIAotIHByaXZhdGU6Ci0gICBzdHJ1Y3Qg bG9zc3lfdDsKLS0gIFN0cmluZyhsb3NzeV90LCBjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBu b2V4Y2VwdDsKLS0gIFN0cmluZyhsb3NzeV90LCBjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVf dCkgbm9leGNlcHQ7Ci0tICBmcmllbmQgdm9pZCBzd2FwKFN0cmluZyAmbGhzLCBTdHJpbmcgJnJo cykgbm9leGNlcHQgeyBsaHMuc3dhcChyaHMpOyB9Ci0rICBTdHJpbmcgKGxvc3N5X3QsIGNvbnN0 IGNoYXIgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotKyAgU3RyaW5nIChsb3NzeV90LCBjb25z dCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7Ci0rICBmcmllbmQgdm9pZAotKyAg c3dhcCAoU3RyaW5nICZsaHMsIFN0cmluZyAmcmhzKSBub2V4Y2VwdAotKyAgewotKyAgICBsaHMu c3dhcCAocmhzKTsKLSsgIH0KLSAKLSAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+IHJl cHI7Ci0gfTsKLUBAIC0xMzEsNDggKzEzNCw0OSBAQCBjbGFzcyBTdHJpbmcgZmluYWwgewotIAot ICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX1NUUgotICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1NU UgotLWNsYXNzIFN0ciBmaW5hbCB7Ci0rY2xhc3MgU3RyIGZpbmFsCi0rewotIHB1YmxpYzoKLS0g IFN0cigpIG5vZXhjZXB0OwotLSAgU3RyKGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKLS0gIFN0 cihjb25zdCBzdGQ6OnN0cmluZyAmKTsKLS0gIFN0cihjb25zdCBjaGFyICopOwotLSAgU3RyKGNv bnN0IGNoYXIgKiwgc3RkOjpzaXplX3QpOwotKyAgU3RyICgpIG5vZXhjZXB0OwotKyAgU3RyIChj b25zdCBTdHJpbmcgJikgbm9leGNlcHQ7Ci0rICBTdHIgKGNvbnN0IHN0ZDo6c3RyaW5nICYpOwot KyAgU3RyIChjb25zdCBjaGFyICopOwotKyAgU3RyIChjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90 KTsKLSAKLS0gIFN0ciAmb3BlcmF0b3I9KGNvbnN0IFN0ciAmKSAmIG5vZXhjZXB0ID0gZGVmYXVs dDsKLSsgIFN0ciAmb3BlcmF0b3I9IChjb25zdCBTdHIgJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7 Ci0gCi0tICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0OwotKyAgZXhwbGlj aXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcgKCkgY29uc3Q7Ci0gI2lmIF9fY3BsdXNwbHVzID49IDIw MTcwM0wKLS0gIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nX3ZpZXcoKSBjb25zdDsKLSsg IGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nX3ZpZXcgKCkgY29uc3Q7Ci0gI2VuZGlmCi0g Ci0tICBjb25zdCBjaGFyICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBz aXplKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4 Y2VwdDsKLS0gIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0IGNoYXIgKmRh dGEgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhj ZXB0OwotKyAgc3RkOjpzaXplX3QgbGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBl bXB0eSAoKSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIFN0cihjb25zdCBTdHIgJikgbm9leGNlcHQg PSBkZWZhdWx0OwotLSAgflN0cigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIFN0ciAoY29uc3Qg U3RyICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIH5TdHIgKCkgbm9leGNlcHQgPSBkZWZhdWx0 OwotIAotICAgdXNpbmcgaXRlcmF0b3IgPSBjb25zdCBjaGFyICo7Ci0gICB1c2luZyBjb25zdF9p dGVyYXRvciA9IGNvbnN0IGNoYXIgKjsKLS0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg bm9leGNlcHQ7Ci0tICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNv bnN0X2l0ZXJhdG9yIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgY29uc3RfaXRlcmF0b3Ig Y2VuZCgpIGNvbnN0IG5vZXhjZXB0OwotKyAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBj b25zdF9pdGVyYXRvciBjYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRv ciBjZW5kICgpIGNvbnN0IG5vZXhjZXB0OwotIAotLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0 ciAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHIgJikgY29u c3Qgbm9leGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yPChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIG9wZXJhdG9yPD0oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotLSAg Ym9vbCBvcGVyYXRvcj4oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBvcGVy YXRvcj49KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3I9PSAo Y29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBT dHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPCAoY29uc3QgU3RyICYpIGNv bnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcjw9IChjb25zdCBTdHIgJikgY29uc3Qgbm9l eGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPiAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0Owot KyAgYm9vbCBvcGVyYXRvcj49IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7Ci0gCi0tICB2 b2lkIHN3YXAoU3RyICYpIG5vZXhjZXB0OwotKyAgdm9pZCBzd2FwIChTdHIgJikgbm9leGNlcHQ7 Ci0gCi0gcHJpdmF0ZToKLSAgIGNsYXNzIHVuaW5pdDsKLS0gIFN0cih1bmluaXQpIG5vZXhjZXB0 OwotKyAgU3RyICh1bmluaXQpIG5vZXhjZXB0OwotICAgZnJpZW5kIGltcGw8U3RyPjsKLSAKLSAg IHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDI+IHJlcHI7Ci1AQCAtMTgxLDcyICsxODUsNzIg QEAgY2xhc3MgU3RyIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9TTElDRQot ICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1NMSUNFCi0tbmFtZXNwYWNlIGRldGFpbCB7Ci0tdGVt cGxhdGUgPGJvb2w+Ci0tc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZiB7fTsKLS0KLS10ZW1wbGF0 ZSA8PgotLXN0cnVjdCBjb3B5X2Fzc2lnbmFibGVfaWY8ZmFsc2U+IHsKLS0gIGNvcHlfYXNzaWdu YWJsZV9pZigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLS0gIGNvcHlfYXNzaWduYWJsZV9pZihjb25z dCBjb3B5X2Fzc2lnbmFibGVfaWYgJikgbm9leGNlcHQgPSBkZWZhdWx0OwotLSAgY29weV9hc3Np Z25hYmxlX2lmICZvcGVyYXRvcj0oY29uc3QgY29weV9hc3NpZ25hYmxlX2lmICYpICYgbm9leGNl cHQgPSBkZWxldGU7Ci0tICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPShjb3B5X2Fzc2ln bmFibGVfaWYgJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0OwotK25hbWVzcGFjZSBkZXRhaWwKLSt7 Ci0rdGVtcGxhdGUgPGJvb2w+IHN0cnVjdCBjb3B5X2Fzc2lnbmFibGVfaWYKLSt7Ci0rfTsKLSsK LSt0ZW1wbGF0ZSA8PiBzdHJ1Y3QgY29weV9hc3NpZ25hYmxlX2lmPGZhbHNlPgotK3sKLSsgIGNv cHlfYXNzaWduYWJsZV9pZiAoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rICBjb3B5X2Fzc2lnbmFi bGVfaWYgKGNvbnN0IGNvcHlfYXNzaWduYWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0r ICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPSAoY29uc3QgY29weV9hc3NpZ25hYmxlX2lm ICYpICYgbm9leGNlcHQgPSBkZWxldGU7Ci0rICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9y PSAoY29weV9hc3NpZ25hYmxlX2lmICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSB9OwotIH0g Ly8gbmFtZXNwYWNlIGRldGFpbAotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWNsYXNzIFNs aWNlIGZpbmFsCi0tICAgIDogcHJpdmF0ZSBkZXRhaWw6OmNvcHlfYXNzaWduYWJsZV9pZjxzdGQ6 OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4gewotK2NsYXNzIFNsaWNlIGZpbmFsIDogcHJpdmF0ZSBkZXRh aWw6OmNvcHlfYXNzaWduYWJsZV9pZjxzdGQ6OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4KLSt7Ci0gcHVi bGljOgotICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7Ci0gCi0tICBTbGljZSgpIG5vZXhjZXB0Owot LSAgU2xpY2UoVCAqLCBzdGQ6OnNpemVfdCBjb3VudCkgbm9leGNlcHQ7Ci0rICBTbGljZSAoKSBu b2V4Y2VwdDsKLSsgIFNsaWNlIChUICosIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2VwdDsKLSAK LS0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDPgotLSAgZXhwbGljaXQgU2xpY2UoQyAmYykgOiBTbGlj ZShjLmRhdGEoKSwgYy5zaXplKCkpIHt9Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4gZXhwbGlj aXQgU2xpY2UgKEMgJmMpIDogU2xpY2UgKGMuZGF0YSAoKSwgYy5zaXplICgpKSB7fQotIAotLSAg U2xpY2UgJm9wZXJhdG9yPShjb25zdCBTbGljZTxUPiAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsK LS0gIFNsaWNlICZvcGVyYXRvcj0oU2xpY2U8VD4gJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0Owot KyAgU2xpY2UgJm9wZXJhdG9yPSAoY29uc3QgU2xpY2U8VD4gJikgJiBub2V4Y2VwdCA9IGRlZmF1 bHQ7Ci0rICBTbGljZSAmb3BlcmF0b3I9IChTbGljZTxUPiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1 bHQ7Ci0gCi0tICBUICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBzaXpl KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKLSsgIFQgKmRhdGEgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgc3Rk OjpzaXplX3QgbGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBlbXB0eSAoKSBjb25z dCBub2V4Y2VwdDsKLSAKLS0gIFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9l eGNlcHQ7Ci0tICBUICZhdChzdGQ6OnNpemVfdCBuKSBjb25zdDsKLS0gIFQgJmZyb250KCkgY29u c3Qgbm9leGNlcHQ7Ci0tICBUICZiYWNrKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBUICZvcGVyYXRv cltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdDsKLSsgIFQgJmF0IChzdGQ6OnNpemVf dCBuKSBjb25zdDsKLSsgIFQgJmZyb250ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgVCAmYmFjayAo KSBjb25zdCBub2V4Y2VwdDsKLSAKLS0gIFNsaWNlKGNvbnN0IFNsaWNlPFQ+ICYpIG5vZXhjZXB0 ID0gZGVmYXVsdDsKLS0gIH5TbGljZSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKLSsgIFNsaWNlIChj b25zdCBTbGljZTxUPiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Ci0rICB+U2xpY2UgKCkgbm9leGNl cHQgPSBkZWZhdWx0OwotIAotICAgY2xhc3MgaXRlcmF0b3I7Ci0tICBpdGVyYXRvciBiZWdpbigp IGNvbnN0IG5vZXhjZXB0OwotLSAgaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBp dGVyYXRvciBiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIGVuZCAoKSBjb25z dCBub2V4Y2VwdDsKLSAKLS0gIHZvaWQgc3dhcChTbGljZSAmKSBub2V4Y2VwdDsKLSsgIHZvaWQg c3dhcCAoU2xpY2UgJikgbm9leGNlcHQ7Ci0gCi0gcHJpdmF0ZToKLSAgIGNsYXNzIHVuaW5pdDsK LS0gIFNsaWNlKHVuaW5pdCkgbm9leGNlcHQ7Ci0rICBTbGljZSAodW5pbml0KSBub2V4Y2VwdDsK LSAgIGZyaWVuZCBpbXBsPFNsaWNlPjsKLS0gIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCh2b2lkICos IGNvbnN0IHZvaWQgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OwotLSAgZnJpZW5kIHZvaWQgKnNs aWNlUHRyKGNvbnN0IHZvaWQgKikgbm9leGNlcHQ7Ci0tICBmcmllbmQgc3RkOjpzaXplX3Qgc2xp Y2VMZW4oY29uc3Qgdm9pZCAqKSBub2V4Y2VwdDsKLSsgIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCAo dm9pZCAqLCBjb25zdCB2b2lkICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKLSsgIGZyaWVuZCB2 b2lkICpzbGljZVB0ciAoY29uc3Qgdm9pZCAqKSBub2V4Y2VwdDsKLSsgIGZyaWVuZCBzdGQ6OnNp emVfdCBzbGljZUxlbiAoY29uc3Qgdm9pZCAqKSBub2V4Y2VwdDsKLSAKLSAgIHN0ZDo6YXJyYXk8 c3RkOjp1aW50cHRyX3QsIDI+IHJlcHI7Ci0gfTsKLSAKLSAjaWZkZWYgX19jcHBfZGVkdWN0aW9u X2d1aWRlcwotIHRlbXBsYXRlIDx0eXBlbmFtZSBDPgotLWV4cGxpY2l0IFNsaWNlKEMgJmMpCi0t ICAgIC0+IFNsaWNlPHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKCpzdGQ6OmRlY2x2 YWw8Qz4oKS5kYXRhKCkpPj47Ci0rZXhwbGljaXQgU2xpY2UgKEMgJmMpIC0+IFNsaWNlPHN0ZDo6 cmVtb3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlICgqc3RkOjpkZWNsdmFsPEM+ICgpLmRhdGEgKCkp Pj47Ci0gI2VuZGlmIC8vIF9fY3BwX2RlZHVjdGlvbl9ndWlkZXMKLSAKLS10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1jbGFzcyBTbGljZTxUPjo6aXRlcmF0b3IgZmluYWwgewotK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiBjbGFzcyBTbGljZTxUPjo6aXRlcmF0b3IgZmluYWwKLSt7Ci0gcHVibGljOgot ICNpZiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMCi0gICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9 IHN0ZDo6Y29udGlndW91c19pdGVyYXRvcl90YWc7Ci1AQCAtMjU4LDMwICsyNjIsMzIgQEAgY2xh c3MgU2xpY2U8VD46Oml0ZXJhdG9yIGZpbmFsIHsKLSAgIHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFt ZSBzdGQ6OmFkZF9wb2ludGVyPFQ+Ojp0eXBlOwotICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5h bWUgc3RkOjphZGRfbHZhbHVlX3JlZmVyZW5jZTxUPjo6dHlwZTsKLSAKLS0gIHJlZmVyZW5jZSBv cGVyYXRvciooKSBjb25zdCBub2V4Y2VwdDsKLSsgIHJlZmVyZW5jZSBvcGVyYXRvciogKCkgY29u c3Qgbm9leGNlcHQ7Ci0gICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdDsKLS0g IHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7Ci0t Ci0tICBpdGVyYXRvciAmb3BlcmF0b3IrKygpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3Igb3BlcmF0 b3IrKyhpbnQpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3IgJm9wZXJhdG9yLS0oKSBub2V4Y2VwdDsK LS0gIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSBub2V4Y2VwdDsKLS0KLS0gIGl0ZXJhdG9yICZv cGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7Ci0tICBpdGVyYXRvciAmb3BlcmF0 b3ItPShkaWZmZXJlbmNlX3R5cGUpIG5vZXhjZXB0OwotLSAgaXRlcmF0b3Igb3BlcmF0b3IrKGRp ZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7Ci0tICBmcmllbmQgaW5saW5lIGl0ZXJhdG9y IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgbGhzLCBpdGVyYXRvciByaHMpIG5vZXhjZXB0IHsK LSsgIHJlZmVyZW5jZSBvcGVyYXRvcltdIChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0 OwotKwotKyAgaXRlcmF0b3IgJm9wZXJhdG9yKysgKCkgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciBv cGVyYXRvcisrIChpbnQpIG5vZXhjZXB0OwotKyAgaXRlcmF0b3IgJm9wZXJhdG9yLS0gKCkgbm9l eGNlcHQ7Ci0rICBpdGVyYXRvciBvcGVyYXRvci0tIChpbnQpIG5vZXhjZXB0OwotKwotKyAgaXRl cmF0b3IgJm9wZXJhdG9yKz0gKGRpZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7Ci0rICBpdGVyYXRv ciAmb3BlcmF0b3ItPSAoZGlmZmVyZW5jZV90eXBlKSBub2V4Y2VwdDsKLSsgIGl0ZXJhdG9yIG9w ZXJhdG9yKyAoZGlmZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKLSsgIGZyaWVuZCBpbmxp bmUgaXRlcmF0b3IKLSsgIG9wZXJhdG9yKyAoZGlmZmVyZW5jZV90eXBlIGxocywgaXRlcmF0b3Ig cmhzKSBub2V4Y2VwdAotKyAgewotICAgICByZXR1cm4gcmhzICsgbGhzOwotICAgfQotLSAgaXRl cmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7Ci0tICBkaWZm ZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0Owot KyAgaXRlcmF0b3Igb3BlcmF0b3ItIChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0Owot KyAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9l eGNlcHQ7Ci0gCi0tICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9l eGNlcHQ7Ci0tICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIG9wZXJhdG9yPChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsK LS0gIGJvb2wgb3BlcmF0b3I8PShjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLS0g IGJvb2wgb3BlcmF0b3I+KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9v bCBvcGVyYXRvcj49KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBv cGVyYXRvcj09IChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3Bl cmF0b3IhPSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJh dG9yPCAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9y PD0gKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj4g KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj49IChj b25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5k IGNsYXNzIFNsaWNlOwotQEAgLTI5MCw2ODMgKzI5Niw4MTAgQEAgY2xhc3MgU2xpY2U8VD46Oml0 ZXJhdG9yIGZpbmFsIHsKLSB9OwotIAotICNpZiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMCi0tc3Rh dGljX2Fzc2VydChzdGQ6OnJhbmdlczo6Y29udGlndW91c19yYW5nZTxydXN0OjpTbGljZTxjb25z dCB1aW50OF90Pj4pOwotLXN0YXRpY19hc3NlcnQoc3RkOjpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1 c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+OjppdGVyYXRvcj4pOwotK3N0YXRpY19hc3NlcnQgKHN0 ZDo6cmFuZ2VzOjpjb250aWd1b3VzX3JhbmdlPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+Pik7 Ci0rc3RhdGljX2Fzc2VydCAoc3RkOjpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1c3Q6OlNsaWNlPGNv bnN0IHVpbnQ4X3Q+OjppdGVyYXRvcj4pOwotICNlbmRpZgotIAotLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLVNsaWNlPFQ+OjpTbGljZSgpIG5vZXhjZXB0IHsKLS0gIHNsaWNlSW5pdCh0aGlzLCBy ZWludGVycHJldF9jYXN0PHZvaWQgKj4oYWxpZ25fb2Y8VD4oKSksIDApOwotK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiBTbGljZTxUPjo6U2xpY2UgKCkgbm9leGNlcHQKLSt7Ci0rICBzbGljZUluaXQg KHRoaXMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPiAoYWxpZ25fb2Y8VD4gKCkpLCAwKTsKLSB9 Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tU2xpY2U8VD46OlNsaWNlKFQgKnMsIHN0ZDo6 c2l6ZV90IGNvdW50KSBub2V4Y2VwdCB7Ci0tICBhc3NlcnQocyAhPSBudWxscHRyIHx8IGNvdW50 ID09IDApOwotLSAgc2xpY2VJbml0KHRoaXMsCi0tICAgICAgICAgICAgcyA9PSBudWxscHRyICYm IGNvdW50ID09IDAKLS0gICAgICAgICAgICAgICAgPyByZWludGVycHJldF9jYXN0PHZvaWQgKj4o YWxpZ25fb2Y8VD4oKSkKLS0gICAgICAgICAgICAgICAgOiBjb25zdF9jYXN0PHR5cGVuYW1lIHN0 ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlICo+KHMpLAotLSAgICAgICAgICAgIGNvdW50KTsKLSt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gU2xpY2U8VD46OlNsaWNlIChUICpzLCBzdGQ6OnNpemVfdCBj b3VudCkgbm9leGNlcHQKLSt7Ci0rICBhc3NlcnQgKHMgIT0gbnVsbHB0ciB8fCBjb3VudCA9PSAw KTsKLSsgIHNsaWNlSW5pdCAodGhpcywKLSsgICAgICAgICAgICAgcyA9PSBudWxscHRyICYmIGNv dW50ID09IDAgPyByZWludGVycHJldF9jYXN0PHZvaWQgKj4gKGFsaWduX29mPFQ+ICgpKQotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnN0X2Nhc3Q8dHlwZW5h bWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgKj4gKHMpLAotKyAgICAgICAgICAgICBjb3Vu dCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgKlNsaWNlPFQ+OjpkYXRhKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihzbGljZVB0 cih0aGlzKSk7Ci0rVCAqCi0rU2xpY2U8VD46OmRhdGEgKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0r ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUICo+IChzbGljZVB0ciAodGhpcykpOwotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1zdGQ6OnNpemVfdCBTbGljZTxUPjo6c2l6ZSgpIGNv bnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiBzbGljZUxlbih0aGlzKTsKLStzdGQ6OnNpemVfdAot K1NsaWNlPFQ+OjpzaXplICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIHNsaWNlTGVu ICh0aGlzKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tc3RkOjpzaXplX3QgU2xp Y2U8VD46Omxlbmd0aCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiB0aGlzLT5zaXplKCk7 Ci0rc3RkOjpzaXplX3QKLStTbGljZTxUPjo6bGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0Ci0rewot KyAgcmV0dXJuIHRoaXMtPnNpemUgKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LWJvb2wgU2xpY2U8VD46OmVtcHR5KCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuIHRoaXMt PnNpemUoKSA9PSAwOwotK2Jvb2wKLStTbGljZTxUPjo6ZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQK LSt7Ci0rICByZXR1cm4gdGhpcy0+c2l6ZSAoKSA9PSAwOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLS1UICZTbGljZTxUPjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBu b2V4Y2VwdCB7Ci0tICBhc3NlcnQobiA8IHRoaXMtPnNpemUoKSk7Ci0tICBhdXRvIHB0ciA9IHN0 YXRpY19jYXN0PGNoYXIgKj4oc2xpY2VQdHIodGhpcykpICsgc2l6ZV9vZjxUPigpICogbjsKLS0g IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+KHB0cik7Ci0rVCAmCi0rU2xpY2U8VD46Om9w ZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0IChu IDwgdGhpcy0+c2l6ZSAoKSk7Ci0rICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHNs aWNlUHRyICh0aGlzKSkgKyBzaXplX29mPFQ+ICgpICogbjsKLSsgIHJldHVybiAqcmVpbnRlcnBy ZXRfY2FzdDxUICo+IChwdHIpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICZT bGljZTxUPjo6YXQoc3RkOjpzaXplX3QgbikgY29uc3QgewotLSAgaWYgKG4gPj0gdGhpcy0+c2l6 ZSgpKSB7Ci0tICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPigicnVzdDo6U2xpY2UgaW5kZXgg b3V0IG9mIHJhbmdlIik7Ci0tICB9Ci0rVCAmCi0rU2xpY2U8VD46OmF0IChzdGQ6OnNpemVfdCBu KSBjb25zdAotK3sKLSsgIGlmIChuID49IHRoaXMtPnNpemUgKCkpCi0rICAgIHsKLSsgICAgICBw YW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4gKCJydXN0OjpTbGljZSBpbmRleCBvdXQgb2YgcmFuZ2Ui KTsKLSsgICAgfQotICAgcmV0dXJuICgqdGhpcylbbl07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotLVQgJlNsaWNlPFQ+Ojpmcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIGFzc2Vy dCghdGhpcy0+ZW1wdHkoKSk7Ci0rVCAmCi0rU2xpY2U8VD46OmZyb250ICgpIGNvbnN0IG5vZXhj ZXB0Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotICAgcmV0dXJuICgqdGhpcylb MF07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJlNsaWNlPFQ+OjpiYWNrKCkg Y29uc3Qgbm9leGNlcHQgewotLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKLS0gIHJldHVybiAo KnRoaXMpW3RoaXMtPnNpemUoKSAtIDFdOwotK1QgJgotK1NsaWNlPFQ+OjpiYWNrICgpIGNvbnN0 IG5vZXhjZXB0Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotKyAgcmV0dXJuICgq dGhpcylbdGhpcy0+c2l6ZSAoKSAtIDFdOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LSB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OnJlZmVyZW5jZQotLVNsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQgewotLSAgcmV0dXJuICpzdGF0aWNfY2Fz dDxUICo+KHRoaXMtPnBvcyk7Ci0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvciogKCkgY29u c3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4gKnN0YXRpY19jYXN0PFQgKj4gKHRoaXMtPnBvcyk7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjo6cG9pbnRlcgotLVNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItPigpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIHJldHVybiBzdGF0aWNfY2FzdDxUICo+KHRoaXMtPnBvcyk7Ci0rU2xpY2U8 VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICByZXR1cm4g c3RhdGljX2Nhc3Q8VCAqPiAodGhpcy0+cG9zKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1l IFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpyZWZlcmVuY2UgU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcltdKAotLSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRp ZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdCB7Ci0tICBhdXRvIHB0ciA9IHN0YXRpY19j YXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47Ci0tICByZXR1cm4gKnJl aW50ZXJwcmV0X2Nhc3Q8VCAqPihwdHIpOwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6 cmVmZXJlbmNlCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcltdICh0eXBlbmFtZSBTbGlj ZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdAotK3sKLSsg IGF1dG8gcHRyID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlk ZSAqIG47Ci0rICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAocHRyKTsKLSB9Ci0gCi0g dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKysoKSBub2V4Y2VwdCB7Ci0tICB0aGlzLT5wb3MgPSBz dGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7Ci0rdHlwZW5hbWUg U2xpY2U8VD46Oml0ZXJhdG9yICYKLStTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKysgKCkg bm9leGNlcHQKLSt7Ci0rICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5w b3MpICsgdGhpcy0+c3RyaWRlOwotICAgcmV0dXJuICp0aGlzOwotIH0KLSAKLSB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvcisrKGludCkgbm9leGNlcHQgewotLSAgYXV0byByZXQgPSBpdGVyYXRvcigq dGhpcyk7Ci0tICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0 aGlzLT5zdHJpZGU7Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvcisrIChpbnQpIG5vZXhjZXB0Ci0rewotKyAgYXV0byByZXQgPSBpdGVy YXRvciAoKnRoaXMpOwotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+ cG9zKSArIHRoaXMtPnN0cmlkZTsKLSAgIHJldHVybiByZXQ7Ci0gfQotIAotIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvci0tKCkgbm9leGNlcHQgewotLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8 Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlOwotK3R5cGVuYW1lIFNsaWNlPFQ+Ojpp dGVyYXRvciAmCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0tICgpIG5vZXhjZXB0Ci0r ewotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMt PnN0cmlkZTsKLSAgIHJldHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0 b3ItLShpbnQpIG5vZXhjZXB0IHsKLS0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOwotLSAg dGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRl OwotK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcgotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3Bl cmF0b3ItLSAoaW50KSBub2V4Y2VwdAotK3sKLSsgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlz KTsKLSsgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlz LT5zdHJpZGU7Ci0gICByZXR1cm4gcmV0OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0 b3IrPSgKLS0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUg bikgbm9leGNlcHQgewotLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5w b3MpICsgdGhpcy0+c3RyaWRlICogbjsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgot K1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrPSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJh dG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNlcHQKLSt7Ci0rICB0aGlzLT5wb3MgPSBzdGF0 aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKLSAgIHJldHVy biAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yICZTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLT0oCi0tICAgIHR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0IHsKLS0g IHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlk ZSAqIG47Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICYKLStTbGljZTxUPjo6aXRlcmF0 b3I6Om9wZXJhdG9yLT0gKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90 eXBlIG4pIG5vZXhjZXB0Ci0rewotKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAo dGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZSAqIG47Ci0gICByZXR1cm4gKnRoaXM7Ci0gfQotIAot IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKygKLS0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJh dG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNlcHQgewotLSAgYXV0byByZXQgPSBp dGVyYXRvcigqdGhpcyk7Ci0tICByZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5w b3MpICsgdGhpcy0+c3RyaWRlICogbjsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKLStT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKyAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9y OjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNlcHQKLSt7Ci0rICBhdXRvIHJldCA9IGl0 ZXJhdG9yICgqdGhpcyk7Ci0rICByZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+ cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47Ci0gICByZXR1cm4gcmV0OwotIH0KLSAKLSB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0 ZXJhdG9yOjpvcGVyYXRvci0oCi0tICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlm ZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0IHsKLS0gIGF1dG8gcmV0ID0gaXRlcmF0b3Io KnRoaXMpOwotLSAgcmV0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRo aXMtPnN0cmlkZSAqIG47Ci0rdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvci0gKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVy ZW5jZV90eXBlIG4pIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgYXV0byByZXQgPSBpdGVyYXRvciAo KnRoaXMpOwotKyAgcmV0LnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0 aGlzLT5zdHJpZGUgKiBuOwotICAgcmV0dXJuIHJldDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0gdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUKLS1T bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0 IG5vZXhjZXB0IHsKLS0gIGF1dG8gZGlmZiA9IHN0ZDo6ZGlzdGFuY2Uoc3RhdGljX2Nhc3Q8Y2hh ciAqPihvdGhlci5wb3MpLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz dDxjaGFyICo+KHRoaXMtPnBvcykpOwotLSAgcmV0dXJuIGRpZmYgLyBzdGF0aWNfY2FzdDx0eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZT4oCi0tICAgICAgICAgICAg ICAgICAgICB0aGlzLT5zdHJpZGUpOwotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItIChj b25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgYXV0byBkaWZmID0g c3RkOjpkaXN0YW5jZSAoc3RhdGljX2Nhc3Q8Y2hhciAqPiAob3RoZXIucG9zKSwgc3RhdGljX2Nh c3Q8Y2hhciAqPiAodGhpcy0+cG9zKSk7Ci0rICByZXR1cm4gZGlmZiAvIHN0YXRpY19jYXN0PHR5 cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlPiAodGhpcy0+c3RyaWRl KTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6aXRlcmF0 b3I6Om9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0r Ym9vbAotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I9PSAoY29uc3QgaXRlcmF0b3IgJm90 aGVyKSBjb25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPT0gb3RoZXIucG9z OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKLSti b29sCi0rU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvciE9IChjb25zdCBpdGVyYXRvciAmb3Ro ZXIpIGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyAhPSBvdGhlci5wb3M7 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9y OjpvcGVyYXRvcjwoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0rYm9v bAotK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I8IChjb25zdCBpdGVyYXRvciAmb3RoZXIp IGNvbnN0IG5vZXhjZXB0Ci0rewotICAgcmV0dXJuIHRoaXMtPnBvcyA8IG90aGVyLnBvczsKLSB9 Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yPD0oY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7Ci0rYm9vbAot K1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I8PSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBj b25zdCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPD0gb3RoZXIucG9zOwotIH0K LSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3Bl cmF0b3I+KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewotK2Jvb2wKLStT bGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPiAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25z dCBub2V4Y2VwdAotK3sKLSAgIHJldHVybiB0aGlzLT5wb3MgPiBvdGhlci5wb3M7Ci0gfQotIAot IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRv cj49KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQgewotK2Jvb2wKLStTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPj0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qg bm9leGNlcHQKLSt7Ci0gICByZXR1cm4gdGhpcy0+cG9zID49IG90aGVyLnBvczsKLSB9Ci0gCi0g dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNl PFQ+OjpiZWdpbigpIGNvbnN0IG5vZXhjZXB0IHsKLSt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0 b3IKLStTbGljZTxUPjo6YmVnaW4gKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICBpdGVyYXRvciBp dDsKLS0gIGl0LnBvcyA9IHNsaWNlUHRyKHRoaXMpOwotLSAgaXQuc3RyaWRlID0gc2l6ZV9vZjxU PigpOwotKyAgaXQucG9zID0gc2xpY2VQdHIgKHRoaXMpOwotKyAgaXQuc3RyaWRlID0gc2l6ZV9v ZjxUPiAoKTsKLSAgIHJldHVybiBpdDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0t dHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjplbmQoKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICBpdGVyYXRvciBpdCA9IHRoaXMtPmJlZ2luKCk7Ci0tICBpdC5wb3MgPSBzdGF0aWNf Y2FzdDxjaGFyICo+KGl0LnBvcykgKyBpdC5zdHJpZGUgKiB0aGlzLT5zaXplKCk7Ci0rdHlwZW5h bWUgU2xpY2U8VD46Oml0ZXJhdG9yCi0rU2xpY2U8VD46OmVuZCAoKSBjb25zdCBub2V4Y2VwdAot K3sKLSsgIGl0ZXJhdG9yIGl0ID0gdGhpcy0+YmVnaW4gKCk7Ci0rICBpdC5wb3MgPSBzdGF0aWNf Y2FzdDxjaGFyICo+IChpdC5wb3MpICsgaXQuc3RyaWRlICogdGhpcy0+c2l6ZSAoKTsKLSAgIHJl dHVybiBpdDsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdm9pZCBTbGljZTxUPjo6 c3dhcChTbGljZSAmcmhzKSBub2V4Y2VwdCB7Ci0tICBzdGQ6OnN3YXAoKnRoaXMsIHJocyk7Ci0r dm9pZAotK1NsaWNlPFQ+Ojpzd2FwIChTbGljZSAmcmhzKSBub2V4Y2VwdAotK3sKLSsgIHN0ZDo6 c3dhcCAoKnRoaXMsIHJocyk7Ci0gfQotICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfU0xJQ0UK LSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9CT1gKLSAjZGVmaW5lIENYWEJSSURHRTFfUlVT VF9CT1gKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jbGFzcyBCb3ggZmluYWwgewotK3RlbXBs YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBCb3ggZmluYWwKLSt7Ci0gcHVibGljOgotICAgdXNpbmcg ZWxlbWVudF90eXBlID0gVDsKLS0gIHVzaW5nIGNvbnN0X3BvaW50ZXIgPQotLSAgICAgIHR5cGVu YW1lIHN0ZDo6YWRkX3BvaW50ZXI8dHlwZW5hbWUgc3RkOjphZGRfY29uc3Q8VD46OnR5cGU+Ojp0 eXBlOwotKyAgdXNpbmcgY29uc3RfcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8 dHlwZW5hbWUgc3RkOjphZGRfY29uc3Q8VD46OnR5cGU+Ojp0eXBlOwotICAgdXNpbmcgcG9pbnRl ciA9IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8VD46OnR5cGU7Ci0gCi0tICBCb3goKSA9IGRl bGV0ZTsKLS0gIEJveChCb3ggJiYpIG5vZXhjZXB0OwotLSAgfkJveCgpIG5vZXhjZXB0OwotKyAg Qm94ICgpID0gZGVsZXRlOwotKyAgQm94IChCb3ggJiYpIG5vZXhjZXB0OwotKyAgfkJveCAoKSBu b2V4Y2VwdDsKLSAKLS0gIGV4cGxpY2l0IEJveChjb25zdCBUICYpOwotLSAgZXhwbGljaXQgQm94 KFQgJiYpOwotKyAgZXhwbGljaXQgQm94IChjb25zdCBUICYpOwotKyAgZXhwbGljaXQgQm94IChU ICYmKTsKLSAKLS0gIEJveCAmb3BlcmF0b3I9KEJveCAmJikgJiBub2V4Y2VwdDsKLSsgIEJveCAm b3BlcmF0b3I9IChCb3ggJiYpICYgbm9leGNlcHQ7Ci0gCi0gICBjb25zdCBUICpvcGVyYXRvci0+ KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25zdCBUICZvcGVyYXRvciooKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGNvbnN0IFQgJm9wZXJhdG9yKiAoKSBjb25zdCBub2V4Y2VwdDsKLSAgIFQgKm9wZXJh dG9yLT4oKSBub2V4Y2VwdDsKLS0gIFQgJm9wZXJhdG9yKigpIG5vZXhjZXB0OwotKyAgVCAmb3Bl cmF0b3IqICgpIG5vZXhjZXB0OwotIAotLSAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4K LS0gIHN0YXRpYyBCb3ggaW5fcGxhY2UoRmllbGRzICYmLi4uKTsKLSsgIHRlbXBsYXRlIDx0eXBl bmFtZS4uLiBGaWVsZHM+IHN0YXRpYyBCb3ggaW5fcGxhY2UgKEZpZWxkcyAmJi4uLik7Ci0gCi0t ICB2b2lkIHN3YXAoQm94ICYpIG5vZXhjZXB0OwotKyAgdm9pZCBzd2FwIChCb3ggJikgbm9leGNl cHQ7Ci0gCi0tICBzdGF0aWMgQm94IGZyb21fcmF3KFQgKikgbm9leGNlcHQ7Ci0rICBzdGF0aWMg Qm94IGZyb21fcmF3IChUICopIG5vZXhjZXB0OwotIAotLSAgVCAqaW50b19yYXcoKSBub2V4Y2Vw dDsKLSsgIFQgKmludG9fcmF3ICgpIG5vZXhjZXB0OwotIAotICAgLyogRGVwcmVjYXRlZCAqLyB1 c2luZyB2YWx1ZV90eXBlID0gZWxlbWVudF90eXBlOwotIAotIHByaXZhdGU6Ci0gICBjbGFzcyB1 bmluaXQ7Ci0gICBjbGFzcyBhbGxvY2F0aW9uOwotLSAgQm94KHVuaW5pdCkgbm9leGNlcHQ7Ci0t ICB2b2lkIGRyb3AoKSBub2V4Y2VwdDsKLSsgIEJveCAodW5pbml0KSBub2V4Y2VwdDsKLSsgIHZv aWQgZHJvcCAoKSBub2V4Y2VwdDsKLSAKLS0gIGZyaWVuZCB2b2lkIHN3YXAoQm94ICZsaHMsIEJv eCAmcmhzKSBub2V4Y2VwdCB7IGxocy5zd2FwKHJocyk7IH0KLSsgIGZyaWVuZCB2b2lkCi0rICBz d2FwIChCb3ggJmxocywgQm94ICZyaHMpIG5vZXhjZXB0Ci0rICB7Ci0rICAgIGxocy5zd2FwIChy aHMpOwotKyAgfQotIAotICAgVCAqcHRyOwotIH07Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tY2xhc3MgQm94PFQ+Ojp1bmluaXQge307Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz IEJveDxUPjo6dW5pbml0Ci0rewotK307Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY2xh c3MgQm94PFQ+OjphbGxvY2F0aW9uIHsKLS0gIHN0YXRpYyBUICphbGxvYygpIG5vZXhjZXB0Owot LSAgc3RhdGljIHZvaWQgZGVhbGxvYyhUICopIG5vZXhjZXB0OwotK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPiBjbGFzcyBCb3g8VD46OmFsbG9jYXRpb24KLSt7Ci0rICBzdGF0aWMgVCAqYWxsb2MgKCkg bm9leGNlcHQ7Ci0rICBzdGF0aWMgdm9pZCBkZWFsbG9jIChUICopIG5vZXhjZXB0OwotIAotIHB1 YmxpYzoKLS0gIGFsbG9jYXRpb24oKSBub2V4Y2VwdCA6IHB0cihhbGxvYygpKSB7fQotLSAgfmFs bG9jYXRpb24oKSBub2V4Y2VwdCB7Ci0tICAgIGlmICh0aGlzLT5wdHIpIHsKLS0gICAgICBkZWFs bG9jKHRoaXMtPnB0cik7Ci0tICAgIH0KLSsgIGFsbG9jYXRpb24gKCkgbm9leGNlcHQgOiBwdHIg KGFsbG9jICgpKSB7fQotKyAgfmFsbG9jYXRpb24gKCkgbm9leGNlcHQKLSsgIHsKLSsgICAgaWYg KHRoaXMtPnB0cikKLSsgICAgICB7Ci0rICAgICAgICBkZWFsbG9jICh0aGlzLT5wdHIpOwotKyAg ICAgIH0KLSAgIH0KLSAgIFQgKnB0cjsKLSB9OwotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LUJveDxUPjo6Qm94KEJveCAmJm90aGVyKSBub2V4Y2VwdCA6IHB0cihvdGhlci5wdHIpIHsKLS0g IG90aGVyLnB0ciA9IG51bGxwdHI7Ci0tfQotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46 OkJveCAoQm94ICYmb3RoZXIpIG5vZXhjZXB0IDogcHRyIChvdGhlci5wdHIpIHsgb3RoZXIucHRy ID0gbnVsbHB0cjsgfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLUJveDxUPjo6Qm94KGNv bnN0IFQgJnZhbCkgewotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoY29uc3Qg VCAmdmFsKQotK3sKLSAgIGFsbG9jYXRpb24gYWxsb2M7Ci0tICA6Om5ldyAoYWxsb2MucHRyKSBU KHZhbCk7Ci0rICA6Om5ldyAoYWxsb2MucHRyKSBUICh2YWwpOwotICAgdGhpcy0+cHRyID0gYWxs b2MucHRyOwotICAgYWxsb2MucHRyID0gbnVsbHB0cjsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVu YW1lIFQ+Ci0tQm94PFQ+OjpCb3goVCAmJnZhbCkgewotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBC b3g8VD46OkJveCAoVCAmJnZhbCkKLSt7Ci0gICBhbGxvY2F0aW9uIGFsbG9jOwotLSAgOjpuZXcg KGFsbG9jLnB0cikgVChzdGQ6Om1vdmUodmFsKSk7Ci0rICA6Om5ldyAoYWxsb2MucHRyKSBUIChz dGQ6Om1vdmUgKHZhbCkpOwotICAgdGhpcy0+cHRyID0gYWxsb2MucHRyOwotICAgYWxsb2MucHRy ID0gbnVsbHB0cjsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tQm94PFQ+Ojp+Qm94 KCkgbm9leGNlcHQgewotLSAgaWYgKHRoaXMtPnB0cikgewotLSAgICB0aGlzLT5kcm9wKCk7Ci0t ICB9Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEJveDxUPjo6fkJveCAoKSBub2V4Y2VwdAotK3sK LSsgIGlmICh0aGlzLT5wdHIpCi0rICAgIHsKLSsgICAgICB0aGlzLT5kcm9wICgpOwotKyAgICB9 Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLUJveDxUPiAmQm94PFQ+OjpvcGVyYXRv cj0oQm94ICYmb3RoZXIpICYgbm9leGNlcHQgewotLSAgaWYgKHRoaXMtPnB0cikgewotLSAgICB0 aGlzLT5kcm9wKCk7Ci0tICB9Ci0rQm94PFQ+ICYKLStCb3g8VD46Om9wZXJhdG9yPSAoQm94ICYm b3RoZXIpICYgbm9leGNlcHQKLSt7Ci0rICBpZiAodGhpcy0+cHRyKQotKyAgICB7Ci0rICAgICAg dGhpcy0+ZHJvcCAoKTsKLSsgICAgfQotICAgdGhpcy0+cHRyID0gb3RoZXIucHRyOwotICAgb3Ro ZXIucHRyID0gbnVsbHB0cjsKLSAgIHJldHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0tY29uc3QgVCAqQm94PFQ+OjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQg ewotK2NvbnN0IFQgKgotK0JveDxUPjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0Ci0rewot ICAgcmV0dXJuIHRoaXMtPnB0cjsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY29u c3QgVCAmQm94PFQ+OjpvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdCB7Ci0rY29uc3QgVCAmCi0r Qm94PFQ+OjpvcGVyYXRvciogKCkgY29uc3Qgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gKnRoaXMt PnB0cjsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVCAqQm94PFQ+OjpvcGVyYXRv ci0+KCkgbm9leGNlcHQgewotK1QgKgotK0JveDxUPjo6b3BlcmF0b3ItPigpIG5vZXhjZXB0Ci0r ewotICAgcmV0dXJuIHRoaXMtPnB0cjsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0t VCAmQm94PFQ+OjpvcGVyYXRvciooKSBub2V4Y2VwdCB7Ci0rVCAmCi0rQm94PFQ+OjpvcGVyYXRv ciogKCkgbm9leGNlcHQKLSt7Ci0gICByZXR1cm4gKnRoaXMtPnB0cjsKLSB9Ci0gCi0gdGVtcGxh dGUgPHR5cGVuYW1lIFQ+Ci0gdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4KLS1Cb3g8VD4g Qm94PFQ+Ojppbl9wbGFjZShGaWVsZHMgJiYuLi5maWVsZHMpIHsKLStCb3g8VD4KLStCb3g8VD46 OmluX3BsYWNlIChGaWVsZHMgJiYuLi5maWVsZHMpCi0rewotICAgYWxsb2NhdGlvbiBhbGxvYzsK LSAgIGF1dG8gcHRyID0gYWxsb2MucHRyOwotLSAgOjpuZXcgKHB0cikgVHtzdGQ6OmZvcndhcmQ8 RmllbGRzPihmaWVsZHMpLi4ufTsKLSsgIDo6bmV3IChwdHIpIFR7IHN0ZDo6Zm9yd2FyZDxGaWVs ZHM+IChmaWVsZHMpLi4uIH07Ci0gICBhbGxvYy5wdHIgPSBudWxscHRyOwotLSAgcmV0dXJuIGZy b21fcmF3KHB0cik7Ci0rICByZXR1cm4gZnJvbV9yYXcgKHB0cik7Ci0gfQotIAotIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotLXZvaWQgQm94PFQ+Ojpzd2FwKEJveCAmcmhzKSBub2V4Y2VwdCB7Ci0r dm9pZAotK0JveDxUPjo6c3dhcCAoQm94ICZyaHMpIG5vZXhjZXB0Ci0rewotICAgdXNpbmcgc3Rk Ojpzd2FwOwotLSAgc3dhcCh0aGlzLT5wdHIsIHJocy5wdHIpOwotKyAgc3dhcCAodGhpcy0+cHRy LCByaHMucHRyKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tQm94PFQ+IEJveDxU Pjo6ZnJvbV9yYXcoVCAqcmF3KSBub2V4Y2VwdCB7Ci0rQm94PFQ+Ci0rQm94PFQ+Ojpmcm9tX3Jh dyAoVCAqcmF3KSBub2V4Y2VwdAotK3sKLSAgIEJveCBib3ggPSB1bmluaXR7fTsKLSAgIGJveC5w dHIgPSByYXc7Ci0gICByZXR1cm4gYm94OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K LS1UICpCb3g8VD46OmludG9fcmF3KCkgbm9leGNlcHQgewotK1QgKgotK0JveDxUPjo6aW50b19y YXcgKCkgbm9leGNlcHQKLSt7Ci0gICBUICpyYXcgPSB0aGlzLT5wdHI7Ci0gICB0aGlzLT5wdHIg PSBudWxscHRyOwotICAgcmV0dXJuIHJhdzsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tQm94PFQ+OjpCb3godW5pbml0KSBub2V4Y2VwdCB7fQotK3RlbXBsYXRlIDx0eXBlbmFtZSBU PiBCb3g8VD46OkJveCAodW5pbml0KSBub2V4Y2VwdCB7fQotICNlbmRpZiAvLyBDWFhCUklER0Ux X1JVU1RfQk9YCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCi0gI2RlZmlu ZSBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCi0tc3RydWN0IHVuc2FmZV9iaXRjb3B5X3QgZmlu YWwgewotLSAgZXhwbGljaXQgdW5zYWZlX2JpdGNvcHlfdCgpID0gZGVmYXVsdDsKLStzdHJ1Y3Qg dW5zYWZlX2JpdGNvcHlfdCBmaW5hbAotK3sKLSsgIGV4cGxpY2l0IHVuc2FmZV9iaXRjb3B5X3Qg KCkgPSBkZWZhdWx0OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9CSVRDT1BZX1QK LSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9WRUMKLSAjZGVmaW5lIENYWEJSSURHRTFfUlVT VF9WRUMKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jbGFzcyBWZWMgZmluYWwgewotK3RlbXBs YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBWZWMgZmluYWwKLSt7Ci0gcHVibGljOgotICAgdXNpbmcg dmFsdWVfdHlwZSA9IFQ7Ci0gCi0tICBWZWMoKSBub2V4Y2VwdDsKLS0gIFZlYyhzdGQ6OmluaXRp YWxpemVyX2xpc3Q8VD4pOwotLSAgVmVjKGNvbnN0IFZlYyAmKTsKLS0gIFZlYyhWZWMgJiYpIG5v ZXhjZXB0OwotLSAgflZlYygpIG5vZXhjZXB0OwotLQotLSAgVmVjICZvcGVyYXRvcj0oVmVjICYm KSAmIG5vZXhjZXB0OwotLSAgVmVjICZvcGVyYXRvcj0oY29uc3QgVmVjICYpICY7Ci0tCi0tICBz dGQ6OnNpemVfdCBzaXplKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGVtcHR5KCkgY29uc3Qg bm9leGNlcHQ7Ci0tICBjb25zdCBUICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBUICpkYXRh KCkgbm9leGNlcHQ7Ci0tICBzdGQ6OnNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IG5vZXhjZXB0Owot LQotLSAgY29uc3QgVCAmb3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdDsK LS0gIGNvbnN0IFQgJmF0KHN0ZDo6c2l6ZV90IG4pIGNvbnN0OwotLSAgY29uc3QgVCAmZnJvbnQo KSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0IFQgJmJhY2soKSBjb25zdCBub2V4Y2VwdDsKLS0K LS0gIFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3Qgbikgbm9leGNlcHQ7Ci0tICBUICZhdChzdGQ6 OnNpemVfdCBuKTsKLS0gIFQgJmZyb250KCkgbm9leGNlcHQ7Ci0tICBUICZiYWNrKCkgbm9leGNl cHQ7Ci0tCi0tICB2b2lkIHJlc2VydmUoc3RkOjpzaXplX3QgbmV3X2NhcCk7Ci0tICB2b2lkIHB1 c2hfYmFjayhjb25zdCBUICZ2YWx1ZSk7Ci0tICB2b2lkIHB1c2hfYmFjayhUICYmdmFsdWUpOwot LSAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+Ci0tICB2b2lkIGVtcGxhY2VfYmFjayhBcmdz ICYmLi4uYXJncyk7Ci0tICB2b2lkIHRydW5jYXRlKHN0ZDo6c2l6ZV90IGxlbik7Ci0tICB2b2lk IGNsZWFyKCk7Ci0rICBWZWMgKCkgbm9leGNlcHQ7Ci0rICBWZWMgKHN0ZDo6aW5pdGlhbGl6ZXJf bGlzdDxUPik7Ci0rICBWZWMgKGNvbnN0IFZlYyAmKTsKLSsgIFZlYyAoVmVjICYmKSBub2V4Y2Vw dDsKLSsgIH5WZWMgKCkgbm9leGNlcHQ7Ci0rCi0rICBWZWMgJm9wZXJhdG9yPSAoVmVjICYmKSAm IG5vZXhjZXB0OwotKyAgVmVjICZvcGVyYXRvcj0gKGNvbnN0IFZlYyAmKSAmOwotKwotKyAgc3Rk OjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZW1wdHkgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBjb25zdCBUICpkYXRhICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgVCAqZGF0 YSAoKSBub2V4Y2VwdDsKLSsgIHN0ZDo6c2l6ZV90IGNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0 OwotKwotKyAgY29uc3QgVCAmb3BlcmF0b3JbXSAoc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNl cHQ7Ci0rICBjb25zdCBUICZhdCAoc3RkOjpzaXplX3QgbikgY29uc3Q7Ci0rICBjb25zdCBUICZm cm9udCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0IFQgJmJhY2sgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rCi0rICBUICZvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdDsKLSsgIFQg JmF0IChzdGQ6OnNpemVfdCBuKTsKLSsgIFQgJmZyb250ICgpIG5vZXhjZXB0OwotKyAgVCAmYmFj ayAoKSBub2V4Y2VwdDsKLSsKLSsgIHZvaWQgcmVzZXJ2ZSAoc3RkOjpzaXplX3QgbmV3X2NhcCk7 Ci0rICB2b2lkIHB1c2hfYmFjayAoY29uc3QgVCAmdmFsdWUpOwotKyAgdm9pZCBwdXNoX2JhY2sg KFQgJiZ2YWx1ZSk7Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4gdm9pZCBlbXBsYWNl X2JhY2sgKEFyZ3MgJiYuLi5hcmdzKTsKLSsgIHZvaWQgdHJ1bmNhdGUgKHN0ZDo6c2l6ZV90IGxl bik7Ci0rICB2b2lkIGNsZWFyICgpOwotIAotICAgdXNpbmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBT bGljZTxUPjo6aXRlcmF0b3I7Ci0tICBpdGVyYXRvciBiZWdpbigpIG5vZXhjZXB0OwotLSAgaXRl cmF0b3IgZW5kKCkgbm9leGNlcHQ7Ci0rICBpdGVyYXRvciBiZWdpbiAoKSBub2V4Y2VwdDsKLSsg IGl0ZXJhdG9yIGVuZCAoKSBub2V4Y2VwdDsKLSAKLSAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0g dHlwZW5hbWUgU2xpY2U8Y29uc3QgVD46Oml0ZXJhdG9yOwotLSAgY29uc3RfaXRlcmF0b3IgYmVn aW4oKSBjb25zdCBub2V4Y2VwdDsKLS0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IG5vZXhj ZXB0OwotLSAgY29uc3RfaXRlcmF0b3IgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBjb25z dF9pdGVyYXRvciBjZW5kKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBjb25zdF9pdGVyYXRvciBiZWdp biAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCBub2V4 Y2VwdDsKLSsgIGNvbnN0X2l0ZXJhdG9yIGNiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGNv bnN0X2l0ZXJhdG9yIGNlbmQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0gCi0tICB2b2lkIHN3YXAoVmVj ICYpIG5vZXhjZXB0OwotKyAgdm9pZCBzd2FwIChWZWMgJikgbm9leGNlcHQ7Ci0gCi0tICBWZWMo dW5zYWZlX2JpdGNvcHlfdCwgY29uc3QgVmVjICYpIG5vZXhjZXB0OwotKyAgVmVjICh1bnNhZmVf Yml0Y29weV90LCBjb25zdCBWZWMgJikgbm9leGNlcHQ7Ci0gCi0gcHJpdmF0ZToKLS0gIHZvaWQg cmVzZXJ2ZV90b3RhbChzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKLS0gIHZvaWQgc2V0 X2xlbihzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OwotLSAgdm9pZCBkcm9wKCkgbm9leGNlcHQ7 Ci0tCi0tICBmcmllbmQgdm9pZCBzd2FwKFZlYyAmbGhzLCBWZWMgJnJocykgbm9leGNlcHQgeyBs aHMuc3dhcChyaHMpOyB9Ci0rICB2b2lkIHJlc2VydmVfdG90YWwgKHN0ZDo6c2l6ZV90IG5ld19j YXApIG5vZXhjZXB0OwotKyAgdm9pZCBzZXRfbGVuIChzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0 OwotKyAgdm9pZCBkcm9wICgpIG5vZXhjZXB0OwotKwotKyAgZnJpZW5kIHZvaWQKLSsgIHN3YXAg KFZlYyAmbGhzLCBWZWMgJnJocykgbm9leGNlcHQKLSsgIHsKLSsgICAgbGhzLnN3YXAgKHJocyk7 Ci0rICB9Ci0gCi0gICBzdGQ6OmFycmF5PHN0ZDo6dWludHB0cl90LCAzPiByZXByOwotIH07Ci0g Ci0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVmVjPFQ+OjpWZWMoc3RkOjppbml0aWFsaXplcl9s aXN0PFQ+IGluaXQpIDogVmVje30gewotLSAgdGhpcy0+cmVzZXJ2ZV90b3RhbChpbml0LnNpemUo KSk7Ci0tICBzdGQ6Om1vdmUoaW5pdC5iZWdpbigpLCBpbml0LmVuZCgpLCBzdGQ6OmJhY2tfaW5z ZXJ0ZXIoKnRoaXMpKTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVmVjPFQ+OjpWZWMgKHN0ZDo6 aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbml0KSA6IFZlY3t9Ci0rewotKyAgdGhpcy0+cmVzZXJ2ZV90 b3RhbCAoaW5pdC5zaXplICgpKTsKLSsgIHN0ZDo6bW92ZSAoaW5pdC5iZWdpbiAoKSwgaW5pdC5l bmQgKCksIHN0ZDo6YmFja19pbnNlcnRlciAoKnRoaXMpKTsKLSB9Ci0gCi0tdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Ci0tVmVjPFQ+OjpWZWMoY29uc3QgVmVjICZvdGhlcikgOiBWZWMoKSB7Ci0tICB0 aGlzLT5yZXNlcnZlX3RvdGFsKG90aGVyLnNpemUoKSk7Ci0tICBzdGQ6OmNvcHkob3RoZXIuYmVn aW4oKSwgb3RoZXIuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcigqdGhpcykpOwotK3RlbXBsYXRl IDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAoY29uc3QgVmVjICZvdGhlcikgOiBWZWMgKCkKLSt7 Ci0rICB0aGlzLT5yZXNlcnZlX3RvdGFsIChvdGhlci5zaXplICgpKTsKLSsgIHN0ZDo6Y29weSAo b3RoZXIuYmVnaW4gKCksIG90aGVyLmVuZCAoKSwgc3RkOjpiYWNrX2luc2VydGVyICgqdGhpcykp OwotIH0KLSAKLS10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1WZWM8VD46OlZlYyhWZWMgJiZvdGhl cikgbm9leGNlcHQgOiByZXByKG90aGVyLnJlcHIpIHsKLS0gIG5ldyAoJm90aGVyKSBWZWMoKTsK LSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVmVjPFQ+OjpWZWMgKFZlYyAmJm90aGVyKSBub2V4Y2Vw dCA6IHJlcHIgKG90aGVyLnJlcHIpCi0rewotKyAgbmV3ICgmb3RoZXIpIFZlYyAoKTsKLSB9Ci0g Ci0tdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVmVjPFQ+Ojp+VmVjKCkgbm9leGNlcHQgewotLSAg dGhpcy0+ZHJvcCgpOwotLX0KLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVmVjPFQ+Ojp+VmVjICgp IG5vZXhjZXB0IHsgdGhpcy0+ZHJvcCAoKTsgfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LVZlYzxUPiAmVmVjPFQ+OjpvcGVyYXRvcj0oVmVjICYmb3RoZXIpICYgbm9leGNlcHQgewotLSAg dGhpcy0+ZHJvcCgpOwotK1ZlYzxUPiAmCi0rVmVjPFQ+OjpvcGVyYXRvcj0gKFZlYyAmJm90aGVy KSAmIG5vZXhjZXB0Ci0rewotKyAgdGhpcy0+ZHJvcCAoKTsKLSAgIHRoaXMtPnJlcHIgPSBvdGhl ci5yZXByOwotLSAgbmV3ICgmb3RoZXIpIFZlYygpOwotKyAgbmV3ICgmb3RoZXIpIFZlYyAoKTsK LSAgIHJldHVybiAqdGhpczsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tVmVjPFQ+ ICZWZWM8VD46Om9wZXJhdG9yPShjb25zdCBWZWMgJm90aGVyKSAmIHsKLS0gIGlmICh0aGlzICE9 ICZvdGhlcikgewotLSAgICB0aGlzLT5kcm9wKCk7Ci0tICAgIG5ldyAodGhpcykgVmVjKG90aGVy KTsKLS0gIH0KLStWZWM8VD4gJgotK1ZlYzxUPjo6b3BlcmF0b3I9IChjb25zdCBWZWMgJm90aGVy KSAmCi0rewotKyAgaWYgKHRoaXMgIT0gJm90aGVyKQotKyAgICB7Ci0rICAgICAgdGhpcy0+ZHJv cCAoKTsKLSsgICAgICBuZXcgKHRoaXMpIFZlYyAob3RoZXIpOwotKyAgICB9Ci0gICByZXR1cm4g KnRoaXM7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLWJvb2wgVmVjPFQ+OjplbXB0 eSgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsKLStib29s Ci0rVmVjPFQ+OjplbXB0eSAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiB0aGlzLT5z aXplICgpID09IDA7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgKlZlYzxUPjo6 ZGF0YSgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBjb25zdF9jYXN0PFQgKj4oY29uc3RfY2FzdDxj b25zdCBWZWM8VD4gKj4odGhpcyktPmRhdGEoKSk7Ci0rVCAqCi0rVmVjPFQ+OjpkYXRhICgpIG5v ZXhjZXB0Ci0rewotKyAgcmV0dXJuIGNvbnN0X2Nhc3Q8VCAqPiAoY29uc3RfY2FzdDxjb25zdCBW ZWM8VD4gKj4gKHRoaXMpLT5kYXRhICgpKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Ci0tY29uc3QgVCAmVmVjPFQ+OjpvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhj ZXB0IHsKLS0gIGFzc2VydChuIDwgdGhpcy0+c2l6ZSgpKTsKLS0gIGF1dG8gZGF0YSA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPih0aGlzLT5kYXRhKCkpOwotLSAgcmV0dXJuICpyZWlu dGVycHJldF9jYXN0PGNvbnN0IFQgKj4oZGF0YSArIG4gKiBzaXplX29mPFQ+KCkpOwotK2NvbnN0 IFQgJgotK1ZlYzxUPjo6b3BlcmF0b3JbXSAoc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQK LSt7Ci0rICBhc3NlcnQgKG4gPCB0aGlzLT5zaXplICgpKTsKLSsgIGF1dG8gZGF0YSA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPiAodGhpcy0+ZGF0YSAoKSk7Ci0rICByZXR1cm4gKnJl aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCAqPiAoZGF0YSArIG4gKiBzaXplX29mPFQ+ICgpKTsKLSB9 Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY29uc3QgVCAmVmVjPFQ+OjphdChzdGQ6OnNp emVfdCBuKSBjb25zdCB7Ci0tICBpZiAobiA+PSB0aGlzLT5zaXplKCkpIHsKLS0gICAgcGFuaWM8 c3RkOjpvdXRfb2ZfcmFuZ2U+KCJydXN0OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0tICB9 Ci0rY29uc3QgVCAmCi0rVmVjPFQ+OjphdCAoc3RkOjpzaXplX3QgbikgY29uc3QKLSt7Ci0rICBp ZiAobiA+PSB0aGlzLT5zaXplICgpKQotKyAgICB7Ci0rICAgICAgcGFuaWM8c3RkOjpvdXRfb2Zf cmFuZ2U+ICgicnVzdDo6VmVjIGluZGV4IG91dCBvZiByYW5nZSIpOwotKyAgICB9Ci0gICByZXR1 cm4gKCp0aGlzKVtuXTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tY29uc3QgVCAm VmVjPFQ+Ojpmcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsKLS0gIGFzc2VydCghdGhpcy0+ZW1wdHko KSk7Ci0rY29uc3QgVCAmCi0rVmVjPFQ+Ojpmcm9udCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsg IGFzc2VydCAoIXRoaXMtPmVtcHR5ICgpKTsKLSAgIHJldHVybiAoKnRoaXMpWzBdOwotIH0KLSAK LSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1jb25zdCBUICZWZWM8VD46OmJhY2soKSBjb25zdCBu b2V4Y2VwdCB7Ci0tICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOwotLSAgcmV0dXJuICgqdGhpcylb dGhpcy0+c2l6ZSgpIC0gMV07Ci0rY29uc3QgVCAmCi0rVmVjPFQ+OjpiYWNrICgpIGNvbnN0IG5v ZXhjZXB0Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotKyAgcmV0dXJuICgqdGhp cylbdGhpcy0+c2l6ZSAoKSAtIDFdOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1U ICZWZWM8VD46Om9wZXJhdG9yW10oc3RkOjpzaXplX3Qgbikgbm9leGNlcHQgewotLSAgYXNzZXJ0 KG4gPCB0aGlzLT5zaXplKCkpOwotLSAgYXV0byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy ICo+KHRoaXMtPmRhdGEoKSk7Ci0tICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihkYXRh ICsgbiAqIHNpemVfb2Y8VD4oKSk7Ci0rVCAmCi0rVmVjPFQ+OjpvcGVyYXRvcltdIChzdGQ6OnNp emVfdCBuKSBub2V4Y2VwdAotK3sKLSsgIGFzc2VydCAobiA8IHRoaXMtPnNpemUgKCkpOwotKyAg YXV0byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyICo+ICh0aGlzLT5kYXRhICgpKTsKLSsg IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+IChkYXRhICsgbiAqIHNpemVfb2Y8VD4gKCkp OwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICZWZWM8VD46OmF0KHN0ZDo6c2l6 ZV90IG4pIHsKLS0gIGlmIChuID49IHRoaXMtPnNpemUoKSkgewotLSAgICBwYW5pYzxzdGQ6Om91 dF9vZl9yYW5nZT4oInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLS0gIH0KLStUICYK LStWZWM8VD46OmF0IChzdGQ6OnNpemVfdCBuKQotK3sKLSsgIGlmIChuID49IHRoaXMtPnNpemUg KCkpCi0rICAgIHsKLSsgICAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4gKCJydXN0OjpWZWMg aW5kZXggb3V0IG9mIHJhbmdlIik7Ci0rICAgIH0KLSAgIHJldHVybiAoKnRoaXMpW25dOwotIH0K LSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS1UICZWZWM8VD46OmZyb250KCkgbm9leGNlcHQg ewotLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKLStUICYKLStWZWM8VD46OmZyb250ICgpIG5v ZXhjZXB0Ci0rewotKyAgYXNzZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOwotICAgcmV0dXJuICgqdGhp cylbMF07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVQgJlZlYzxUPjo6YmFjaygp IG5vZXhjZXB0IHsKLS0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7Ci0tICByZXR1cm4gKCp0aGlz KVt0aGlzLT5zaXplKCkgLSAxXTsKLStUICYKLStWZWM8VD46OmJhY2sgKCkgbm9leGNlcHQKLSt7 Ci0rICBhc3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7Ci0rICByZXR1cm4gKCp0aGlzKVt0aGlzLT5z aXplICgpIC0gMV07Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXZvaWQgVmVjPFQ+ OjpyZXNlcnZlKHN0ZDo6c2l6ZV90IG5ld19jYXApIHsKLS0gIHRoaXMtPnJlc2VydmVfdG90YWwo bmV3X2NhcCk7Ci0rdm9pZAotK1ZlYzxUPjo6cmVzZXJ2ZSAoc3RkOjpzaXplX3QgbmV3X2NhcCkK LSt7Ci0rICB0aGlzLT5yZXNlcnZlX3RvdGFsIChuZXdfY2FwKTsKLSB9Ci0gCi0gdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0tdm9pZCBWZWM8VD46OnB1c2hfYmFjayhjb25zdCBUICZ2YWx1ZSkgewot LSAgdGhpcy0+ZW1wbGFjZV9iYWNrKHZhbHVlKTsKLSt2b2lkCi0rVmVjPFQ+OjpwdXNoX2JhY2sg KGNvbnN0IFQgJnZhbHVlKQotK3sKLSsgIHRoaXMtPmVtcGxhY2VfYmFjayAodmFsdWUpOwotIH0K LSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS12b2lkIFZlYzxUPjo6cHVzaF9iYWNrKFQgJiZ2 YWx1ZSkgewotLSAgdGhpcy0+ZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZSh2YWx1ZSkpOwotK3ZvaWQK LStWZWM8VD46OnB1c2hfYmFjayAoVCAmJnZhbHVlKQotK3sKLSsgIHRoaXMtPmVtcGxhY2VfYmFj ayAoc3RkOjptb3ZlICh2YWx1ZSkpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSB0 ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KLS12b2lkIFZlYzxUPjo6ZW1wbGFjZV9iYWNrKEFy Z3MgJiYuLi5hcmdzKSB7Ci0tICBhdXRvIHNpemUgPSB0aGlzLT5zaXplKCk7Ci0tICB0aGlzLT5y ZXNlcnZlX3RvdGFsKHNpemUgKyAxKTsKLS0gIDo6bmV3IChyZWludGVycHJldF9jYXN0PFQgKj4o cmVpbnRlcnByZXRfY2FzdDxjaGFyICo+KHRoaXMtPmRhdGEoKSkgKwotLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplICogc2l6ZV9vZjxUPigpKSkKLS0gICAgICBUKHN0ZDo6Zm9y d2FyZDxBcmdzPihhcmdzKS4uLik7Ci0tICB0aGlzLT5zZXRfbGVuKHNpemUgKyAxKTsKLSt2b2lk Ci0rVmVjPFQ+OjplbXBsYWNlX2JhY2sgKEFyZ3MgJiYuLi5hcmdzKQotK3sKLSsgIGF1dG8gc2l6 ZSA9IHRoaXMtPnNpemUgKCk7Ci0rICB0aGlzLT5yZXNlcnZlX3RvdGFsIChzaXplICsgMSk7Ci0r ICA6Om5ldyAocmVpbnRlcnByZXRfY2FzdDxUICo+IChyZWludGVycHJldF9jYXN0PGNoYXIgKj4g KHRoaXMtPmRhdGEgKCkpICsgc2l6ZSAqIHNpemVfb2Y8VD4gKCkpKQotKyAgICAgIFQgKHN0ZDo6 Zm9yd2FyZDxBcmdzPiAoYXJncykuLi4pOwotKyAgdGhpcy0+c2V0X2xlbiAoc2l6ZSArIDEpOwot IH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS12b2lkIFZlYzxUPjo6Y2xlYXIoKSB7Ci0t ICB0aGlzLT50cnVuY2F0ZSgwKTsKLSt2b2lkCi0rVmVjPFQ+OjpjbGVhciAoKQotK3sKLSsgIHRo aXMtPnRydW5jYXRlICgwKTsKLSB9Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5h bWUgVmVjPFQ+OjppdGVyYXRvciBWZWM8VD46OmJlZ2luKCkgbm9leGNlcHQgewotLSAgcmV0dXJu IFNsaWNlPFQ+KHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5iZWdpbigpOwotK3R5cGVuYW1l IFZlYzxUPjo6aXRlcmF0b3IKLStWZWM8VD46OmJlZ2luICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0 dXJuIFNsaWNlPFQ+ICh0aGlzLT5kYXRhICgpLCB0aGlzLT5zaXplICgpKS5iZWdpbiAoKTsKLSB9 Ci0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tdHlwZW5hbWUgVmVjPFQ+OjppdGVyYXRvciBW ZWM8VD46OmVuZCgpIG5vZXhjZXB0IHsKLS0gIHJldHVybiBTbGljZTxUPih0aGlzLT5kYXRhKCks IHRoaXMtPnNpemUoKSkuZW5kKCk7Ci0rdHlwZW5hbWUgVmVjPFQ+OjppdGVyYXRvcgotK1ZlYzxU Pjo6ZW5kICgpIG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIFNsaWNlPFQ+ICh0aGlzLT5kYXRhICgp LCB0aGlzLT5zaXplICgpKS5lbmQgKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LXR5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IgVmVjPFQ+OjpiZWdpbigpIGNvbnN0IG5v ZXhjZXB0IHsKLS0gIHJldHVybiB0aGlzLT5jYmVnaW4oKTsKLSt0eXBlbmFtZSBWZWM8VD46OmNv bnN0X2l0ZXJhdG9yCi0rVmVjPFQ+OjpiZWdpbiAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJl dHVybiB0aGlzLT5jYmVnaW4gKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLXR5 cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IgVmVjPFQ+OjplbmQoKSBjb25zdCBub2V4Y2Vw dCB7Ci0tICByZXR1cm4gdGhpcy0+Y2VuZCgpOwotK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRl cmF0b3IKLStWZWM8VD46OmVuZCAoKSBjb25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiB0aGlz LT5jZW5kICgpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS10eXBlbmFtZSBWZWM8 VD46OmNvbnN0X2l0ZXJhdG9yIFZlYzxUPjo6Y2JlZ2luKCkgY29uc3Qgbm9leGNlcHQgewotLSAg cmV0dXJuIFNsaWNlPGNvbnN0IFQ+KHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5iZWdpbigp OwotK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IKLStWZWM8VD46OmNiZWdpbiAoKSBj b25zdCBub2V4Y2VwdAotK3sKLSsgIHJldHVybiBTbGljZTxjb25zdCBUPiAodGhpcy0+ZGF0YSAo KSwgdGhpcy0+c2l6ZSAoKSkuYmVnaW4gKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotLXR5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IgVmVjPFQ+OjpjZW5kKCkgY29uc3Qg bm9leGNlcHQgewotLSAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+KHRoaXMtPmRhdGEoKSwgdGhpcy0+ c2l6ZSgpKS5lbmQoKTsKLSt0eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yCi0rVmVjPFQ+ OjpjZW5kICgpIGNvbnN0IG5vZXhjZXB0Ci0rewotKyAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+ICh0 aGlzLT5kYXRhICgpLCB0aGlzLT5zaXplICgpKS5lbmQgKCk7Ci0gfQotIAotIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgotLXZvaWQgVmVjPFQ+Ojpzd2FwKFZlYyAmcmhzKSBub2V4Y2VwdCB7Ci0rdm9p ZAotK1ZlYzxUPjo6c3dhcCAoVmVjICZyaHMpIG5vZXhjZXB0Ci0rewotICAgdXNpbmcgc3RkOjpz d2FwOwotLSAgc3dhcCh0aGlzLT5yZXByLCByaHMucmVwcik7Ci0rICBzd2FwICh0aGlzLT5yZXBy LCByaHMucmVwcik7Ci0gfQotIAotLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLVZlYzxUPjo6VmVj KHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFZlYyAmYml0cykgbm9leGNlcHQgOiByZXByKGJpdHMu cmVwcikge30KLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVmVjPFQ+OjpWZWMgKHVuc2FmZV9iaXRj b3B5X3QsIGNvbnN0IFZlYyAmYml0cykgbm9leGNlcHQgOiByZXByIChiaXRzLnJlcHIpIHt9Ci0g I2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9WRUMKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfUlVT VF9PUEFRVUUKLSAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9PUEFRVUUKLS1jbGFzcyBPcGFxdWUg ewotK2NsYXNzIE9wYXF1ZQotK3sKLSBwdWJsaWM6Ci0tICBPcGFxdWUoKSA9IGRlbGV0ZTsKLS0g IE9wYXF1ZShjb25zdCBPcGFxdWUgJikgPSBkZWxldGU7Ci0tICB+T3BhcXVlKCkgPSBkZWxldGU7 Ci0rICBPcGFxdWUgKCkgPSBkZWxldGU7Ci0rICBPcGFxdWUgKGNvbnN0IE9wYXF1ZSAmKSA9IGRl bGV0ZTsKLSsgIH5PcGFxdWUgKCkgPSBkZWxldGU7Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdF MV9SVVNUX09QQVFVRQotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9JU19DT01QTEVURQotICNkZWZp bmUgQ1hYQlJJREdFMV9JU19DT01QTEVURQotLW5hbWVzcGFjZSBkZXRhaWwgewotLW5hbWVzcGFj ZSB7Ci0tdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjpzaXplX3Q+Ci0tc3Ry dWN0IGlzX2NvbXBsZXRlIDogc3RkOjpmYWxzZV90eXBlIHt9OwotLXRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotLXN0cnVjdCBpc19jb21wbGV0ZTxULCBkZWNsdHlwZShzaXplb2YoVCkpPiA6IHN0ZDo6 dHJ1ZV90eXBlIHt9OwotK25hbWVzcGFjZSBkZXRhaWwKLSt7Ci0rbmFtZXNwYWNlCi0rewotK3Rl bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6c2l6ZV90PiBzdHJ1Y3QgaXNfY29t cGxldGUgOiBzdGQ6OmZhbHNlX3R5cGUKLSt7Ci0rfTsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g c3RydWN0IGlzX2NvbXBsZXRlPFQsIGRlY2x0eXBlIChzaXplb2YgKFQpKT4gOiBzdGQ6OnRydWVf dHlwZQotK3sKLSt9OwotIH0gLy8gbmFtZXNwYWNlCi0gfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0g I2VuZGlmIC8vIENYWEJSSURHRTFfSVNfQ09NUExFVEUKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFf TEFZT1VUCi0gI2RlZmluZSBDWFhCUklER0UxX0xBWU9VVAotLWNsYXNzIGxheW91dCB7Ci0rY2xh c3MgbGF5b3V0Ci0rewotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGZyaWVuZCBzdGQ6OnNpemVf dCBzaXplX29mICgpOwotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGZyaWVuZCBzdGQ6OnNpemVf dCBhbGlnbl9vZiAoKTsKLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLSAgZnJpZW5kIHN0ZDo6 c2l6ZV90IHNpemVfb2YoKTsKLS0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLSAgZnJpZW5kIHN0 ZDo6c2l6ZV90IGFsaWduX29mKCk7Ci0tICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS0gIHN0YXRp YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFs dWUsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3Q+Ojp0eXBl Ci0tICBkb19zaXplX29mKCkgewotLSAgICByZXR1cm4gVDo6bGF5b3V0OjpzaXplKCk7Ci0rICBz dGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46 OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKLSsgIGRvX3NpemVfb2YgKCkKLSsgIHsKLSsgICAg cmV0dXJuIFQ6OmxheW91dDo6c2l6ZSAoKTsKLSAgIH0KLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgotLSAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vfb2Y8T3Bh cXVlLCBUPjo6dmFsdWUsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpz aXplX3Q+Ojp0eXBlCi0tICBkb19zaXplX29mKCkgewotLSAgICByZXR1cm4gc2l6ZW9mKFQpOwot KyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVl LCBUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQotKyAgZG9fc2l6ZV9vZiAoKQotKyAgewot KyAgICByZXR1cm4gc2l6ZW9mIChUKTsKLSAgIH0KLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot LSAgc3RhdGljCi0tICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ZGV0YWlsOjppc19jb21w bGV0ZTxUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQotLSAgICAgIHNpemVfb2YoKSB7Ci0t ICAgIHJldHVybiBkb19zaXplX29mPFQ+KCk7Ci0rICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFi bGVfaWY8ZGV0YWlsOjppc19jb21wbGV0ZTxUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQot KyAgc2l6ZV9vZiAoKQotKyAgewotKyAgICByZXR1cm4gZG9fc2l6ZV9vZjxUPiAoKTsKLSAgIH0K LSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLSAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl X2lmPHN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUKLS0gIGRvX2FsaWduX29mKCkgewot LSAgICByZXR1cm4gVDo6bGF5b3V0OjphbGlnbigpOwotKyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6 ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+ Ojp0eXBlCi0rICBkb19hbGlnbl9vZiAoKQotKyAgewotKyAgICByZXR1cm4gVDo6bGF5b3V0Ojph bGlnbiAoKTsKLSAgIH0KLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotLSAgc3RhdGljIHR5cGVu YW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3Q+Ojp0eXBlCi0tICBk b19hbGlnbl9vZigpIHsKLS0gICAgcmV0dXJuIGFsaWdub2YoVCk7Ci0rICBzdGF0aWMgdHlwZW5h bWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3Rk OjpzaXplX3Q+Ojp0eXBlCi0rICBkb19hbGlnbl9vZiAoKQotKyAgewotKyAgICByZXR1cm4gYWxp Z25vZiAoVCk7Ci0gICB9Ci0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS0gIHN0YXRpYwotLSAg ICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGRldGFpbDo6aXNfY29tcGxldGU8VD46OnZhbHVl LCBzdGQ6OnNpemVfdD46OnR5cGUKLS0gICAgICBhbGlnbl9vZigpIHsKLS0gICAgcmV0dXJuIGRv X2FsaWduX29mPFQ+KCk7Ci0rICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ZGV0YWls Ojppc19jb21wbGV0ZTxUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQotKyAgYWxpZ25fb2Yg KCkKLSsgIHsKLSsgICAgcmV0dXJuIGRvX2FsaWduX29mPFQ+ICgpOwotICAgfQotIH07Ci0gCi0g dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0tc3RkOjpzaXplX3Qgc2l6ZV9vZigpIHsKLS0gIHJldHVy biBsYXlvdXQ6OnNpemVfb2Y8VD4oKTsKLStzdGQ6OnNpemVfdAotK3NpemVfb2YgKCkKLSt7Ci0r ICByZXR1cm4gbGF5b3V0OjpzaXplX29mPFQ+ICgpOwotIH0KLSAKLSB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KLS1zdGQ6OnNpemVfdCBhbGlnbl9vZigpIHsKLS0gIHJldHVybiBsYXlvdXQ6OmFsaWdu X29mPFQ+KCk7Ci0rc3RkOjpzaXplX3QKLSthbGlnbl9vZiAoKQotK3sKLSsgIHJldHVybiBsYXlv dXQ6OmFsaWduX29mPFQ+ICgpOwotIH0KLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9MQVlPVVQKLSB9 IC8vIG5hbWVzcGFjZSBjeHhicmlkZ2UxCi1AQCAtOTc4LDUxICsxMTExLDUzIEBAIHN0ZDo6c2l6 ZV90IGFsaWduX29mKCkgewotICNkZWZpbmUgQ1hYX0RFRkFVTFRfVkFMVUUodmFsdWUpCi0gI2Vu ZGlmCi0gCi0tbmFtZXNwYWNlIHJwbW9zdHJlZWN4eCB7Ci0tICBzdHJ1Y3QgU3RyaW5nTWFwcGlu ZzsKLS0gIGVudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdDsKLS0gIGVu dW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdDsKLS0gIHN0cnVj dCBCdWJibGV3cmFwOwotLSAgc3RydWN0IENvbnRhaW5lckltYWdlU3RhdGU7Ci0tICBzdHJ1Y3Qg RXhwb3J0ZWRNYW5pZmVzdERpZmY7Ci0tICBzdHJ1Y3QgUHJ1bmVkQ29udGFpbmVySW5mbzsKLS0g IGVudW0gY2xhc3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdDsKLS0gIHN0cnVjdCBUZW1w RXRjR3VhcmQ7Ci0tICBzdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXA7Ci0tICBzdHJ1Y3QgRGVw bG95bWVudExheWVyZWRNZXRhOwotLSAgc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2U7 Ci0tICBlbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90OwotLSAg c3RydWN0IFBhcnNlZFJldmlzaW9uOwotLSAgc3RydWN0IFJwbUltcG9ydGVyRmxhZ3M7Ci0tICBz dHJ1Y3QgUnBtSW1wb3J0ZXI7Ci0tICBzdHJ1Y3QgSGlzdG9yeUVudHJ5OwotLSAgc3RydWN0IEhp c3RvcnlDdHg7Ci0tICBzdHJ1Y3QgVG9raW9IYW5kbGU7Ci0tICBzdHJ1Y3QgVG9raW9FbnRlckd1 YXJkOwotLSAgZW51bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsK LS0gIGVudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7 Ci0tICBzdHJ1Y3QgUmVmc3BlYzsKLS0gIGVudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5 cGUgOiA6OnN0ZDo6dWludDhfdDsKLS0gIHN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50OwotLSAg ZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90OwotLSAgc3RydWN0IFRyZWVm aWxlOwotLSAgc3RydWN0IFJlcG9QYWNrYWdlOwotLSAgc3RydWN0IExpdmVBcHBseVN0YXRlOwot LSAgc3RydWN0IFBhc3N3ZERCOwotLSAgc3RydWN0IFBhc3N3ZEVudHJpZXM7Ci0tICBzdHJ1Y3Qg RXh0ZW5zaW9uczsKLS0gIHN0cnVjdCBMb2NrZWRQYWNrYWdlOwotLSAgc3RydWN0IExvY2tmaWxl Q29uZmlnOwotLSAgdXNpbmcgQ3h4R09iamVjdEFycmF5ID0gOjpycG1vc3RyZWVjeHg6OkN4eEdP YmplY3RBcnJheTsKLS0gIHVzaW5nIENsaWVudENvbm5lY3Rpb24gPSA6OnJwbW9zdHJlZWN4eDo6 Q2xpZW50Q29ubmVjdGlvbjsKLS0gIHVzaW5nIFJQTURpZmYgPSA6OnJwbW9zdHJlZWN4eDo6UlBN RGlmZjsKLS0gIHVzaW5nIFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCA9IDo6cnBtb3N0cmVlY3h4 OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ7Ci0tICB1c2luZyBQcm9ncmVzcyA9IDo6cnBtb3N0 cmVlY3h4OjpQcm9ncmVzczsKLS0gIHVzaW5nIFJwbVRzID0gOjpycG1vc3RyZWVjeHg6OlJwbVRz OwotLSAgdXNpbmcgUGFja2FnZU1ldGEgPSA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE7Ci0t fQotLQotLW5hbWVzcGFjZSBycG1vc3RyZWVjeHggewotK25hbWVzcGFjZSBycG1vc3RyZWVjeHgK LSt7Ci0rc3RydWN0IFN0cmluZ01hcHBpbmc7Ci0rZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6 IDo6c3RkOjp1aW50OF90OwotK2VudW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0 ZDo6dWludDhfdDsKLStzdHJ1Y3QgQnViYmxld3JhcDsKLStzdHJ1Y3QgQ29udGFpbmVySW1hZ2VT dGF0ZTsKLStzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmY7Ci0rc3RydWN0IFBydW5lZENvbnRh aW5lckluZm87Ci0rZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90OwotK3N0 cnVjdCBUZW1wRXRjR3VhcmQ7Ci0rc3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQcmVwOwotK3N0cnVj dCBEZXBsb3ltZW50TGF5ZXJlZE1ldGE7Ci0rc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3Vy Y2U7Ci0rZW51bSBjbGFzcyBQYXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdDsKLStz dHJ1Y3QgUGFyc2VkUmV2aXNpb247Ci0rc3RydWN0IFJwbUltcG9ydGVyRmxhZ3M7Ci0rc3RydWN0 IFJwbUltcG9ydGVyOwotK3N0cnVjdCBIaXN0b3J5RW50cnk7Ci0rc3RydWN0IEhpc3RvcnlDdHg7 Ci0rc3RydWN0IFRva2lvSGFuZGxlOwotK3N0cnVjdCBUb2tpb0VudGVyR3VhcmQ7Ci0rZW51bSBj bGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsKLStlbnVtIGNsYXNzIEFk dmlzb3JpZXNNZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90OwotK3N0cnVjdCBSZWZzcGVj OwotK2VudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhfdDsK LStzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudDsKLStlbnVtIGNsYXNzIE9wdFVzckxvY2FsIDog OjpzdGQ6OnVpbnQ4X3Q7Ci0rc3RydWN0IFRyZWVmaWxlOwotK3N0cnVjdCBSZXBvUGFja2FnZTsK LStzdHJ1Y3QgTGl2ZUFwcGx5U3RhdGU7Ci0rc3RydWN0IFBhc3N3ZERCOwotK3N0cnVjdCBQYXNz d2RFbnRyaWVzOwotK3N0cnVjdCBFeHRlbnNpb25zOwotK3N0cnVjdCBMb2NrZWRQYWNrYWdlOwot K3N0cnVjdCBMb2NrZmlsZUNvbmZpZzsKLSt1c2luZyBDeHhHT2JqZWN0QXJyYXkgPSA6OnJwbW9z dHJlZWN4eDo6Q3h4R09iamVjdEFycmF5OwotK3VzaW5nIENsaWVudENvbm5lY3Rpb24gPSA6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjsKLSt1c2luZyBSUE1EaWZmID0gOjpycG1vc3Ry ZWVjeHg6OlJQTURpZmY7Ci0rdXNpbmcgUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0ID0gOjpycG1v c3RyZWVjeHg6OlJwbU9zdHJlZURpZmZQcmludEZvcm1hdDsKLSt1c2luZyBQcm9ncmVzcyA9IDo6 cnBtb3N0cmVlY3h4OjpQcm9ncmVzczsKLSt1c2luZyBScG1UcyA9IDo6cnBtb3N0cmVlY3h4OjpS cG1UczsKLSt1c2luZyBQYWNrYWdlTWV0YSA9IDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTsK LSt9Ci0rCi0rbmFtZXNwYWNlIHJwbW9zdHJlZWN4eAotK3sKLSAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nCi0gI2RlZmluZSBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZwotIC8vIEN1cnJlbnRseSBjeHgtcnMgZG9l c24ndCBzdXBwb3J0IG1hcHBpbmdzOyBsaWtlIHByb2JhYmx5IG1vc3QgcHJvamVjdHMsCi1AQCAt MTAzMCw3ICsxMTY1LDggQEAgbmFtZXNwYWNlIHJwbW9zdHJlZWN4eCB7Ci0gLy8gb3VyIGRhdGEg c2l6ZXMgYXJlbid0IGxhcmdlLCB3ZSBzZXJpYWxpemUgdGhpcyBhcyBhIHZlY3RvciBvZiBzdHJp bmdzIHBhaXJzLgotIC8vIEluIHRoZSBmdXR1cmUgaXQncyBhbHNvIGxpa2VseSB0aGF0IGN4eC1y cyB3aWxsIHN1cHBvcnQgYSBDKysgc3RyaW5nX3ZpZXcKLSAvLyBzbyB3ZSBjb3VsZCBhdm9pZCBk dXBsaWNhdGluZyBpbiB0aGF0IGRpcmVjdGlvbi4KLS1zdHJ1Y3QgU3RyaW5nTWFwcGluZyBmaW5h bCB7Ci0rc3RydWN0IFN0cmluZ01hcHBpbmcgZmluYWwKLSt7Ci0gICA6OnJ1c3Q6OlN0cmluZyBr OwotICAgOjpydXN0OjpTdHJpbmcgdjsKLSAKLUBAIC0xMDQxLDcgKzExNzcsOCBAQCBzdHJ1Y3Qg U3RyaW5nTWFwcGluZyBmaW5hbCB7Ci0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVl Y3h4JFN5c3RlbUhvc3RUeXBlCi0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4 JFN5c3RlbUhvc3RUeXBlCi0gLy8gQ2xhc3NpZnkgdGhlIHJ1bm5pbmcgc3lzdGVtLgotLWVudW0g Y2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdCB7Ci0rZW51bSBjbGFzcyBTeXN0 ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90Ci0rewotICAgT3N0cmVlQ29udGFpbmVyID0gMCwK LSAgIE9zdHJlZUhvc3QgPSAxLAotICAgVW5rbm93biA9IDIsCi1AQCAtMTA1MCw3ICsxMTg3LDgg QEAgZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90IHsKLSAKLSAjaWZu ZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQnViYmxld3JhcE11dGFiaWxpdHkKLSAj ZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQnViYmxld3JhcE11dGFiaWxpdHkK LS1lbnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3QgewotK2Vu dW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAgIElt bXV0YWJsZSA9IDAsCi0gICBSb0ZpbGVzID0gMSwKLSAgIE11dGF0ZUZyZWVseSA9IDIsCi1AQCAt MTA1OSw0OSArMTE5Nyw1MiBAQCBlbnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpz dGQ6OnVpbnQ4X3QgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JEJ1YmJsZXdyYXAKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRCdWJi bGV3cmFwCi0tc3RydWN0IEJ1YmJsZXdyYXAgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUg ewotLSAgOjpzdGQ6OmludDMyX3QgZ2V0X3Jvb3Rmc19mZCgpIGNvbnN0IG5vZXhjZXB0OwotLSAg dm9pZCBhcHBlbmRfYndyYXBfYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0tICB2b2lk IGFwcGVuZF9jaGlsZF9hcmcoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLS0gIHZvaWQgc2V0 ZW52KDo6cnVzdDo6U3RyIGssIDo6cnVzdDo6U3RyIHYpIG5vZXhjZXB0OwotLSAgdm9pZCB0YWtl X2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCwgOjpzdGQ6OmludDMyX3QgdGFyZ2V0X2ZkKSBu b2V4Y2VwdDsKLS0gIHZvaWQgc2V0X2luaGVyaXRfc3RkaW4oKSBub2V4Y2VwdDsKLS0gIHZvaWQg dGFrZV9zdGRpbl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OwotLSAgdm9p ZCB0YWtlX3N0ZG91dF9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OwotLSAg dm9pZCB0YWtlX3N0ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0Owot LSAgdm9pZCB0YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9m ZCkgbm9leGNlcHQ7Ci0tICB2b2lkIGJpbmRfcmVhZCg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6 U3RyIGRlc3QpIG5vZXhjZXB0OwotLSAgdm9pZCBiaW5kX3JlYWR3cml0ZSg6OnJ1c3Q6OlN0ciBz cmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OwotLSAgdm9pZCBzZXR1cF9jb21wYXRfdmFy KCk7Ci0tICB2b2lkIHJ1big6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5j ZWxsYWJsZSk7Ci0tICB+QnViYmxld3JhcCgpID0gZGVsZXRlOwotK3N0cnVjdCBCdWJibGV3cmFw IGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpzdGQ6OmludDMyX3QgZ2V0 X3Jvb3Rmc19mZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgYXBwZW5kX2J3cmFwX2FyZyAo OjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSsgIHZvaWQgYXBwZW5kX2NoaWxkX2FyZyAoOjpy dXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0ZW52ICg6OnJ1c3Q6OlN0ciBrLCA6 OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFrZV9mZCAoOjpzdGQ6OmludDMyX3Qg c291cmNlX2ZkLCA6OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0OwotKyAgdm9pZCBz ZXRfaW5oZXJpdF9zdGRpbiAoKSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFrZV9zdGRpbl9mZCAoOjpz dGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKLSsgIHZvaWQgdGFrZV9zdGRvdXRfZmQg KDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7Ci0rICB2b2lkIHRha2Vfc3RkZXJy X2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OwotKyAgdm9pZCB0YWtlX3N0 ZG91dF9hbmRfc3RkZXJyX2ZkICg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0Owot KyAgdm9pZCBiaW5kX3JlYWQgKDo6cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9l eGNlcHQ7Ci0rICB2b2lkIGJpbmRfcmVhZHdyaXRlICg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6 U3RyIGRlc3QpIG5vZXhjZXB0OwotKyAgdm9pZCBzZXR1cF9jb21wYXRfdmFyICgpOwotKyAgdm9p ZCBydW4gKDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsK LSsgIH5CdWJibGV3cmFwICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpy dXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXpl X3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5v ZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBu b2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JEJ1YmJsZXdyYXAKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRFeHBvcnRlZE1hbmlmZXN0RGlmZgotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBt b3N0cmVlY3h4JEV4cG9ydGVkTWFuaWZlc3REaWZmCi0tc3RydWN0IEV4cG9ydGVkTWFuaWZlc3RE aWZmIGZpbmFsIHsKLStzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmYgZmluYWwKLSt7Ci0gICAv LyBDaGVjayBpZiB0aGUgc3RydWN0IGlzIGluaXRpYWxpemVkCi0tICBib29sIGluaXRpYWxpemVk IENYWF9ERUZBVUxUX1ZBTFVFKGZhbHNlKTsKLSsgIGJvb2wgaW5pdGlhbGl6ZWQgQ1hYX0RFRkFV TFRfVkFMVUUgKGZhbHNlKTsKLSAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2FnZXMgaW4g dGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsIENYWF9ERUZBVUxUX1ZB TFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsK LSAgIC8vIFRoZSBzaXplIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2FnZXMgaW4gdGhlIG5l eHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IHRvdGFsX3NpemUgQ1hYX0RFRkFVTFRfVkFM VUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgdG90YWxfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSAo MCk7Ci0gICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIHJlbW92ZWQgcGFja2FnZXMgaW4gdGhlIG5l eHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IG5fcmVtb3ZlZCBDWFhfREVGQVVMVF9WQUxV RSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBuX3JlbW92ZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKDAp OwotICAgLy8gVGhlIHNpemUgb2YgdG90YWwgbnVtYmVyIG9mIHJlbW92ZWQgcGFja2FnZXMgaW4g dGhlIG5leHQgdXBncmFkZQotLSAgOjpzdGQ6OnVpbnQ2NF90IHJlbW92ZWRfc2l6ZSBDWFhfREVG QVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCByZW1vdmVkX3NpemUgQ1hYX0RFRkFV TFRfVkFMVUUgKDApOwotICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBhZGRlZCBwYWNrYWdlcyBp biB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3Qgbl9hZGRlZCBDWFhfREVGQVVM VF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBuX2FkZGVkIENYWF9ERUZBVUxUX1ZBTFVF ICgwKTsKLSAgIC8vIFRoZSBzaXplIG9mIHRvdGFsIG51bWJlciBvZiBhZGRlZCBwYWNrYWdlcyBp biB0aGUgbmV4dCB1cGdyYWRlCi0tICA6OnN0ZDo6dWludDY0X3QgYWRkZWRfc2l6ZSBDWFhfREVG QVVMVF9WQUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBhZGRlZF9zaXplIENYWF9ERUZBVUxU X1ZBTFVFICgwKTsKLSAgIC8vIFRoZSB2ZXJzaW9uIG9mIHRoZSBuZXh0IHVwZ3JhZGUKLSAgIDo6 cnVzdDo6U3RyaW5nIHZlcnNpb247Ci0gCi1AQCAtMTExMSwxMCArMTI1MiwxMSBAQCBzdHJ1Y3Qg RXhwb3J0ZWRNYW5pZmVzdERpZmYgZmluYWwgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUKLSAjZGVmaW5lIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlCi0tLy8gYENvbnRhaW5lcklt YWdlU3RhdGVgIGlzIGN1cnJlbnRseSBpZGVudGljYWwgdG8gb3N0cmVlLXJzLWV4dCdzIGBMYXll cmVkSW1hZ2VTdGF0ZWAgc3RydWN0LCBiZWNhdXNlCi0tLy8gY3h4LnJzIGN1cnJlbnRseSByZXF1 aXJlcyB0eXBlcyB1c2VkIGFzIGV4dGVybiBSdXN0IHR5cGVzIHRvIGJlIGRlZmluZWQgYnkgdGhl IHNhbWUgY3JhdGUKLSsvLyBgQ29udGFpbmVySW1hZ2VTdGF0ZWAgaXMgY3VycmVudGx5IGlkZW50 aWNhbCB0byBvc3RyZWUtcnMtZXh0J3MgYExheWVyZWRJbWFnZVN0YXRlYCBzdHJ1Y3QsCi0rLy8g YmVjYXVzZSBjeHgucnMgY3VycmVudGx5IHJlcXVpcmVzIHR5cGVzIHVzZWQgYXMgZXh0ZXJuIFJ1 c3QgdHlwZXMgdG8gYmUgZGVmaW5lZCBieSB0aGUgc2FtZSBjcmF0ZQotIC8vIHRoYXQgY29udGFp bnMgdGhlIGJyaWRnZSB1c2luZyB0aGVtLCBzbyB3ZSByZWRlZmluZSBhbiBgQ29udGFpbmVySW1w b3J0YCBzdHJ1Y3QgaGVyZS4KLS1zdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZSBmaW5hbCB7Ci0r c3RydWN0IENvbnRhaW5lckltYWdlU3RhdGUgZmluYWwKLSt7Ci0gICA6OnJ1c3Q6OlN0cmluZyBi YXNlX2NvbW1pdDsKLSAgIDo6cnVzdDo6U3RyaW5nIG1lcmdlX2NvbW1pdDsKLSAgIDo6cnVzdDo6 U3RyaW5nIGltYWdlX2RpZ2VzdDsKLUBAIC0xMTI4LDE5ICsxMjcwLDIxIEBAIHN0cnVjdCBDb250 YWluZXJJbWFnZVN0YXRlIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3Jw bW9zdHJlZWN4eCRQcnVuZWRDb250YWluZXJJbmZvCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkUHJ1bmVkQ29udGFpbmVySW5mbwotLXN0cnVjdCBQcnVuZWRDb250YWlu ZXJJbmZvIGZpbmFsIHsKLS0gIDo6c3RkOjp1aW50MzJfdCBpbWFnZXMgQ1hYX0RFRkFVTFRfVkFM VUUoMCk7Ci0tICA6OnN0ZDo6dWludDMyX3QgbGF5ZXJzIENYWF9ERUZBVUxUX1ZBTFVFKDApOwot K3N0cnVjdCBQcnVuZWRDb250YWluZXJJbmZvIGZpbmFsCi0rewotKyAgOjpzdGQ6OnVpbnQzMl90 IGltYWdlcyBDWFhfREVGQVVMVF9WQUxVRSAoMCk7Ci0rICA6OnN0ZDo6dWludDMyX3QgbGF5ZXJz IENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKLSAKLS0gIGJvb2wgb3BlcmF0b3I9PShQcnVuZWRDb250 YWluZXJJbmZvIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBvcGVyYXRvciE9KFBy dW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJh dG9yPT0gKFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBi b29sIG9wZXJhdG9yIT0gKFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNl cHQ7Ci0gICB1c2luZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsKLSB9OwotICNl bmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUHJ1bmVkQ29udGFpbmVySW5m bwotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZWZzcGVjVHlwZQot ICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZWZzcGVjVHlwZQotLWVudW0g Y2xhc3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdCB7Ci0rZW51bSBjbGFzcyBSZWZzcGVj VHlwZSA6IDo6c3RkOjp1aW50OF90Ci0rewotICAgT3N0cmVlID0gMCwKLSAgIENoZWNrc3VtID0g MSwKLSAgIENvbnRhaW5lciA9IDIsCi1AQCAtMTE0OSw0MCArMTI5Myw0NSBAQCBlbnVtIGNsYXNz IFJlZnNwZWNUeXBlIDogOjpzdGQ6OnVpbnQ4X3QgewotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZAotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZAotLXN0cnVjdCBUZW1wRXRjR3VhcmQgZmluYWwg OiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgdm9pZCB1bmRvKCkgY29uc3Q7Ci0tICB+VGVt cEV0Y0d1YXJkKCkgPSBkZWxldGU7Ci0rc3RydWN0IFRlbXBFdGNHdWFyZCBmaW5hbCA6IHB1Ymxp YyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIHZvaWQgdW5kbyAoKSBjb25zdDsKLSsgIH5UZW1wRXRj R3VhcmQgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91 dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkg bm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0r ICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkg bm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0Owot ICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVGVt cEV0Y0d1YXJkCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRmls ZXN5c3RlbVNjcmlwdFByZXAKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4 eCRGaWxlc3lzdGVtU2NyaXB0UHJlcAotLXN0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcCBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICB2b2lkIHVuZG8oKTsKLS0gIH5GaWxlc3lz dGVtU2NyaXB0UHJlcCgpID0gZGVsZXRlOwotK3N0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcCBm aW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIHZvaWQgdW5kbyAoKTsKLSsgIH5G aWxlc3lzdGVtU2NyaXB0UHJlcCAoKSA9IGRlbGV0ZTsKLSAKLSBwcml2YXRlOgotICAgZnJpZW5k IDo6cnVzdDo6bGF5b3V0OwotLSAgc3RydWN0IGxheW91dCB7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6 c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24o KSBub2V4Y2VwdDsKLSsgIHN0cnVjdCBsYXlvdXQKLSsgIHsKLSsgICAgc3RhdGljIDo6c3RkOjpz aXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKLSsgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24g KCkgbm9leGNlcHQ7Ci0gICB9OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3Jw bW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcAotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JERlcGxveW1lbnRMYXllcmVkTWV0YQotICNkZWZpbmUgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JERlcGxveW1lbnRMYXllcmVkTWV0YQotLXN0cnVjdCBE ZXBsb3ltZW50TGF5ZXJlZE1ldGEgZmluYWwgewotLSAgYm9vbCBpc19sYXllcmVkIENYWF9ERUZB VUxUX1ZBTFVFKGZhbHNlKTsKLStzdHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRhIGZpbmFsCi0r ewotKyAgYm9vbCBpc19sYXllcmVkIENYWF9ERUZBVUxUX1ZBTFVFIChmYWxzZSk7Ci0gICA6OnJ1 c3Q6OlN0cmluZyBiYXNlX2NvbW1pdDsKLS0gIDo6c3RkOjp1aW50MzJfdCBjbGllbnRsYXllcl92 ZXJzaW9uIENYWF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQzMl90IGNsaWVudGxh eWVyX3ZlcnNpb24gQ1hYX0RFRkFVTFRfVkFMVUUgKDApOwotIAotICAgdXNpbmcgSXNSZWxvY2F0 YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7Ci0gfTsKLUBAIC0xMTkwLDcgKzEzMzksOCBAQCBzdHJ1 Y3QgRGVwbG95bWVudExheWVyZWRNZXRhIGZpbmFsIHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50U291cmNlCi0gI2RlZmluZSBD WFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZQot LXN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNlIGZpbmFsIHsKLStzdHJ1Y3QgT3ZlcnJp ZGVSZXBsYWNlbWVudFNvdXJjZSBmaW5hbAotK3sKLSAgIDo6cnBtb3N0cmVlY3h4OjpPdmVycmlk ZVJlcGxhY2VtZW50VHlwZSBraW5kOwotICAgOjpydXN0OjpTdHJpbmcgbmFtZTsKLSAKLUBAIC0x MjAwLDcgKzEzNTAsOCBAQCBzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBmaW5hbCB7 Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9u S2luZAotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lv bktpbmQKLS1lbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90IHsK LStlbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90Ci0rewotICAg VmVyc2lvbiA9IDAsCi0gICBDaGVja3N1bSA9IDEsCi0gfTsKLUBAIC0xMjA4LDcgKzEzNTksOCBA QCBlbnVtIGNsYXNzIFBhcnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90IHsKLSAKLSAj aWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbgotICNk ZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9uCi0tc3Ry dWN0IFBhcnNlZFJldmlzaW9uIGZpbmFsIHsKLStzdHJ1Y3QgUGFyc2VkUmV2aXNpb24gZmluYWwK LSt7Ci0gICA6OnJwbW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb25LaW5kIGtpbmQ7Ci0gICA6OnJ1 c3Q6OlN0cmluZyB2YWx1ZTsKLSAKLUBAIC0xMjE4LDQ0ICsxMzcwLDUwIEBAIHN0cnVjdCBQYXJz ZWRSZXZpc2lvbiBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkUnBtSW1wb3J0ZXJGbGFncwotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MKLS1zdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFncyBmaW5hbCA6 IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICBib29sIGlzX2ltYV9lbmFibGVkKCkgY29uc3Qg bm9leGNlcHQ7Ci0tICB+UnBtSW1wb3J0ZXJGbGFncygpID0gZGVsZXRlOwotK3N0cnVjdCBScG1J bXBvcnRlckZsYWdzIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgYm9vbCBp c19pbWFfZW5hYmxlZCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIH5ScG1JbXBvcnRlckZsYWdzICgp ID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBz dHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0 OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0 IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0 OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0g fTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVy RmxhZ3MKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBv cnRlcgotICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVy Ci0tc3RydWN0IFJwbUltcG9ydGVyIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0g IDo6cnVzdDo6U3RyaW5nIGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUoOjpydXN0OjpTdHIgcGF0 aCkgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBvc3RyZWVfYnJhbmNoKCkgY29uc3Qgbm9l eGNlcHQ7Ci0tICA6OnJ1c3Q6OlN0cmluZyBwa2dfbmFtZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAg Ym9vbCBkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIGRv Y19maWxlc19pbnNlcnQoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7Ci0tICBib29sIGRvY19m aWxlc19jb250YWlucyg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQg cnBtZmlfb3ZlcnJpZGVzX2luc2VydCg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnN0ZDo6dWludDY0X3Qg aW5kZXgpIG5vZXhjZXB0OwotLSAgYm9vbCBycG1maV9vdmVycmlkZXNfY29udGFpbnMoOjpydXN0 OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnN0ZDo6dWludDY0X3QgcnBtZmlfb3Zl cnJpZGVzX2dldCg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgaXNf aW1hX2VuYWJsZWQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgdHdlYWtfaW1wb3J0ZWRfZmls ZV9pbmZvKDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Qg bm9leGNlcHQ7Ci0tICBib29sIGlzX2ZpbGVfZmlsdGVyZWQoOjpydXN0OjpTdHIgcGF0aCwgOjpy cG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdDsKLS0gIHZvaWQg dHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5KDo6cnVzdDo6U3RyIGFic19wYXRoLCA6OnJwbW9z dHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1l LCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpOwotLSAgYm9vbCBoYXNfdG1wZmlsZXNfZW50cmllcygp IGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgc2VyaWFsaXplX3RtcGZpbGVzX2Nv bnRlbnQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIH5ScG1JbXBvcnRlcigpID0gZGVsZXRlOwotK3N0 cnVjdCBScG1JbXBvcnRlciBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6 cnVzdDo6U3RyaW5nIGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUgKDo6cnVzdDo6U3RyIHBhdGgp IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgb3N0cmVlX2JyYW5jaCAoKSBjb25zdCBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIHBrZ19uYW1lICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg Ym9vbCBkb2NfZmlsZXNfYXJlX2ZpbHRlcmVkICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBk b2NfZmlsZXNfaW5zZXJ0ICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKLSsgIGJvb2wgZG9j X2ZpbGVzX2NvbnRhaW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZv aWQgcnBtZmlfb3ZlcnJpZGVzX2luc2VydCAoOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2 NF90IGluZGV4KSBub2V4Y2VwdDsKLSsgIGJvb2wgcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zICg6 OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6c3RkOjp1aW50NjRfdCBycG1m aV9vdmVycmlkZXNfZ2V0ICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJv b2wgaXNfaW1hX2VuYWJsZWQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB2b2lkIHR3ZWFrX2ltcG9y dGVkX2ZpbGVfaW5mbyAoOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZv KSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgaXNfZmlsZV9maWx0ZXJlZCAoOjpydXN0OjpTdHIg cGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdDsK LSsgIHZvaWQgdHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5ICg6OnJ1c3Q6OlN0ciBhYnNfcGF0 aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6 R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpydXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSk7Ci0r ICBib29sIGhhc190bXBmaWxlc19lbnRyaWVzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0 OjpTdHJpbmcgc2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICB+UnBtSW1wb3J0ZXIgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1 c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9l eGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90 IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5v ZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkUnBtSW1wb3J0ZXIKLUBAIC0xMjY0LDczICsxNDIyLDgxIEBAIHN0cnVjdCBScG1JbXBv cnRlciBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0gI2RlZmluZSBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkSGlzdG9yeUVudHJ5Ci0gLy8gQSBoaXN0b3J5IGVudHJ5IGlu IHRoZSBqb3VybmFsLiBJdCBtYXkgcmVwcmVzZW50IG11bHRpcGxlIGNvbnNlY3V0aXZlIGJvb3Rz Ci0gLy8gaW50byB0aGUgc2FtZSBkZXBsb3ltZW50LiBUaGlzIHN0cnVjdCBpcyBleHBvc2VkIGRp cmVjdGx5IHZpYSBGRkkgdG8gQy4KLS1zdHJ1Y3QgSGlzdG9yeUVudHJ5IGZpbmFsIHsKLStzdHJ1 Y3QgSGlzdG9yeUVudHJ5IGZpbmFsCi0rewotICAgLy8gVGhlIGRlcGxveW1lbnQgcm9vdCB0aW1l c3RhbXAuCi0tICA6OnN0ZDo6dWludDY0X3QgZGVwbG95X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9W QUxVRSgwKTsKLSsgIDo6c3RkOjp1aW50NjRfdCBkZXBsb3lfdGltZXN0YW1wIENYWF9ERUZBVUxU X1ZBTFVFICgwKTsKLSAgIC8vIFRoZSBjb21tYW5kLWxpbmUgdGhhdCB3YXMgdXNlZCB0byBjcmVh dGUgdGhlIGRlcGxveW1lbnQsIGlmIGFueS4KLSAgIDo6cnVzdDo6U3RyaW5nIGRlcGxveV9jbWRs aW5lOwotICAgLy8gVGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSB0aW1lcyB0aGUgZGVwbG95bWVu dCB3YXMgYm9vdGVkLgotLSAgOjpzdGQ6OnVpbnQ2NF90IGJvb3RfY291bnQgQ1hYX0RFRkFVTFRf VkFMVUUoMCk7Ci0rICA6OnN0ZDo6dWludDY0X3QgYm9vdF9jb3VudCBDWFhfREVGQVVMVF9WQUxV RSAoMCk7Ci0gICAvLyBUaGUgZmlyc3QgdGltZSB0aGUgZGVwbG95bWVudCB3YXMgYm9vdGVkIGlm IG11bHRpcGxlIGNvbnNlY3V0aXZlIHRpbWVzLgotLSAgOjpzdGQ6OnVpbnQ2NF90IGZpcnN0X2Jv b3RfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IGZp cnN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKLSAgIC8vIFRoZSBsYXN0 IHRpbWUgdGhlIGRlcGxveW1lbnQgd2FzIGJvb3RlZCBpZiBtdWx0aXBsZSBjb25zZWN1dGl2ZSB0 aW1lcy4KLS0gIDo6c3RkOjp1aW50NjRfdCBsYXN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZBVUxU X1ZBTFVFKDApOwotKyAgOjpzdGQ6OnVpbnQ2NF90IGxhc3RfYm9vdF90aW1lc3RhbXAgQ1hYX0RF RkFVTFRfVkFMVUUgKDApOwotICAgLy8gYHRydWVgIGlmIHRoZXJlIGFyZSBubyBtb3JlIGVudHJp ZXMuCi0tICBib29sIGVvZiBDWFhfREVGQVVMVF9WQUxVRShmYWxzZSk7Ci0rICBib29sIGVvZiBD WFhfREVGQVVMVF9WQUxVRSAoZmFsc2UpOwotIAotLSAgYm9vbCBvcGVyYXRvcj09KEhpc3RvcnlF bnRyeSBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3IhPShIaXN0b3J5 RW50cnkgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIG9wZXJhdG9yPT0gKEhpc3Rv cnlFbnRyeSBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3IhPSAoSGlz dG9yeUVudHJ5IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotICAgdXNpbmcgSXNSZWxvY2F0YWJs ZSA9IDo6c3RkOjp0cnVlX3R5cGU7Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JEhpc3RvcnlFbnRyeQotIAotICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRIaXN0b3J5Q3R4Ci0tc3RydWN0IEhpc3RvcnlDdHggZmluYWwgOiBwdWJsaWMgOjpy dXN0OjpPcGFxdWUgewotLSAgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSBuZXh0X2VudHJ5 KCk7Ci0tICB+SGlzdG9yeUN0eCgpID0gZGVsZXRlOwotK3N0cnVjdCBIaXN0b3J5Q3R4IGZpbmFs IDogcHVibGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlF bnRyeSBuZXh0X2VudHJ5ICgpOwotKyAgfkhpc3RvcnlDdHggKCkgPSBkZWxldGU7Ci0gCi0gcHJp dmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAg IHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkSGlzdG9yeUN0eAotIAotICNpZm5kZWYgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlCi0gI2RlZmluZSBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUKLS1zdHJ1Y3QgVG9raW9IYW5kbGUgZmlu YWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OlRva2lvRW50ZXJHdWFyZD4gZW50ZXIoKSBjb25zdCBub2V4Y2VwdDsKLS0gIH5Ub2tpb0hh bmRsZSgpID0gZGVsZXRlOwotK3N0cnVjdCBUb2tpb0hhbmRsZSBmaW5hbCA6IHB1YmxpYyA6OnJ1 c3Q6Ok9wYXF1ZQotK3sKLSsgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVy R3VhcmQ+IGVudGVyICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgflRva2lvSGFuZGxlICgpID0gZGVs ZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3Qg bGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91 dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAj ZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlCi0gCi0g I2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCi0g I2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCi0t c3RydWN0IFRva2lvRW50ZXJHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0t ICB+VG9raW9FbnRlckd1YXJkKCkgPSBkZWxldGU7Ci0rc3RydWN0IFRva2lvRW50ZXJHdWFyZCBm aW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsgIH5Ub2tpb0VudGVyR3VhcmQgKCkg PSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0 cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7 Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3Qg bGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7 Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsKLSB9 OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1 YXJkCi0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlcG9NZXRhZGF0 YVRhcmdldAotICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZXBvTWV0YWRh dGFUYXJnZXQKLS1lbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90 IHsKLStlbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90Ci0rewot ICAgSW5saW5lID0gMCwKLSAgIERldGFjaGVkID0gMSwKLSAgIERpc2FibGVkID0gMiwKLUBAIC0x MzM5LDcgKzE1MDUsOCBAQCBlbnVtIGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1 aW50OF90IHsKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQWR2aXNv cmllc01ldGFkYXRhVGFyZ2V0Ci0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4 JEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldAotLWVudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRh VGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QgewotK2VudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRh VGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBJbmxpbmUgPSAwLAotICAgRGV0YWNoZWQg PSAxLAotICAgRGlzYWJsZWQgPSAyLAotQEAgLTEzNDgsMzkgKzE1MTUsNDMgQEAgZW51bSBjbGFz cyBBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdCB7Ci0gCi0gI2lmbmRl ZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVmc3BlYwotICNkZWZpbmUgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlZnNwZWMKLS1zdHJ1Y3QgUmVmc3BlYyBmaW5hbCB7 Ci0rc3RydWN0IFJlZnNwZWMgZmluYWwKLSt7Ci0gICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5 cGUga2luZDsKLSAgIDo6cnVzdDo6U3RyaW5nIHJlZnNwZWM7Ci0gCi0tICBib29sIG9wZXJhdG9y PT0oUmVmc3BlYyBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgb3BlcmF0b3IhPShS ZWZzcGVjIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvcj09IChSZWZz cGVjIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBvcGVyYXRvciE9IChSZWZzcGVj IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OwotICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3Rk Ojp0cnVlX3R5cGU7Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JFJlZnNwZWMKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3Zl cnJpZGVSZXBsYWNlbWVudFR5cGUKLSAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVj eHgkT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUKLS1lbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1l bnRUeXBlIDogOjpzdGQ6OnVpbnQ4X3QgewotK2VudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVu dFR5cGUgOiA6OnN0ZDo6dWludDhfdAotK3sKLSAgIFJlcG8gPSAwLAotIH07Ci0gI2VuZGlmIC8v IENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUKLSAK LSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2Vt ZW50Ci0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBs YWNlbWVudAotLXN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50IGZpbmFsIHsKLStzdHJ1Y3QgT3Zl cnJpZGVSZXBsYWNlbWVudCBmaW5hbAotK3sKLSAgIDo6cnVzdDo6U3RyaW5nIGZyb207Ci0gICA6 OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgZnJvbV9raW5kOwotICAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzOwotIAotLSAgYm9vbCBvcGVyYXRvcj09 KE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG9w ZXJhdG9yIT0oT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKLSsg IGJvb2wgb3BlcmF0b3I9PSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4 Y2VwdDsKLSsgIGJvb2wgb3BlcmF0b3IhPSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBj b25zdCBub2V4Y2VwdDsKLSAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBl OwotIH07Ci0gI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlk ZVJlcGxhY2VtZW50Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE9w dFVzckxvY2FsCi0gI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE9wdFVzckxv Y2FsCi0tZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90IHsKLStlbnVtIGNs YXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3QKLSt7Ci0gICBWYXIgPSAwLAotICAgUm9v dCA9IDEsCi0gICBTdGF0ZU92ZXJsYXkgPSAyLAotQEAgLTEzODksMTI1ICsxNTYwLDEzMSBAQCBl bnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3QgewotIAotICNpZm5kZWYgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRyZWVmaWxlCi0gI2RlZmluZSBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkVHJlZWZpbGUKLS1zdHJ1Y3QgVHJlZWZpbGUgZmluYWwgOiBw dWJsaWMgOjpydXN0OjpPcGFxdWUgewotLSAgOjpydXN0OjpTdHIgZ2V0X3dvcmtkaXIoKSBjb25z dCBub2V4Y2VwdDsKLS0gIDo6c3RkOjppbnQzMl90IGdldF9wYXNzd2RfZmQoKSBub2V4Y2VwdDsK LS0gIDo6c3RkOjppbnQzMl90IGdldF9ncm91cF9mZCgpIG5vZXhjZXB0OwotLSAgOjpydXN0OjpT dHJpbmcgZ2V0X2pzb25fc3RyaW5nKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X29zdHJlZV9sYXllcnMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycygpIGNv bnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9hbGxfb3N0 cmVlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGdldF9yZXBvcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcg cmVxdWlyZV9hdXRvbWF0aWNfdmVyc2lvbl9wcmVmaXgoKSBjb25zdDsKLS0gIGJvb2wgYWRkX3Bh Y2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19l eGlzdGluZyk7Ci0tICBib29sIGhhc19wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9wYWNrYWdlcygpIGNvbnN0IG5vZXhj ZXB0OwotLSAgYm9vbCBhZGRfbG9jYWxfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKLS0gIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBnZXRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNl cHQ7Ci0tICBib29sIGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKLS0gIGJvb2wg cmVtb3ZlX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9v bCBhbGxvd19ub2VudCk7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVS ZXBsYWNlbWVudD4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25zdCBub2V4Y2Vw dDsKLS0gIGJvb2wgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6 Ok92ZXJyaWRlUmVwbGFjZW1lbnQgcmVwbGFjZW1lbnQpIG5vZXhjZXB0OwotLSAgYm9vbCByZW1v dmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0 OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19vdmVycmlkZV9y ZXBsYWNlX2xvY2FsKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIGFkZF9wYWNrYWdlc19vdmVy cmlkZV9yZXBsYWNlX2xvY2FsKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcyk7 Ci0tICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpydXN0OjpT dHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCBhZGRf cGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNr YWdlcyk7Ci0tICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSg6OnJ1c3Q6OlN0 ciBwYWNrYWdlKSBub2V4Y2VwdDsKLS0gIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92 ZV9uYW1lKDo6cnVzdDo6U3RyIG5hbWUpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCByZW1vdmVf YWxsX292ZXJyaWRlcygpIG5vZXhjZXB0OwotLSAgYm9vbCByZW1vdmVfYWxsX3BhY2thZ2VzKCkg bm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V4Y2x1ZGVfcGFj a2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9wbGF0Zm9ybV9t b2R1bGUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBn ZXRfaW5zdGFsbF9sYW5ncygpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgZm9y bWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8oKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9ja2ZpbGVfcmVwb3MoKSBjb25zdCBub2V4Y2VwdDsKLS0g IDo6cnVzdDo6U3RyIGdldF9yZWYoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X2NsaXdy YXAoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRf Y2xpd3JhcF9iaW5hcmllcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCBzZXRfY2xpd3JhcChi b29sIGVuYWJsZWQpIG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdl dF9jb250YWluZXJfY21kKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIGdldF9yZWFkb25seV9l eGVjdXRhYmxlcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfZG9jdW1lbnRhdGlvbigp IGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfcmVjb21tZW5kcygpIGNvbnN0IG5vZXhjZXB0 OwotLSAgYm9vbCBnZXRfc2VsaW51eCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfc3lz dXNlcnNfaXNfZm9yY2VkKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnN0ZDo6dWludDMyX3QgZ2V0 X3NlbGludXhfbGFiZWxfdmVyc2lvbigpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJp bmcgZ2V0X2dwZ19rZXkoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9h dXRvbWF0aWNfdmVyc2lvbl9zdWZmaXgoKSBjb25zdCBub2V4Y2VwdDsKLS0gIGJvb2wgZ2V0X2Nv bnRhaW5lcigpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfbWFjaGluZWlkX2NvbXBhdCgp IGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9ldGNf Z3JvdXBfbWVtYmVycygpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfYm9vdF9sb2NhdGlv bl9pc19tb2R1bGVzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIHVzZV9rZXJuZWxfaW5zdGFs bCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBnZXRfaW1hKCkgY29uc3Qgbm9leGNlcHQ7Ci0t ICA6OnJ1c3Q6OlN0cmluZyBnZXRfcmVsZWFzZXZlcigpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpy cG1vc3RyZWVjeHg6OlJlcG9NZXRhZGF0YVRhcmdldCBnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQo KSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFU YXJnZXQgZ2V0X2Fkdmlzb3JpZXNfbWV0YWRhdGFfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7Ci0t ICBib29sIHJwbWRiX2JhY2tlbmRfaXNfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7Ci0tICBib29s IHNob3VsZF9ub3JtYWxpemVfcnBtZGIoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnBtb3N0cmVl Y3h4OjpPcHRVc3JMb2NhbCBnZXRfb3B0X3VzcmxvY2FsKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCg6OnJ1c3Q6 OlN0ciBwYWNrYWdlKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9jaGVj a3N1bSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgY29uc3Q7Ci0tICA6 OnJ1c3Q6OlN0cmluZyBnZXRfb3N0cmVlX3JlZigpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0 OjpTbGljZTw6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9yZXBvX3BhY2th Z2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB2b2lkIGNsZWFyX3JlcG9fcGFja2FnZXMoKSBub2V4 Y2VwdDsKLS0gIHZvaWQgcHJldHR5cHJpbnRfanNvbl9zdGRvdXQoKSBjb25zdCBub2V4Y2VwdDsK LS0gIHZvaWQgcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MoKSBjb25zdCBub2V4Y2VwdDsKLS0g IHZvaWQgcHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZv aWQgc2FuaXR5Y2hlY2tfZXh0ZXJuYWxzKCkgY29uc3Q7Ci0tICA6OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gaW1wb3J0ZXJfZmxhZ3MoOjpydXN0OjpTdHIgcGtn X25hbWUpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgd3JpdGVfcmVwb3ZhcnMo OjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdDsKLS0gIHZvaWQgc2V0X3JlbGVh c2V2ZXIoOjpydXN0OjpTdHIgcmVsZWFzZXZlcik7Ci0tICB2b2lkIHNldF9yZWNvbW1lbmRzKGJv b2wgdmFsKTsKLS0gIHZvaWQgZW5hYmxlX3JlcG8oOjpydXN0OjpTdHIgcmVwbyk7Ci0tICB2b2lk IGRpc2FibGVfcmVwbyg6OnJ1c3Q6OlN0ciByZXBvKTsKLS0gIHZvaWQgdmFsaWRhdGVfZm9yX2Nv bnRhaW5lcigpIGNvbnN0OwotLSAgOjpycG1vc3RyZWVjeHg6OlJlZnNwZWMgZ2V0X2Jhc2VfcmVm c3BlYygpIGNvbnN0IG5vZXhjZXB0OwotLSAgdm9pZCByZWJhc2UoOjpydXN0OjpTdHIgbmV3X3Jl ZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fdXJsLCA6OnJ1c3Q6OlN0ciBjdXN0b21f b3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGdldF9vcmln aW5fY3VzdG9tX3VybCgpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgZ2V0X29y aWdpbl9jdXN0b21fZGVzY3JpcHRpb24oKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6U3Ry aW5nIGdldF9vdmVycmlkZV9jb21taXQoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZvaWQgc2V0X292 ZXJyaWRlX2NvbW1pdCg6OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBub2V4 Y2VwdDsKLS0gIGJvb2wgaGFzX2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBub2V4Y2VwdDsK LS0gIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc190cmFjayg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gZmlsZXMpIG5vZXhjZXB0OwotLSAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJh Y2soOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsKLS0gIGJvb2wg aW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrX2FsbCgpIG5vZXhjZXB0OwotLSAgYm9vbCBnZXRf aW5pdHJhbWZzX3JlZ2VuZXJhdGUoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBnZXRfaW5pdHJhbWZzX2FyZ3MoKSBjb25zdCBub2V4Y2VwdDsKLS0gIHZv aWQgc2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGFyZ3MpIG5vZXhjZXB0OwotLSAgOjpydXN0OjpTdHJpbmcgZ2V0X3VuY29u ZmlndXJlZF9zdGF0ZSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBtYXlfcmVxdWlyZV9sb2Nh bF9hc3NlbWJseSgpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBoYXNfYW55X3BhY2thZ2VzKCkg Y29uc3Qgbm9leGNlcHQ7Ci0tICBib29sIG1lcmdlX3RyZWVmaWxlKDo6cnVzdDo6U3RyIHRyZWVm aWxlKTsKLS0gIGJvb2wgZ2V0X25vX2luaXRyYW1mcygpIGNvbnN0IG5vZXhjZXB0OwotLSAgflRy ZWVmaWxlKCkgPSBkZWxldGU7Ci0rc3RydWN0IFRyZWVmaWxlIGZpbmFsIDogcHVibGljIDo6cnVz dDo6T3BhcXVlCi0rewotKyAgOjpydXN0OjpTdHIgZ2V0X3dvcmtkaXIgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICA6OnN0ZDo6aW50MzJfdCBnZXRfcGFzc3dkX2ZkICgpIG5vZXhjZXB0OwotKyAgOjpz dGQ6OmludDMyX3QgZ2V0X2dyb3VwX2ZkICgpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcg Z2V0X2pzb25fc3RyaW5nICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGdldF9vc3RyZWVfbGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJzICgpIGNvbnN0 IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9hbGxfb3N0cmVl X2xheWVycyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfcmVwb3MgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gZ2V0X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcg cmVxdWlyZV9hdXRvbWF0aWNfdmVyc2lvbl9wcmVmaXggKCkgY29uc3Q7Ci0rICBib29sIGFkZF9w YWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93 X2V4aXN0aW5nKTsKLSsgIGJvb2wgaGFzX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9wYWNrYWdlcyAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIGJvb2wgYWRkX2xvY2FsX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOwotKyAgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICBib29sIGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7Ci0r ICBib29sIHJlbW92ZV9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2th Z2VzLCBib29sIGFsbG93X25vZW50KTsKLSsgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpP dmVycmlkZVJlcGxhY2VtZW50PiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKSBjb25z dCBub2V4Y2VwdDsKLSsgIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICBib29sIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICg6OnJw bW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCByZXBsYWNlbWVudCkgbm9leGNlcHQ7Ci0r ICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UgKDo6cnVzdDo6U3RyIHBhY2th Z2UpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdl c19vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBhZGRf cGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IHBhY2thZ2VzKTsKLSsgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9s b2NhbCAoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoKSBjb25zdCBub2V4Y2Vw dDsKLSsgIHZvaWQgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IHBhY2thZ2VzKTsKLSsgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVf cmVtb3ZlICg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKLSsgIGJvb2wgaGFzX3BhY2th Z2VzX292ZXJyaWRlX3JlbW92ZV9uYW1lICg6OnJ1c3Q6OlN0ciBuYW1lKSBjb25zdCBub2V4Y2Vw dDsKLSsgIGJvb2wgcmVtb3ZlX2FsbF9vdmVycmlkZXMgKCkgbm9leGNlcHQ7Ci0rICBib29sIHJl bW92ZV9hbGxfcGFja2FnZXMgKCkgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gZ2V0X2V4Y2x1ZGVfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OlN0cmluZyBnZXRfcGxhdGZvcm1fbW9kdWxlICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbnN0YWxsX2xhbmdzICgpIGNvbnN0IG5vZXhjZXB0 OwotKyAgOjpydXN0OjpTdHJpbmcgZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8gKCkgY29uc3Qg bm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2tmaWxlX3Jl cG9zICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHIgZ2V0X3JlZiAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2NsaXdyYXAgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2NsaXdyYXBfYmluYXJpZXMgKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICB2b2lkIHNldF9jbGl3cmFwIChib29sIGVuYWJsZWQpIG5vZXhjZXB0OwotKyAg OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9jb250YWluZXJfY21kICgpIGNvbnN0IG5v ZXhjZXB0OwotKyAgYm9vbCBnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICBib29sIGdldF9kb2N1bWVudGF0aW9uICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9v bCBnZXRfcmVjb21tZW5kcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X3NlbGludXgg KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGdldF9zeXN1c2Vyc19pc19mb3JjZWQgKCkgY29u c3Qgbm9leGNlcHQ7Ci0rICA6OnN0ZDo6dWludDMyX3QgZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lv biAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9ncGdfa2V5ICgpIGNv bnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1 ZmZpeCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X2NvbnRhaW5lciAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIGJvb2wgZ2V0X21hY2hpbmVpZF9jb21wYXQgKCkgY29uc3Qgbm9leGNlcHQ7 Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V0Y19ncm91cF9tZW1iZXJzICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzICgp IGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCB1c2Vfa2VybmVsX2luc3RhbGwgKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICBib29sIGdldF9pbWEgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0 cmluZyBnZXRfcmVsZWFzZXZlciAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIDo6cnBtb3N0cmVlY3h4 OjpSZXBvTWV0YWRhdGFUYXJnZXQgZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0ICgpIGNvbnN0IG5v ZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6OkFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCBnZXRf YWR2aXNvcmllc19tZXRhZGF0YV90YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIHJw bWRiX2JhY2tlbmRfaXNfdGFyZ2V0ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBzaG91bGRf bm9ybWFsaXplX3JwbWRiICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpycG1vc3RyZWVjeHg6Ok9w dFVzckxvY2FsIGdldF9vcHRfdXNybG9jYWwgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCAoOjpydXN0OjpTdHIg cGFja2FnZSkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyBnZXRfY2hlY2tzdW0g KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdDsKLSsgIDo6cnVz dDo6U3RyaW5nIGdldF9vc3RyZWVfcmVmICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpT bGljZTw6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9yZXBvX3BhY2thZ2Vz ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBjbGVhcl9yZXBvX3BhY2thZ2VzICgpIG5vZXhj ZXB0OwotKyAgdm9pZCBwcmV0dHlwcmludF9qc29uX3N0ZG91dCAoKSBjb25zdCBub2V4Y2VwdDsK LSsgIHZvaWQgcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MgKCkgY29uc3Qgbm9leGNlcHQ7Ci0r ICB2b2lkIHByaW50X2V4cGVyaW1lbnRhbF9ub3RpY2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg dm9pZCBzYW5pdHljaGVja19leHRlcm5hbHMgKCkgY29uc3Q7Ci0rICA6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4KLSsgIGltcG9ydGVyX2ZsYWdzICg6OnJ1c3Q6 OlN0ciBwa2dfbmFtZSkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlN0cmluZyB3cml0ZV9y ZXBvdmFycyAoOjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdDsKLSsgIHZvaWQg c2V0X3JlbGVhc2V2ZXIgKDo6cnVzdDo6U3RyIHJlbGVhc2V2ZXIpOwotKyAgdm9pZCBzZXRfcmVj b21tZW5kcyAoYm9vbCB2YWwpOwotKyAgdm9pZCBlbmFibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVw byk7Ci0rICB2b2lkIGRpc2FibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVwbyk7Ci0rICB2b2lkIHZh bGlkYXRlX2Zvcl9jb250YWluZXIgKCkgY29uc3Q7Ci0rICA6OnJwbW9zdHJlZWN4eDo6UmVmc3Bl YyBnZXRfYmFzZV9yZWZzcGVjICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCByZWJhc2UgKDo6 cnVzdDo6U3RyIG5ld19yZWZzcGVjLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX3VybCwKLSsg ICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4 Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX3VybCAoKSBjb25zdCBu b2V4Y2VwdDsKLSsgIDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX2Rlc2NyaXB0aW9u ICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X292ZXJyaWRlX2NvbW1p dCAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIHZvaWQgc2V0X292ZXJyaWRlX2NvbW1pdCAoOjpydXN0 OjpTdHIgY2hlY2tzdW0pIG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgYm9vbCBoYXNf aW5pdHJhbWZzX2V0Y19maWxlcyAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgaW5pdHJhbWZz X2V0Y19maWxlc190cmFjayAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4 Y2VwdDsKLSsgIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrICg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0OwotKyAgYm9vbCBpbml0cmFtZnNfZXRjX2Zp bGVzX3VudHJhY2tfYWxsICgpIG5vZXhjZXB0OwotKyAgYm9vbCBnZXRfaW5pdHJhbWZzX3JlZ2Vu ZXJhdGUgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Z2V0X2luaXRyYW1mc19hcmdzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAgdm9pZCBzZXRfaW5pdHJh bWZzX3JlZ2VuZXJhdGUgKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGFyZ3MpIG5vZXhjZXB0OwotKyAgOjpydXN0OjpTdHJpbmcgZ2V0X3VuY29uZmlndXJlZF9zdGF0 ZSAoKSBjb25zdCBub2V4Y2VwdDsKLSsgIGJvb2wgbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkg KCkgY29uc3Qgbm9leGNlcHQ7Ci0rICBib29sIGhhc19hbnlfcGFja2FnZXMgKCkgY29uc3Qgbm9l eGNlcHQ7Ci0rICBib29sIG1lcmdlX3RyZWVmaWxlICg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSk7Ci0r ICBib29sIGdldF9ub19pbml0cmFtZnMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICB+VHJlZWZpbGUg KCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKLS0g IHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNl cHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0rICBzdHJ1 Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNl cHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OwotICAgfTsK LSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVHJlZWZpbGUK LSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZXBvUGFja2FnZQot ICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlcG9QYWNrYWdlCi0tc3Ry dWN0IFJlcG9QYWNrYWdlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVz dDo6U3RyIGdldF9yZXBvKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICB+UmVwb1BhY2thZ2Uo KSA9IGRlbGV0ZTsKLStzdHJ1Y3QgUmVwb1BhY2thZ2UgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpP cGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OlN0ciBnZXRfcmVwbyAoKSBjb25zdCBub2V4Y2VwdDsKLSsg IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNl cHQ7Ci0rICB+UmVwb1BhY2thZ2UgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVu ZCA6OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWdu KCkgbm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6 c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWdu ICgpIG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkUmVwb1BhY2thZ2UKLUBAIC0xNTE3LDcgKzE2OTQsOCBAQCBzdHJ1Y3QgUmVw b1BhY2thZ2UgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgewotIC8vIEEgY29weSBvZiBM aXZlRnNTdGF0ZSB0aGF0IGlzIGJyaWRnZWQgdG8gQysrOyB0aGUgbWFpbgotIC8vIGNoYW5nZSBo ZXJlIGlzIHdlIGNhbid0IHVzZSBPcHRpb248PiB5ZXQsIHNvIGVtcHR5IHZhbHVlcwotIC8vIGFy ZSByZXByZXNlbnRlZCBieSB0aGUgZW1wdHkgc3RyaW5nLgotLXN0cnVjdCBMaXZlQXBwbHlTdGF0 ZSBmaW5hbCB7Ci0rc3RydWN0IExpdmVBcHBseVN0YXRlIGZpbmFsCi0rewotICAgOjpydXN0OjpT dHJpbmcgaW5wcm9ncmVzczsKLSAgIDo6cnVzdDo6U3RyaW5nIGNvbW1pdDsKLSAKLUBAIC0xNTI3 LDY0ICsxNzA1LDcyIEBAIHN0cnVjdCBMaXZlQXBwbHlTdGF0ZSBmaW5hbCB7Ci0gCi0gI2lmbmRl ZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkREIKLSAjZGVmaW5lIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNzd2REQgotLXN0cnVjdCBQYXNzd2REQiBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1c3Q6OlN0cmluZyBsb29rdXBfdXNl cig6OnN0ZDo6dWludDMyX3QgdWlkKSBjb25zdDsKLS0gIDo6cnVzdDo6U3RyaW5nIGxvb2t1cF9n cm91cCg6OnN0ZDo6dWludDMyX3QgZ2lkKSBjb25zdDsKLS0gIH5QYXNzd2REQigpID0gZGVsZXRl OwotK3N0cnVjdCBQYXNzd2REQiBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQotK3sKLSsg IDo6cnVzdDo6U3RyaW5nIGxvb2t1cF91c2VyICg6OnN0ZDo6dWludDMyX3QgdWlkKSBjb25zdDsK LSsgIDo6cnVzdDo6U3RyaW5nIGxvb2t1cF9ncm91cCAoOjpzdGQ6OnVpbnQzMl90IGdpZCkgY29u c3Q7Ci0rICB+UGFzc3dkREIgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6 OnJ1c3Q6OmxheW91dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNp emVfdCBzaXplKCkgbm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkg bm9leGNlcHQ7Ci0rICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6 ZV90IHNpemUgKCkgbm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgp IG5vZXhjZXB0OwotICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1v c3RyZWVjeHgkUGFzc3dkREIKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRQYXNzd2RFbnRyaWVzCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVj eHgkUGFzc3dkRW50cmllcwotLXN0cnVjdCBQYXNzd2RFbnRyaWVzIGZpbmFsIDogcHVibGljIDo6 cnVzdDo6T3BhcXVlIHsKLS0gIHZvaWQgYWRkX2dyb3VwX2NvbnRlbnQoOjpzdGQ6OmludDMyX3Qg cm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKLS0gIHZvaWQgYWRkX3Bhc3N3ZF9jb250ZW50KDo6 c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCk7Ci0tICBib29sIGNvbnRhaW5z X2dyb3VwKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OwotLSAgYm9vbCBjb250YWlu c191c2VyKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OwotLSAgOjpzdGQ6OnVpbnQz Ml90IGxvb2t1cF91c2VyX2lkKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0OwotLSAgOjpzdGQ6OnVp bnQzMl90IGxvb2t1cF9ncm91cF9pZCg6OnJ1c3Q6OlN0ciBncm91cCkgY29uc3Q7Ci0tICB+UGFz c3dkRW50cmllcygpID0gZGVsZXRlOwotK3N0cnVjdCBQYXNzd2RFbnRyaWVzIGZpbmFsIDogcHVi bGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgdm9pZCBhZGRfZ3JvdXBfY29udGVudCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKLSsgIHZvaWQgYWRkX3Bhc3N3ZF9j b250ZW50ICg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpOwotKyAgYm9v bCBjb250YWluc19ncm91cCAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7Ci0rICBi b29sIGNvbnRhaW5zX3VzZXIgKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OwotKyAg OjpzdGQ6OnVpbnQzMl90IGxvb2t1cF91c2VyX2lkICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdDsK LSsgIDo6c3RkOjp1aW50MzJfdCBsb29rdXBfZ3JvdXBfaWQgKDo6cnVzdDo6U3RyIGdyb3VwKSBj b25zdDsKLSsgIH5QYXNzd2RFbnRyaWVzICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBm cmllbmQgOjpydXN0OjpsYXlvdXQ7Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6 c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBh bGlnbigpIG5vZXhjZXB0OwotKyAgc3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBh bGlnbiAoKSBub2V4Y2VwdDsKLSAgIH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRFeHRlbnNpb25zCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkRXh0ZW5zaW9ucwotLXN0cnVjdCBFeHRlbnNpb25zIGZpbmFsIDogcHVibGlj IDo6cnVzdDo6T3BhcXVlIHsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVw b3MoKSBjb25zdCBub2V4Y2VwdDsKLS0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRf b3NfZXh0ZW5zaW9uX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7Ci0tICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X2RldmVsb3BtZW50X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7 Ci0tICBib29sIHN0YXRlX2NoZWNrc3VtX2NoYW5nZWQoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1 c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKLS0gIHZvaWQgdXBkYXRlX3N0YXRlX2NoZWNrc3Vt KDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7Ci0tICB2 b2lkIHNlcmlhbGl6ZV90b19kaXIoOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7Ci0tICA6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IGdlbmVyYXRlX3RyZWVmaWxlKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBjb25zdDsKLS0gIH5FeHRlbnNpb25z KCkgPSBkZWxldGU7Ci0rc3RydWN0IEV4dGVuc2lvbnMgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpP cGFxdWUKLSt7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9zICgpIGNv bnN0IG5vZXhjZXB0OwotKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc19leHRl bnNpb25fcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7Ci0rICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X2RldmVsb3BtZW50X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OwotKyAg Ym9vbCBzdGF0ZV9jaGVja3N1bV9jaGFuZ2VkICg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6 U3RyIG91dHB1dF9kaXIpIGNvbnN0OwotKyAgdm9pZCB1cGRhdGVfc3RhdGVfY2hlY2tzdW0gKDo6 cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7Ci0rICB2b2lk IHNlcmlhbGl6ZV90b19kaXIgKDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OwotKyAgOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgotKyAgZ2VuZXJhdGVfdHJlZWZpbGUg KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc3JjKSBjb25zdDsKLSsgIH5FeHRlbnNp b25zICgpID0gZGVsZXRlOwotIAotIHByaXZhdGU6Ci0gICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7 Ci0tICBzdHJ1Y3QgbGF5b3V0IHsKLS0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5v ZXhjZXB0OwotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OwotKyAg c3RydWN0IGxheW91dAotKyAgewotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5v ZXhjZXB0OwotKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKLSAg IH07Ci0gfTsKLSAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4dGVu c2lvbnMKLSAKLSAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZWRQ YWNrYWdlCi0gI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2VkUGFj a2FnZQotLXN0cnVjdCBMb2NrZWRQYWNrYWdlIGZpbmFsIHsKLStzdHJ1Y3QgTG9ja2VkUGFja2Fn ZSBmaW5hbAotK3sKLSAgIDo6cnVzdDo6U3RyaW5nIG5hbWU7Ci0gICA6OnJ1c3Q6OlN0cmluZyBl dnI7Ci0gICA6OnJ1c3Q6OlN0cmluZyBhcmNoOwotQEAgLTE1OTYsMjkyICsxNzgyLDM2NyBAQCBz dHJ1Y3QgTG9ja2VkUGFja2FnZSBmaW5hbCB7Ci0gCi0gI2lmbmRlZiBDWFhCUklER0UxX1NUUlVD VF9ycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWcKLSAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNU X3JwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZpZwotLXN0cnVjdCBMb2NrZmlsZUNvbmZpZyBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Ci0tICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6TG9ja2VkUGFja2FnZT4gZ2V0X2xvY2tlZF9wYWNrYWdlcygpIGNvbnN0OwotLSAgfkxvY2tm aWxlQ29uZmlnKCkgPSBkZWxldGU7Ci0rc3RydWN0IExvY2tmaWxlQ29uZmlnIGZpbmFsIDogcHVi bGljIDo6cnVzdDo6T3BhcXVlCi0rewotKyAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Okxv Y2tlZFBhY2thZ2U+IGdldF9sb2NrZWRfcGFja2FnZXMgKCkgY29uc3Q7Ci0rICB+TG9ja2ZpbGVD b25maWcgKCkgPSBkZWxldGU7Ci0gCi0gcHJpdmF0ZToKLSAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91 dDsKLS0gIHN0cnVjdCBsYXlvdXQgewotLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkg bm9leGNlcHQ7Ci0tICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7Ci0r ICBzdHJ1Y3QgbGF5b3V0Ci0rICB7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkg bm9leGNlcHQ7Ci0rICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0Owot ICAgfTsKLSB9OwotICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9j a2ZpbGVDb25maWcKLSAKLS1zdGF0aWNfYXNzZXJ0KDo6c3RkOjppc19lbnVtPFJwbU9zdHJlZURp ZmZQcmludEZvcm1hdD46OnZhbHVlLCAiZXhwZWN0ZWQgZW51bSIpOwotLXN0YXRpY19hc3NlcnQo c2l6ZW9mKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCkgPT0gc2l6ZW9mKDo6c3RkOjp1aW50OF90 KSwgImluY29ycmVjdCBzaXplIik7Ci0tc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6 dWludDhfdD4oUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9G T1JNQVRfU1VNTUFSWSkgPT0gMCwgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6 YnJpZGdlXSIpOwotLXN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+KFJw bU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExf QUxJR05FRCkgPT0gMSwgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdl XSIpOwotLXN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+KFJwbU9zdHJl ZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfTVVMVElM SU5FKSA9PSAyLCAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7 Ci0rc3RhdGljX2Fzc2VydCAoOjpzdGQ6OmlzX2VudW08UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0 Pjo6dmFsdWUsICJleHBlY3RlZCBlbnVtIik7Ci0rc3RhdGljX2Fzc2VydCAoc2l6ZW9mIChScG1P c3RyZWVEaWZmUHJpbnRGb3JtYXQpID09IHNpemVvZiAoOjpzdGQ6OnVpbnQ4X3QpLCAiaW5jb3Jy ZWN0IHNpemUiKTsKLStzdGF0aWNfYXNzZXJ0ICgKLSsgICAgc3RhdGljX2Nhc3Q8OjpzdGQ6OnVp bnQ4X3Q+IChScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZP Uk1BVF9TVU1NQVJZKQotKyAgICAgICAgPT0gMCwKLSsgICAgImRpc2FncmVlcyB3aXRoIHRoZSB2 YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOwotK3N0YXRpY19hc3NlcnQgKAotKyAgICBzdGF0aWNf Y2FzdDw6OnN0ZDo6dWludDhfdD4gKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVF X0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfQUxJR05FRCkKLSsgICAgICAgID09IDEsCi0rICAgICJk aXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKLStzdGF0aWNfYXNz ZXJ0IChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4gKAotKyAgICAgICAgICAgICAgICAgICBS cG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZPUk1BVF9GVUxM X01VTFRJTElORSkKLSsgICAgICAgICAgICAgICAgICAgPT0gMiwKLSsgICAgICAgICAgICAgICAi ZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Ci0rCi0rYm9vbCBp c19iYXJlX3NwbGl0X3hhdHRycyAoKTsKLSAKLS1ib29sIGlzX2JhcmVfc3BsaXRfeGF0dHJzKCk7 Ci0rYm9vbCBpc19odHRwX2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKLSAKLS1ib29s IGlzX2h0dHBfYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0rYm9vbCBpc19vc3RyZWVf Y29udGFpbmVyICgpOwotIAotLWJvb2wgaXNfb3N0cmVlX2NvbnRhaW5lcigpOwotKzo6cnBtb3N0 cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSBnZXRfc3lzdGVtX2hvc3RfdHlwZSAoKTsKLSAKLS06OnJw bW9zdHJlZWN4eDo6U3lzdGVtSG9zdFR5cGUgZ2V0X3N5c3RlbV9ob3N0X3R5cGUoKTsKLSt2b2lk IHJlcXVpcmVfc3lzdGVtX2hvc3RfdHlwZSAoOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBl IHQpOwotIAotLXZvaWQgcmVxdWlyZV9zeXN0ZW1faG9zdF90eXBlKDo6cnBtb3N0cmVlY3h4OjpT eXN0ZW1Ib3N0VHlwZSB0KTsKLStib29sIGlzX3JwbV9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9l eGNlcHQ7Ci0gCi0tYm9vbCBpc19ycG1fYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Ci0r dm9pZCBjbGllbnRfc3RhcnRfZGFlbW9uICgpOwotIAotLXZvaWQgY2xpZW50X3N0YXJ0X2RhZW1v bigpOwotKzo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PiBjbGllbnRfaGFuZGxlX2ZkX2FyZ3Vt ZW50ICg6OnJ1c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcmVwbGFjZSk7 Ci0gCi0tOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGNsaWVudF9oYW5kbGVfZmRfYXJndW1l bnQoOjpydXN0OjpTdHIgYXJnLCA6OnJ1c3Q6OlN0ciBhcmNoLCBib29sIGlzX3JlcGxhY2UpOwot Kzo6cnVzdDo6U3RyaW5nIGNsaWVudF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MgKDo6cnBtb3N0 cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmcHJvZ3Jlc3MpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6 U3RyaW5nIGNsaWVudF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MoOjpycG1vc3RyZWVjeHg6OkdW YXJpYW50IGNvbnN0ICZwcm9ncmVzcykgbm9leGNlcHQ7Ci0rYm9vbCBydW5uaW5nX2luX2NvbnRh aW5lciAoKSBub2V4Y2VwdDsKLSAKLS1ib29sIHJ1bm5pbmdfaW5fY29udGFpbmVyKCkgbm9leGNl cHQ7Ci0rYm9vbCBjb25maXJtICgpOwotIAotLWJvb2wgY29uZmlybSgpOwotK3ZvaWQgY29uZmly bV9vcl9hYm9ydCAoKTsKLSAKLS12b2lkIGNvbmZpcm1fb3JfYWJvcnQoKTsKLSt2b2lkIGJ1YmJs ZXdyYXBfc2VsZnRlc3QgKCk7Ci0gCi0tdm9pZCBidWJibGV3cmFwX3NlbGZ0ZXN0KCk7Ci0rOjpy dXN0OjpWZWM8OjpzdGQ6OnVpbnQ4X3Q+IGJ1YmJsZXdyYXBfcnVuX3N5bmMgKDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYXB0dXJl X3N0ZG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpOwotIAot LTo6cnVzdDo6VmVjPDo6c3RkOjp1aW50OF90PiBidWJibGV3cmFwX3J1bl9zeW5jKDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJn cywgYm9vbCBjYXB0dXJlX3N0ZG91dCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmls aXR5IG11dGFiaWxpdHkpOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFw PiBidWJibGV3cmFwX25ldyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkKTsKLSAKLS06OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gYnViYmxld3JhcF9uZXcoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2ZkKTsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cD4KLStidWJibGV3cmFwX25ld193aXRoX211dGFiaWxpdHkgKDo6c3RkOjppbnQzMl90IHJvb3Rm c19mZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5KTsKLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6QnViYmxld3JhcD4gYnViYmxld3JhcF9uZXdfd2l0aF9tdXRhYmlsaXR5KDo6c3Rk OjppbnQzMl90IHJvb3Rmc19mZCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5 IG11dGFiaWxpdHkpOwotKzo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRh YmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUgKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKLSAK LS06OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eV9mb3JfdW5p ZmllZF9jb3JlKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKLSt2b2lkIHVzcm92ZXJsYXlf ZW50cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKTsKLSAK LS12b2lkIHVzcm92ZXJsYXlfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Y29uc3QgJmFyZ3MpOwotK3ZvaWQgYXBwbHlsaXZlX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncyk7Ci0gCi0tdm9pZCBhcHBseWxpdmVfZW50cnlwb2lu dCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpOwotK3ZvaWQgYXBwbHls aXZlX2ZpbmlzaCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qp OwotIAotLXZvaWQgYXBwbHlsaXZlX2ZpbmlzaCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9v dCBjb25zdCAmc3lzcm9vdCk7Ci0rdm9pZCBjb21wb3NldXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5k X3J1biAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCk7Ci0gCi0tdm9pZCBjb21wb3NldXRpbF9s ZWdhY3lfcHJlcF9kZXZfYW5kX3J1big6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKTsKLSt2b2lk IHByaW50X29zdHJlZV90eG5fc3RhdHMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvVHJhbnNh Y3Rpb25TdGF0cyAmc3RhdHMpIG5vZXhjZXB0OwotIAotLXZvaWQgcHJpbnRfb3N0cmVlX3R4bl9z dGF0cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwb1RyYW5zYWN0aW9uU3RhdHMgJnN0YXRzKSBu b2V4Y2VwdDsKLSt2b2lkIHdyaXRlX2NvbW1pdF9pZCAoOjpydXN0OjpTdHIgdGFyZ2V0X3BhdGgs IDo6cnVzdDo6U3RyIHJldmlzaW9uKTsKLSAKLS12b2lkIHdyaXRlX2NvbW1pdF9pZCg6OnJ1c3Q6 OlN0ciB0YXJnZXRfcGF0aCwgOjpydXN0OjpTdHIgcmV2aXNpb24pOwotK3ZvaWQgY2xpd3JhcF93 cml0ZV93cmFwcGVycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKLSAKLS12b2lkIGNsaXdyYXBf d3JpdGVfd3JhcHBlcnMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKLSt2b2lkIGNsaXdyYXBfd3Jp dGVfc29tZV93cmFwcGVycyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpOwotIAotLXZvaWQgY2xpd3JhcF93cml0ZV9zb21lX3dy YXBwZXJzKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGNvbnN0ICZhcmdzKTsKLSs6OnJ1c3Q6OlN0cmluZyBjbGl3cmFwX2Rlc3RkaXIgKCkgbm9leGNl cHQ7Ci0gCi0tOjpydXN0OjpTdHJpbmcgY2xpd3JhcF9kZXN0ZGlyKCkgbm9leGNlcHQ7Ci0rdm9p ZCBjb250YWluZXJfZW5jYXBzdWxhdGUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdz KTsKLSAKLS12b2lkIGNvbnRhaW5lcl9lbmNhcHN1bGF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gYXJncyk7Ci0rdm9pZCBkZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQgKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsKLSAKLS12b2lkIGRlcGxveV9mcm9tX3NlbGZfZW50 cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7Ci0rOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+Ci0rcHVsbF9jb250YWluZXIgKDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAgICAgICAgICAgICA6 OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpT dHIgaW1ncmVmLAotKyAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUp OwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiBw dWxsX2NvbnRhaW5lcig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpy cG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3Ry IGltZ3JlZiwgOjpydXN0OjpTdHIgZGlnZXN0X292ZXJyaWRlKTsKLSs6OnJwbW9zdHJlZWN4eDo6 UHJ1bmVkQ29udGFpbmVySW5mbyBjb250YWluZXJfcHJ1bmUgKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVTeXNyb290IGNvbnN0ICZzeXNyb290KTsKLSAKLS06OnJwbW9zdHJlZWN4eDo6UHJ1bmVkQ29u dGFpbmVySW5mbyBjb250YWluZXJfcHJ1bmUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3Qg Y29uc3QgJnN5c3Jvb3QpOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJ bWFnZVN0YXRlPgotK3F1ZXJ5X2NvbnRhaW5lcl9pbWFnZV9jb21taXQgKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjKTsKLSAKLS06OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gcXVlcnlfY29udGFpbmVyX2lt YWdlX2NvbW1pdCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0 OjpTdHIgYyk7Ci0rdm9pZCBwdXJnZV9yZWZzcGVjICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVw byBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmVmc3BlYyk7Ci0gCi0tdm9pZCBwdXJnZV9yZWZz cGVjKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBy ZWZzcGVjKTsKLStib29sIGNoZWNrX2NvbnRhaW5lcl91cGRhdGUgKDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVSZXBvIGNvbnN0ICZyZXBvLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy cG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3Ry IGltZ3JlZik7Ci0gCi0tYm9vbCBjaGVja19jb250YWluZXJfdXBkYXRlKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNv bnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmKTsKLSs6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPiBwcmVwYXJlX3RlbXBldGNfZ3VhcmQgKDo6c3RkOjpp bnQzMl90IHJvb3Rmcyk7Ci0gCi0tOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNH dWFyZD4gcHJlcGFyZV90ZW1wZXRjX2d1YXJkKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7Ci0rOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPgotK3ByZXBhcmVf ZmlsZXN5c3RlbV9zY3JpcHRfcHJlcCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKLSAKLS06OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+IHByZXBhcmVfZmls ZXN5c3RlbV9zY3JpcHRfcHJlcCg6OnN0ZDo6aW50MzJfdCByb290ZnMpOwotK3ZvaWQgcnVuX2Rl cG1vZCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpydXN0OjpTdHIga3ZlciwgYm9vbCB1 bmlmaWVkX2NvcmUpOwotIAotLXZvaWQgcnVuX2RlcG1vZCg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZGZkLCA6OnJ1c3Q6OlN0ciBrdmVyLCBib29sIHVuaWZpZWRfY29yZSk7Ci0rdm9pZCBydW5fc3lz dXNlcnMgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgZm9yY2UpOwotIAotLXZvaWQg cnVuX3N5c3VzZXJzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgZm9yY2UpOwotK3Zv aWQgbG9nX3RyZWVmaWxlICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKSBub2V4 Y2VwdDsKLSAKLS12b2lkIGxvZ190cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnRmKSBub2V4Y2VwdDsKLStib29sIGlzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2UgKDo6 cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotIAotLWJvb2wgaXNfY29udGFpbmVyX2ltYWdl X3JlZmVyZW5jZSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKLStib29sIGlzX2NvbnRh aW5lcl9pbWFnZV9kaWdlc3RfcmVmZXJlbmNlICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2Vw dDsKLSAKLS1ib29sIGlzX2NvbnRhaW5lcl9pbWFnZV9kaWdlc3RfcmVmZXJlbmNlKDo6cnVzdDo6 U3RyIHJlZnNwZWMpIG5vZXhjZXB0OwotKzo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZSByZWZz cGVjX2NsYXNzaWZ5ICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKLSAKLS06OnJwbW9z dHJlZWN4eDo6UmVmc3BlY1R5cGUgcmVmc3BlY19jbGFzc2lmeSg6OnJ1c3Q6OlN0ciByZWZzcGVj KSBub2V4Y2VwdDsKLSt2b2lkIHZlcmlmeV9rZXJuZWxfaG1hYyAoOjpzdGQ6OmludDMyX3Qgcm9v dGZzLCA6OnJ1c3Q6OlN0ciBtb2RkaXIpOwotIAotLXZvaWQgdmVyaWZ5X2tlcm5lbF9obWFjKDo6 c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgbW9kZGlyKTsKLSs6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gc3RhZ2VfY29udGFpbmVyX3JwbXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBycG1zKTsKLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gc3RhZ2VfY29u dGFpbmVyX3JwbXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHJwbXMpOwotKzo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBzdGFnZV9jb250YWluZXJfcnBtX3Jhd19mZHMgKDo6cnVzdDo6 VmVjPDo6c3RkOjppbnQzMl90PiBmZHMpOwotIAotLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBzdGFnZV9jb250YWluZXJfcnBtX3Jhd19mZHMoOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+ IGZkcyk7Ci0rYm9vbCBjb21taXRfaGFzX21hdGNoaW5nX3NlcG9saWN5ICg6OnJwbW9zdHJlZWN4 eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBjb25zdCAmcG9saWN5KTsKLSAK LS1ib29sIGNvbW1pdF9oYXNfbWF0Y2hpbmdfc2Vwb2xpY3koOjpycG1vc3RyZWVjeHg6OkdWYXJp YW50IGNvbnN0ICZjb21taXQsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBjb25zdCAm cG9saWN5KTsKLSs6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKmdldF9oZWFkZXJfdmFyaWFudCAo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGNhY2hlYnJhbmNoKTsK LSAKLS06OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKmdldF9oZWFkZXJfdmFyaWFudCg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgY2FjaGVicmFuY2gp OwotK3ZvaWQgY29tcG9zZV9idWlsZF9jaHVua2VkX29jaV9lbnRyeXBvaW50ICg6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7Ci0gCi0tdm9pZCBjb21wb3NlX2J1aWxkX2NodW5rZWRf b2NpX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpOwotK3ZvaWQg Y29tcG9zZV9pbWFnZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpOwotIAotLXZv aWQgY29tcG9zZV9pbWFnZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7Ci0rdm9p ZCBjb21wb3NlX3Jvb3Rmc19lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g YXJncyk7Ci0gCi0tdm9pZCBjb21wb3NlX3Jvb3Rmc19lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBhcmdzKTsKLSt2b2lkIGNvbmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFy Z2V0ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmYnVpbGRfcmVwbywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVl UmVwbyBjb25zdCAmdGFyZ2V0X3JlcG8pOwotIAotLXZvaWQgY29uZmlndXJlX2J1aWxkX3JlcG9f ZnJvbV90YXJnZXQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmJ1aWxkX3JlcG8s IDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZ0YXJnZXRfcmVwbyk7Ci0rdm9pZCBj b21wb3NlX3ByZXBhcmVfcm9vdGZzICg6OnN0ZDo6aW50MzJfdCBzcmNfcm9vdGZzX2RmZCwgOjpz dGQ6OmludDMyX3QgZGVzdF9yb290ZnNfZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSk7Ci0gCi0tdm9pZCBjb21wb3Nl X3ByZXBhcmVfcm9vdGZzKDo6c3RkOjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50 MzJfdCBkZXN0X3Jvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUp OwotK3ZvaWQgY29tcG9zZXBvc3RfbnNzd2l0Y2hfYWx0ZmlsZXMgKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQpOwotIAotLXZvaWQgY29tcG9zZXBvc3RfbnNzd2l0Y2hfYWx0ZmlsZXMoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCk7Ci0rdm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzICg6OnN0ZDo6 aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLCBib29s IHVuaWZpZWRfY29yZSk7Ci0gCi0tdm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzKDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVz dDo6U3RyIG5leHRfdmVyc2lvbiwgYm9vbCB1bmlmaWVkX2NvcmUpOwotK3ZvaWQgY29tcG9zZV9w b3N0cHJvY2Vzc19maW5hbF9wcmUgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZ0cmVlZmlsZSk7Ci0gCi0tdm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsX3ByZSg6 OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnRyZWVmaWxlKTsKLSt2b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwgKDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKTsKLSAKLS12b2lkIGNvbXBvc2VfcG9z dHByb2Nlc3NfZmluYWwoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSk7Ci0rdm9pZCBjb252ZXJ0X3Zhcl90b190bXBmaWxl c19kICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUp OwotIAotLXZvaWQgY29udmVydF92YXJfdG9fdG1wZmlsZXNfZCg6OnN0ZDo6aW50MzJfdCByb290 ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7 Ci0rdm9pZCByb290ZnNfcHJlcGFyZV9saW5rcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIHNraXBfdXNybG9jYWwpOwotIAotLXZvaWQgcm9vdGZzX3ByZXBh cmVfbGlua3MoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZ0cmVlZmlsZSwgYm9vbCBza2lwX3VzcmxvY2FsKTsKLSt2b2lkIHdvcmthcm91 bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdD YW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpOwotIAotLXZvaWQgd29ya2Fyb3VuZF9zZWxpbnV4X2Ny b3NzX2xhYmVsaW5nKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpH Q2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlKTsKLSt2b2lkIHBvc3Rwcm9jZXNzX2NsZWFudXBfcnBt ZGIgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpOwotIAotLXZvaWQgcG9zdHByb2Nlc3NfY2xl YW51cF9ycG1kYig6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKTsKLSt2b2lkIHJld3JpdGVfcnBt ZGJfZm9yX3RhcmdldCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBub3JtYWxpemUp OwotIAotLXZvaWQgcmV3cml0ZV9ycG1kYl9mb3JfdGFyZ2V0KDo6c3RkOjppbnQzMl90IHJvb3Rm c19kZmQsIGJvb2wgbm9ybWFsaXplKTsKLSs6OnN0ZDo6dWludDY0X3QgZGlyZWN0b3J5X3NpemUg KDo6c3RkOjppbnQzMl90IGRmZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKLSAKLS06OnN0 ZDo6dWludDY0X3QgZGlyZWN0b3J5X3NpemUoOjpzdGQ6OmludDMyX3QgZGZkLCA6OnJwbW9zdHJl ZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7Ci0rOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZURlcGxveW1lbnQgKmRlcGxveW1lbnRfZm9yX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU3lzcm9vdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGRlcGxveV9pZCk7Ci0gCi0tOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgKmRlcGxveW1lbnRfZm9yX2lkKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQpOwotKzo6cnVz dDo6U3RyaW5nIGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU3lzcm9vdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpydXN0OjpTdHIgZGVwbG95X2lkKTsKLSAKLS06OnJ1c3Q6OlN0cmluZyBkZXBs b3ltZW50X2NoZWNrc3VtX2Zvcl9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lz cm9vdCwgOjpydXN0OjpTdHIgZGVwbG95X2lkKTsKLSs6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVw bG95bWVudCAqZGVwbG95bWVudF9nZXRfYmFzZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jv b3QgJnN5c3Jvb3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDo6cnVzdDo6U3RyIG9wdF9kZXBsb3lfaWQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIG9wdF9v c19uYW1lKTsKLSAKLS06OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqZGVwbG95bWVu dF9nZXRfYmFzZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0 OjpTdHIgb3B0X2RlcGxveV9pZCwgOjpydXN0OjpTdHIgb3B0X29zX25hbWUpOwotK2Jvb2wgZGVw bG95bWVudF9hZGRfbWFuaWZlc3RfZGlmZiAoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBj b25zdCAmZGljdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0 cmVlY3h4OjpFeHBvcnRlZE1hbmlmZXN0RGlmZiBjb25zdCAmZGlmZikgbm9leGNlcHQ7Ci0gCi0t Ym9vbCBkZXBsb3ltZW50X2FkZF9tYW5pZmVzdF9kaWZmKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFu dERpY3QgY29uc3QgJmRpY3QsIDo6cnBtb3N0cmVlY3h4OjpFeHBvcnRlZE1hbmlmZXN0RGlmZiBj b25zdCAmZGlmZikgbm9leGNlcHQ7Ci0rdm9pZCBkYWVtb25fc2FuaXR5Y2hlY2tfZW52aXJvbm1l bnQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KTsKLSAKLS12 b2lkIGRhZW1vbl9zYW5pdHljaGVja19lbnZpcm9ubWVudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl U3lzcm9vdCBjb25zdCAmc3lzcm9vdCk7Ci0rOjpydXN0OjpTdHJpbmcgZGVwbG95bWVudF9nZW5l cmF0ZV9pZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1l bnQpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6U3RyaW5nIGRlcGxveW1lbnRfZ2VuZXJhdGVfaWQo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpIG5vZXhj ZXB0OwotK3ZvaWQgZGVwbG95bWVudF9wb3B1bGF0ZV92YXJpYW50ICg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1l bnQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpH VmFyaWFudERpY3QgY29uc3QgJmRpY3QpOwotIAotLXZvaWQgZGVwbG95bWVudF9wb3B1bGF0ZV92 YXJpYW50KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJw bW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgOjpycG1vc3Ry ZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCk7Ci0rdm9pZCBnZW5lcmF0ZV9iYXNlbGF5 ZXJfcmVmcyAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVj eHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpOwotIAotLXZvaWQgZ2VuZXJhdGVf YmFzZWxheWVyX3JlZnMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jv b3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4 eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7Ci0rdm9pZCB2YXJpYW50X2FkZF9y ZW1vdGVfc3RhdHVzICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpy dXN0OjpTdHIgcmVmc3BlYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6U3RyIGJhc2VfY2hlY2tzdW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KTsKLSAKLS12b2lkIHZhcmlh bnRfYWRkX3JlbW90ZV9zdGF0dXMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJl cG8sIDo6cnVzdDo6U3RyIHJlZnNwZWMsIDo6cnVzdDo6U3RyIGJhc2VfY2hlY2tzdW0sIDo6cnBt b3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpOwotKzo6cnBtb3N0cmVlY3h4OjpE ZXBsb3ltZW50TGF5ZXJlZE1ldGEKLStkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0 ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnQgY29uc3QgJmNvbW1pdCk7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVk TWV0YSBkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnQgY29uc3QgJmNvbW1pdCk7Ci0rOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0 YQotK2RlcGxveW1lbnRfbGF5ZXJlZG1ldGFfbG9hZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJl cG8gY29uc3QgJnJlcG8sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCk7Ci0gCi0tOjpycG1vc3Ry ZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSBkZXBsb3ltZW50X2xheWVyZWRtZXRhX2xvYWQo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KTsKLSs6OnJwbW9zdHJlZWN4eDo6T3Zl cnJpZGVSZXBsYWNlbWVudFNvdXJjZSBwYXJzZV9vdmVycmlkZV9zb3VyY2UgKDo6cnVzdDo6U3Ry IHNvdXJjZSk7Ci0gCi0tOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2Ug cGFyc2Vfb3ZlcnJpZGVfc291cmNlKDo6cnVzdDo6U3RyIHNvdXJjZSk7Ci0rOjpycG1vc3RyZWVj eHg6OlBhcnNlZFJldmlzaW9uIHBhcnNlX3JldmlzaW9uICg6OnJ1c3Q6OlN0ciBzb3VyY2UpOwot IAotLTo6cnBtb3N0cmVlY3h4OjpQYXJzZWRSZXZpc2lvbiBwYXJzZV9yZXZpc2lvbig6OnJ1c3Q6 OlN0ciBzb3VyY2UpOwotKzo6cnVzdDo6U3RyaW5nIGdlbmVyYXRlX29iamVjdF9wYXRoICg6OnJ1 c3Q6OlN0ciBiYXNlLCA6OnJ1c3Q6OlN0ciBuZXh0X3NlZ21lbnQpOwotIAotLTo6cnVzdDo6U3Ry aW5nIGdlbmVyYXRlX29iamVjdF9wYXRoKDo6cnVzdDo6U3RyIGJhc2UsIDo6cnVzdDo6U3RyIG5l eHRfc2VnbWVudCk7Ci0rdm9pZCBmYWlscG9pbnQgKDo6cnVzdDo6U3RyIHApOwotIAotLXZvaWQg ZmFpbHBvaW50KDo6cnVzdDo6U3RyIHApOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlckZsYWdzPiBycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5ICgpIG5vZXhjZXB0 OwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPiBycG1f aW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5KCkgbm9leGNlcHQ7Ci0rOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyPgotK3JwbV9pbXBvcnRlcl9uZXcgKDo6cnVzdDo6U3RyIHBr Z19uYW1lLCA6OnJ1c3Q6OlN0ciBvc3RyZWVfYnJhbmNoLAotKyAgICAgICAgICAgICAgICAgIDo6 cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0ICZmbGFncyk7Ci0gCi0tOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyPiBycG1faW1wb3J0ZXJfbmV3KDo6cnVz dDo6U3RyIHBrZ19uYW1lLCA6OnJ1c3Q6OlN0ciBvc3RyZWVfYnJhbmNoLCA6OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXJGbGFncyBjb25zdCAmZmxhZ3MpOwotKzo6cnVzdDo6U3RyaW5nIHRtcGZp bGVzX3RyYW5zbGF0ZSAoOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmls ZUluZm8gY29uc3QgJmZpbGVfaW5mbywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpOwotIAotLTo6 cnVzdDo6U3RyaW5nIHRtcGZpbGVzX3RyYW5zbGF0ZSg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpy cG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2Vy bmFtZSwgOjpydXN0OjpTdHIgZ3JvdXBuYW1lKTsKLSt2b2lkIGFwcGVuZF9kcmFjdXRfcmFuZG9t X2NwaW8gKDo6c3RkOjppbnQzMl90IGZkKTsKLSAKLS12b2lkIGFwcGVuZF9kcmFjdXRfcmFuZG9t X2NwaW8oOjpzdGQ6OmludDMyX3QgZmQpOwotKzo6c3RkOjppbnQzMl90IGluaXRyYW1mc19vdmVy bGF5X2dlbmVyYXRlICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4 eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSk7Ci0gCi0tOjpzdGQ6OmludDMyX3QgaW5pdHJh bWZzX292ZXJsYXlfZ2VuZXJhdGUoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZm aWxlcywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpOwotK3ZvaWQg am91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUgKCkgbm9leGNlcHQ7Ci0gCi0tdm9pZCBqb3Vy bmFsX3ByaW50X3N0YWdpbmdfZmFpbHVyZSgpIG5vZXhjZXB0OwotK3ZvaWQgY29uc29sZV9wcm9n cmVzc19iZWdpbl90YXNrICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OwotIAotLXZvaWQgY29u c29sZV9wcm9ncmVzc19iZWdpbl90YXNrKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0rdm9p ZCBjb25zb2xlX3Byb2dyZXNzX2JlZ2luX25faXRlbXMgKDo6cnVzdDo6U3RyIG1zZywgOjpzdGQ6 OnVpbnQ2NF90IG4pIG5vZXhjZXB0OwotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl9u X2l0ZW1zKDo6cnVzdDo6U3RyIG1zZywgOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0OwotK3Zv aWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50ICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhj ZXB0OwotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50KDo6cnVzdDo6U3Ry IG1zZykgbm9leGNlcHQ7Ci0rdm9pZCBjb25zb2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlICg6OnJ1 c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OwotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc19zZXRfbWVz c2FnZSg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OwotK3ZvaWQgY29uc29sZV9wcm9ncmVzc19z ZXRfc3ViX21lc3NhZ2UgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Ci0gCi0tdm9pZCBjb25z b2xlX3Byb2dyZXNzX3NldF9zdWJfbWVzc2FnZSg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0Owot K3ZvaWQgY29uc29sZV9wcm9ncmVzc191cGRhdGUgKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4Y2Vw dDsKLSAKLS12b2lkIGNvbnNvbGVfcHJvZ3Jlc3NfdXBkYXRlKDo6c3RkOjp1aW50NjRfdCBuKSBu b2V4Y2VwdDsKLSt2b2lkIGNvbnNvbGVfcHJvZ3Jlc3NfZW5kICg6OnJ1c3Q6OlN0ciBzdWZmaXgp IG5vZXhjZXB0OwotIAotLXZvaWQgY29uc29sZV9wcm9ncmVzc19lbmQoOjpydXN0OjpTdHIgc3Vm Zml4KSBub2V4Y2VwdDsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4g aGlzdG9yeV9jdHhfbmV3ICgpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0 b3J5Q3R4PiBoaXN0b3J5X2N0eF9uZXcoKTsKLSt2b2lkIGhpc3RvcnlfcHJ1bmUgKCk7Ci0gCi0t dm9pZCBoaXN0b3J5X3BydW5lKCk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lv SGFuZGxlPiB0b2tpb19oYW5kbGVfZ2V0ICgpIG5vZXhjZXB0OwotIAotLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT4gdG9raW9faGFuZGxlX2dldCgpIG5vZXhjZXB0Owot K2Jvb2wgc2NyaXB0X2lzX2lnbm9yZWQgKDo6cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2Ny aXB0LCBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCkgbm9leGNlcHQ7Ci0gCi0tYm9vbCBzY3JpcHRf aXNfaWdub3JlZCg6OnJ1c3Q6OlN0ciBwa2csIDo6cnVzdDo6U3RyIHNjcmlwdCwgYm9vbCB1c2Vf a2VybmVsX2luc3RhbGwpIG5vZXhjZXB0OwotK3ZvaWQgdGVzdHV0aWxzX2VudHJ5cG9pbnQgKDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmd2KTsKLSAKLS12b2lkIHRlc3R1dGlsc19lbnRy eXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmd2KTsKLSs6OnJ1c3Q6OlN0cmlu ZyBtYXliZV9zaGVsbF9xdW90ZSAoOjpydXN0OjpTdHIgaW5wdXQpIG5vZXhjZXB0OwotIAotLTo6 cnVzdDo6U3RyaW5nIG1heWJlX3NoZWxsX3F1b3RlKDo6cnVzdDo6U3RyIGlucHV0KSBub2V4Y2Vw dDsKLSs6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ldyAo OjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKLSAKLS06OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ldyg6OnJ1c3Q6OlN0ciBm aWxlbmFtZSwgOjpydXN0OjpTdHIgYmFzZWFyY2gpOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2VtcHR5ICgpOwotIAotLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2VtcHR5KCk7Ci0rOjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcgKDo6 cnVzdDo6U3RyIGJ1ZiwgYm9vbCBjbGllbnQpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2Zyb21fc3RyaW5nKDo6cnVzdDo6U3RyIGJ1Ziwg Ym9vbCBjbGllbnQpOwotKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJl ZWZpbGVfbmV3X2NvbXBvc2UgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3Ry IGJhc2VhcmNoKTsKLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRy ZWVmaWxlX25ld19jb21wb3NlKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNl YXJjaCk7Ci0rOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9u ZXdfY2xpZW50ICg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGJhc2VhcmNo KTsKLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25l d19jbGllbnQoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKLSs6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnRf ZnJvbV9ldGMgKDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnRfZnJvbV9ldGMoOjpydXN0OjpT dHIgYmFzZWFyY2gpOwotKzo6c3RkOjp1aW50MzJfdCB0cmVlZmlsZV9kZWxldGVfY2xpZW50X2V0 YyAoKTsKLSAKLS06OnN0ZDo6dWludDMyX3QgdHJlZWZpbGVfZGVsZXRlX2NsaWVudF9ldGMoKTsK LSsvLyBSZXR1cm4gdGhlIGxpc3Qgb2YgcmVwbyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzIHRv IHNlYXJjaAotKy8vIChlLmcuIFsiL2V0Yy95dW0ucmVwb3MuZCIsICIvdXNyL3NoYXJlL2RuZjUv cmVwb3MuZCJdKS4KLSs6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9zX2RpcnMg KCkgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpTdHJpbmcgdmFyc3Vic3RpdHV0ZSg6OnJ1c3Q6OlN0 ciBzLCA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJnZh cnMpOwotKzo6cnVzdDo6U3RyaW5nIHZhcnN1YnN0aXR1dGUgKDo6cnVzdDo6U3RyIHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0 cmluZ01hcHBpbmc+IGNvbnN0ICZ2YXJzKTsKLSAKLS06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gZ2V0X2ZlYXR1cmVzKCkgbm9leGNlcHQ7Ci0rOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9mZWF0dXJlcyAoKSBub2V4Y2VwdDsKLSAKLS06OnJ1c3Q6OlN0cmluZyBnZXRfcnBtX2Jh c2VhcmNoKCkgbm9leGNlcHQ7Ci0rOjpydXN0OjpTdHJpbmcgZ2V0X3JwbV9iYXNlYXJjaCAoKSBu b2V4Y2VwdDsKLSAKLS06OnN0ZDo6aW50MzJfdCBzZWFsZWRfbWVtZmQoOjpydXN0OjpTdHIgZGVz Y3JpcHRpb24sIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNvbnRlbnQpOwot Kzo6c3RkOjppbnQzMl90IHNlYWxlZF9tZW1mZCAoOjpydXN0OjpTdHIgZGVzY3JpcHRpb24sIDo6 cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNvbnRlbnQpOwotIAotLWJvb2wgcnVu bmluZ19pbl9zeXN0ZW1kKCkgbm9leGNlcHQ7Ci0rYm9vbCBydW5uaW5nX2luX3N5c3RlbWQgKCkg bm9leGNlcHQ7Ci0gCi0tOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICpjYWxjdWxhdGVfYWR2aXNv cmllc19kaWZmKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6 OlN0ciBjaGVja3N1bV9mcm9tLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV90byk7Ci0rOjpycG1vc3Ry ZWVjeHg6OkdWYXJpYW50ICpjYWxjdWxhdGVfYWR2aXNvcmllc19kaWZmICg6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGNoZWNrc3VtX2Zyb20sCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6 OlN0ciBjaGVja3N1bV90byk7Ci0gCi0tOjpydXN0OjpTdHJpbmcgdHJhbnNsYXRlX3BhdGhfZm9y X29zdHJlZSg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKLSs6OnJ1c3Q6OlN0cmluZyB0cmFu c2xhdGVfcGF0aF9mb3Jfb3N0cmVlICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKLSAKLS06 OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGUgZ2V0X2xpdmVfYXBwbHlfc3RhdGUoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KTsKLSs6OnJwbW9zdHJlZWN4eDo6TGl2 ZUFwcGx5U3RhdGUKLStnZXRfbGl2ZV9hcHBseV9zdGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KTsKLSAKLS1ib29sIGhh c19saXZlX2FwcGx5X3N0YXRlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZz eXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVu dCk7Ci0rYm9vbCBoYXNfbGl2ZV9hcHBseV9zdGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5 c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpOwotIAotLXZvaWQg YXBwbHlsaXZlX3N5bmNfcmVmKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZz eXNyb290KTsKLSt2b2lkIGFwcGx5bGl2ZV9zeW5jX3JlZiAoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpOwotIAotLXZvaWQgdHJhbnNhY3Rpb25fYXBwbHlfbGl2 ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3Ry ZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZ0YXJnZXQpOwotK3ZvaWQgdHJhbnNhY3Rpb25fYXBwbHlf bGl2ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3Qg JnRhcmdldCk7Ci0gCi0tdm9pZCBub3JtYWxpemVfZXRjX3NoYWRvdyg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZGZkKTsKLSt2b2lkIG5vcm1hbGl6ZV9ldGNfc2hhZG93ICg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZGZkKTsKLSAKLS1ib29sIHByZXBhcmVfcnBtX2xheWVyaW5nKDo6c3RkOjppbnQzMl90 IHJvb3RmcywgOjpzdGQ6OmludDMyX3QgbWVyZ2VfcGFzc3dkX2Rpcik7Ci0rYm9vbCBwcmVwYXJl X3JwbV9sYXllcmluZyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnN0ZDo6aW50MzJfdCBtZXJn ZV9wYXNzd2RfZGlyKTsKLSAKLS12b2lkIGNvbXBsZXRlX3JwbV9sYXllcmluZyg6OnN0ZDo6aW50 MzJfdCByb290ZnMpOwotK3ZvaWQgY29tcGxldGVfcnBtX2xheWVyaW5nICg6OnN0ZDo6aW50MzJf dCByb290ZnMpOwotIAotLXZvaWQgZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyg6OnN0ZDo6 aW50MzJfdCByb290ZnMpOwotK3ZvaWQgZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzKTsKLSAKLS12b2lkIHBhc3N3ZF9jbGVhbnVwKDo6c3RkOjppbnQz Ml90IHJvb3Rmcyk7Ci0rdm9pZCBwYXNzd2RfY2xlYW51cCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz KTsKLSAKLS12b2lkIG1pZ3JhdGVfZ3JvdXBfZXhjZXB0X3Jvb3QoOjpzdGQ6OmludDMyX3Qgcm9v dGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJnByZXNlcnZlZF9ncm91cHMp OwotK3ZvaWQgbWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGNvbnN0ICZwcmVzZXJ2ZWRfZ3JvdXBzKTsKLSAKLS12b2lkIG1pZ3JhdGVfcGFzc3dk X2V4Y2VwdF9yb290KDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7Ci0rdm9pZCBtaWdyYXRlX3Bhc3N3 ZF9leGNlcHRfcm9vdCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKLSAKLS12b2lkIHBhc3N3ZF9j b21wb3NlX3ByZXAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgJnRyZWVmaWxlKTsKLSt2b2lkIHBhc3N3ZF9jb21wb3NlX3ByZXAgKDo6c3RkOjppbnQzMl90 IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSk7Ci0gCi0tdm9pZCBw YXNzd2RfY29tcG9zZV9wcmVwX3JlcG8oOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25z dCAmcmVwbywgOjpydXN0OjpTdHIgcHJldmlvdXNfY2hlY2tzdW0sIGJvb2wgdW5pZmllZF9jb3Jl KTsKLSt2b2lkIHBhc3N3ZF9jb21wb3NlX3ByZXBfcmVwbyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz LCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcHJldmlvdXNfY2hlY2tz dW0sIGJvb2wgdW5pZmllZF9jb3JlKTsKLSAKLS1ib29sIGRpcl9jb250YWluc191aWQoOjpzdGQ6 OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCk7Ci0rYm9vbCBkaXJfY29udGFpbnNf dWlkICg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKTsKLSAKLS1ib29s IGRpcl9jb250YWluc19naWQoOjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBp ZCk7Ci0rYm9vbCBkaXJfY29udGFpbnNfZ2lkICg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6 OnVpbnQzMl90IGlkKTsKLSAKLS12b2lkIGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzKDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9v dGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIg cHJldmlvdXNfcmV2KTsKLSt2b2lkIGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzICg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmZmZpX3JlcG8sCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlICZ0cmVlZmlsZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0ciBwcmV2aW91c19yZXYpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpQYXNzd2REQj4gcGFzc3dkZGJfb3Blbig6OnN0ZDo6aW50MzJfdCByb290ZnMpOwotKzo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj4gcGFzc3dkZGJfb3BlbiAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzKTsKLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50 cmllcz4gbmV3X3Bhc3N3ZF9lbnRyaWVzKCkgbm9leGNlcHQ7Ci0rOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+IG5ld19wYXNzd2RfZW50cmllcyAoKSBub2V4Y2VwdDsK LSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4gZXh0ZW5zaW9uc19s b2FkKDo6cnVzdDo6U3RyIHBhdGgsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6OlZlYzw6 OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJmJhc2VfcGtncyk7Ci0rOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+Ci0rZXh0ZW5zaW9uc19sb2FkICg6OnJ1 c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwKLSsgICAgICAgICAgICAgICAgIDo6 cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dz KTsKLSAKLS06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+IGxvY2tm aWxlX3JlYWQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlbmFtZXMpOwot Kzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4KLStsb2NrZmlsZV9y ZWFkICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcyk7Ci0gCi0t dm9pZCBsb2NrZmlsZV93cml0ZSg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpycG1vc3RyZWVjeHg6 OkN4eEdPYmplY3RBcnJheSAmcGFja2FnZXMsIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJy YXkgJnJwbW1kX3JlcG9zKTsKLSt2b2lkIGxvY2tmaWxlX3dyaXRlICg6OnJ1c3Q6OlN0ciBmaWxl bmFtZSwgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcGFja2FnZXMsCi0rICAgICAg ICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcnBtbWRfcmVw b3MpOwotIAotLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gb3JpZ2luX3Rv X3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpOwotKzo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gb3JpZ2luX3RvX3RyZWVmaWxlICg6OnJwbW9z dHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmKTsKLSAKLS06OnJwbW9zdHJlZWN4eDo6R0tleUZp bGUgKnRyZWVmaWxlX3RvX29yaWdpbig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRm KTsKLSs6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgKnRyZWVmaWxlX3RvX29yaWdpbiAoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0Zik7Ci0gCi0tdm9pZCBvcmlnaW5fdmFsaWRhdGVf cm91bmR0cmlwKDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIG5vZXhjZXB0Owot K3ZvaWQgb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJpcCAoOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxl IGNvbnN0ICZrZikgbm9leGNlcHQ7Ci0gCi0tOjpydXN0OjpTdHJpbmcgY2FjaGVfYnJhbmNoX3Rv X25ldnJhKDo6cnVzdDo6U3RyIG5ldnJhKSBub2V4Y2VwdDsKLSs6OnJ1c3Q6OlN0cmluZyBjYWNo ZV9icmFuY2hfdG9fbmV2cmEgKDo6cnVzdDo6U3RyIG5ldnJhKSBub2V4Y2VwdDsKLSB9IC8vIG5h bWVzcGFjZSBycG1vc3RyZWVjeHgKLSAKLSAjaWZkZWYgX19jbGFuZ19fCi1kaWZmIC0tZ2l0IGEv cnVzdC9zcmMvY29tcG9zZS5ycyBiL3J1c3Qvc3JjL2NvbXBvc2UucnMKLWluZGV4IDEwODM1NDBl MTcuLjdmMTA4ODFhNTkgMTAwNjQ0Ci0tLS0gYS9ydXN0L3NyYy9jb21wb3NlLnJzCi0rKysgYi9y dXN0L3NyYy9jb21wb3NlLnJzCi1AQCAtMzMsNyArMzMsNyBAQCB1c2UgY3JhdGU6OmNtZHV0aWxz OjpDb21tYW5kUnVuRXh0OwotIHVzZSBjcmF0ZTo6Y29udGFpbmVyc19zdG9yYWdlOjpNb3VudDsK LSB1c2UgY3JhdGU6OmN4eHJzdXRpbDo6e0N4eFJlc3VsdCwgRkZJR09iamVjdFdyYXBwZXJ9Owot IHVzZSBjcmF0ZTo6aXNvbGF0aW9uOjpzZWxmX2NvbW1hbmQ7Ci0tdXNlIGNyYXRlOjp7UlBNT1NU UkVFX1JQTURCX0xPQ0FUSU9OLCBSUE1PU1RSRUVfU1lTSU1BR0VfUlBNREJ9OwotK3VzZSBjcmF0 ZTo6e1JFUE9TX0RJUlMsIFJQTU9TVFJFRV9SUE1EQl9MT0NBVElPTiwgUlBNT1NUUkVFX1NZU0lN QUdFX1JQTURCfTsKLSAKLSBjb25zdCBPU1RSRUVfQ09NUE9TRUZTX0RJR0VTVF9WMF9LRVk6ICZz dHIgPSAib3N0cmVlLmNvbXBvc2Vmcy5kaWdlc3QudjAiOwotIAotQEAgLTY0MCwyMyArNjQwLDI0 IEBAIGZuIG11dGF0ZV9zb3VyY2Vfcm9vdChleGVjX3Jvb3Q6ICZEaXIsIHNvdXJjZV9yb290OiAm VXRmOFBhdGgpIC0+IFJlc3VsdDwoKT4gewotICAgICAgICAgcHJpbnRsbiEoIlN5bWxpbmtlZCB7 UlBNT1NUUkVFX1JQTURCX0xPQ0FUSU9OfSBpbiBzb3VyY2Ugcm9vdCIpOwotICAgICB9Ci0gCi0t ICAgIGlmICFzb3VyY2Vfcm9vdF9kaXIudHJ5X2V4aXN0cygiZXRjIik/IHsKLS0gICAgICAgIHJl dHVybiBPaygoKSk7Ci0tICAgIH0KLS0gICAgaWYgbGV0IFNvbWUocmVwb3MpID0gc291cmNlX3Jv b3RfZGlyCi0tICAgICAgICAub3Blbl9kaXJfb3B0aW9uYWwoImV0Yy95dW0ucmVwb3MuZCIpCi0t ICAgICAgICAuY29udGV4dCgiT3BlbmluZyB5dW0ucmVwb3MuZCIpPwotLSAgICB7Ci0tICAgICAg ICBmb3IgZW50IGluIHJlcG9zLmVudHJpZXNfdXRmOCgpPyB7Ci0tICAgICAgICAgICAgbGV0IGVu dCA9IGVudD87Ci0tICAgICAgICAgICAgaWYgIWVudC5maWxlX3R5cGUoKT8uaXNfZmlsZSgpIHsK LS0gICAgICAgICAgICAgICAgY29udGludWU7Ci0rICAgIC8vIFNjYW4gYWxsIHJlcG8gZGlyZWN0 b3J5IGxvY2F0aW9ucyBmb3IgLnJlcG8gZmlsZXMgdGhhdCBtYXkgbmVlZAotKyAgICAvLyBHUEcg a2V5IHBhdGggcmV3cml0aW5nLgotKyAgICBmb3IgcmVwb3NfZGlyIGluIFJFUE9TX0RJUlMgewot KyAgICAgICAgaWYgbGV0IFNvbWUocmVwb3MpID0gc291cmNlX3Jvb3RfZGlyCi0rICAgICAgICAg ICAgLm9wZW5fZGlyX29wdGlvbmFsKHJlcG9zX2RpcikKLSsgICAgICAgICAgICAud2l0aF9jb250 ZXh0KHx8IGZvcm1hdCEoIk9wZW5pbmcge3JlcG9zX2Rpcn0iKSk/Ci0rICAgICAgICB7Ci0rICAg ICAgICAgICAgZm9yIGVudCBpbiByZXBvcy5lbnRyaWVzX3V0ZjgoKT8gewotKyAgICAgICAgICAg ICAgICBsZXQgZW50ID0gZW50PzsKLSsgICAgICAgICAgICAgICAgaWYgIWVudC5maWxlX3R5cGUo KT8uaXNfZmlsZSgpIHsKLSsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotKyAgICAgICAg ICAgICAgICB9Ci0rICAgICAgICAgICAgICAgIGxldCBuYW1lOiBVdGY4UGF0aEJ1ZiA9IGVudC5m aWxlX25hbWUoKT8uaW50bygpOwotKyAgICAgICAgICAgICAgICBsZXQgU29tZSgicmVwbyIpID0g bmFtZS5leHRlbnNpb24oKSBlbHNlIHsKLSsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot KyAgICAgICAgICAgICAgICB9OwotKyAgICAgICAgICAgICAgICBtdXRhdGVfb25lX2RuZl9yZXBv KGV4ZWNfcm9vdCwgc291cmNlX3Jvb3QsICZyZXBvcywgJm5hbWUpPzsKLSAgICAgICAgICAgICB9 Ci0tICAgICAgICAgICAgbGV0IG5hbWU6IFV0ZjhQYXRoQnVmID0gZW50LmZpbGVfbmFtZSgpPy5p bnRvKCk7Ci0tICAgICAgICAgICAgbGV0IFNvbWUoInJlcG8iKSA9IG5hbWUuZXh0ZW5zaW9uKCkg ZWxzZSB7Ci0tICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotLSAgICAgICAgICAgIH07Ci0tICAg ICAgICAgICAgbXV0YXRlX29uZV9kbmZfcmVwbyhleGVjX3Jvb3QsIHNvdXJjZV9yb290LCAmcmVw b3MsICZuYW1lKT87Ci0gICAgICAgICB9Ci0gICAgIH0KLSAKLUBAIC0xNjg0LDYgKzE2ODUsMjkg QEAgbW9kIHRlc3RzIHsKLSAgICAgIiN9OwotICAgICAgICAgc2ltaWxhcl9hc3NlcnRzOjphc3Nl cnRfZXEhKGV4cGVjdGVkLCBmb3VuZF9yZXBvcyk7Ci0gCi0rICAgICAgICAvLyBBbHNvIHRlc3Qg d2l0aCByZXBvcyBpbiB0aGUgbmV3IC91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIGxvY2F0aW9uCi0r ICAgICAgICByb290ZnMuY3JlYXRlX2Rpcl9hbGwoInJlcG9zL3Vzci9zaGFyZS9kbmY1L3JlcG9z LmQiKT87Ci0rICAgICAgICByb290ZnMuY3JlYXRlX2Rpcl9hbGwoInJlcG9zL3Vzci9zaGFyZS9w a2kvcnBtLWdwZyIpPzsKLSsgICAgICAgIHJvb3Rmcy53cml0ZSgicmVwb3MvdXNyL3NoYXJlL3Br aS9ycG0tZ3BnL3JlcG81LmtleSIsICJyZXBvNSBncGcga2V5Iik/OwotKyAgICAgICAgbGV0IGRu ZjVfcmVwb19jb250ZW50ID0gaW5kb2M6OmluZG9jISB7IHIjIgotKyAgICAgICAgW3JlcG81XQot KyAgICAgICAgYmFzZXVybD1ibGFoCi0rICAgICAgICBncGdrZXk9ZmlsZTovLy91c3Ivc2hhcmUv cGtpL3JwbS1ncGcvcmVwbzUua2V5Ci0rICAgICIjfTsKLSsgICAgICAgIHJvb3Rmcy53cml0ZSgK LSsgICAgICAgICAgICAicmVwb3MvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZC90ZXN0LWRuZjUucmVw byIsCi0rICAgICAgICAgICAgZG5mNV9yZXBvX2NvbnRlbnQsCi0rICAgICAgICApPzsKLSsgICAg ICAgIG11dGF0ZV9zb3VyY2Vfcm9vdChyb290ZnMsICJyZXBvcyIuaW50bygpKS51bndyYXAoKTsK LSsgICAgICAgIGxldCBmb3VuZF9kbmY1X3JlcG9zID0KLSsgICAgICAgICAgICByb290ZnMucmVh ZF90b19zdHJpbmcoInJlcG9zL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQvdGVzdC1kbmY1LnJlcG8i KT87Ci0rICAgICAgICBsZXQgZXhwZWN0ZWRfZG5mNSA9IGluZG9jOjppbmRvYyEgeyByIyIKLSsg ICAgICAgIFtyZXBvNV0KLSsgICAgICAgIGJhc2V1cmw9YmxhaAotKyAgICAgICAgZ3Bna2V5PWZp bGU6Ly8vcmVwb3MvdXNyL3NoYXJlL3BraS9ycG0tZ3BnL3JlcG81LmtleQotKyAgICAiI307Ci0r ICAgICAgICBzaW1pbGFyX2Fzc2VydHM6OmFzc2VydF9lcSEoZXhwZWN0ZWRfZG5mNSwgZm91bmRf ZG5mNV9yZXBvcyk7Ci0rCi0gICAgICAgICBPaygoKSkKLSAgICAgfQotIH0KLWRpZmYgLS1naXQg YS9ydXN0L3NyYy9jb21wb3NlcG9zdC5ycyBiL3J1c3Qvc3JjL2NvbXBvc2Vwb3N0LnJzCi1pbmRl eCBjMWZlYjczNzg5Li4xZDhlZDNhMmQ3IDEwMDY0NAotLS0tIGEvcnVzdC9zcmMvY29tcG9zZXBv c3QucnMKLSsrKyBiL3J1c3Qvc3JjL2NvbXBvc2Vwb3N0LnJzCi1AQCAtNTAsNiArNTAsMjMgQEAg cHViKGNyYXRlKSBjb25zdCBSUE1PU1RSRUVfUlBNREJfTE9DQVRJT046ICZzdHIgPSAidXNyL3No YXJlL3JwbSI7Ci0gcHViKGNyYXRlKSBjb25zdCBSUE1PU1RSRUVfU1lTSU1BR0VfUlBNREI6ICZz dHIgPSAidXNyL2xpYi9zeXNpbWFnZS9ycG0iOwotIHB1YihjcmF0ZSkgY29uc3QgVFJBRElUSU9O QUxfUlBNREJfTE9DQVRJT046ICZzdHIgPSAidmFyL2xpYi9ycG0iOwotIAotKy8vLyBSZXBvc2l0 b3J5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMuIFRoZSAvZXRjIHBhdGggaXMgZm9yIHVzZXIt YWRkZWQKLSsvLy8gY29uZmlndXJhdGlvbjsgdGhlIC91c3IgcGF0aCBpcyBmb3IgZGlzdHJpYnV0 aW9uLXByb3ZpZGVkIGNvbmZpZ3VyYXRpb24KLSsvLy8gKGludHJvZHVjZWQgd2l0aCBETkY1IGlu IEZlZG9yYSA0NSkuCi0rcHViKGNyYXRlKSBjb25zdCBZVU1fUkVQT1NfRDogJnN0ciA9ICJldGMv eXVtLnJlcG9zLmQiOwotK3B1YihjcmF0ZSkgY29uc3QgRE5GNV9SRVBPU19EOiAmc3RyID0gInVz ci9zaGFyZS9kbmY1L3JlcG9zLmQiOwotK3B1YihjcmF0ZSkgY29uc3QgUkVQT1NfRElSUzogJlsm c3RyXSA9ICZbWVVNX1JFUE9TX0QsIERORjVfUkVQT1NfRF07Ci0rCi0rLy8vIEFic29sdXRlLXBh dGggdmVyc2lvbnMgb2YgdGhlIGFib3ZlLCBmb3IgdXNlIGluIGNvbnRleHRzIHRoYXQgbmVlZCB0 aGVtLgotK3B1YihjcmF0ZSkgY29uc3QgQUJTX1lVTV9SRVBPU19EOiAmc3RyID0gIi9ldGMveXVt LnJlcG9zLmQiOwotK3B1YihjcmF0ZSkgY29uc3QgQUJTX0RORjVfUkVQT1NfRDogJnN0ciA9ICIv dXNyL3NoYXJlL2RuZjUvcmVwb3MuZCI7Ci0rCi0rLy8vIFJldHVybiB0aGUgbGlzdCBvZiBhYnNv bHV0ZSByZXBvIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgdG8gc2VhcmNoLAotKy8vLyBleHBv c2VkIHRvIEMrKyB2aWEgY3h4IGJyaWRnZS4KLStwdWIoY3JhdGUpIGZuIGdldF9yZXBvc19kaXJz KCkgLT4gVmVjPFN0cmluZz4gewotKyAgICB2ZWMhW0FCU19ZVU1fUkVQT1NfRC50b19zdHJpbmco KSwgQUJTX0RORjVfUkVQT1NfRC50b19zdHJpbmcoKV0KLSt9Ci0rCi0gY29uc3QgU0RfTE9DQUxf RlNfVEFSR0VUX1JFUVVJUkVTOiAmc3RyID0gInVzci9saWIvc3lzdGVtZC9zeXN0ZW0vbG9jYWwt ZnMudGFyZ2V0LnJlcXVpcmVzIjsKLSAKLSAjW2NvbnRleHQoIk1vdmluZyB7fSIsIG5hbWUpXQot ZGlmZiAtLWdpdCBhL3J1c3Qvc3JjL2NvdW50bWUvcmVwby5ycyBiL3J1c3Qvc3JjL2NvdW50bWUv cmVwby5ycwotaW5kZXggNzQzZDc1YzYxZS4uOWY5ZmFjOTY4OCAxMDA2NDQKLS0tLSBhL3J1c3Qv c3JjL2NvdW50bWUvcmVwby5ycwotKysrIGIvcnVzdC9zcmMvY291bnRtZS9yZXBvLnJzCi1AQCAt MywxNCArMywxMiBAQAotIHVzZSBhbnlob3c6OntDb250ZXh0LCBSZXN1bHR9OwotIHVzZSBmbl9l cnJvcl9jb250ZXh0Ojpjb250ZXh0OwotIHVzZSBzdGQ6OmZzOwotLXVzZSBzdGQ6OnBhdGg6OlBh dGhCdWY7Ci0rdXNlIHN0ZDo6cGF0aDo6e1BhdGgsIFBhdGhCdWZ9OwotIAotIHVzZSBpbmk6Oklu aTsKLSAKLSB1c2UgY3JhdGU6OnV0aWxzOwotLQotLS8vLyBMb2NhdGlvbiBmb3IgRE5GIHJlcG9z aXRvcmllcyBjb25maWd1cmF0aW9uCi0tcHViIGNvbnN0IFlVTV9SRVBPU19EOiAmc3RyID0gIi9l dGMveXVtLnJlcG9zLmQiOwotK3VzZSBjcmF0ZTo6e0FCU19ETkY1X1JFUE9TX0QsIEFCU19ZVU1f UkVQT1NfRH07Ci0gCi0gLy8vIFJlcG9zaXRvcnkgY29uZmlndXJhdGlvbgotIC8vLyBOb3QgZXho YXVzdGl2ZSBhbmQgb25seSBpbmNsdWRlcyB0aGUgb3B0aW9ucyBuZWVkZWQgZm9yIENvdW50IE1l IHN1cHBvcnQuCi1AQCAtMjgsMTIgKzI2LDE3IEBAIGZuIGlzX3RydWUoc3RyaW5nOiAmc3RyKSAt PiBib29sIHsKLSAgICAgc3RyaW5nID09ICIxIiB8fCBzdHJpbmcgPT0gInllcyIgfHwgc3RyaW5n ID09ICJ0cnVlIiB8fCBzdHJpbmcgPT0gIm9uIgotIH0KLSAKLS0vLy8gUmVhZCBhbGwgcmVwb3Np dG9yeSBjb25maWd1cmF0aW9uIGZpbGVzIGZyb20gdGhlIGRlZmF1bHQgbG9jYXRpb24KLS1wdWIg Zm4gYWxsKCkgLT4gUmVzdWx0PFZlYzxSZXBvPj4gewotLSAgICBsZXQgY29uZmlncyA9IGZzOjpy ZWFkX2RpcihZVU1fUkVQT1NfRCkKLS0gICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgi Q291bGQgbm90IGxpc3QgZmlsZXMgaW46IHt9IiwgWVVNX1JFUE9TX0QpKT87Ci0tICAgIGxldCBt dXQgcmVwb3MgPSBWZWM6Om5ldygpOwotLSAgICBmb3IgYyBpbiBjb25maWdzIHsKLSsvLy8gUmVh ZCByZXBvIGNvbmZpZyBmaWxlcyBmcm9tIGEgc2luZ2xlIGRpcmVjdG9yeSwgYXBwZW5kaW5nIHRv IGByZXBvc2AuCi0rLy8vIFNpbGVudGx5IHNraXBzIHRoZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBu b3QgZXhpc3QuCi0rZm4gY29sbGVjdF9yZXBvc19mcm9tX2RpcihkaXI6ICZQYXRoLCByZXBvczog Jm11dCBWZWM8UmVwbz4pIC0+IFJlc3VsdDwoKT4gewotKyAgICBsZXQgZW50cmllcyA9IG1hdGNo IGZzOjpyZWFkX2RpcihkaXIpIHsKLSsgICAgICAgIE9rKGVudHJpZXMpID0+IGVudHJpZXMsCi0r ICAgICAgICBFcnIoZSkgaWYgZS5raW5kKCkgPT0gc3RkOjppbzo6RXJyb3JLaW5kOjpOb3RGb3Vu ZCA9PiByZXR1cm4gT2soKCkpLAotKyAgICAgICAgRXJyKGUpID0+IHsKLSsgICAgICAgICAgICBy ZXR1cm4gRXJyKGUpLndpdGhfY29udGV4dCh8fCBmb3JtYXQhKCJDb3VsZCBub3QgbGlzdCBmaWxl cyBpbjoge30iLCBkaXIuZGlzcGxheSgpKSkKLSsgICAgICAgIH0KLSsgICAgfTsKLSsgICAgZm9y IGMgaW4gZW50cmllcyB7Ci0gICAgICAgICBsZXQgcGF0aCA9IGM/LnBhdGgoKTsKLSAgICAgICAg IG1hdGNoIHBhcnNlX3JlcG9fZmlsZSgmcGF0aCkgewotICAgICAgICAgICAgIEVycihlKSA9PiB7 Ci1AQCAtNDYsNiArNDksMTUgQEAgcHViIGZuIGFsbCgpIC0+IFJlc3VsdDxWZWM8UmVwbz4+IHsK LSAgICAgICAgICAgICBPayhtdXQgcikgPT4gcmVwb3MuYXBwZW5kKCZtdXQgciksCi0gICAgICAg ICB9Ci0gICAgIH0KLSsgICAgT2soKCkpCi0rfQotKwotKy8vLyBSZWFkIGFsbCByZXBvc2l0b3J5 IGNvbmZpZ3VyYXRpb24gZmlsZXMgZnJvbSBib3RoIHJlcG8gY29uZmlnIGRpcmVjdG9yaWVzCi0r cHViIGZuIGFsbCgpIC0+IFJlc3VsdDxWZWM8UmVwbz4+IHsKLSsgICAgbGV0IG11dCByZXBvcyA9 IFZlYzo6bmV3KCk7Ci0rICAgIGZvciBkaXIgaW4gJltBQlNfWVVNX1JFUE9TX0QsIEFCU19ETkY1 X1JFUE9TX0RdIHsKLSsgICAgICAgIGNvbGxlY3RfcmVwb3NfZnJvbV9kaXIoUGF0aDo6bmV3KGRp ciksICZtdXQgcmVwb3MpPzsKLSsgICAgfQotICAgICBPayhyZXBvcykKLSB9Ci0gCi1kaWZmIC0t Z2l0IGEvcnVzdC9zcmMvbGliLnJzIGIvcnVzdC9zcmMvbGliLnJzCi1pbmRleCAzMTM4MzY3N2E4 Li4wMzc4MjY5NzYzIDEwMDY0NAotLS0tIGEvcnVzdC9zcmMvbGliLnJzCi0rKysgYi9ydXN0L3Ny Yy9saWIucnMKLUBAIC03MDEsNiArNzAxLDEzIEBAIHB1YiBtb2QgZmZpIHsKLSAgICAgICAgIGZu IGdldF9wYWNrYWdlcygmc2VsZikgLT4gVmVjPFN0cmluZz47Ci0gICAgIH0KLSAKLSsgICAgLy8g Y29tcG9zZXBvc3QucnMKLSsgICAgZXh0ZXJuICJSdXN0IiB7Ci0rICAgICAgICAvLy8gUmV0dXJu IHRoZSBsaXN0IG9mIHJlcG8gY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcyB0byBzZWFyY2gKLSsg ICAgICAgIC8vLyAoZS5nLiBbIi9ldGMveXVtLnJlcG9zLmQiLCAiL3Vzci9zaGFyZS9kbmY1L3Jl cG9zLmQiXSkuCi0rICAgICAgICBmbiBnZXRfcmVwb3NfZGlycygpIC0+IFZlYzxTdHJpbmc+Owot KyAgICB9Ci0rCi0gICAgIC8vIHV0aWxzLnJzCi0gICAgIGV4dGVybiAiUnVzdCIgewotICAgICAg ICAgZm4gdmFyc3Vic3RpdHV0ZShzOiAmc3RyLCB2YXJzOiAmVmVjPFN0cmluZ01hcHBpbmc+KSAt PiBSZXN1bHQ8U3RyaW5nPjsKLWRpZmYgLS1naXQgYS9zcmMvZGFlbW9uL3JwbW9zdHJlZS1zeXNy b290LXVwZ3JhZGVyLmggYi9zcmMvZGFlbW9uL3JwbW9zdHJlZS1zeXNyb290LXVwZ3JhZGVyLmgK LWluZGV4IGI4ZjYwMjY4ZGUuLmU1NjQ2MDRlMDUgMTAwNjQ0Ci0tLS0gYS9zcmMvZGFlbW9uL3Jw bW9zdHJlZS1zeXNyb290LXVwZ3JhZGVyLmgKLSsrKyBiL3NyYy9kYWVtb24vcnBtb3N0cmVlLXN5 c3Jvb3QtdXBncmFkZXIuaAotQEAgLTY1LDcgKzY1LDcgQEAgdHlwZWRlZiBlbnVtCi0gCi0gLyog X05PTkUgbWVhbnMgd2UncmUgZG9pbmcgcHVyZSBvc3RyZWUsIG5vIGNsaWVudC1zaWRlIGNvbXB1 dGF0aW9uLgotICAqIF9MT0NBTCBpcyBqdXN0IGUuZy4gcnBtLW9zdHJlZSBpbml0cmFtZnMKLS0g KiBfUlBNTURfUkVQT1MgaXMgd2hlcmUgd2UncmUgZG93bmxvYWRpbmcgZGF0YSBmcm9tIC9ldGMv eXVtLnJlcG9zLmQKLSsgKiBfUlBNTURfUkVQT1MgaXMgd2hlcmUgd2UncmUgZG93bmxvYWRpbmcg ZGF0YSBmcm9tIHl1bS5yZXBvcy5kIC8gZG5mNSByZXBvcy5kCi0gICovCi0gdHlwZWRlZiBlbnVt Ci0gewotZGlmZiAtLWdpdCBhL3NyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmN4eCBiL3NyYy9s aWJwcml2L3JwbW9zdHJlZS1jb3JlLmN4eAotaW5kZXggZTk0NGQ5MDkxNi4uNDU1YzJkMGFhOCAx MDA2NDQKLS0tLSBhL3NyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmN4eAotKysrIGIvc3JjL2xp YnByaXYvcnBtb3N0cmVlLWNvcmUuY3h4Ci1AQCAtMTg2LDYgKzE4NiwyNSBAQCBzdGF0ZV9hY3Rp b25fY2hhbmdlZF9jYiAoRG5mU3RhdGUgKnN0YXRlLCBEbmZTdGF0ZUFjdGlvbiBhY3Rpb24sIGNv bnN0IGdjaGFyICphYwotICAgICB9Ci0gfQotIAotKy8qIEJ1aWxkIGEgTlVMTC10ZXJtaW5hdGVk IGFycmF5IG9mIHJlcG8gY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcywKLSsgKiB1c2luZyB0aGUg Y2Fub25pY2FsIGxpc3QgZnJvbSBSdXN0LiBJZiBAcm9vdCBpcyBub24tTlVMTCwgZWFjaAotKyAq IHBhdGggaXMgcHJlZml4ZWQgd2l0aCBpdCAoZm9yIGRlcGxveW1lbnQvc291cmNlIHJvb3QgY29u dGV4dHMpLgotKyAqLwotK3N0YXRpYyBHU3RydgotK2J1aWxkX3JlcG9zX2RpcnMgKGNvbnN0IGNo YXIgKnJvb3QpCi0rewotKyAgYXV0byBkaXJzID0gcnBtb3N0cmVlY3h4OjpnZXRfcmVwb3NfZGly cyAoKTsKLSsgIGF1dG8gcmV0ID0gZ19uZXcwIChnY2hhciAqLCBkaXJzLnNpemUgKCkgKyAxKTsK LSsgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGlycy5zaXplICgpOyBpKyspCi0rICAgIHsKLSsg ICAgICBpZiAocm9vdCkKLSsgICAgICAgIHJldFtpXSA9IGdfYnVpbGRfZmlsZW5hbWUgKHJvb3Qs IGRpcnNbaV0uY19zdHIgKCksIE5VTEwpOwotKyAgICAgIGVsc2UKLSsgICAgICAgIHJldFtpXSA9 IGdfc3RyZHVwIChkaXJzW2ldLmNfc3RyICgpKTsKLSsgICAgfQotKyAgcmV0dXJuIHJldDsKLSt9 Ci0rCi0gLyogTG93IGxldmVsIEFQSSB0byBjcmVhdGUgYSBjb250ZXh0LiAgQXZvaWQgdGhpcyBp biBwcmVmZXJlbmNlCi0gICogdG8gY3JlYXRpbmcgYSBjbGllbnQgb3IgY29tcG9zZSBjb250ZXh0 IHVubGVzcyBuZWNlc3NhcnkuCi0gICovCi1AQCAtMjA2LDcgKzIyNSwxMyBAQCBycG1vc3RyZWVf Y29udGV4dF9uZXdfYmFzZSAoT3N0cmVlUmVwbyAqcmVwbykKLSAgIHNlbGYtPmRuZmN0eCA9IGRu Zl9jb250ZXh0X25ldyAoKTsKLSAgIGRuZl9jb250ZXh0X3NldF9odHRwX3Byb3h5IChzZWxmLT5k bmZjdHgsIGdfZ2V0ZW52ICgiaHR0cF9wcm94eSIpKTsKLSAKLS0gIGRuZl9jb250ZXh0X3NldF9y ZXBvX2RpciAoc2VsZi0+ZG5mY3R4LCAiL2V0Yy95dW0ucmVwb3MuZCIpOwotKyAgLyogU2V0IHJl cG8gY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcyB1c2luZyB0aGUgY2Fub25pY2FsIGxpc3QgZnJv bSBSdXN0LgotKyAgICogVGhlIHJlcG8gbG9hZGVyIGdyYWNlZnVsbHkgc2tpcHMgbm9uLWV4aXN0 ZW50IGRpcmVjdG9yaWVzLgotKyAgICovCi0rICB7Ci0rICAgIGdfYXV0byAoR1N0cnYpIHJlcG9z X2RpcnMgPSBidWlsZF9yZXBvc19kaXJzIChOVUxMKTsKLSsgICAgZG5mX2NvbnRleHRfc2V0X3Jl cG9zX2RpciAoc2VsZi0+ZG5mY3R4LCAoY29uc3QgZ2NoYXIgKmNvbnN0ICopcmVwb3NfZGlycyk7 Ci0rICB9Ci0gICBkbmZfY29udGV4dF9zZXRfY2FjaGVfZGlyIChzZWxmLT5kbmZjdHgsIFJQTU9T VFJFRV9DT1JFX0NBQ0hFRElSIFJQTU9TVFJFRV9ESVJfQ0FDSEVfUkVQT01EKTsKLSAgIGRuZl9j b250ZXh0X3NldF9zb2x2X2RpciAoc2VsZi0+ZG5mY3R4LCBSUE1PU1RSRUVfQ09SRV9DQUNIRURJ UiBSUE1PU1RSRUVfRElSX0NBQ0hFX1NPTFYpOwotICAgZG5mX2NvbnRleHRfc2V0X2xvY2tfZGly IChzZWxmLT5kbmZjdHgsICIvcnVuL3JwbS1vc3RyZWUvIiBSUE1PU1RSRUVfRElSX0xPQ0spOwot QEAgLTM1NywxNiArMzgyLDI2IEBAIHJwbW9zdHJlZV9jb250ZXh0X3NldF9yZXBvc19kaXIgKFJw bU9zdHJlZUNvbnRleHQgKnNlbGYsIGNvbnN0IGNoYXIgKnJlcG9zZGlyKQotICAgZ19kZWJ1ZyAo InNldCBvdmVycmlkZSBmb3IgcmVwb3MgZGlyIik7Ci0gfQotIAotKy8vIFNhbWUgYXMgYWJvdmUg YnV0IHVzaW5nIHRoZSBtdWx0aS1kaXJlY3RvcnkgdmFyaWFudCB0byBhbGxvdyBzZXR0aW5nCi0r Ly8gbXVsdGlwbGUgcmVwb3MgZGlycyAoZS5nLiBib3RoIC9ldGMveXVtLnJlcG9zLmQgYW5kIC91 c3Ivc2hhcmUvZG5mNS9yZXBvcy5kKS4KLSt2b2lkCi0rcnBtb3N0cmVlX2NvbnRleHRfc2V0X3Jl cG9zX2RpcnMgKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbnN0ICpyZXBv c2RpcnMpCi0rewotKyAgZG5mX2NvbnRleHRfc2V0X3JlcG9zX2RpciAoc2VsZi0+ZG5mY3R4LCBy ZXBvc2RpcnMpOwotKyAgc2VsZi0+cmVwb3NfZGlyX2NvbmZpZ3VyZWQgPSBUUlVFOwotKyAgZ19k ZWJ1ZyAoInNldCBvdmVycmlkZSBmb3IgcmVwb3MgZGlycyAobXVsdGkpIik7Ci0rfQotKwotIC8q IFBpY2sgdXAgcmVwb3MgZGlyIGFuZCBwYXNzd2QgZnJvbSBAY2ZnX2RlcGxveW1lbnQuICovCi0g dm9pZAotIHJwbW9zdHJlZV9jb250ZXh0X2NvbmZpZ3VyZV9mcm9tX2RlcGxveW1lbnQgKFJwbU9z dHJlZUNvbnRleHQgKnNlbGYsIE9zdHJlZVN5c3Jvb3QgKnN5c3Jvb3QsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3N0cmVlRGVwbG95bWVudCAqY2ZnX2Rl cGxveW1lbnQpCi0gewotICAgZ19hdXRvZnJlZSBjaGFyICpjZmdfZGVwbG95bWVudF9yb290ID0g cnBtb3N0cmVlX2dldF9kZXBsb3ltZW50X3Jvb3QgKHN5c3Jvb3QsIGNmZ19kZXBsb3ltZW50KTsK LS0gIGdfYXV0b2ZyZWUgY2hhciAqcmVwb3NkaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChjZmdfZGVw bG95bWVudF9yb290LCAiZXRjL3l1bS5yZXBvcy5kIiwgTlVMTCk7Ci0gCi0tICAvKiBwb2ludCBs aWJoaWYgdG8gdGhlIHl1bS5yZXBvcy5kIGFuZCBvcy1yZWxlYXNlIG9mIHRoZSBtZXJnZSBkZXBs b3ltZW50ICovCi0tICBycG1vc3RyZWVfY29udGV4dF9zZXRfcmVwb3NfZGlyIChzZWxmLCByZXBv c2Rpcik7Ci0rICAvKiBQb2ludCBsaWJkbmYgdG8gcmVwbyBjb25maWcgZGlycyB1bmRlciB0aGUg bWVyZ2UgZGVwbG95bWVudC4gKi8KLSsgIGdfYXV0byAoR1N0cnYpIHJlcG9zX2RpcnMgPSBidWls ZF9yZXBvc19kaXJzIChjZmdfZGVwbG95bWVudF9yb290KTsKLSsgIHJwbW9zdHJlZV9jb250ZXh0 X3NldF9yZXBvc19kaXJzIChzZWxmLCAoY29uc3QgZ2NoYXIgKmNvbnN0ICopcmVwb3NfZGlycyk7 Ci0gCi0gICAvKiBwb2ludCB0aGUgY29yZSB0byB0aGUgcGFzc3dkICYgZ3JvdXAgb2YgdGhlIG1l cmdlIGRlcGxveW1lbnQgKi8KLSAgIGdfYXNzZXJ0ICghc2VsZi0+cGFzc3dkX2Rpcik7Ci1AQCAt Njk0LDkgKzcyOSw5IEBAIHJwbW9zdHJlZV9jb250ZXh0X3NldHVwIChScG1Pc3RyZWVDb250ZXh0 ICpzZWxmLCBjb25zdCBjaGFyICppbnN0YWxsX3Jvb3QsIGNvbnN0Ci0gICAgICAgLy8gb3ZlcnJv ZGUgdGhlIHJlcG9zIGRpci4KLSAgICAgICBpZiAoIXNlbGYtPnJlcG9zX2Rpcl9jb25maWd1cmVk KQotICAgICAgICAgewotLSAgICAgICAgICBnX2F1dG9mcmVlIGNoYXIgKnNvdXJjZV9yZXBvcyA9 IGdfYnVpbGRfZmlsZW5hbWUgKHNvdXJjZV9yb290LCAiZXRjL3l1bS5yZXBvcy5kIiwgTlVMTCk7 Ci0tICAgICAgICAgIGRuZl9jb250ZXh0X3NldF9yZXBvX2RpciAoc2VsZi0+ZG5mY3R4LCBzb3Vy Y2VfcmVwb3MpOwotLSAgICAgICAgICBnX2RlYnVnICgiU2V0IHJlcG9zIGRpciBmcm9tIHNvdXJj ZSByb290Iik7Ci0rICAgICAgICAgIGdfYXV0byAoR1N0cnYpIHJlcG9zX2RpcnMgPSBidWlsZF9y ZXBvc19kaXJzIChzb3VyY2Vfcm9vdCk7Ci0rICAgICAgICAgIGRuZl9jb250ZXh0X3NldF9yZXBv c19kaXIgKHNlbGYtPmRuZmN0eCwgKGNvbnN0IGdjaGFyICpjb25zdCAqKXJlcG9zX2RpcnMpOwot KyAgICAgICAgICBnX2RlYnVnICgiU2V0IHJlcG9zIGRpcnMgZnJvbSBzb3VyY2Ugcm9vdCIpOwot ICAgICAgICAgfQotICAgICB9Ci0gCi1AQCAtMjM3MCw4ICsyNDA1LDEwIEBAIHJwbW9zdHJlZV9m aW5kX2FuZF9kb3dubG9hZF9wYWNrYWdlcyAoY29uc3QgY2hhciAqY29uc3QgKnBhY2thZ2VzLCBj b25zdCBjaGFyICpzCi0gICBpZiAoIXJwbW9zdHJlZV9jb250ZXh0X3NldHVwIChjdHgsIE5VTEws IHNvdXJjZV9yb290LCBjYW5jZWxsYWJsZSwgZXJyb3IpKQotICAgICByZXR1cm4gZ2xueF9wcmVm aXhfZXJyb3IgKGVycm9yLCAiU2V0dGluZyB1cCBkbmYgY29udGV4dCIpOwotIAotLSAgZ19hdXRv ZnJlZSBjaGFyICpyZXBvc2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKHJlcG9fcm9vdCA/OiBzb3Vy Y2Vfcm9vdCwgImV0Yy95dW0ucmVwb3MuZCIsIE5VTEwpOwotLSAgZG5mX2NvbnRleHRfc2V0X3Jl cG9fZGlyIChjdHgtPmRuZmN0eCwgcmVwb3NkaXIpOwotKyAgewotKyAgICBnX2F1dG8gKEdTdHJ2 KSByZXBvc19kaXJzID0gYnVpbGRfcmVwb3NfZGlycyAocmVwb19yb290ID86IHNvdXJjZV9yb290 KTsKLSsgICAgZG5mX2NvbnRleHRfc2V0X3JlcG9zX2RpciAoY3R4LT5kbmZjdHgsIChjb25zdCBn Y2hhciAqY29uc3QgKilyZXBvc19kaXJzKTsKLSsgIH0KLSAKLSAgIGF1dG8gZmxhZ3MgPSAoRG5m Q29udGV4dFNldHVwU2Fja0ZsYWdzKShETkZfQ09OVEVYVF9TRVRVUF9TQUNLX0ZMQUdfU0tJUF9S UE1EQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRE5GX0NP TlRFWFRfU0VUVVBfU0FDS19GTEFHX1NLSVBfRklMRUxJU1RTKTsKLWRpZmYgLS1naXQgYS9zcmMv bGlicHJpdi9ycG1vc3RyZWUtY29yZS5oIGIvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuaAot aW5kZXggNzJlY2VjYjVhZC4uZDc0MzAwY2RhMSAxMDA2NDQKLS0tLSBhL3NyYy9saWJwcml2L3Jw bW9zdHJlZS1jb3JlLmgKLSsrKyBiL3NyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmgKLUBAIC0x MTQsNiArMTE0LDcgQEAgdm9pZCBycG1vc3RyZWVfY29udGV4dF9kaXNhYmxlX3NlbGludXggKFJw bU9zdHJlZUNvbnRleHQgKnNlbGYpOwotIGNvbnN0IGNoYXIgKnJwbW9zdHJlZV9jb250ZXh0X2dl dF9yZWYgKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYpOwotIAotIHZvaWQgcnBtb3N0cmVlX2NvbnRl eHRfc2V0X3JlcG9zX2RpciAoUnBtT3N0cmVlQ29udGV4dCAqc2VsZiwgY29uc3QgY2hhciAqcmVw b3NkaXIpOwotK3ZvaWQgcnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9zX2RpcnMgKFJwbU9zdHJl ZUNvbnRleHQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbnN0ICpyZXBvc2RpcnMpOwotIAotIHZvaWQg cnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9zIChScG1Pc3RyZWVDb250ZXh0ICpzZWxmLCBPc3Ry ZWVSZXBvICpiYXNlX3JlcG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9z dHJlZVJlcG8gKnBrZ2NhY2hlX3JlcG8pOwotZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbW1vbi9saWJ0 ZXN0cmVwb3Muc2ggYi90ZXN0cy9jb21tb24vbGlidGVzdHJlcG9zLnNoCi1pbmRleCA5ZTcwYWFk YzNiLi4yYzNlZjMzNmRkIDEwMDY0NAotLS0tIGEvdGVzdHMvY29tbW9uL2xpYnRlc3RyZXBvcy5z aAotKysrIGIvdGVzdHMvY29tbW9uL2xpYnRlc3RyZXBvcy5zaAotQEAgLTIwLDcgKzIwLDEzIEBA Ci0gc2V0dXBfcnBtbWRfcmVwb3MoKSB7Ci0gICAgIGRlc3Q9JDEKLSAgICAgc2hpZnQKLS0gICAg cmVwb3M9JHtSUE1PU1RSRUVfQ09NUE9TRV9URVNUX1VTRV9SRVBPUzotL2V0Yy95dW0ucmVwb3Mu ZH0KLSsgICAgaWYgWyAtbiAiJHtSUE1PU1RSRUVfQ09NUE9TRV9URVNUX1VTRV9SRVBPUzotfSIg XTsgdGhlbgotKyAgICAgICAgcmVwb3M9JHtSUE1PU1RSRUVfQ09NUE9TRV9URVNUX1VTRV9SRVBP U30KLSsgICAgZWxpZiBbIC1kIC91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIF07IHRoZW4KLSsgICAg ICAgIHJlcG9zPS91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kCi0rICAgIGVsc2UKLSsgICAgICAgIHJl cG9zPS9ldGMveXVtLnJlcG9zLmQKLSsgICAgZmkKLSAgICAgZm9yIHggaW4gJHtyZXBvc30vZmVk b3JheywtdXBkYXRlc30ucmVwbzsgZG8KLSAgICAgICAgIGJuPSQoYmFzZW5hbWUgJHt4fSkKLSAg ICAgICAgIGNwICR4ICR7ZGVzdH0vJHtibn0KLWRpZmYgLS1naXQgYS90ZXN0cy9jb21wb3NlLWlt YWdlLnNoIGIvdGVzdHMvY29tcG9zZS1pbWFnZS5zaAotaW5kZXggNTBhZDI3MTRhZS4uMzQxMjYw NmE4NiAxMDA3NTUKLS0tLSBhL3Rlc3RzL2NvbXBvc2UtaW1hZ2Uuc2gKLSsrKyBiL3Rlc3RzL2Nv bXBvc2UtaW1hZ2Uuc2gKLUBAIC01OSw3ICs1OSwxMCBAQCAke3N5c3RlbWRfc3lzdXNlcnN9Ci0g cmVwb3M6Ci0gICAtIGZlZG9yYSAgIyBJbnRlbnRpYWxseSB1c2luZyBmcm96ZW4gR0EgcmVwbwot IEVPRgotLWNwIC9ldGMveXVtLnJlcG9zLmQvKi5yZXBvIC4KLSsjIENvcHkgcmVwbyBmaWxlcyBm cm9tIHdoaWNoZXZlciBsb2NhdGlvbiBleGlzdHMKLStmb3IgZCBpbiAvdXNyL3NoYXJlL2RuZjUv cmVwb3MuZCAvZXRjL3l1bS5yZXBvcy5kOyBkbwotKyAgdGVzdCAtZCAiJGQiICYmIGNwICIkZCIv Ki5yZXBvIC4gMj4vZGV2L251bGwgfHwgdHJ1ZQotK2RvbmUKLSBpZiBycG0tb3N0cmVlIGNvbXBv c2UgaW1hZ2UgLS1jYWNoZWRpcj0uLi9jYWNoZS1jb250YWluZXIgLS1sYWJlbD1mb289YmFyIC0t bGFiZWw9YmF6PWJsYWggLS1pbml0aWFsaXplLW1vZGU9bmV2ZXIgbWluaW1hbC55YW1sIG1pbmlt YWwub2NpYXJjaGl2ZSAyPi9kZXYvbnVsbDsgdGhlbgotICAgZmF0YWwgImJ1aWx0IGFuIGltYWdl IGluIC0taW5pdGlhbGl6ZS1tb2RlPW5ldmVyIgotIGZpCi1AQCAtOTAsNyArOTMsMTAgQEAgcGFj a2FnZXM6Ci0gcmVwb3M6Ci0gICAtIGZlZG9yYSAgIyBJbnRlbnRpYWxseSB1c2luZyBmcm96ZW4g R0EgcmVwbwotIEVPRgotLWNwIC9ldGMveXVtLnJlcG9zLmQvKi5yZXBvIC4KLSsjIENvcHkgcmVw byBmaWxlcyBmcm9tIHdoaWNoZXZlciBsb2NhdGlvbiBleGlzdHMKLStmb3IgZCBpbiAvdXNyL3No YXJlL2RuZjUvcmVwb3MuZCAvZXRjL3l1bS5yZXBvcy5kOyBkbwotKyAgdGVzdCAtZCAiJGQiICYm IGNwICIkZCIvKi5yZXBvIC4gMj4vZGV2L251bGwgfHwgdHJ1ZQotK2RvbmUKLSAjIFVuZm9ydHVu YXRlbHksIC0taW5pdGlhbGl6ZS1tb2RlPWlmLW5vdC1leGlzdHMgaXMgYnJva2VuIHdpdGggLm9j aWFyY2hpdmUuLi4KLSBycG0tb3N0cmVlIGNvbXBvc2UgaW1hZ2UgLS1jYWNoZWRpcj0uLi9jYWNo ZSAtLXRvdWNoLWlmLWNoYW5nZWQ9Y2hhbmdlZC5zdGFtcCAtLWluaXRpYWxpemUtbW9kZT1hbHdh eXMgbWluaW1hbC55YW1sIG1pbmltYWwub2NpYXJjaGl2ZQotICMgVE9ETyBhY3R1YWxseSB0ZXN0 IHRoaXMgY29udGFpbmVyIGltYWdlCgpkaWZmIC0tZ2l0IGEvcnBtLW9zdHJlZS5zcGVjIGIvcnBt LW9zdHJlZS5zcGVjCmluZGV4IDQyMGY0N2EuLjdmOGU2MzQgMTAwNjQ0Ci0tLSBhL3JwbS1vc3Ry ZWUuc3BlYworKysgYi9ycG0tb3N0cmVlLnNwZWMKQEAgLTMsNyArMyw3IEBACiAKIFN1bW1hcnk6 IEh5YnJpZCBpbWFnZS9wYWNrYWdlIHN5c3RlbQogTmFtZTogcnBtLW9zdHJlZQotVmVyc2lvbjog MjAyNi4yCitWZXJzaW9uOiAyMDI2LjMKIFJlbGVhc2U6ICV7YXV0b3JlbGVhc2V9CiBMaWNlbnNl OiBMR1BMLTIuMC1vci1sYXRlcgogVVJMOiBodHRwczovL2dpdGh1Yi5jb20vY29yZW9zL3JwbS1v c3RyZWUKQEAgLTExLDE2ICsxMSw2IEBAIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL2NvcmVvcy9y cG0tb3N0cmVlCiAjIGluIHRoZSB1cHN0cmVhbSBnaXQuICBJdCBhbHNvIGNvbnRhaW5zIHZlbmRv cmVkIFJ1c3Qgc291cmNlcy4KIFNvdXJjZTA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb3Jlb3MvcnBt LW9zdHJlZS9yZWxlYXNlcy9kb3dubG9hZC92JXt2ZXJzaW9ufS9ycG0tb3N0cmVlLSV7dmVyc2lv bn0udGFyLnh6CiAKLSMgU3VwcG9ydCByZWxvY2F0ZWQgcmVwbyBjb25maWdzIGFuZCBHUEcga2V5 cyAoRmVkb3JhIDQ1KykgLSAjNTYyNAotIyBNYWluIGNvbW1pdCBmcm9tIGh0dHBzOi8vZ2l0aHVi LmNvbS9jb3Jlb3MvcnBtLW9zdHJlZS9wdWxsLzU2MjQKLSMgU2Vjb25kIGNvbW1pdCBpcyBhIHN1 YnByb2plY3QgdXBkYXRlIHRoYXQgY2Fubm90IGFwcGx5LCBpbnN0ZWFkCi0jIHdlIGhhdmUgdGhl IG5leHQgcGF0Y2gKLVBhdGNoOiAyZDE3N2RmZDY2YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5YWE4 MTU0LnBhdGNoCi0jIGtleXJpbmc6IEFsc28gc2VhcmNoIC91c3Ivc2hhcmUvcGtpL3JwbS1ncGcg Zm9yIEdQRyBrZXlzCi0jIGh0dHBzOi8vZ2l0aHViLmNvbS9ycG0tc29mdHdhcmUtbWFuYWdlbWVu dC9saWJkbmYvY29tbWl0L2E4ZTlmY2M1YzViODBmZTI1ZTcyNWQwMjhlOWY5YjgwOGNiMDI3M2YK LSMgZWRpdGVkIHRvIGFwcGx5IHRvIHRoZSBycG0tb3N0cmVlJ3MgYnVuZGxlZCBsaWJkbmYgKGp1 c3QgYWRkZWQgb25lIGV4dHJhIGxpYmRuZi8pCi1QYXRjaDogMDAwMS1rZXlyaW5nLUFsc28tc2Vh cmNoLXVzci1zaGFyZS1wa2ktcnBtLWdwZy1mb3ItR1BHLWtlLnBhdGNoCi0KICMgU2VlIGh0dHBz Oi8vZ2l0aHViLmNvbS9jb3Jlb3MvZmVkb3JhLWNvcmVvcy10cmFja2VyL2lzc3Vlcy8xNzE2CiAj IG9zdHJlZSBub3Qgb24gaTY4NiBmb3IgUkhFTCAxMAogIyBodHRwczovL2dpdGh1Yi5jb20vY29u dGFpbmVycy9jb21wb3NlZnMvcHVsbC8yMjkjaXNzdWVjb21tZW50LTE4Mzg3MzU3NjQKCmRpZmYg LS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRleCBiNTU1ZmQ3Li4wZmZkYTA3IDEwMDY0NAot LS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEgKzEgQEAKLVNIQTUxMiAocnBtLW9zdHJl ZS0yMDI2LjIudGFyLnh6KSA9IDFiMWVkNDNjZmYxNThiYjUxMjEyMDJkNmRmZGYxNzY4YmM0ZWUy ZDcxNzQ1NzNmMjAxOTlmOGE0MTQ4ZDM3NzVlOGNlYmRlNjRlNjMzMGYzZmEzZWQ5MDVmODY1YmZj OWE4ZjNiYTE2YWMxNGQ5NjRmNDNhMDE2MTM4ZjcyMjVkCitTSEE1MTIgKHJwbS1vc3RyZWUtMjAy Ni4zLnRhci54eikgPSAzNDU4NmEzZTFmZjlhY2M4OGNhNjJlNTY1MGNhMzBmY2ZlNTgyNWI2NjA5 ZWYzNmQ5YzYwMWQ1NThjYTk0NjhhMjk1MjI0YWJjMzUyMDEzNWZiMzgwNWZjYjg2MGVkYjI1Yjhh OTY4OWY1NmNhZjQ5ZDFkZjk1NTk0MjUzMThlNQo=