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: Adam Williamson To: git-commits@fedoraproject.org Subject: [rpms/rpm-ostree] f45: Backport PR #5624 to support relocated repo configs and GPG keys Date: Thu, 20 Aug 2026 17:42:13 GMT Message-ID: <178724773337.1.11121021049802177136.rpms-rpm-ostree-aa42a01c9894@fedoraproject.org> List-ID: X-Git-Repo: rpms/rpm-ostree X-Git-Branch: f45 X-Git-Rev: aa42a01c98949b554b3179ab292c73d1528cab8b ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvcnBtLW9zdHJlZQogICAgICAgICAgICBCcmFuY2ggOiBmNDUKICAgICAgICAg ICAgQ29tbWl0IDogYWE0MmEwMWM5ODk0OWI1NTRiMzE3OWFiMjkyYzczZDE1MjhjYWI4YgogICAg ICAgICAgICBBdXRob3IgOiBBZGFtIFdpbGxpYW1zb24gPGF3aWxsaWFtQHJlZGhhdC5jb20+CiAg ICAgICAgICAgIERhdGUgICA6IDIwMjYtMDgtMjBUMTA6MzA6MDAtMDc6MDAKICAgICAgICAgICAg U3RhdHMgIDogKzEzNDQzLy0wIGluIDMgZmlsZShzKQogICAgICAgICAgICBVUkwgICAgOiBodHRw czovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL3JwbS1vc3RyZWUvYy9hYTQyYTAxYzk4OTQ5 YjU1NGIzMTc5YWIyOTJjNzNkMTUyOGNhYjhiP2JyYW5jaD1mNDUKCiAgICAgICAgICAgIExvZzoK ICAgICAgICAgICAgQmFja3BvcnQgUFIgIzU2MjQgdG8gc3VwcG9ydCByZWxvY2F0ZWQgcmVwbyBj b25maWdzIGFuZCBHUEcga2V5cwoKVGhlIHJlcXVpcmVkIGNoYW5nZSB0byB0aGUgYnVuZGxlZCBs aWJkbmYgaXMgaW5jbHVkZWQgYXMgYQpzbGlnaHRseS1tb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSB1 cHN0cmVhbSBjb21taXQuCgotLS0KZGlmZiAtLWdpdCBhLzAwMDEta2V5cmluZy1BbHNvLXNlYXJj aC11c3Itc2hhcmUtcGtpLXJwbS1ncGctZm9yLUdQRy1rZS5wYXRjaCBiLzAwMDEta2V5cmluZy1B bHNvLXNlYXJjaC11c3Itc2hhcmUtcGtpLXJwbS1ncGctZm9yLUdQRy1rZS5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzUxODVhCi0tLSAvZGV2L251bGwKKysrIGIv MDAwMS1rZXlyaW5nLUFsc28tc2VhcmNoLXVzci1zaGFyZS1wa2ktcnBtLWdwZy1mb3ItR1BHLWtl LnBhdGNoCkBAIC0wLDAgKzEsOTAgQEAKK0Zyb20gYThlOWZjYzVjNWI4MGZlMjVlNzI1ZDAyOGU5 ZjliODA4Y2IwMjczZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvc2VwaCBNYXJy ZXJvIENvcmNoYWRvIDxqbWFycmVyb0ByZWRoYXQuY29tPgorRGF0ZTogV2VkLCAxOSBBdWcgMjAy NiAxNzoxMDo0MyAtMDQwMAorU3ViamVjdDogW1BBVENIXSBrZXlyaW5nOiBBbHNvIHNlYXJjaCAv dXNyL3NoYXJlL3BraS9ycG0tZ3BnIGZvciBHUEcga2V5cworCitTZWFyY2ggYm90aCAvZXRjL3Br aS9ycG0tZ3BnICh1c2VyLWFkZGVkIGtleXMpIGFuZCAvdXNyL3NoYXJlL3BraS9ycG0tZ3BnCiso ZGlzdHJpYnV0aW9uLXByb3ZpZGVkIGtleXMpIHNvIHRoYXQgR1BHIHNpZ25hdHVyZSB2ZXJpZmlj YXRpb24gd29ya3MKK3JlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIGtleXMgYXJlIGluc3RhbGxlZC4K KworQ28tYXV0aG9yZWQtYnk6IEFkYW0gV2lsbGlhbXNvbiA8YXdpbGxpYW1AcmVkaGF0LmNvbT4K K0Fzc2lzdGVkLWJ5OiBBSQorLS0tCisgbGliZG5mL2xpYmRuZi9kbmYta2V5cmluZy5jcHAgfCA1 OSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hh bmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9s aWJkbmYvbGliZG5mL2RuZi1rZXlyaW5nLmNwcCBiL2xpYmRuZi9saWJkbmYvZG5mLWtleXJpbmcu Y3BwCitpbmRleCAyZTM4ZWZkZC4uYTcyNWRlYmEgMTAwNjQ0CistLS0gYS9saWJkbmYvbGliZG5m L2RuZi1rZXlyaW5nLmNwcAorKysrIGIvbGliZG5mL2xpYmRuZi9kbmYta2V5cmluZy5jcHAKK0BA IC0zNDUsMzQgKzM0NSw0MSBAQCBvdXQ6CisgZ2Jvb2xlYW4KKyBkbmZfa2V5cmluZ19hZGRfcHVi bGljX2tleXMocnBtS2V5cmluZyBrZXlyaW5nLCBHRXJyb3IgKiplcnJvcikgdHJ5CisgeworLSAg ICBjb25zdCBnY2hhciAqZ3BnX2RpciA9ICIvZXRjL3BraS9ycG0tZ3BnIjsKKy0gICAgZ2Jvb2xl YW4gcmV0ID0gVFJVRTsKKy0gICAgZ19hdXRvcHRyKEdEaXIpIGRpciA9IE5VTEw7CistICAgIEdF cnJvciAqbG9jYWxFcnJvciA9IE5VTEw7CistCistICAgIC8qIHNlYXJjaCBhbGwgdGhlIHB1Ymxp YyBrZXkgZmlsZXMgKi8KKy0gICAgZGlyID0gZ19kaXJfb3BlbihncGdfZGlyLCAwLCAmbG9jYWxF cnJvcik7CistICAgIGlmIChkaXIgPT0gTlVMTCkgeworLSAgICAgICAgaWYgKGxvY2FsRXJyb3It PmRvbWFpbiAhPSBHX0ZJTEVfRVJST1IgfHwgbG9jYWxFcnJvci0+Y29kZSAhPSBHX0ZJTEVfRVJS T1JfTk9FTlQpIHsKKy0gICAgICAgICAgICBnX3dhcm5pbmcoIiVzIiwgbG9jYWxFcnJvci0+bWVz c2FnZSk7CistICAgICAgICB9CistICAgICAgICBnX2Vycm9yX2ZyZWUobG9jYWxFcnJvcik7Cist ICAgICAgICByZXR1cm4gVFJVRTsKKy0gICAgfQorLSAgICBkbyB7CistICAgICAgICBjb25zdCBn Y2hhciAqZmlsZW5hbWU7CistICAgICAgICBnX2F1dG9mcmVlIGdjaGFyICpwYXRoX3RtcCA9IE5V TEw7CistICAgICAgICBmaWxlbmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpOworLSAgICAgICAg aWYgKGZpbGVuYW1lID09IE5VTEwpCistICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBwYXRo X3RtcCA9IGdfYnVpbGRfZmlsZW5hbWUoZ3BnX2RpciwgZmlsZW5hbWUsIE5VTEwpOworLSAgICAg ICAgcmV0ID0gZG5mX2tleXJpbmdfYWRkX3B1YmxpY19rZXkoa2V5cmluZywgcGF0aF90bXAsICZs b2NhbEVycm9yKTsKKy0gICAgICAgIGlmICghcmV0KSB7CistICAgICAgICAgICAgZ193YXJuaW5n KCIlcyIsIGxvY2FsRXJyb3ItPm1lc3NhZ2UpOworKyAgICAvKiBTZWFyY2ggYm90aCBHUEcga2V5 IGxvY2F0aW9uczogL2V0Yy9wa2kvcnBtLWdwZyBmb3IgdXNlci1hZGRlZCBrZXlzCisrICAgICAq IGFuZCAvdXNyL3NoYXJlL3BraS9ycG0tZ3BnIGZvciBkaXN0cmlidXRpb24tcHJvdmlkZWQga2V5 cy4KKysgICAgICovCisrICAgIGNvbnN0IGdjaGFyICpncGdfZGlyc1tdID0geyAiL2V0Yy9wa2kv cnBtLWdwZyIsICIvdXNyL3NoYXJlL3BraS9ycG0tZ3BnIiwgTlVMTCB9OworKworKyAgICBmb3Ig KGNvbnN0IGdjaGFyICoqZ3BnX2Rpcl9wID0gZ3BnX2RpcnM7ICpncGdfZGlyX3AgIT0gTlVMTDsg Z3BnX2Rpcl9wKyspIHsKKysgICAgICAgIGNvbnN0IGdjaGFyICpncGdfZGlyID0gKmdwZ19kaXJf cDsKKysgICAgICAgIGdib29sZWFuIHJldCA9IFRSVUU7CisrICAgICAgICBnX2F1dG9wdHIoR0Rp cikgZGlyID0gTlVMTDsKKysgICAgICAgIEdFcnJvciAqbG9jYWxFcnJvciA9IE5VTEw7CisrCisr ICAgICAgICAvKiBzZWFyY2ggYWxsIHRoZSBwdWJsaWMga2V5IGZpbGVzICovCisrICAgICAgICBk aXIgPSBnX2Rpcl9vcGVuKGdwZ19kaXIsIDAsICZsb2NhbEVycm9yKTsKKysgICAgICAgIGlmIChk aXIgPT0gTlVMTCkgeworKyAgICAgICAgICAgIGlmIChsb2NhbEVycm9yLT5kb21haW4gIT0gR19G SUxFX0VSUk9SIHx8IGxvY2FsRXJyb3ItPmNvZGUgIT0gR19GSUxFX0VSUk9SX05PRU5UKSB7Cisr ICAgICAgICAgICAgICAgIGdfd2FybmluZygiJXMiLCBsb2NhbEVycm9yLT5tZXNzYWdlKTsKKysg ICAgICAgICAgICB9CisgICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGxvY2FsRXJyb3IpOworLSAg ICAgICAgICAgIGxvY2FsRXJyb3IgPSBOVUxMOworKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICAgfQorLSAgICB9IHdoaWxlICh0cnVlKTsKKysgICAgICAgIGRvIHsKKysgICAgICAgICAg ICBjb25zdCBnY2hhciAqZmlsZW5hbWU7CisrICAgICAgICAgICAgZ19hdXRvZnJlZSBnY2hhciAq cGF0aF90bXAgPSBOVUxMOworKyAgICAgICAgICAgIGZpbGVuYW1lID0gZ19kaXJfcmVhZF9uYW1l KGRpcik7CisrICAgICAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisrICAgICAgICAgICAg ICAgIGJyZWFrOworKyAgICAgICAgICAgIHBhdGhfdG1wID0gZ19idWlsZF9maWxlbmFtZShncGdf ZGlyLCBmaWxlbmFtZSwgTlVMTCk7CisrICAgICAgICAgICAgcmV0ID0gZG5mX2tleXJpbmdfYWRk X3B1YmxpY19rZXkoa2V5cmluZywgcGF0aF90bXAsICZsb2NhbEVycm9yKTsKKysgICAgICAgICAg ICBpZiAoIXJldCkgeworKyAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIiVzIiwgbG9jYWxFcnJv ci0+bWVzc2FnZSk7CisrICAgICAgICAgICAgICAgIGdfZXJyb3JfZnJlZShsb2NhbEVycm9yKTsK KysgICAgICAgICAgICAgICAgbG9jYWxFcnJvciA9IE5VTEw7CisrICAgICAgICAgICAgfQorKyAg ICAgICAgfSB3aGlsZSAodHJ1ZSk7CisrICAgIH0KKyAgICAgcmV0dXJuIFRSVUU7CisgfSBDQVRD SF9UT19HRVJST1IoRkFMU0UpCisgCistLSAKKzIuNTUuMAorCgpkaWZmIC0tZ2l0IGEvMmQxNzdk ZmQ2NmFiNDVhZTI3NjYxYTA4OTlmMGM2NGQ0OWFhODE1NC5wYXRjaCBiLzJkMTc3ZGZkNjZhYjQ1 YWUyNzY2MWEwODk5ZjBjNjRkNDlhYTgxNTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMjE0NDQ3ZAotLS0gL2Rldi9udWxsCisrKyBiLzJkMTc3ZGZkNjZhYjQ1YWUy NzY2MWEwODk5ZjBjNjRkNDlhYTgxNTQucGF0Y2gKQEAgLTAsMCArMSwxMzM0MyBAQAorRnJvbSAy ZDE3N2RmZDY2YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5YWE4MTU0IE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQorRnJvbTogSm9zZXBoIE1hcnJlcm8gQ29yY2hhZG8gPGptYXJyZXJvQHJlZGhhdC5j b20+CitEYXRlOiBXZWQsIDE5IEF1ZyAyMDI2IDIyOjUzOjIyIC0wNDAwCitTdWJqZWN0OiBbUEFU Q0hdIFN1cHBvcnQgcmVsb2NhdGVkIHJlcG8gY29uZmlncyAoRmVkb3JhIDQ1KykKKworRmVkb3Jh IDQ1IENoYW5nZSBSZWxvY2F0ZVJwbVJlcG9Db25maWdzVG9Vc3IgbW92ZWQgc3lzdGVtIHJlcG9z aXRvcnkKK2RlZmluaXRpb25zIGZyb20gL2V0Yy95dW0ucmVwb3MuZCB0byAvdXNyL3NoYXJlL2Ru ZjUvcmVwb3MuZCBhbmQgR1BHCitrZXlzIGZyb20gL2V0Yy9wa2kvcnBtLWdwZyB0byAvdXNyL3No YXJlL3BraS9ycG0tZ3BnLiBUaGlzIGJyb2tlCitwYWNrYWdlIG92ZXJsYXkgb3BlcmF0aW9ucyAo cnBtLW9zdHJlZSBpbnN0YWxsKSB3aXRoOgorICBlcnJvcjogTm8gZW5hYmxlZCByZXBvc2l0b3Jp ZXMKKworU3dpdGNoIGFsbCByZXBvIGRpcmVjdG9yeSBzZXR1cCBmcm9tIHRoZSBzaW5nbGUtZGly ZWN0b3J5CitkbmZfY29udGV4dF9zZXRfcmVwb19kaXIoKSBBUEkgdG8gdGhlIG11bHRpLWRpcmVj dG9yeQorZG5mX2NvbnRleHRfc2V0X3JlcG9zX2RpcigpIEFQSSwgcGFzc2luZyBib3RoIHRoZSB1 c2VyLWFkZGVkIGFuZAorZGlzdHJpYnV0aW9uLXByb3ZpZGVkIGxvY2F0aW9ucy4gVGhlIGxpYmRu ZiByZXBvIGxvYWRlciBhbHJlYWR5CitncmFjZWZ1bGx5IHNraXBzIG5vbi1leGlzdGVudCBkaXJl Y3Rvcmllcywgc28gdGhpcyB3b3JrcyBvbiBib3RoIG9sZAorKEZlZG9yYSA8PTQ0LCBSSEVMKSBh bmQgbmV3IChGZWRvcmEgNDUrKSBsYXlvdXRzIHdpdGhvdXQgdmVyc2lvbgorZGV0ZWN0aW9uLgor CitDaGFuZ2VzOgorLSBycG1vc3RyZWUtY29yZS5jeHg6IEFkZCBidWlsZF9yZXBvc19kaXJzKCkg aGVscGVyIHVzaW5nIGNhbm9uaWNhbAorICBwYXRoIGxpc3QgZnJvbSBSdXN0IHZpYSBjeHggYnJp ZGdlLiBVcGRhdGUgYWxsIGNhbGwgc2l0ZXMgdG8gdXNlIGl0LgorICBBZGQgcnBtb3N0cmVlX2Nv bnRleHRfc2V0X3JlcG9zX2RpcnMoKSBmb3IgbXVsdGktZGlyIG92ZXJyaWRlcy4KKy0gcnVzdC9j b21wb3NlcG9zdDogQWRkIHNoYXJlZCBjb25zdGFudHMgZm9yIHJlcG8gZGlyIHBhdGhzLCBleHBv c2VkCisgIHRvIEMrKyB2aWEgZ2V0X3JlcG9zX2RpcnMoKSBicmlkZ2UgZnVuY3Rpb24uCistIHJ1 c3QvY291bnRtZTogU2NhbiBib3RoIHJlcG8gZGlyZWN0b3JpZXMgZm9yIENvdW50IE1lIHN1cHBv cnQuCistIHJ1c3QvY29tcG9zZTogSGFuZGxlIGJvdGggcmVwbyBsYXlvdXRzIGluIG11dGF0ZV9z b3VyY2Vfcm9vdCgpLgorLSBUZXN0cyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVkIGFjY29yZGlu Z2x5LgorCitDbG9zZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb3Jlb3MvcnBtLW9zdHJlZS9pc3N1 ZXMvNTYyMworCitDby1hdXRob3JlZC1ieTogQWRhbSBXaWxsaWFtc29uIDxhd2lsbGlhbUByZWRo YXQuY29tPgorQXNzaXN0ZWQtYnk6IEFJCistLS0KKyBkb2NzL3RyZWVmaWxlLm1kICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICA1ICstCisgbWFuL3JwbS1vc3RyZWUueG1sICAgICAgICAgICAg ICAgICAgICAgIHwgICAyMyArLQorIHJwbW9zdHJlZS1jeHhycy5jeHggICAgICAgICAgICAgICAg ICAgICB8IDc4NDEgKysrKysrKysrKysrKystLS0tLS0tLS0KKyBycG1vc3RyZWUtY3h4cnMuaCAg ICAgICAgICAgICAgICAgICAgICAgfCAyMDk5ICsrKy0tLQorIHJ1c3Qvc3JjL2NvbXBvc2UucnMg ICAgICAgICAgICAgICAgICAgICB8ICAgNTggKy0KKyBydXN0L3NyYy9jb21wb3NlcG9zdC5ycyAg ICAgICAgICAgICAgICAgfCAgIDE3ICsKKyBydXN0L3NyYy9jb3VudG1lL3JlcG8ucnMgICAgICAg ICAgICAgICAgfCAgIDMyICstCisgcnVzdC9zcmMvbGliLnJzICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgNyArCisgc3JjL2RhZW1vbi9ycG1vc3RyZWUtc3lzcm9vdC11cGdyYWRlci5oIHwg ICAgMiArLQorIHNyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmN4eCAgICAgICAgICB8ICAgNTUg Ky0KKyBzcmMvbGlicHJpdi9ycG1vc3RyZWUtY29yZS5oICAgICAgICAgICAgfCAgICAxICsKKyB0 ZXN0cy9jb21tb24vbGlidGVzdHJlcG9zLnNoICAgICAgICAgICAgfCAgICA4ICstCisgdGVzdHMv Y29tcG9zZS1pbWFnZS5zaCAgICAgICAgICAgICAgICAgIHwgICAxMCArLQorIDEzIGZpbGVzIGNo YW5nZWQsIDYyNDMgaW5zZXJ0aW9ucygrKSwgMzkxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdp dCBhL2RvY3MvdHJlZWZpbGUubWQgYi9kb2NzL3RyZWVmaWxlLm1kCitpbmRleCBhNDA2OGI3Mjcw Li5iOWUwNjNkYjllIDEwMDY0NAorLS0tIGEvZG9jcy90cmVlZmlsZS5tZAorKysrIGIvZG9jcy90 cmVlZmlsZS5tZAorQEAgLTM2LDggKzM2LDkgQEAgSXQgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBw YXJhbWV0ZXJzOgorICAgIHVzZSwgZnJvbSBhbnkgZmlsZXMgdGhhdCBlbmQgaW4gYC5yZXBvYCwg aW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzCisgICAgdGhlIHRyZWVmaWxlLiBJZiBtaXNzaW5nLCBh bGwgeXVtIHJlcG9zIGVuYWJsZWQgYnkgZGVmYXVsdCBhcmUgdXNlZC4KKyAgICBgcnBtLW9zdHJl ZSBjb21wb3NlIHRyZWVgIGRvZXMgbm90IHVzZSB0aGUgc3lzdGVtCistICAgYC9ldGMveXVtLnJl cG9zLmRgLCBiZWNhdXNlIGl0J3MgY29tbW9uIHRvIHdhbnQgdG8gY29tcG9zZSBhIHRhcmdldAor LSAgIHN5c3RlbSBkaXN0aW5jdCBmcm9tIHRoZSBvbmUgdGhlIGhvc3Qgc3l0ZW0gaXMgcnVubmlu Zy4KKysgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMsIGJlY2F1c2UgaXQn cyBjb21tb24gdG8gd2FudAorKyAgIHRvIGNvbXBvc2UgYSB0YXJnZXQgc3lzdGVtIGRpc3RpbmN0 IGZyb20gdGhlIG9uZSB0aGUgaG9zdCBzeXRlbQorKyAgIGlzIHJ1bm5pbmcuCisgCisgICogYHNl bGludXhgOiBib29sZWFuLCBvcHRpb25hbDogRGVmYXVsdHMgdG8gYHRydWVgLiAgSWYgYGZhbHNl YCwgdGhlbgorICAgIG5vIFNFTGludXggbGFiZWxpbmcgd2lsbCBiZSBwZXJmb3JtZWQgb24gdGhl IHNlcnZlciBzaWRlLgorZGlmZiAtLWdpdCBhL21hbi9ycG0tb3N0cmVlLnhtbCBiL21hbi9ycG0t b3N0cmVlLnhtbAoraW5kZXggY2NmNWQwZjViMy4uMmNhODVhOGY2OSAxMDA2NDQKKy0tLSBhL21h bi9ycG0tb3N0cmVlLnhtbAorKysrIGIvbWFuL3JwbS1vc3RyZWUueG1sCitAQCAtMjIyLDggKzIy Miw4IEBAIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICBUYWtlcyBvbmUgb3IgbW9yZSBwYWNrYWdl cyBhcyBhcmd1bWVudHMuIFRoZSBwYWNrYWdlcyBhcmUKKy0gICAgICAgICAgICBmZXRjaGVkIGZy b20gdGhlIGVuYWJsZWQgcmVwb3NpdG9yaWVzIGluCistICAgICAgICAgICAgPGZpbGVuYW1lPi9l dGMveXVtLnJlcG9zLmQvPC9maWxlbmFtZT4gYW5kIGFyZSBvdmVybGF5ZWQgb24KKysgICAgICAg ICAgICBmZXRjaGVkIGZyb20gdGhlIGVuYWJsZWQgcmVwb3NpdG9yaWVzIGluIHRoZSBzeXN0ZW0K KysgICAgICAgICAgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgYW5kIGFy ZSBvdmVybGF5ZWQgb24KKyAgICAgICAgICAgICB0b3Agb2YgYSBuZXcgZGVwbG95bWVudC4gIEl0 IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhCisgICAgICAgICAgICAgbG9jYWwgUlBNIHBh Y2thZ2UgdGhhdCByZXNpZGVzIG9uIHRoZSBob3N0LiBPdmVybGF5ZWQKKyAgICAgICAgICAgICBw YWNrYWdlcyBjYW4gbGF0ZXIgYmUgcmVtb3ZlZCB3aXRoIHRoZQorQEAgLTMxMCw4ICszMTAsOCBA QCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAgICAgICAgICAgICBUYWtlcyBvbmUgb3Ig bW9yZSBwYWNrYWdlcyBhcyBhcmd1bWVudHMuIFRoZSBwYWNrYWdlcyBhcmUKKyAgICAgICAgICAg ICByZW1vdmVkIGZyb20gdGhlIHNldCBvZiBwYWNrYWdlcyB0aGF0IGFyZSBjdXJyZW50bHkKKyAg ICAgICAgICAgICBvdmVybGF5ZWQuIFRoZSByZW1haW5pbmcgcGFja2FnZXMgaW4gdGhlIHNldCAo aWYgYW55KSBhcmUKKy0gICAgICAgICAgICBmZXRjaGVkIGZyb20gdGhlIGVuYWJsZWQgcmVwb3Np dG9yaWVzIGluCistICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMveXVtLnJlcG9zLmQvPC9maWxl bmFtZT4gYW5kIGFyZSBvdmVybGF5ZWQgb24KKysgICAgICAgICAgICBmZXRjaGVkIGZyb20gdGhl IGVuYWJsZWQgcmVwb3NpdG9yaWVzIGluIHRoZSBzeXN0ZW0KKysgICAgICAgICAgICByZXBvc2l0 b3J5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMgYW5kIGFyZSBvdmVybGF5ZWQgb24KKyAgICAg ICAgICAgICB0b3Agb2YgYSBuZXcgZGVwbG95bWVudC4KKyAgICAgICAgICAgPC9wYXJhPgorIAor QEAgLTMzNCw4ICszMzQsOCBAQCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgVGFrZXMgb25lIG9y IG1vcmUgcXVlcnkgdGVybXMgYXMgYXJndW1lbnRzLiBUaGUgcGFja2FnZXMgYXJlCistICAgICAg ICAgICAgc2VhcmNoZWQgd2l0aGluIHRoZSBlbmFibGVkIHJlcG9zaXRvcmllcyBpbgorLSAgICAg ICAgICAgIDxmaWxlbmFtZT4vZXRjL3l1bS5yZXBvcy5kLzwvZmlsZW5hbWU+LiBQYWNrYWdlcyBj YW4gYmUKKysgICAgICAgICAgICBzZWFyY2hlZCB3aXRoaW4gdGhlIGVuYWJsZWQgcmVwb3NpdG9y aWVzIGluIHRoZSBzeXN0ZW0KKysgICAgICAgICAgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24g ZGlyZWN0b3JpZXMuIFBhY2thZ2VzIGNhbiBiZQorICAgICAgICAgICAgIG92ZXJsYXllZCBhbmQg cmVtb3ZlZCB1c2luZyB0aGUgPGNvbW1hbmQ+aW5zdGFsbDwvY29tbWFuZD4KKyAgICAgICAgICAg ICBhbmQgPGNvbW1hbmQ+dW5pbnN0YWxsPC9jb21tYW5kPiBjb21tYW5kcy4KKyAgICAgICAgICAg PC9wYXJhPgorQEAgLTUxOSw4ICs1MTksOCBAQCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K KyAgICAgICAgICAgICA8b3B0aW9uPi0tY2hlY2s8L29wdGlvbj4gdG8ganVzdCBjaGVjayBpZiBh biB1cGdyYWRlIGlzCisgICAgICAgICAgICAgYXZhaWxhYmxlLCB3aXRob3V0IGRvd25sb2FkaW5n IGl0IG9yIHBlcmZvcm1pbmcgYQorICAgICAgICAgICAgIHBhY2thZ2UtbGV2ZWwgZGlmZi4gIFVz aW5nIHRoaXMgZmxhZyB3aWxsIGZvcmNlIGFuIHVwZGF0ZQorLSAgICAgICAgICAgIG9mIHRoZSBS UE0gbWV0YWRhdGEgZnJvbSB0aGUgZW5hYmxlZCByZXBvcyBpbgorLSAgICAgICAgICAgIDxmaWxl bmFtZT4vZXRjL3l1bS5yZXBvcy5kLzwvZmlsZW5hbWU+LCBpZiB0aGVyZSBhcmUgYW55CisrICAg ICAgICAgICAgb2YgdGhlIFJQTSBtZXRhZGF0YSBmcm9tIHRoZSBlbmFibGVkIHJlcG9zIGluIHRo ZSBzeXN0ZW0KKysgICAgICAgICAgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3Jp ZXMsIGlmIHRoZXJlIGFyZSBhbnkKKyAgICAgICAgICAgICBsYXllcmVkIHBhY2thZ2VzLgorICAg ICAgICAgICA8L3BhcmE+CisgCitAQCAtOTExLDE0ICs5MTEsMTcgQEAgJCBzeXN0ZW1jdGwgc3Rh cnQgcG9zdGdyZXNxbCAgIyBTb21lIHNldHVwIHJlcXVpcmVkCisgICAgIDx0aXRsZT5SZXBvc2l0 b3J5IGNvbmZpZ3VyYXRpb24gYW5kIEdQRyBrZXlzPC90aXRsZT4KKyAKKyAgICAgPHBhcmE+Cist ICAgICAgcnBtLW9zdHJlZSB1c2VzIHRoZSBsaWJkbmYgc2hhcmVkIGxpYnJhcnksIHdoaWNoIGhv bm9ycyA8bGl0ZXJhbD4vZXRjL3l1bS5yZXBvcy5kPC9saXRlcmFsPi4KKysgICAgICBycG0tb3N0 cmVlIHVzZXMgdGhlIGxpYmRuZiBzaGFyZWQgbGlicmFyeSwgd2hpY2ggaG9ub3JzIGJvdGgKKysg ICAgICA8bGl0ZXJhbD4vZXRjL3l1bS5yZXBvcy5kPC9saXRlcmFsPiAoZm9yIHVzZXIgY29uZmln dXJhdGlvbikgYW5kCisrICAgICAgPGxpdGVyYWw+L3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQ8L2xp dGVyYWw+IChmb3IgZGlzdHJpYnV0aW9uLXByb3ZpZGVkIGNvbmZpZ3VyYXRpb24pLgorICAgICAg IE5vdGUgdGhhdCBycG0tbWQgKHl1bS9kbmYpIHJlcG9zaXRvcmllcyBhcmUgb25seSBjaGVja2Vk IGlmIGNsaWVudC1zaWRlIHBhY2thZ2UgbGF5ZXJpbmcgaXMKKyAgICAgICBlbmFibGVkLgorICAg ICA8L3BhcmE+CisgCisgICAgIDxwYXJhPgorICAgICAgIEhvd2V2ZXIsIHRoZSBiZWhhdmlvciBm b3IgR1BHIGtleXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gYSB0cmFkaXRpb25hbCA8Y29t bWFuZD5ycG08L2NvbW1hbmQ+CistICAgICAgc3lzdGVtLiAgRXNzZW50aWFsbHksIGFsbCBHUEcg a2V5cyBpbiA8bGl0ZXJhbD4vZXRjL3BraS9ycG0tZ3BnPC9saXRlcmFsPiBhcmUgbG9hZGVkIGFu ZCB0cnVzdGVkLgorKyAgICAgIHN5c3RlbS4gIEVzc2VudGlhbGx5LCBhbGwgR1BHIGtleXMgaW4g PGxpdGVyYWw+L2V0Yy9wa2kvcnBtLWdwZzwvbGl0ZXJhbD4gYW5kCisrICAgICAgPGxpdGVyYWw+ L3Vzci9zaGFyZS9wa2kvcnBtLWdwZzwvbGl0ZXJhbD4gYXJlIGxvYWRlZCBhbmQgdHJ1c3RlZC4K KyAgICAgICBUaGUgPGxpdGVyYWw+LnJlcG88L2xpdGVyYWw+IGZpbGUgc2hvdWxkIHJlZmVyZW5j ZSB0aGUgZmlsZSBwYXRoIGluIHRoZXJlLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorZGlm ZiAtLWdpdCBhL3JwbW9zdHJlZS1jeHhycy5jeHggYi9ycG1vc3RyZWUtY3h4cnMuY3h4CitpbmRl eCA4NzEyYTNmMmM2Li5jN2QwNWYyMzEyIDEwMDY0NAorLS0tIGEvcnBtb3N0cmVlLWN4eHJzLmN4 eAorKysrIGIvcnBtb3N0cmVlLWN4eHJzLmN4eAorQEAgLTEsMTYgKzEsMTUgQEAKKy0jaW5jbHVk ZSAic3JjL2xpYnByaXYvcnBtb3N0cmVlLWN4eHJzLXByZWx1ZGUuaCIKKysjaW5jbHVkZSAicnBt b3N0cmVlLWN4eHJzLmgiCisrI2luY2x1ZGUgInJwbW9zdHJlZS1jbGllbnRsaWIuaCIKKyAjaW5j bHVkZSAicnBtb3N0cmVlLWNvbnRhaW5lci5ocHAiCisgI2luY2x1ZGUgInJwbW9zdHJlZS1jeHhy c3V0aWwuaHBwIgorLSNpbmNsdWRlICJycG1vc3RyZWUtdXRpbC5oIgorLSNpbmNsdWRlICJycG1v c3RyZWVtYWluLmgiCistI2luY2x1ZGUgInJwbW9zdHJlZS1jbGllbnRsaWIuaCIKKyAjaW5jbHVk ZSAicnBtb3N0cmVlLWRpZmYuaHBwIgorICNpbmNsdWRlICJycG1vc3RyZWUtbGliYnVpbHRpbi5o IgorLSNpbmNsdWRlICJycG1vc3RyZWUtdXRpbC5oIgorICNpbmNsdWRlICJycG1vc3RyZWUtb3V0 cHV0LmgiCistI2luY2x1ZGUgInJwbW9zdHJlZS1ycG0tdXRpbC5oIgorICNpbmNsdWRlICJycG1v c3RyZWUtcGFja2FnZS12YXJpYW50cy5oIgorLSNpbmNsdWRlICJycG1vc3RyZWUtY3h4cnMuaCIK KysjaW5jbHVkZSAicnBtb3N0cmVlLXJwbS11dGlsLmgiCisrI2luY2x1ZGUgInJwbW9zdHJlZS11 dGlsLmgiCisrI2luY2x1ZGUgInJwbW9zdHJlZW1haW4uaCIKKysjaW5jbHVkZSAic3JjL2xpYnBy aXYvcnBtb3N0cmVlLWN4eHJzLXByZWx1ZGUuaCIKKyAjaW5jbHVkZSA8YWxnb3JpdGhtPgorICNp bmNsdWRlIDxhcnJheT4KKyAjaW5jbHVkZSA8Y2Fzc2VydD4KK0BAIC00MCw5NCArMzksOTggQEAK KyAjZW5kaWYgLy8gX19jbGFuZ19fCisgI2VuZGlmIC8vIF9fR05VQ19fCisgCistbmFtZXNwYWNl IHJ1c3QgeworLWlubGluZSBuYW1lc3BhY2UgY3h4YnJpZGdlMSB7CisrbmFtZXNwYWNlIHJ1c3QK Kyt7CisraW5saW5lIG5hbWVzcGFjZSBjeHhicmlkZ2UxCisreworIC8vICNpbmNsdWRlICJydXN0 L2N4eC5oIgorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9QQU5JQworICNkZWZpbmUgQ1hYQlJJREdF MV9QQU5JQworLXRlbXBsYXRlIDx0eXBlbmFtZSBFeGNlcHRpb24+Cistdm9pZCBwYW5pYyBbW25v cmV0dXJuXV0gKGNvbnN0IGNoYXIgKm1zZyk7CisrdGVtcGxhdGUgPHR5cGVuYW1lIEV4Y2VwdGlv bj4gdm9pZCBwYW5pYyBbW25vcmV0dXJuXV0gKGNvbnN0IGNoYXIgKm1zZyk7CisgI2VuZGlmIC8v IENYWEJSSURHRTFfUEFOSUMKKyAKKyBzdHJ1Y3QgdW5zYWZlX2JpdGNvcHlfdDsKKyAKKy1uYW1l c3BhY2UgeworLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIGltcGw7CisrbmFtZXNwYWNl CisreworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBpbXBsOworIH0gLy8gbmFtZXNwYWNl CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistOjpzdGQ6OnNpemVfdCBzaXplX29mKCk7Cist dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistOjpzdGQ6OnNpemVfdCBhbGlnbl9vZigpOworK3RlbXBs YXRlIDx0eXBlbmFtZSBUPjo6c3RkOjpzaXplX3Qgc2l6ZV9vZiAoKTsKKyt0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD46OnN0ZDo6c2l6ZV90IGFsaWduX29mICgpOworIAorICNpZm5kZWYgQ1hYQlJJREdF MV9SVVNUX1NUUklORworICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1NUUklORworLWNsYXNzIFN0 cmluZyBmaW5hbCB7CisrY2xhc3MgU3RyaW5nIGZpbmFsCisreworIHB1YmxpYzoKKy0gIFN0cmlu ZygpIG5vZXhjZXB0OworLSAgU3RyaW5nKGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKKy0gIFN0 cmluZyhTdHJpbmcgJiYpIG5vZXhjZXB0OworLSAgflN0cmluZygpIG5vZXhjZXB0OworLQorLSAg U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICYpOworLSAgU3RyaW5nKGNvbnN0IGNoYXIgKik7Cist ICBTdHJpbmcoY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCk7CistICBTdHJpbmcoY29uc3QgY2hh cjE2X3QgKik7CistICBTdHJpbmcoY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpOworKyAg U3RyaW5nICgpIG5vZXhjZXB0OworKyAgU3RyaW5nIChjb25zdCBTdHJpbmcgJikgbm9leGNlcHQ7 CisrICBTdHJpbmcgKFN0cmluZyAmJikgbm9leGNlcHQ7CisrICB+U3RyaW5nICgpIG5vZXhjZXB0 OworKworKyAgU3RyaW5nIChjb25zdCBzdGQ6OnN0cmluZyAmKTsKKysgIFN0cmluZyAoY29uc3Qg Y2hhciAqKTsKKysgIFN0cmluZyAoY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCk7CisrICBTdHJp bmcgKGNvbnN0IGNoYXIxNl90ICopOworKyAgU3RyaW5nIChjb25zdCBjaGFyMTZfdCAqLCBzdGQ6 OnNpemVfdCk7CisgI2lmZGVmIF9fY3BwX2NoYXI4X3QKKy0gIFN0cmluZyhjb25zdCBjaGFyOF90 ICpzKTsKKy0gIFN0cmluZyhjb25zdCBjaGFyOF90ICpzLCBzdGQ6OnNpemVfdCBsZW4pOworKyAg U3RyaW5nIChjb25zdCBjaGFyOF90ICpzKTsKKysgIFN0cmluZyAoY29uc3QgY2hhcjhfdCAqcywg c3RkOjpzaXplX3QgbGVuKTsKKyAjZW5kaWYKKyAKKy0gIHN0YXRpYyBTdHJpbmcgbG9zc3koY29u c3Qgc3RkOjpzdHJpbmcgJikgbm9leGNlcHQ7CistICBzdGF0aWMgU3RyaW5nIGxvc3N5KGNvbnN0 IGNoYXIgKikgbm9leGNlcHQ7CistICBzdGF0aWMgU3RyaW5nIGxvc3N5KGNvbnN0IGNoYXIgKiwg c3RkOjpzaXplX3QpIG5vZXhjZXB0OworLSAgc3RhdGljIFN0cmluZyBsb3NzeShjb25zdCBjaGFy MTZfdCAqKSBub2V4Y2VwdDsKKy0gIHN0YXRpYyBTdHJpbmcgbG9zc3koY29uc3QgY2hhcjE2X3Qg Kiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OworKyAgc3RhdGljIFN0cmluZyBsb3NzeSAoY29uc3Qg c3RkOjpzdHJpbmcgJikgbm9leGNlcHQ7CisrICBzdGF0aWMgU3RyaW5nIGxvc3N5IChjb25zdCBj aGFyICopIG5vZXhjZXB0OworKyAgc3RhdGljIFN0cmluZyBsb3NzeSAoY29uc3QgY2hhciAqLCBz dGQ6OnNpemVfdCkgbm9leGNlcHQ7CisrICBzdGF0aWMgU3RyaW5nIGxvc3N5IChjb25zdCBjaGFy MTZfdCAqKSBub2V4Y2VwdDsKKysgIHN0YXRpYyBTdHJpbmcgbG9zc3kgKGNvbnN0IGNoYXIxNl90 ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKyAKKy0gIFN0cmluZyAmb3BlcmF0b3I9KGNvbnN0 IFN0cmluZyAmKSAmIG5vZXhjZXB0OworLSAgU3RyaW5nICZvcGVyYXRvcj0oU3RyaW5nICYmKSAm IG5vZXhjZXB0OworKyAgU3RyaW5nICZvcGVyYXRvcj0gKGNvbnN0IFN0cmluZyAmKSAmIG5vZXhj ZXB0OworKyAgU3RyaW5nICZvcGVyYXRvcj0gKFN0cmluZyAmJikgJiBub2V4Y2VwdDsKKyAKKy0g IGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3Q7CisrICBleHBsaWNpdCBvcGVy YXRvciBzdGQ6OnN0cmluZyAoKSBjb25zdDsKKyAKKy0gIGNvbnN0IGNoYXIgKmRhdGEoKSBjb25z dCBub2V4Y2VwdDsKKy0gIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHN0 ZDo6c2l6ZV90IGxlbmd0aCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBlbXB0eSgpIGNvbnN0 IG5vZXhjZXB0OworKyAgY29uc3QgY2hhciAqZGF0YSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHN0 ZDo6c2l6ZV90IHNpemUgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBzdGQ6OnNpemVfdCBsZW5ndGgg KCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0OworIAor LSAgY29uc3QgY2hhciAqY19zdHIoKSBub2V4Y2VwdDsKKysgIGNvbnN0IGNoYXIgKmNfc3RyICgp IG5vZXhjZXB0OworIAorLSAgc3RkOjpzaXplX3QgY2FwYWNpdHkoKSBjb25zdCBub2V4Y2VwdDsK Ky0gIHZvaWQgcmVzZXJ2ZShzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7CisrICBzdGQ6OnNpemVf dCBjYXBhY2l0eSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgcmVzZXJ2ZSAoc2l6ZV90IG5l d19jYXApIG5vZXhjZXB0OworIAorICAgdXNpbmcgaXRlcmF0b3IgPSBjaGFyICo7CistICBpdGVy YXRvciBiZWdpbigpIG5vZXhjZXB0OworLSAgaXRlcmF0b3IgZW5kKCkgbm9leGNlcHQ7CisrICBp dGVyYXRvciBiZWdpbiAoKSBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIGVuZCAoKSBub2V4Y2VwdDsK KyAKKyAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gY29uc3QgY2hhciAqOworLSAgY29uc3RfaXRl cmF0b3IgYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv bnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3IgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQ7 CistICBjb25zdF9pdGVyYXRvciBjZW5kKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVy YXRvciBiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBj b25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJhdG9yIGNiZWdpbiAoKSBjb25zdCBub2V4Y2Vw dDsKKysgIGNvbnN0X2l0ZXJhdG9yIGNlbmQgKCkgY29uc3Qgbm9leGNlcHQ7CisgCistICBib29s IG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVy YXRvciE9KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I8 KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I8PShjb25z dCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yPihjb25zdCBTdHJp bmcgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yPj0oY29uc3QgU3RyaW5nICYp IGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBTdHJpbmcgJikgY29u c3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IFN0cmluZyAmKSBjb25zdCBu b2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNl cHQ7CisrICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsK KysgIGJvb2wgb3BlcmF0b3I+IChjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7CisrICBi b29sIG9wZXJhdG9yPj0gKGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIHZv aWQgc3dhcChTdHJpbmcgJikgbm9leGNlcHQ7CisrICB2b2lkIHN3YXAgKFN0cmluZyAmKSBub2V4 Y2VwdDsKKyAKKy0gIFN0cmluZyh1bnNhZmVfYml0Y29weV90LCBjb25zdCBTdHJpbmcgJikgbm9l eGNlcHQ7CisrICBTdHJpbmcgKHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFN0cmluZyAmKSBub2V4 Y2VwdDsKKyAKKyBwcml2YXRlOgorICAgc3RydWN0IGxvc3N5X3Q7CistICBTdHJpbmcobG9zc3lf dCwgY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CistICBTdHJpbmcobG9zc3lf dCwgY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OworLSAgZnJpZW5kIHZv aWQgc3dhcChTdHJpbmcgJmxocywgU3RyaW5nICZyaHMpIG5vZXhjZXB0IHsgbGhzLnN3YXAocmhz KTsgfQorKyAgU3RyaW5nIChsb3NzeV90LCBjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBub2V4 Y2VwdDsKKysgIFN0cmluZyAobG9zc3lfdCwgY29uc3QgY2hhcjE2X3QgKiwgc3RkOjpzaXplX3Qp IG5vZXhjZXB0OworKyAgZnJpZW5kIHZvaWQKKysgIHN3YXAgKFN0cmluZyAmbGhzLCBTdHJpbmcg JnJocykgbm9leGNlcHQKKysgIHsKKysgICAgbGhzLnN3YXAgKHJocyk7CisrICB9CisgCisgICBz dGQ6OmFycmF5PHN0ZDo6dWludHB0cl90LCAzPiByZXByOworIH07CitAQCAtMTM1LDQ4ICsxMzgs NDkgQEAgY2xhc3MgU3RyaW5nIGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9T VFIKKyAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9TVFIKKy1jbGFzcyBTdHIgZmluYWwgeworK2Ns YXNzIFN0ciBmaW5hbAorK3sKKyBwdWJsaWM6CistICBTdHIoKSBub2V4Y2VwdDsKKy0gIFN0cihj b25zdCBTdHJpbmcgJikgbm9leGNlcHQ7CistICBTdHIoY29uc3Qgc3RkOjpzdHJpbmcgJik7Cist ICBTdHIoY29uc3QgY2hhciAqKTsKKy0gIFN0cihjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KTsK KysgIFN0ciAoKSBub2V4Y2VwdDsKKysgIFN0ciAoY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0Owor KyAgU3RyIChjb25zdCBzdGQ6OnN0cmluZyAmKTsKKysgIFN0ciAoY29uc3QgY2hhciAqKTsKKysg IFN0ciAoY29uc3QgY2hhciAqLCBzdGQ6OnNpemVfdCk7CisgCistICBTdHIgJm9wZXJhdG9yPShj b25zdCBTdHIgJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBTdHIgJm9wZXJhdG9yPSAoY29u c3QgU3RyICYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworIAorLSAgZXhwbGljaXQgb3BlcmF0b3Ig c3RkOjpzdHJpbmcoKSBjb25zdDsKKysgIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6c3RyaW5nICgp IGNvbnN0OworICNpZiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMCistICBleHBsaWNpdCBvcGVyYXRv ciBzdGQ6OnN0cmluZ192aWV3KCkgY29uc3Q7CisrICBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnN0 cmluZ192aWV3ICgpIGNvbnN0OworICNlbmRpZgorIAorLSAgY29uc3QgY2hhciAqZGF0YSgpIGNv bnN0IG5vZXhjZXB0OworLSAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0OworLSAg c3RkOjpzaXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGVtcHR5KCkgY29u c3Qgbm9leGNlcHQ7CisrICBjb25zdCBjaGFyICpkYXRhICgpIGNvbnN0IG5vZXhjZXB0OworKyAg c3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHN0ZDo6c2l6ZV90IGxlbmd0 aCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQ7Cisg CistICBTdHIoY29uc3QgU3RyICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0gIH5TdHIoKSBub2V4 Y2VwdCA9IGRlZmF1bHQ7CisrICBTdHIgKGNvbnN0IFN0ciAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7 CisrICB+U3RyICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAKKyAgIHVzaW5nIGl0ZXJhdG9yID0g Y29uc3QgY2hhciAqOworICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBjb25zdCBjaGFyICo7Cist ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0 b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25z dCBub2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25zdCBub2V4Y2VwdDsKKysg IGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0 b3IgZW5kICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgY2JlZ2luICgpIGNv bnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgY2VuZCAoKSBjb25zdCBub2V4Y2VwdDsK KyAKKy0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CistICBi b29sIG9wZXJhdG9yIT0oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVy YXRvcjwoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcjw9KGNv bnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFN0ciAm KSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+PShjb25zdCBTdHIgJikgY29uc3Qg bm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2Vw dDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCBvcGVyYXRvcjwgKGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3Bl cmF0b3I8PSAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj4g KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3Qg U3RyICYpIGNvbnN0IG5vZXhjZXB0OworIAorLSAgdm9pZCBzd2FwKFN0ciAmKSBub2V4Y2VwdDsK KysgIHZvaWQgc3dhcCAoU3RyICYpIG5vZXhjZXB0OworIAorIHByaXZhdGU6CisgICBjbGFzcyB1 bmluaXQ7CistICBTdHIodW5pbml0KSBub2V4Y2VwdDsKKysgIFN0ciAodW5pbml0KSBub2V4Y2Vw dDsKKyAgIGZyaWVuZCBpbXBsPFN0cj47CisgCisgICBzdGQ6OmFycmF5PHN0ZDo6dWludHB0cl90 LCAyPiByZXByOworQEAgLTE4NSw3MiArMTg5LDcyIEBAIGNsYXNzIFN0ciBmaW5hbCB7CisgCisg I2lmbmRlZiBDWFhCUklER0UxX1JVU1RfU0xJQ0UKKyAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9T TElDRQorLW5hbWVzcGFjZSBkZXRhaWwgeworLXRlbXBsYXRlIDxib29sPgorLXN0cnVjdCBjb3B5 X2Fzc2lnbmFibGVfaWYge307CisrbmFtZXNwYWNlIGRldGFpbAorK3sKKyt0ZW1wbGF0ZSA8Ym9v bD4gc3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZgorK3sKKyt9OworIAorLXRlbXBsYXRlIDw+Cist c3RydWN0IGNvcHlfYXNzaWduYWJsZV9pZjxmYWxzZT4geworLSAgY29weV9hc3NpZ25hYmxlX2lm KCkgbm9leGNlcHQgPSBkZWZhdWx0OworLSAgY29weV9hc3NpZ25hYmxlX2lmKGNvbnN0IGNvcHlf YXNzaWduYWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CistICBjb3B5X2Fzc2lnbmFibGVf aWYgJm9wZXJhdG9yPShjb25zdCBjb3B5X2Fzc2lnbmFibGVfaWYgJikgJiBub2V4Y2VwdCA9IGRl bGV0ZTsKKy0gIGNvcHlfYXNzaWduYWJsZV9pZiAmb3BlcmF0b3I9KGNvcHlfYXNzaWduYWJsZV9p ZiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrdGVtcGxhdGUgPD4gc3RydWN0IGNvcHlfYXNz aWduYWJsZV9pZjxmYWxzZT4KKyt7CisrICBjb3B5X2Fzc2lnbmFibGVfaWYgKCkgbm9leGNlcHQg PSBkZWZhdWx0OworKyAgY29weV9hc3NpZ25hYmxlX2lmIChjb25zdCBjb3B5X2Fzc2lnbmFibGVf aWYgJikgbm9leGNlcHQgPSBkZWZhdWx0OworKyAgY29weV9hc3NpZ25hYmxlX2lmICZvcGVyYXRv cj0gKGNvbnN0IGNvcHlfYXNzaWduYWJsZV9pZiAmKSAmIG5vZXhjZXB0ID0gZGVsZXRlOworKyAg Y29weV9hc3NpZ25hYmxlX2lmICZvcGVyYXRvcj0gKGNvcHlfYXNzaWduYWJsZV9pZiAmJikgJiBu b2V4Y2VwdCA9IGRlZmF1bHQ7CisgfTsKKyB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKyAKKyB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KKy1jbGFzcyBTbGljZSBmaW5hbAorLSAgICA6IHByaXZhdGUgZGV0 YWlsOjpjb3B5X2Fzc2lnbmFibGVfaWY8c3RkOjppc19jb25zdDxUPjo6dmFsdWU+IHsKKytjbGFz cyBTbGljZSBmaW5hbCA6IHByaXZhdGUgZGV0YWlsOjpjb3B5X2Fzc2lnbmFibGVfaWY8c3RkOjpp c19jb25zdDxUPjo6dmFsdWU+CisreworIHB1YmxpYzoKKyAgIHVzaW5nIHZhbHVlX3R5cGUgPSBU OworIAorLSAgU2xpY2UoKSBub2V4Y2VwdDsKKy0gIFNsaWNlKFQgKiwgc3RkOjpzaXplX3QgY291 bnQpIG5vZXhjZXB0OworKyAgU2xpY2UgKCkgbm9leGNlcHQ7CisrICBTbGljZSAoVCAqLCBzdGQ6 OnNpemVfdCBjb3VudCkgbm9leGNlcHQ7CisgCistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KKy0g IGV4cGxpY2l0IFNsaWNlKEMgJmMpIDogU2xpY2UoYy5kYXRhKCksIGMuc2l6ZSgpKSB7fQorKyAg dGVtcGxhdGUgPHR5cGVuYW1lIEM+IGV4cGxpY2l0IFNsaWNlIChDICZjKSA6IFNsaWNlIChjLmRh dGEgKCksIGMuc2l6ZSAoKSkge30KKyAKKy0gIFNsaWNlICZvcGVyYXRvcj0oY29uc3QgU2xpY2U8 VD4gJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CistICBTbGljZSAmb3BlcmF0b3I9KFNsaWNlPFQ+ ICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFNsaWNlICZvcGVyYXRvcj0gKGNvbnN0IFNs aWNlPFQ+ICYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworKyAgU2xpY2UgJm9wZXJhdG9yPSAoU2xp Y2U8VD4gJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworIAorLSAgVCAqZGF0YSgpIGNvbnN0IG5v ZXhjZXB0OworLSAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgc3RkOjpz aXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGVtcHR5KCkgY29uc3Qgbm9l eGNlcHQ7CisrICBUICpkYXRhICgpIGNvbnN0IG5vZXhjZXB0OworKyAgc3RkOjpzaXplX3Qgc2l6 ZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHN0ZDo6c2l6ZV90IGxlbmd0aCAoKSBjb25zdCBub2V4 Y2VwdDsKKysgIGJvb2wgZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQ7CisgCistICBUICZvcGVyYXRv cltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0OworLSAgVCAmYXQoc3RkOjpzaXplX3Qg bikgY29uc3Q7CistICBUICZmcm9udCgpIGNvbnN0IG5vZXhjZXB0OworLSAgVCAmYmFjaygpIGNv bnN0IG5vZXhjZXB0OworKyAgVCAmb3BlcmF0b3JbXSAoc3RkOjpzaXplX3QgbikgY29uc3Qgbm9l eGNlcHQ7CisrICBUICZhdCAoc3RkOjpzaXplX3QgbikgY29uc3Q7CisrICBUICZmcm9udCAoKSBj b25zdCBub2V4Y2VwdDsKKysgIFQgJmJhY2sgKCkgY29uc3Qgbm9leGNlcHQ7CisgCistICBTbGlj ZShjb25zdCBTbGljZTxUPiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CistICB+U2xpY2UoKSBub2V4 Y2VwdCA9IGRlZmF1bHQ7CisrICBTbGljZSAoY29uc3QgU2xpY2U8VD4gJikgbm9leGNlcHQgPSBk ZWZhdWx0OworKyAgflNsaWNlICgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAKKyAgIGNsYXNzIGl0 ZXJhdG9yOworLSAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKKy0gIGl0ZXJhdG9y IGVuZCgpIGNvbnN0IG5vZXhjZXB0OworKyAgaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Qgbm9leGNl cHQ7CisrICBpdGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7CisgCistICB2b2lkIHN3YXAo U2xpY2UgJikgbm9leGNlcHQ7CisrICB2b2lkIHN3YXAgKFNsaWNlICYpIG5vZXhjZXB0OworIAor IHByaXZhdGU6CisgICBjbGFzcyB1bmluaXQ7CistICBTbGljZSh1bmluaXQpIG5vZXhjZXB0Owor KyAgU2xpY2UgKHVuaW5pdCkgbm9leGNlcHQ7CisgICBmcmllbmQgaW1wbDxTbGljZT47CistICBm cmllbmQgdm9pZCBzbGljZUluaXQodm9pZCAqLCBjb25zdCB2b2lkICosIHN0ZDo6c2l6ZV90KSBu b2V4Y2VwdDsKKy0gIGZyaWVuZCB2b2lkICpzbGljZVB0cihjb25zdCB2b2lkICopIG5vZXhjZXB0 OworLSAgZnJpZW5kIHN0ZDo6c2l6ZV90IHNsaWNlTGVuKGNvbnN0IHZvaWQgKikgbm9leGNlcHQ7 CisrICBmcmllbmQgdm9pZCBzbGljZUluaXQgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzdGQ6OnNp emVfdCkgbm9leGNlcHQ7CisrICBmcmllbmQgdm9pZCAqc2xpY2VQdHIgKGNvbnN0IHZvaWQgKikg bm9leGNlcHQ7CisrICBmcmllbmQgc3RkOjpzaXplX3Qgc2xpY2VMZW4gKGNvbnN0IHZvaWQgKikg bm9leGNlcHQ7CisgCisgICBzdGQ6OmFycmF5PHN0ZDo6dWludHB0cl90LCAyPiByZXByOworIH07 CisgCisgI2lmZGVmIF9fY3BwX2RlZHVjdGlvbl9ndWlkZXMKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg Qz4KKy1leHBsaWNpdCBTbGljZShDICZjKQorLSAgICAtPiBTbGljZTxzdGQ6OnJlbW92ZV9yZWZl cmVuY2VfdDxkZWNsdHlwZSgqc3RkOjpkZWNsdmFsPEM+KCkuZGF0YSgpKT4+OworK2V4cGxpY2l0 IFNsaWNlIChDICZjKSAtPiBTbGljZTxzdGQ6OnJlbW92ZV9yZWZlcmVuY2VfdDxkZWNsdHlwZSAo KnN0ZDo6ZGVjbHZhbDxDPiAoKS5kYXRhICgpKT4+OworICNlbmRpZiAvLyBfX2NwcF9kZWR1Y3Rp b25fZ3VpZGVzCisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgU2xpY2U8VD46Oml0 ZXJhdG9yIGZpbmFsIHsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgU2xpY2U8VD46Oml0 ZXJhdG9yIGZpbmFsCisreworIHB1YmxpYzoKKyAjaWYgX19jcGx1c3BsdXMgPj0gMjAyMDAyTAor ICAgdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmNvbnRpZ3VvdXNfaXRlcmF0b3JfdGFn OworQEAgLTI2MiwzMCArMjY2LDMyIEBAIGNsYXNzIFNsaWNlPFQ+OjppdGVyYXRvciBmaW5hbCB7 CisgICB1c2luZyBwb2ludGVyID0gdHlwZW5hbWUgc3RkOjphZGRfcG9pbnRlcjxUPjo6dHlwZTsK KyAgIHVzaW5nIHJlZmVyZW5jZSA9IHR5cGVuYW1lIHN0ZDo6YWRkX2x2YWx1ZV9yZWZlcmVuY2U8 VD46OnR5cGU7CisgCistICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQ7Cisr ICByZWZlcmVuY2Ugb3BlcmF0b3IqICgpIGNvbnN0IG5vZXhjZXB0OworICAgcG9pbnRlciBvcGVy YXRvci0+KCkgY29uc3Qgbm9leGNlcHQ7CistICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJl bmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OworLQorLSAgaXRlcmF0b3IgJm9wZXJhdG9yKysoKSBu b2V4Y2VwdDsKKy0gIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSBub2V4Y2VwdDsKKy0gIGl0ZXJh dG9yICZvcGVyYXRvci0tKCkgbm9leGNlcHQ7CistICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkg bm9leGNlcHQ7CistCistICBpdGVyYXRvciAmb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUpIG5v ZXhjZXB0OworLSAgaXRlcmF0b3IgJm9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlKSBub2V4Y2Vw dDsKKy0gIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0 OworLSAgZnJpZW5kIGlubGluZSBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIGxo cywgaXRlcmF0b3IgcmhzKSBub2V4Y2VwdCB7CisrICByZWZlcmVuY2Ugb3BlcmF0b3JbXSAoZGlm ZmVyZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKKysKKysgIGl0ZXJhdG9yICZvcGVyYXRvcisr ICgpIG5vZXhjZXB0OworKyAgaXRlcmF0b3Igb3BlcmF0b3IrKyAoaW50KSBub2V4Y2VwdDsKKysg IGl0ZXJhdG9yICZvcGVyYXRvci0tICgpIG5vZXhjZXB0OworKyAgaXRlcmF0b3Igb3BlcmF0b3It LSAoaW50KSBub2V4Y2VwdDsKKysKKysgIGl0ZXJhdG9yICZvcGVyYXRvcis9IChkaWZmZXJlbmNl X3R5cGUpIG5vZXhjZXB0OworKyAgaXRlcmF0b3IgJm9wZXJhdG9yLT0gKGRpZmZlcmVuY2VfdHlw ZSkgbm9leGNlcHQ7CisrICBpdGVyYXRvciBvcGVyYXRvcisgKGRpZmZlcmVuY2VfdHlwZSkgY29u c3Qgbm9leGNlcHQ7CisrICBmcmllbmQgaW5saW5lIGl0ZXJhdG9yCisrICBvcGVyYXRvcisgKGRp ZmZlcmVuY2VfdHlwZSBsaHMsIGl0ZXJhdG9yIHJocykgbm9leGNlcHQKKysgIHsKKyAgICAgcmV0 dXJuIHJocyArIGxoczsKKyAgIH0KKy0gIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5 cGUpIGNvbnN0IG5vZXhjZXB0OworLSAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdCBp dGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIG9wZXJhdG9yLSAoZGlmZmVy ZW5jZV90eXBlKSBjb25zdCBub2V4Y2VwdDsKKysgIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0g KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworIAorLSAgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvciE9KGNv bnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg aXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yPD0oY29uc3QgaXRl cmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yPihjb25zdCBpdGVyYXRv ciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+PShjb25zdCBpdGVyYXRvciAm KSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgaXRlcmF0b3IgJikg Y29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGl0ZXJhdG9yICYpIGNv bnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0 IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcjw9IChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBu b2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I+IChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4 Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNl cHQ7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCBjbGFzcyBTbGljZTsKK0BAIC0yOTQsMzY3ICsz MDAsNDM3IEBAIGNsYXNzIFNsaWNlPFQ+OjppdGVyYXRvciBmaW5hbCB7CisgfTsKKyAKKyAjaWYg X19jcGx1c3BsdXMgPj0gMjAyMDAyTAorLXN0YXRpY19hc3NlcnQoc3RkOjpyYW5nZXM6OmNvbnRp Z3VvdXNfcmFuZ2U8cnVzdDo6U2xpY2U8Y29uc3QgdWludDhfdD4+KTsKKy1zdGF0aWNfYXNzZXJ0 KHN0ZDo6Y29udGlndW91c19pdGVyYXRvcjxydXN0OjpTbGljZTxjb25zdCB1aW50OF90Pjo6aXRl cmF0b3I+KTsKKytzdGF0aWNfYXNzZXJ0IChzdGQ6OnJhbmdlczo6Y29udGlndW91c19yYW5nZTxy dXN0OjpTbGljZTxjb25zdCB1aW50OF90Pj4pOworK3N0YXRpY19hc3NlcnQgKHN0ZDo6Y29udGln dW91c19pdGVyYXRvcjxydXN0OjpTbGljZTxjb25zdCB1aW50OF90Pjo6aXRlcmF0b3I+KTsKKyAj ZW5kaWYKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1TbGljZTxUPjo6U2xpY2UoKSBub2V4 Y2VwdCB7CistICBzbGljZUluaXQodGhpcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+KGFsaWdu X29mPFQ+KCkpLCAwKTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gU2xpY2U8VD46OlNsaWNlICgp IG5vZXhjZXB0CisreworKyAgc2xpY2VJbml0ICh0aGlzLCByZWludGVycHJldF9jYXN0PHZvaWQg Kj4gKGFsaWduX29mPFQ+ICgpKSwgMCk7CisgfQorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgor LVNsaWNlPFQ+OjpTbGljZShUICpzLCBzdGQ6OnNpemVfdCBjb3VudCkgbm9leGNlcHQgeworLSAg YXNzZXJ0KHMgIT0gbnVsbHB0ciB8fCBjb3VudCA9PSAwKTsKKy0gIHNsaWNlSW5pdCh0aGlzLAor LSAgICAgICAgICAgIHMgPT0gbnVsbHB0ciAmJiBjb3VudCA9PSAwCistICAgICAgICAgICAgICAg ID8gcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+KGFsaWduX29mPFQ+KCkpCistICAgICAgICAgICAg ICAgIDogY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSAqPihz KSwKKy0gICAgICAgICAgICBjb3VudCk7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFNsaWNlPFQ+ OjpTbGljZSAoVCAqcywgc3RkOjpzaXplX3QgY291bnQpIG5vZXhjZXB0CisreworKyAgYXNzZXJ0 IChzICE9IG51bGxwdHIgfHwgY291bnQgPT0gMCk7CisrICBzbGljZUluaXQgKHRoaXMsCisrICAg ICAgICAgICAgIHMgPT0gbnVsbHB0ciAmJiBjb3VudCA9PSAwID8gcmVpbnRlcnByZXRfY2FzdDx2 b2lkICo+IChhbGlnbl9vZjxUPiAoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBl ICo+IChzKSwKKysgICAgICAgICAgICAgY291bnQpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy1UICpTbGljZTxUPjo6ZGF0YSgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBy ZWludGVycHJldF9jYXN0PFQgKj4oc2xpY2VQdHIodGhpcykpOworK1QgKgorK1NsaWNlPFQ+Ojpk YXRhICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAq PiAoc2xpY2VQdHIgKHRoaXMpKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3Rk OjpzaXplX3QgU2xpY2U8VD46OnNpemUoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gc2xp Y2VMZW4odGhpcyk7Cisrc3RkOjpzaXplX3QKKytTbGljZTxUPjo6c2l6ZSAoKSBjb25zdCBub2V4 Y2VwdAorK3sKKysgIHJldHVybiBzbGljZUxlbiAodGhpcyk7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLXN0ZDo6c2l6ZV90IFNsaWNlPFQ+OjpsZW5ndGgoKSBjb25zdCBub2V4Y2Vw dCB7CistICByZXR1cm4gdGhpcy0+c2l6ZSgpOworK3N0ZDo6c2l6ZV90CisrU2xpY2U8VD46Omxl bmd0aCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiB0aGlzLT5zaXplICgpOworIH0K KyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1ib29sIFNsaWNlPFQ+OjplbXB0eSgpIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsKKytib29sCisrU2xpY2U8 VD46OmVtcHR5ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPnNpemUgKCkg PT0gMDsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmU2xpY2U8VD46Om9wZXJh dG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQgeworLSAgYXNzZXJ0KG4gPCB0aGlz LT5zaXplKCkpOworLSAgYXV0byBwdHIgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHNsaWNlUHRyKHRo aXMpKSArIHNpemVfb2Y8VD4oKSAqIG47CistICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAq PihwdHIpOworK1QgJgorK1NsaWNlPFQ+OjpvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25z dCBub2V4Y2VwdAorK3sKKysgIGFzc2VydCAobiA8IHRoaXMtPnNpemUgKCkpOworKyAgYXV0byBw dHIgPSBzdGF0aWNfY2FzdDxjaGFyICo+IChzbGljZVB0ciAodGhpcykpICsgc2l6ZV9vZjxUPiAo KSAqIG47CisrICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAocHRyKTsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmU2xpY2U8VD46OmF0KHN0ZDo6c2l6ZV90IG4pIGNv bnN0IHsKKy0gIGlmIChuID49IHRoaXMtPnNpemUoKSkgeworLSAgICBwYW5pYzxzdGQ6Om91dF9v Zl9yYW5nZT4oInJ1c3Q6OlNsaWNlIGluZGV4IG91dCBvZiByYW5nZSIpOworLSAgfQorK1QgJgor K1NsaWNlPFQ+OjphdCAoc3RkOjpzaXplX3QgbikgY29uc3QKKyt7CisrICBpZiAobiA+PSB0aGlz LT5zaXplICgpKQorKyAgICB7CisrICAgICAgcGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+ICgicnVz dDo6U2xpY2UgaW5kZXggb3V0IG9mIHJhbmdlIik7CisrICAgIH0KKyAgIHJldHVybiAoKnRoaXMp W25dOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZTbGljZTxUPjo6ZnJvbnQo KSBjb25zdCBub2V4Y2VwdCB7CistICBhc3NlcnQoIXRoaXMtPmVtcHR5KCkpOworK1QgJgorK1Ns aWNlPFQ+Ojpmcm9udCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGFzc2VydCAoIXRoaXMtPmVt cHR5ICgpKTsKKyAgIHJldHVybiAoKnRoaXMpWzBdOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy1UICZTbGljZTxUPjo6YmFjaygpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGFzc2VydCgh dGhpcy0+ZW1wdHkoKSk7CistICByZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXplKCkgLSAxXTsKKytU ICYKKytTbGljZTxUPjo6YmFjayAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGFzc2VydCAoIXRo aXMtPmVtcHR5ICgpKTsKKysgIHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUgKCkgLSAxXTsKKyB9 CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9y OjpyZWZlcmVuY2UKKy1TbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0IG5vZXhj ZXB0IHsKKy0gIHJldHVybiAqc3RhdGljX2Nhc3Q8VCAqPih0aGlzLT5wb3MpOworK1NsaWNlPFQ+ OjppdGVyYXRvcjo6b3BlcmF0b3IqICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuICpz dGF0aWNfY2FzdDxUICo+ICh0aGlzLT5wb3MpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKyB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OnBvaW50ZXIKKy1TbGljZTxUPjo6aXRl cmF0b3I6Om9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gc3RhdGljX2Nh c3Q8VCAqPih0aGlzLT5wb3MpOworK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItPigpIGNv bnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKHRoaXMtPnBvcyk7 CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjo6cmVmZXJlbmNlIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3JbXSgKKy0gICAgdHlw ZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgbm9leGNl cHQgeworLSAgYXV0byBwdHIgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0aGlz LT5zdHJpZGUgKiBuOworLSAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQgKj4ocHRyKTsKKyt0 eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OnJlZmVyZW5jZQorK1NsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3JbXSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5 cGUgbikgY29uc3Qgbm9leGNlcHQKKyt7CisrICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIg Kj4gKHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOworKyAgcmV0dXJuICpyZWludGVycHJl dF9jYXN0PFQgKj4gKHB0cik7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisrKCkg bm9leGNlcHQgeworLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3Mp ICsgdGhpcy0+c3RyaWRlOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmCisrU2xpY2U8 VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisrICgpIG5vZXhjZXB0CisreworKyAgdGhpcy0+cG9zID0g c3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZTsKKyAgIHJldHVy biAqdGhpczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrKyhpbnQpIG5vZXhjZXB0 IHsKKy0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOworLSAgdGhpcy0+cG9zID0gc3RhdGlj X2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlOworK3R5cGVuYW1lIFNsaWNl PFQ+OjppdGVyYXRvcgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrKyAoaW50KSBub2V4 Y2VwdAorK3sKKysgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlzKTsKKysgIHRoaXMtPnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7CisgICByZXR1 cm4gcmV0OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBTbGljZTxU Pjo6aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItLSgpIG5vZXhjZXB0IHsK Ky0gIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0 cmlkZTsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgorK1NsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3ItLSAoKSBub2V4Y2VwdAorK3sKKysgIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0 PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGU7CisgICByZXR1cm4gKnRoaXM7Cisg fQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRv ciBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLS0oaW50KSBub2V4Y2VwdCB7CistICBhdXRv IHJldCA9IGl0ZXJhdG9yKCp0aGlzKTsKKy0gIHRoaXMtPnBvcyA9IHN0YXRpY19jYXN0PGNoYXIg Kj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZTsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0 b3IKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLS0gKGludCkgbm9leGNlcHQKKyt7Cisr ICBhdXRvIHJldCA9IGl0ZXJhdG9yICgqdGhpcyk7CisrICB0aGlzLT5wb3MgPSBzdGF0aWNfY2Fz dDxjaGFyICo+ICh0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlOworICAgcmV0dXJuIHJldDsKKyB9 CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9y ICZTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKz0oCistICAgIHR5cGVuYW1lIFNsaWNlPFQ+ OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0IHsKKy0gIHRoaXMtPnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47CisrdHlw ZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICYKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9y Kz0gKHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhj ZXB0CisreworKyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAr IHRoaXMtPnN0cmlkZSAqIG47CisgICByZXR1cm4gKnRoaXM7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvci09KAorLSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZl cmVuY2VfdHlwZSBuKSBub2V4Y2VwdCB7CistICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFy ICo+KHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGUgKiBuOworK3R5cGVuYW1lIFNsaWNlPFQ+Ojpp dGVyYXRvciAmCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci09ICh0eXBlbmFtZSBTbGlj ZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBub2V4Y2VwdAorK3sKKysgIHRoaXMt PnBvcyA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGUgKiBu OworICAgcmV0dXJuICp0aGlzOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisoCist ICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOworLSAgcmV0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47CisrdHlw ZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisg KHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5v ZXhjZXB0CisreworKyAgYXV0byByZXQgPSBpdGVyYXRvciAoKnRoaXMpOworKyAgcmV0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGUgKiBuOworICAg cmV0dXJuIHJldDsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xp Y2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItKAorLSAgICB0eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2Vw dCB7CistICBhdXRvIHJldCA9IGl0ZXJhdG9yKCp0aGlzKTsKKy0gIHJldC5wb3MgPSBzdGF0aWNf Y2FzdDxjaGFyICo+KHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGUgKiBuOworK3R5cGVuYW1lIFNs aWNlPFQ+OjppdGVyYXRvcgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItICh0eXBlbmFt ZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdAor K3sKKysgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlzKTsKKysgIHJldC5wb3MgPSBzdGF0aWNf Y2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlICogbjsKKyAgIHJldHVybiBy ZXQ7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIHR5cGVuYW1lIFNsaWNlPFQ+Ojpp dGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlCistU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0o Y29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CistICBhdXRvIGRpZmYgPSBz dGQ6OmRpc3RhbmNlKHN0YXRpY19jYXN0PGNoYXIgKj4ob3RoZXIucG9zKSwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpKTsKKy0gIHJl dHVybiBkaWZmIC8gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZm ZXJlbmNlX3R5cGU+KAorLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+c3RyaWRlKTsKKytTbGlj ZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBu b2V4Y2VwdAorK3sKKysgIGF1dG8gZGlmZiA9IHN0ZDo6ZGlzdGFuY2UgKHN0YXRpY19jYXN0PGNo YXIgKj4gKG90aGVyLnBvcyksIHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykpOworKyAg cmV0dXJuIGRpZmYgLyBzdGF0aWNfY2FzdDx0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRp ZmZlcmVuY2VfdHlwZT4gKHRoaXMtPnN0cmlkZSk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgorLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y ICZvdGhlcikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yPT0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQKKyt7CisgICBy ZXR1cm4gdGhpcy0+cG9zID09IG90aGVyLnBvczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CistYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Ig Jm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3Bl cmF0b3IhPSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIHJl dHVybiB0aGlzLT5wb3MgIT0gb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKy1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I8KGNvbnN0IGl0ZXJhdG9yICZv dGhlcikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yPCAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIHJldHVy biB0aGlzLT5wb3MgPCBvdGhlci5wb3M7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor LWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcjw9KGNvbnN0IGl0ZXJhdG9yICZvdGhl cikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9y PD0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQKKyt7CisgICByZXR1cm4g dGhpcy0+cG9zIDw9IG90aGVyLnBvczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cist Ym9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPihjb25zdCBpdGVyYXRvciAmb3RoZXIp IGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj4g KGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQKKyt7CisgICByZXR1cm4gdGhp cy0+cG9zID4gb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1ib29s IFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I+PShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNv bnN0IG5vZXhjZXB0IHsKKytib29sCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj49IChj b25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0CisreworICAgcmV0dXJuIHRoaXMt PnBvcyA+PSBvdGhlci5wb3M7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6YmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7 CisrdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCisrU2xpY2U8VD46OmJlZ2luICgpIGNvbnN0 IG5vZXhjZXB0CisreworICAgaXRlcmF0b3IgaXQ7CistICBpdC5wb3MgPSBzbGljZVB0cih0aGlz KTsKKy0gIGl0LnN0cmlkZSA9IHNpemVfb2Y8VD4oKTsKKysgIGl0LnBvcyA9IHNsaWNlUHRyICh0 aGlzKTsKKysgIGl0LnN0cmlkZSA9IHNpemVfb2Y8VD4gKCk7CisgICByZXR1cm4gaXQ7CisgfQor IAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBT bGljZTxUPjo6ZW5kKCkgY29uc3Qgbm9leGNlcHQgeworLSAgaXRlcmF0b3IgaXQgPSB0aGlzLT5i ZWdpbigpOworLSAgaXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPihpdC5wb3MpICsgaXQuc3Ry aWRlICogdGhpcy0+c2l6ZSgpOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcgorK1NsaWNl PFQ+OjplbmQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBpdGVyYXRvciBpdCA9IHRoaXMtPmJl Z2luICgpOworKyAgaXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAoaXQucG9zKSArIGl0LnN0 cmlkZSAqIHRoaXMtPnNpemUgKCk7CisgICByZXR1cm4gaXQ7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLXZvaWQgU2xpY2U8VD46OnN3YXAoU2xpY2UgJnJocykgbm9leGNlcHQgewor LSAgc3RkOjpzd2FwKCp0aGlzLCByaHMpOworK3ZvaWQKKytTbGljZTxUPjo6c3dhcCAoU2xpY2Ug JnJocykgbm9leGNlcHQKKyt7CisrICBzdGQ6OnN3YXAgKCp0aGlzLCByaHMpOworIH0KKyAjZW5k aWYgLy8gQ1hYQlJJREdFMV9SVVNUX1NMSUNFCisgCisgI2lmbmRlZiBDWFhCUklER0UxX1JVU1Rf Qk9YCisgI2RlZmluZSBDWFhCUklER0UxX1JVU1RfQk9YCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CistY2xhc3MgQm94IGZpbmFsIHsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgQm94IGZp bmFsCisreworIHB1YmxpYzoKKyAgIHVzaW5nIGVsZW1lbnRfdHlwZSA9IFQ7CistICB1c2luZyBj b25zdF9wb2ludGVyID0KKy0gICAgICB0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPHR5cGVuYW1l IHN0ZDo6YWRkX2NvbnN0PFQ+Ojp0eXBlPjo6dHlwZTsKKysgIHVzaW5nIGNvbnN0X3BvaW50ZXIg PSB0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPHR5cGVuYW1lIHN0ZDo6YWRkX2NvbnN0PFQ+Ojp0 eXBlPjo6dHlwZTsKKyAgIHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVy PFQ+Ojp0eXBlOworIAorLSAgQm94KCkgPSBkZWxldGU7CistICBCb3goQm94ICYmKSBub2V4Y2Vw dDsKKy0gIH5Cb3goKSBub2V4Y2VwdDsKKysgIEJveCAoKSA9IGRlbGV0ZTsKKysgIEJveCAoQm94 ICYmKSBub2V4Y2VwdDsKKysgIH5Cb3ggKCkgbm9leGNlcHQ7CisgCistICBleHBsaWNpdCBCb3go Y29uc3QgVCAmKTsKKy0gIGV4cGxpY2l0IEJveChUICYmKTsKKysgIGV4cGxpY2l0IEJveCAoY29u c3QgVCAmKTsKKysgIGV4cGxpY2l0IEJveCAoVCAmJik7CisgCistICBCb3ggJm9wZXJhdG9yPShC b3ggJiYpICYgbm9leGNlcHQ7CisrICBCb3ggJm9wZXJhdG9yPSAoQm94ICYmKSAmIG5vZXhjZXB0 OworIAorICAgY29uc3QgVCAqb3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3Qg VCAmb3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdCBUICZvcGVyYXRvciogKCkg Y29uc3Qgbm9leGNlcHQ7CisgICBUICpvcGVyYXRvci0+KCkgbm9leGNlcHQ7CistICBUICZvcGVy YXRvciooKSBub2V4Y2VwdDsKKysgIFQgJm9wZXJhdG9yKiAoKSBub2V4Y2VwdDsKKyAKKy0gIHRl bXBsYXRlIDx0eXBlbmFtZS4uLiBGaWVsZHM+CistICBzdGF0aWMgQm94IGluX3BsYWNlKEZpZWxk cyAmJi4uLik7CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gRmllbGRzPiBzdGF0aWMgQm94IGlu X3BsYWNlIChGaWVsZHMgJiYuLi4pOworIAorLSAgdm9pZCBzd2FwKEJveCAmKSBub2V4Y2VwdDsK KysgIHZvaWQgc3dhcCAoQm94ICYpIG5vZXhjZXB0OworIAorLSAgc3RhdGljIEJveCBmcm9tX3Jh dyhUICopIG5vZXhjZXB0OworKyAgc3RhdGljIEJveCBmcm9tX3JhdyAoVCAqKSBub2V4Y2VwdDsK KyAKKy0gIFQgKmludG9fcmF3KCkgbm9leGNlcHQ7CisrICBUICppbnRvX3JhdyAoKSBub2V4Y2Vw dDsKKyAKKyAgIC8qIERlcHJlY2F0ZWQgKi8gdXNpbmcgdmFsdWVfdHlwZSA9IGVsZW1lbnRfdHlw ZTsKKyAKKyBwcml2YXRlOgorICAgY2xhc3MgdW5pbml0OworICAgY2xhc3MgYWxsb2NhdGlvbjsK Ky0gIEJveCh1bmluaXQpIG5vZXhjZXB0OworLSAgdm9pZCBkcm9wKCkgbm9leGNlcHQ7CisrICBC b3ggKHVuaW5pdCkgbm9leGNlcHQ7CisrICB2b2lkIGRyb3AgKCkgbm9leGNlcHQ7CisgCistICBm cmllbmQgdm9pZCBzd2FwKEJveCAmbGhzLCBCb3ggJnJocykgbm9leGNlcHQgeyBsaHMuc3dhcChy aHMpOyB9CisrICBmcmllbmQgdm9pZAorKyAgc3dhcCAoQm94ICZsaHMsIEJveCAmcmhzKSBub2V4 Y2VwdAorKyAgeworKyAgICBsaHMuc3dhcCAocmhzKTsKKysgIH0KKyAKKyAgIFQgKnB0cjsKKyB9 OworIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIEJveDxUPjo6dW5pbml0IHt9Owor K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBCb3g8VD46OnVuaW5pdAorK3sKKyt9OworIAor LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIEJveDxUPjo6YWxsb2NhdGlvbiB7CistICBz dGF0aWMgVCAqYWxsb2MoKSBub2V4Y2VwdDsKKy0gIHN0YXRpYyB2b2lkIGRlYWxsb2MoVCAqKSBu b2V4Y2VwdDsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgQm94PFQ+OjphbGxvY2F0aW9u CisreworKyAgc3RhdGljIFQgKmFsbG9jICgpIG5vZXhjZXB0OworKyAgc3RhdGljIHZvaWQgZGVh bGxvYyAoVCAqKSBub2V4Y2VwdDsKKyAKKyBwdWJsaWM6CistICBhbGxvY2F0aW9uKCkgbm9leGNl cHQgOiBwdHIoYWxsb2MoKSkge30KKy0gIH5hbGxvY2F0aW9uKCkgbm9leGNlcHQgeworLSAgICBp ZiAodGhpcy0+cHRyKSB7CistICAgICAgZGVhbGxvYyh0aGlzLT5wdHIpOworLSAgICB9CisrICBh bGxvY2F0aW9uICgpIG5vZXhjZXB0IDogcHRyIChhbGxvYyAoKSkge30KKysgIH5hbGxvY2F0aW9u ICgpIG5vZXhjZXB0CisrICB7CisrICAgIGlmICh0aGlzLT5wdHIpCisrICAgICAgeworKyAgICAg ICAgZGVhbGxvYyAodGhpcy0+cHRyKTsKKysgICAgICB9CisgICB9CisgICBUICpwdHI7CisgfTsK KyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1Cb3g8VD46OkJveChCb3ggJiZvdGhlcikgbm9l eGNlcHQgOiBwdHIob3RoZXIucHRyKSB7CistICBvdGhlci5wdHIgPSBudWxscHRyOworLX0KKyt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+OjpCb3ggKEJveCAmJm90aGVyKSBub2V4Y2VwdCA6 IHB0ciAob3RoZXIucHRyKSB7IG90aGVyLnB0ciA9IG51bGxwdHI7IH0KKyAKKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1Cb3g8VD46OkJveChjb25zdCBUICZ2YWwpIHsKKyt0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gQm94PFQ+OjpCb3ggKGNvbnN0IFQgJnZhbCkKKyt7CisgICBhbGxvY2F0aW9uIGFs bG9jOworLSAgOjpuZXcgKGFsbG9jLnB0cikgVCh2YWwpOworKyAgOjpuZXcgKGFsbG9jLnB0cikg VCAodmFsKTsKKyAgIHRoaXMtPnB0ciA9IGFsbG9jLnB0cjsKKyAgIGFsbG9jLnB0ciA9IG51bGxw dHI7CisgfQorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLUJveDxUPjo6Qm94KFQgJiZ2YWwp IHsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+OjpCb3ggKFQgJiZ2YWwpCisreworICAg YWxsb2NhdGlvbiBhbGxvYzsKKy0gIDo6bmV3IChhbGxvYy5wdHIpIFQoc3RkOjptb3ZlKHZhbCkp OworKyAgOjpuZXcgKGFsbG9jLnB0cikgVCAoc3RkOjptb3ZlICh2YWwpKTsKKyAgIHRoaXMtPnB0 ciA9IGFsbG9jLnB0cjsKKyAgIGFsbG9jLnB0ciA9IG51bGxwdHI7CisgfQorIAorLXRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLUJveDxUPjo6fkJveCgpIG5vZXhjZXB0IHsKKy0gIGlmICh0aGlzLT5w dHIpIHsKKy0gICAgdGhpcy0+ZHJvcCgpOworLSAgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBC b3g8VD46On5Cb3ggKCkgbm9leGNlcHQKKyt7CisrICBpZiAodGhpcy0+cHRyKQorKyAgICB7Cisr ICAgICAgdGhpcy0+ZHJvcCAoKTsKKysgICAgfQorIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKy1Cb3g8VD4gJkJveDxUPjo6b3BlcmF0b3I9KEJveCAmJm90aGVyKSAmIG5vZXhjZXB0IHsK Ky0gIGlmICh0aGlzLT5wdHIpIHsKKy0gICAgdGhpcy0+ZHJvcCgpOworLSAgfQorK0JveDxUPiAm CisrQm94PFQ+OjpvcGVyYXRvcj0gKEJveCAmJm90aGVyKSAmIG5vZXhjZXB0CisreworKyAgaWYg KHRoaXMtPnB0cikKKysgICAgeworKyAgICAgIHRoaXMtPmRyb3AgKCk7CisrICAgIH0KKyAgIHRo aXMtPnB0ciA9IG90aGVyLnB0cjsKKyAgIG90aGVyLnB0ciA9IG51bGxwdHI7CisgICByZXR1cm4g KnRoaXM7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNvbnN0IFQgKkJveDxUPjo6 b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0IHsKKytjb25zdCBUICoKKytCb3g8VD46Om9wZXJh dG9yLT4oKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIHJldHVybiB0aGlzLT5wdHI7CisgfQorIAor IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNvbnN0IFQgJkJveDxUPjo6b3BlcmF0b3IqKCkgY29u c3Qgbm9leGNlcHQgeworK2NvbnN0IFQgJgorK0JveDxUPjo6b3BlcmF0b3IqICgpIGNvbnN0IG5v ZXhjZXB0CisreworICAgcmV0dXJuICp0aGlzLT5wdHI7CisgfQorIAorIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgorLVQgKkJveDxUPjo6b3BlcmF0b3ItPigpIG5vZXhjZXB0IHsKKytUICoKKytCb3g8 VD46Om9wZXJhdG9yLT4oKSBub2V4Y2VwdAorK3sKKyAgIHJldHVybiB0aGlzLT5wdHI7CisgfQor IAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgJkJveDxUPjo6b3BlcmF0b3IqKCkgbm9leGNl cHQgeworK1QgJgorK0JveDxUPjo6b3BlcmF0b3IqICgpIG5vZXhjZXB0CisreworICAgcmV0dXJu ICp0aGlzLT5wdHI7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIHRlbXBsYXRlIDx0 eXBlbmFtZS4uLiBGaWVsZHM+CistQm94PFQ+IEJveDxUPjo6aW5fcGxhY2UoRmllbGRzICYmLi4u ZmllbGRzKSB7CisrQm94PFQ+CisrQm94PFQ+Ojppbl9wbGFjZSAoRmllbGRzICYmLi4uZmllbGRz KQorK3sKKyAgIGFsbG9jYXRpb24gYWxsb2M7CisgICBhdXRvIHB0ciA9IGFsbG9jLnB0cjsKKy0g IDo6bmV3IChwdHIpIFR7c3RkOjpmb3J3YXJkPEZpZWxkcz4oZmllbGRzKS4uLn07CisrICA6Om5l dyAocHRyKSBUeyBzdGQ6OmZvcndhcmQ8RmllbGRzPiAoZmllbGRzKS4uLiB9OworICAgYWxsb2Mu cHRyID0gbnVsbHB0cjsKKy0gIHJldHVybiBmcm9tX3JhdyhwdHIpOworKyAgcmV0dXJuIGZyb21f cmF3IChwdHIpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy12b2lkIEJveDxUPjo6 c3dhcChCb3ggJnJocykgbm9leGNlcHQgeworK3ZvaWQKKytCb3g8VD46OnN3YXAgKEJveCAmcmhz KSBub2V4Y2VwdAorK3sKKyAgIHVzaW5nIHN0ZDo6c3dhcDsKKy0gIHN3YXAodGhpcy0+cHRyLCBy aHMucHRyKTsKKysgIHN3YXAgKHRoaXMtPnB0ciwgcmhzLnB0cik7CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLUJveDxUPiBCb3g8VD46OmZyb21fcmF3KFQgKnJhdykgbm9leGNlcHQg eworK0JveDxUPgorK0JveDxUPjo6ZnJvbV9yYXcgKFQgKnJhdykgbm9leGNlcHQKKyt7CisgICBC b3ggYm94ID0gdW5pbml0e307CisgICBib3gucHRyID0gcmF3OworICAgcmV0dXJuIGJveDsKKyB9 CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAqQm94PFQ+OjppbnRvX3JhdygpIG5vZXhj ZXB0IHsKKytUICoKKytCb3g8VD46OmludG9fcmF3ICgpIG5vZXhjZXB0CisreworICAgVCAqcmF3 ID0gdGhpcy0+cHRyOworICAgdGhpcy0+cHRyID0gbnVsbHB0cjsKKyAgIHJldHVybiByYXc7Cisg fQorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLUJveDxUPjo6Qm94KHVuaW5pdCkgbm9leGNl cHQge30KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gQm94PFQ+OjpCb3ggKHVuaW5pdCkgbm9leGNl cHQge30KKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX0JPWAorIAorICNpZm5kZWYgQ1hYQlJJ REdFMV9SVVNUX0JJVENPUFlfVAorICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX0JJVENPUFlfVAor LXN0cnVjdCB1bnNhZmVfYml0Y29weV90IGZpbmFsIHsKKy0gIGV4cGxpY2l0IHVuc2FmZV9iaXRj b3B5X3QoKSA9IGRlZmF1bHQ7Cisrc3RydWN0IHVuc2FmZV9iaXRjb3B5X3QgZmluYWwKKyt7Cisr ICBleHBsaWNpdCB1bnNhZmVfYml0Y29weV90ICgpID0gZGVmYXVsdDsKKyB9OworICNlbmRpZiAv LyBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCisgCitAQCAtNjY1LDI1NyArNzQxLDMwNyBAQCBj b25zdGV4cHIgdW5zYWZlX2JpdGNvcHlfdCB1bnNhZmVfYml0Y29weXt9OworIAorICNpZm5kZWYg Q1hYQlJJREdFMV9SVVNUX1ZFQworICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1ZFQworLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIFZlYyBmaW5hbCB7CisrdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IGNsYXNzIFZlYyBmaW5hbAorK3sKKyBwdWJsaWM6CisgICB1c2luZyB2YWx1ZV90eXBlID0g VDsKKyAKKy0gIFZlYygpIG5vZXhjZXB0OworLSAgVmVjKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxU Pik7CistICBWZWMoY29uc3QgVmVjICYpOworLSAgVmVjKFZlYyAmJikgbm9leGNlcHQ7CistICB+ VmVjKCkgbm9leGNlcHQ7CistCistICBWZWMgJm9wZXJhdG9yPShWZWMgJiYpICYgbm9leGNlcHQ7 CistICBWZWMgJm9wZXJhdG9yPShjb25zdCBWZWMgJikgJjsKKy0KKy0gIHN0ZDo6c2l6ZV90IHNp emUoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKKy0g IGNvbnN0IFQgKmRhdGEoKSBjb25zdCBub2V4Y2VwdDsKKy0gIFQgKmRhdGEoKSBub2V4Y2VwdDsK Ky0gIHN0ZDo6c2l6ZV90IGNhcGFjaXR5KCkgY29uc3Qgbm9leGNlcHQ7CistCistICBjb25zdCBU ICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3QgVCAm YXQoc3RkOjpzaXplX3QgbikgY29uc3Q7CistICBjb25zdCBUICZmcm9udCgpIGNvbnN0IG5vZXhj ZXB0OworLSAgY29uc3QgVCAmYmFjaygpIGNvbnN0IG5vZXhjZXB0OworLQorLSAgVCAmb3BlcmF0 b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdDsKKy0gIFQgJmF0KHN0ZDo6c2l6ZV90IG4pOwor LSAgVCAmZnJvbnQoKSBub2V4Y2VwdDsKKy0gIFQgJmJhY2soKSBub2V4Y2VwdDsKKy0KKy0gIHZv aWQgcmVzZXJ2ZShzdGQ6OnNpemVfdCBuZXdfY2FwKTsKKy0gIHZvaWQgcHVzaF9iYWNrKGNvbnN0 IFQgJnZhbHVlKTsKKy0gIHZvaWQgcHVzaF9iYWNrKFQgJiZ2YWx1ZSk7CistICB0ZW1wbGF0ZSA8 dHlwZW5hbWUuLi4gQXJncz4KKy0gIHZvaWQgZW1wbGFjZV9iYWNrKEFyZ3MgJiYuLi5hcmdzKTsK Ky0gIHZvaWQgdHJ1bmNhdGUoc3RkOjpzaXplX3QgbGVuKTsKKy0gIHZvaWQgY2xlYXIoKTsKKysg IFZlYyAoKSBub2V4Y2VwdDsKKysgIFZlYyAoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+KTsKKysg IFZlYyAoY29uc3QgVmVjICYpOworKyAgVmVjIChWZWMgJiYpIG5vZXhjZXB0OworKyAgflZlYyAo KSBub2V4Y2VwdDsKKysKKysgIFZlYyAmb3BlcmF0b3I9IChWZWMgJiYpICYgbm9leGNlcHQ7Cisr ICBWZWMgJm9wZXJhdG9yPSAoY29uc3QgVmVjICYpICY7CisrCisrICBzdGQ6OnNpemVfdCBzaXpl ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBlbXB0eSAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGNvbnN0IFQgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBUICpkYXRhICgpIG5vZXhjZXB0 OworKyAgc3RkOjpzaXplX3QgY2FwYWNpdHkgKCkgY29uc3Qgbm9leGNlcHQ7CisrCisrICBjb25z dCBUICZvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0 IFQgJmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdDsKKysgIGNvbnN0IFQgJmZyb250ICgpIGNvbnN0 IG5vZXhjZXB0OworKyAgY29uc3QgVCAmYmFjayAoKSBjb25zdCBub2V4Y2VwdDsKKysKKysgIFQg Jm9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0OworKyAgVCAmYXQgKHN0ZDo6c2l6 ZV90IG4pOworKyAgVCAmZnJvbnQgKCkgbm9leGNlcHQ7CisrICBUICZiYWNrICgpIG5vZXhjZXB0 OworKworKyAgdm9pZCByZXNlcnZlIChzdGQ6OnNpemVfdCBuZXdfY2FwKTsKKysgIHZvaWQgcHVz aF9iYWNrIChjb25zdCBUICZ2YWx1ZSk7CisrICB2b2lkIHB1c2hfYmFjayAoVCAmJnZhbHVlKTsK KysgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPiB2b2lkIGVtcGxhY2VfYmFjayAoQXJncyAm Ji4uLmFyZ3MpOworKyAgdm9pZCB0cnVuY2F0ZSAoc3RkOjpzaXplX3QgbGVuKTsKKysgIHZvaWQg Y2xlYXIgKCk7CisgCisgICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjsKKy0gIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7CistICBpdGVyYXRvciBlbmQoKSBu b2V4Y2VwdDsKKysgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhjZXB0OworKyAgaXRlcmF0b3IgZW5k ICgpIG5vZXhjZXB0OworIAorICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSB0eXBlbmFtZSBTbGlj ZTxjb25zdCBUPjo6aXRlcmF0b3I7CistICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5v ZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25z dF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNl bmQoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29u c3RfaXRlcmF0b3IgY2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3Ig Y2VuZCAoKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIHZvaWQgc3dhcChWZWMgJikgbm9leGNlcHQ7 CisrICB2b2lkIHN3YXAgKFZlYyAmKSBub2V4Y2VwdDsKKyAKKy0gIFZlYyh1bnNhZmVfYml0Y29w eV90LCBjb25zdCBWZWMgJikgbm9leGNlcHQ7CisrICBWZWMgKHVuc2FmZV9iaXRjb3B5X3QsIGNv bnN0IFZlYyAmKSBub2V4Y2VwdDsKKyAKKyBwcml2YXRlOgorLSAgdm9pZCByZXNlcnZlX3RvdGFs KHN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OworLSAgdm9pZCBzZXRfbGVuKHN0ZDo6c2l6 ZV90IGxlbikgbm9leGNlcHQ7CistICB2b2lkIGRyb3AoKSBub2V4Y2VwdDsKKysgIHZvaWQgcmVz ZXJ2ZV90b3RhbCAoc3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7CisrICB2b2lkIHNldF9s ZW4gKHN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7CisrICB2b2lkIGRyb3AgKCkgbm9leGNlcHQ7 CisgCistICBmcmllbmQgdm9pZCBzd2FwKFZlYyAmbGhzLCBWZWMgJnJocykgbm9leGNlcHQgeyBs aHMuc3dhcChyaHMpOyB9CisrICBmcmllbmQgdm9pZAorKyAgc3dhcCAoVmVjICZsaHMsIFZlYyAm cmhzKSBub2V4Y2VwdAorKyAgeworKyAgICBsaHMuc3dhcCAocmhzKTsKKysgIH0KKyAKKyAgIHN0 ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+IHJlcHI7CisgfTsKKyAKKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy1WZWM8VD46OlZlYyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaW5pdCkgOiBW ZWN7fSB7CistICB0aGlzLT5yZXNlcnZlX3RvdGFsKGluaXQuc2l6ZSgpKTsKKy0gIHN0ZDo6bW92 ZShpbml0LmJlZ2luKCksIGluaXQuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcigqdGhpcykpOwor K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAoc3RkOjppbml0aWFsaXplcl9saXN0 PFQ+IGluaXQpIDogVmVje30KKyt7CisrICB0aGlzLT5yZXNlcnZlX3RvdGFsIChpbml0LnNpemUg KCkpOworKyAgc3RkOjptb3ZlIChpbml0LmJlZ2luICgpLCBpbml0LmVuZCAoKSwgc3RkOjpiYWNr X2luc2VydGVyICgqdGhpcykpOworIH0KKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1WZWM8 VD46OlZlYyhjb25zdCBWZWMgJm90aGVyKSA6IFZlYygpIHsKKy0gIHRoaXMtPnJlc2VydmVfdG90 YWwob3RoZXIuc2l6ZSgpKTsKKy0gIHN0ZDo6Y29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQo KSwgc3RkOjpiYWNrX2luc2VydGVyKCp0aGlzKSk7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFZl YzxUPjo6VmVjIChjb25zdCBWZWMgJm90aGVyKSA6IFZlYyAoKQorK3sKKysgIHRoaXMtPnJlc2Vy dmVfdG90YWwgKG90aGVyLnNpemUgKCkpOworKyAgc3RkOjpjb3B5IChvdGhlci5iZWdpbiAoKSwg b3RoZXIuZW5kICgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIgKCp0aGlzKSk7CisgfQorIAorLXRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLVZlYzxUPjo6VmVjKFZlYyAmJm90aGVyKSBub2V4Y2VwdCA6IHJl cHIob3RoZXIucmVwcikgeworLSAgbmV3ICgmb3RoZXIpIFZlYygpOworK3RlbXBsYXRlIDx0eXBl bmFtZSBUPiBWZWM8VD46OlZlYyAoVmVjICYmb3RoZXIpIG5vZXhjZXB0IDogcmVwciAob3RoZXIu cmVwcikKKyt7CisrICBuZXcgKCZvdGhlcikgVmVjICgpOworIH0KKyAKKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy1WZWM8VD46On5WZWMoKSBub2V4Y2VwdCB7CistICB0aGlzLT5kcm9wKCk7Cist fQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46On5WZWMgKCkgbm9leGNlcHQgeyB0aGlz LT5kcm9wICgpOyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVmVjPFQ+ICZWZWM8VD46 Om9wZXJhdG9yPShWZWMgJiZvdGhlcikgJiBub2V4Y2VwdCB7CistICB0aGlzLT5kcm9wKCk7Cisr VmVjPFQ+ICYKKytWZWM8VD46Om9wZXJhdG9yPSAoVmVjICYmb3RoZXIpICYgbm9leGNlcHQKKyt7 CisrICB0aGlzLT5kcm9wICgpOworICAgdGhpcy0+cmVwciA9IG90aGVyLnJlcHI7CistICBuZXcg KCZvdGhlcikgVmVjKCk7CisrICBuZXcgKCZvdGhlcikgVmVjICgpOworICAgcmV0dXJuICp0aGlz OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1WZWM8VD4gJlZlYzxUPjo6b3BlcmF0 b3I9KGNvbnN0IFZlYyAmb3RoZXIpICYgeworLSAgaWYgKHRoaXMgIT0gJm90aGVyKSB7CistICAg IHRoaXMtPmRyb3AoKTsKKy0gICAgbmV3ICh0aGlzKSBWZWMob3RoZXIpOworLSAgfQorK1ZlYzxU PiAmCisrVmVjPFQ+OjpvcGVyYXRvcj0gKGNvbnN0IFZlYyAmb3RoZXIpICYKKyt7CisrICBpZiAo dGhpcyAhPSAmb3RoZXIpCisrICAgIHsKKysgICAgICB0aGlzLT5kcm9wICgpOworKyAgICAgIG5l dyAodGhpcykgVmVjIChvdGhlcik7CisrICAgIH0KKyAgIHJldHVybiAqdGhpczsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistYm9vbCBWZWM8VD46OmVtcHR5KCkgY29uc3Qgbm9leGNl cHQgeworLSAgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOworK2Jvb2wKKytWZWM8VD46OmVtcHR5 ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPnNpemUgKCkgPT0gMDsKKyB9 CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAqVmVjPFQ+OjpkYXRhKCkgbm9leGNlcHQg eworLSAgcmV0dXJuIGNvbnN0X2Nhc3Q8VCAqPihjb25zdF9jYXN0PGNvbnN0IFZlYzxUPiAqPih0 aGlzKS0+ZGF0YSgpKTsKKytUICoKKytWZWM8VD46OmRhdGEgKCkgbm9leGNlcHQKKyt7CisrICBy ZXR1cm4gY29uc3RfY2FzdDxUICo+IChjb25zdF9jYXN0PGNvbnN0IFZlYzxUPiAqPiAodGhpcykt PmRhdGEgKCkpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jb25zdCBUICZWZWM8 VD46Om9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQgeworLSAgYXNzZXJ0 KG4gPCB0aGlzLT5zaXplKCkpOworLSAgYXV0byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25z dCBjaGFyICo+KHRoaXMtPmRhdGEoKSk7CistICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u c3QgVCAqPihkYXRhICsgbiAqIHNpemVfb2Y8VD4oKSk7CisrY29uc3QgVCAmCisrVmVjPFQ+Ojpv cGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGFzc2VydCAo biA8IHRoaXMtPnNpemUgKCkpOworKyAgYXV0byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25z dCBjaGFyICo+ICh0aGlzLT5kYXRhICgpKTsKKysgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxj b25zdCBUICo+IChkYXRhICsgbiAqIHNpemVfb2Y8VD4gKCkpOworIH0KKyAKKyB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1jb25zdCBUICZWZWM8VD46OmF0KHN0ZDo6c2l6ZV90IG4pIGNvbnN0IHsK Ky0gIGlmIChuID49IHRoaXMtPnNpemUoKSkgeworLSAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5n ZT4oInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKy0gIH0KKytjb25zdCBUICYKKytW ZWM8VD46OmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdAorK3sKKysgIGlmIChuID49IHRoaXMtPnNp emUgKCkpCisrICAgIHsKKysgICAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4gKCJydXN0OjpW ZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7CisrICAgIH0KKyAgIHJldHVybiAoKnRoaXMpW25dOwor IH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jb25zdCBUICZWZWM8VD46OmZyb250KCkg Y29uc3Qgbm9leGNlcHQgeworLSAgYXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKKytjb25zdCBUICYK KytWZWM8VD46OmZyb250ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNzZXJ0ICghdGhpcy0+ ZW1wdHkgKCkpOworICAgcmV0dXJuICgqdGhpcylbMF07CisgfQorIAorIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgorLWNvbnN0IFQgJlZlYzxUPjo6YmFjaygpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGFz c2VydCghdGhpcy0+ZW1wdHkoKSk7CistICByZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXplKCkgLSAx XTsKKytjb25zdCBUICYKKytWZWM8VD46OmJhY2sgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBh c3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7CisrICByZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXplICgp IC0gMV07CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgJlZlYzxUPjo6b3BlcmF0 b3JbXShzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdCB7CistICBhc3NlcnQobiA8IHRoaXMtPnNpemUo KSk7CistICBhdXRvIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIgKj4odGhpcy0+ZGF0YSgp KTsKKy0gIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+KGRhdGEgKyBuICogc2l6ZV9vZjxU PigpKTsKKytUICYKKytWZWM8VD46Om9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90IG4pIG5vZXhjZXB0 CisreworKyAgYXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAoKSk7CisrICBhdXRvIGRhdGEgPSByZWlu dGVycHJldF9jYXN0PGNoYXIgKj4gKHRoaXMtPmRhdGEgKCkpOworKyAgcmV0dXJuICpyZWludGVy cHJldF9jYXN0PFQgKj4gKGRhdGEgKyBuICogc2l6ZV9vZjxUPiAoKSk7CisgfQorIAorIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLVQgJlZlYzxUPjo6YXQoc3RkOjpzaXplX3QgbikgeworLSAgaWYg KG4gPj0gdGhpcy0+c2l6ZSgpKSB7CistICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPigicnVz dDo6VmVjIGluZGV4IG91dCBvZiByYW5nZSIpOworLSAgfQorK1QgJgorK1ZlYzxUPjo6YXQgKHN0 ZDo6c2l6ZV90IG4pCisreworKyAgaWYgKG4gPj0gdGhpcy0+c2l6ZSAoKSkKKysgICAgeworKyAg ICAgIHBhbmljPHN0ZDo6b3V0X29mX3JhbmdlPiAoInJ1c3Q6OlZlYyBpbmRleCBvdXQgb2YgcmFu Z2UiKTsKKysgICAgfQorICAgcmV0dXJuICgqdGhpcylbbl07CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLVQgJlZlYzxUPjo6ZnJvbnQoKSBub2V4Y2VwdCB7CistICBhc3NlcnQoIXRo aXMtPmVtcHR5KCkpOworK1QgJgorK1ZlYzxUPjo6ZnJvbnQgKCkgbm9leGNlcHQKKyt7CisrICBh c3NlcnQgKCF0aGlzLT5lbXB0eSAoKSk7CisgICByZXR1cm4gKCp0aGlzKVswXTsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmVmVjPFQ+OjpiYWNrKCkgbm9leGNlcHQgeworLSAg YXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKKy0gIHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUoKSAt IDFdOworK1QgJgorK1ZlYzxUPjo6YmFjayAoKSBub2V4Y2VwdAorK3sKKysgIGFzc2VydCAoIXRo aXMtPmVtcHR5ICgpKTsKKysgIHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUgKCkgLSAxXTsKKyB9 CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9pZCBWZWM8VD46OnJlc2VydmUoc3RkOjpz aXplX3QgbmV3X2NhcCkgeworLSAgdGhpcy0+cmVzZXJ2ZV90b3RhbChuZXdfY2FwKTsKKyt2b2lk CisrVmVjPFQ+OjpyZXNlcnZlIChzdGQ6OnNpemVfdCBuZXdfY2FwKQorK3sKKysgIHRoaXMtPnJl c2VydmVfdG90YWwgKG5ld19jYXApOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy12 b2lkIFZlYzxUPjo6cHVzaF9iYWNrKGNvbnN0IFQgJnZhbHVlKSB7CistICB0aGlzLT5lbXBsYWNl X2JhY2sodmFsdWUpOworK3ZvaWQKKytWZWM8VD46OnB1c2hfYmFjayAoY29uc3QgVCAmdmFsdWUp CisreworKyAgdGhpcy0+ZW1wbGFjZV9iYWNrICh2YWx1ZSk7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLXZvaWQgVmVjPFQ+OjpwdXNoX2JhY2soVCAmJnZhbHVlKSB7CistICB0aGlz LT5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKHZhbHVlKSk7Cisrdm9pZAorK1ZlYzxUPjo6cHVzaF9i YWNrIChUICYmdmFsdWUpCisreworKyAgdGhpcy0+ZW1wbGFjZV9iYWNrIChzdGQ6Om1vdmUgKHZh bHVlKSk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIHRlbXBsYXRlIDx0eXBlbmFt ZS4uLiBBcmdzPgorLXZvaWQgVmVjPFQ+OjplbXBsYWNlX2JhY2soQXJncyAmJi4uLmFyZ3MpIHsK Ky0gIGF1dG8gc2l6ZSA9IHRoaXMtPnNpemUoKTsKKy0gIHRoaXMtPnJlc2VydmVfdG90YWwoc2l6 ZSArIDEpOworLSAgOjpuZXcgKHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihyZWludGVycHJldF9jYXN0 PGNoYXIgKj4odGhpcy0+ZGF0YSgpKSArCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemUgKiBzaXplX29mPFQ+KCkpKQorLSAgICAgIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3Mp Li4uKTsKKy0gIHRoaXMtPnNldF9sZW4oc2l6ZSArIDEpOworK3ZvaWQKKytWZWM8VD46OmVtcGxh Y2VfYmFjayAoQXJncyAmJi4uLmFyZ3MpCisreworKyAgYXV0byBzaXplID0gdGhpcy0+c2l6ZSAo KTsKKysgIHRoaXMtPnJlc2VydmVfdG90YWwgKHNpemUgKyAxKTsKKysgIDo6bmV3IChyZWludGVy cHJldF9jYXN0PFQgKj4gKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPiAodGhpcy0+ZGF0YSAoKSkg KyBzaXplICogc2l6ZV9vZjxUPiAoKSkpCisrICAgICAgVCAoc3RkOjpmb3J3YXJkPEFyZ3M+IChh cmdzKS4uLik7CisrICB0aGlzLT5zZXRfbGVuIChzaXplICsgMSk7CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLXZvaWQgVmVjPFQ+OjpjbGVhcigpIHsKKy0gIHRoaXMtPnRydW5jYXRl KDApOworK3ZvaWQKKytWZWM8VD46OmNsZWFyICgpCisreworKyAgdGhpcy0+dHJ1bmNhdGUgKDAp OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBWZWM8VD46Oml0ZXJh dG9yIFZlYzxUPjo6YmVnaW4oKSBub2V4Y2VwdCB7CistICByZXR1cm4gU2xpY2U8VD4odGhpcy0+ ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmJlZ2luKCk7CisrdHlwZW5hbWUgVmVjPFQ+OjppdGVyYXRv cgorK1ZlYzxUPjo6YmVnaW4gKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gU2xpY2U8VD4gKHRo aXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkpLmJlZ2luICgpOworIH0KKyAKKyB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yIFZlYzxUPjo6ZW5kKCkgbm9l eGNlcHQgeworLSAgcmV0dXJuIFNsaWNlPFQ+KHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5l bmQoKTsKKyt0eXBlbmFtZSBWZWM8VD46Oml0ZXJhdG9yCisrVmVjPFQ+OjplbmQgKCkgbm9leGNl cHQKKyt7CisrICByZXR1cm4gU2xpY2U8VD4gKHRoaXMtPmRhdGEgKCksIHRoaXMtPnNpemUgKCkp LmVuZCAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgVmVjPFQ+ Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmJlZ2luKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0 dXJuIHRoaXMtPmNiZWdpbigpOworK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IKKytW ZWM8VD46OmJlZ2luICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPmNiZWdp biAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgVmVjPFQ+Ojpj b25zdF9pdGVyYXRvciBWZWM8VD46OmVuZCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiB0 aGlzLT5jZW5kKCk7CisrdHlwZW5hbWUgVmVjPFQ+Ojpjb25zdF9pdGVyYXRvcgorK1ZlYzxUPjo6 ZW5kICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPmNlbmQgKCk7CisgfQor IAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0 b3IgVmVjPFQ+OjpjYmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gU2xpY2U8Y29u c3QgVD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmJlZ2luKCk7CisrdHlwZW5hbWUgVmVj PFQ+Ojpjb25zdF9pdGVyYXRvcgorK1ZlYzxUPjo6Y2JlZ2luICgpIGNvbnN0IG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+ICh0aGlzLT5kYXRhICgpLCB0aGlzLT5zaXplICgp KS5iZWdpbiAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgVmVj PFQ+Ojpjb25zdF9pdGVyYXRvciBWZWM8VD46OmNlbmQoKSBjb25zdCBub2V4Y2VwdCB7CistICBy ZXR1cm4gU2xpY2U8Y29uc3QgVD4odGhpcy0+ZGF0YSgpLCB0aGlzLT5zaXplKCkpLmVuZCgpOwor K3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IKKytWZWM8VD46OmNlbmQgKCkgY29uc3Qg bm9leGNlcHQKKyt7CisrICByZXR1cm4gU2xpY2U8Y29uc3QgVD4gKHRoaXMtPmRhdGEgKCksIHRo aXMtPnNpemUgKCkpLmVuZCAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9p ZCBWZWM8VD46OnN3YXAoVmVjICZyaHMpIG5vZXhjZXB0IHsKKyt2b2lkCisrVmVjPFQ+Ojpzd2Fw IChWZWMgJnJocykgbm9leGNlcHQKKyt7CisgICB1c2luZyBzdGQ6OnN3YXA7CistICBzd2FwKHRo aXMtPnJlcHIsIHJocy5yZXByKTsKKysgIHN3YXAgKHRoaXMtPnJlcHIsIHJocy5yZXByKTsKKyB9 CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVmVjPFQ+OjpWZWModW5zYWZlX2JpdGNvcHlf dCwgY29uc3QgVmVjICZiaXRzKSBub2V4Y2VwdCA6IHJlcHIoYml0cy5yZXByKSB7fQorK3RlbXBs YXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46OlZlYyAodW5zYWZlX2JpdGNvcHlfdCwgY29uc3QgVmVj ICZiaXRzKSBub2V4Y2VwdCA6IHJlcHIgKGJpdHMucmVwcikge30KKyAjZW5kaWYgLy8gQ1hYQlJJ REdFMV9SVVNUX1ZFQworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9SVVNUX0VSUk9SCisgI2RlZmlu ZSBDWFhCUklER0UxX1JVU1RfRVJST1IKKy1jbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBzdGQ6 OmV4Y2VwdGlvbiB7CisrY2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24K Kyt7CisgcHVibGljOgorLSAgRXJyb3IoY29uc3QgRXJyb3IgJik7CistICBFcnJvcihFcnJvciAm Jikgbm9leGNlcHQ7CistICB+RXJyb3IoKSBub2V4Y2VwdCBvdmVycmlkZTsKKysgIEVycm9yIChj b25zdCBFcnJvciAmKTsKKysgIEVycm9yIChFcnJvciAmJikgbm9leGNlcHQ7CisrICB+RXJyb3Ig KCkgbm9leGNlcHQgb3ZlcnJpZGU7CisgCistICBFcnJvciAmb3BlcmF0b3I9KGNvbnN0IEVycm9y ICYpICY7CistICBFcnJvciAmb3BlcmF0b3I9KEVycm9yICYmKSAmIG5vZXhjZXB0OworKyAgRXJy b3IgJm9wZXJhdG9yPSAoY29uc3QgRXJyb3IgJikgJjsKKysgIEVycm9yICZvcGVyYXRvcj0gKEVy cm9yICYmKSAmIG5vZXhjZXB0OworIAorLSAgY29uc3QgY2hhciAqd2hhdCgpIGNvbnN0IG5vZXhj ZXB0IG92ZXJyaWRlOworKyAgY29uc3QgY2hhciAqd2hhdCAoKSBjb25zdCBub2V4Y2VwdCBvdmVy cmlkZTsKKyAKKyBwcml2YXRlOgorLSAgRXJyb3IoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBF cnJvciAoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICBmcmllbmQgaW1wbDxFcnJvcj47CisgICBj b25zdCBjaGFyICptc2c7CisgICBzdGQ6OnNpemVfdCBsZW47CitAQCAtOTI0LDE4OCArMTA1MCwy MzkgQEAgY2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24geworIAorICNp Zm5kZWYgQ1hYQlJJREdFMV9SVVNUX09QQVFVRQorICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX09Q QVFVRQorLWNsYXNzIE9wYXF1ZSB7CisrY2xhc3MgT3BhcXVlCisreworIHB1YmxpYzoKKy0gIE9w YXF1ZSgpID0gZGVsZXRlOworLSAgT3BhcXVlKGNvbnN0IE9wYXF1ZSAmKSA9IGRlbGV0ZTsKKy0g IH5PcGFxdWUoKSA9IGRlbGV0ZTsKKysgIE9wYXF1ZSAoKSA9IGRlbGV0ZTsKKysgIE9wYXF1ZSAo Y29uc3QgT3BhcXVlICYpID0gZGVsZXRlOworKyAgfk9wYXF1ZSAoKSA9IGRlbGV0ZTsKKyB9Owor ICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfT1BBUVVFCisgCisgI2lmbmRlZiBDWFhCUklER0Ux X0lTX0NPTVBMRVRFCisgI2RlZmluZSBDWFhCUklER0UxX0lTX0NPTVBMRVRFCistbmFtZXNwYWNl IGRldGFpbCB7CistbmFtZXNwYWNlIHsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg PSBzdGQ6OnNpemVfdD4KKy1zdHJ1Y3QgaXNfY29tcGxldGUgOiBzdGQ6OmZhbHNlX3R5cGUge307 CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RydWN0IGlzX2NvbXBsZXRlPFQsIGRlY2x0eXBl KHNpemVvZihUKSk+IDogc3RkOjp0cnVlX3R5cGUge307CisrbmFtZXNwYWNlIGRldGFpbAorK3sK KytuYW1lc3BhY2UKKyt7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjpz aXplX3Q+IHN0cnVjdCBpc19jb21wbGV0ZSA6IHN0ZDo6ZmFsc2VfdHlwZQorK3sKKyt9OworK3Rl bXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfY29tcGxldGU8VCwgZGVjbHR5cGUgKHNpemVv ZiAoVCkpPiA6IHN0ZDo6dHJ1ZV90eXBlCisreworK307CisgfSAvLyBuYW1lc3BhY2UKKyB9IC8v IG5hbWVzcGFjZSBkZXRhaWwKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9JU19DT01QTEVURQorIAor ICNpZm5kZWYgQ1hYQlJJREdFMV9MQVlPVVQKKyAjZGVmaW5lIENYWEJSSURHRTFfTEFZT1VUCist Y2xhc3MgbGF5b3V0IHsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgZnJpZW5kIHN0ZDo6 c2l6ZV90IHNpemVfb2YoKTsKKytjbGFzcyBsYXlvdXQKKyt7CisrICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4gZnJpZW5kIHN0ZDo6c2l6ZV90IHNpemVfb2YgKCk7CisrICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4gZnJpZW5kIHN0ZDo6c2l6ZV90IGFsaWduX29mICgpOworICAgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CistICBmcmllbmQgc3RkOjpzaXplX3QgYWxpZ25fb2YoKTsKKy0gIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLSAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFz ZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdGQ6OnNpemVfdD46OnR5cGUKKy0gIGRvX3NpemVfb2YoKSB7CistICAgIHJldHVybiBUOjps YXlvdXQ6OnNpemUoKTsKKysgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz X2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQorKyAgZG9fc2l6 ZV9vZiAoKQorKyAgeworKyAgICByZXR1cm4gVDo6bGF5b3V0OjpzaXplICgpOworICAgfQorICAg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8 IXN0ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdGQ6OnNpemVfdD46OnR5cGUKKy0gIGRvX3NpemVfb2YoKSB7CistICAg IHJldHVybiBzaXplb2YoVCk7CisrICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0 ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCisrICBk b19zaXplX29mICgpCisrICB7CisrICAgIHJldHVybiBzaXplb2YgKFQpOworICAgfQorICAgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistICBzdGF0aWMKKy0gICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJs ZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCist ICAgICAgc2l6ZV9vZigpIHsKKy0gICAgcmV0dXJuIGRvX3NpemVfb2Y8VD4oKTsKKysgIHN0YXRp YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwg c3RkOjpzaXplX3Q+Ojp0eXBlCisrICBzaXplX29mICgpCisrICB7CisrICAgIHJldHVybiBkb19z aXplX29mPFQ+ICgpOworICAgfQorICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistICBzdGF0aWMg dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVl LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Pjo6dHlwZQor LSAgZG9fYWxpZ25fb2YoKSB7CistICAgIHJldHVybiBUOjpsYXlvdXQ6OmFsaWduKCk7CisrICBz dGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46 OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKKysgIGRvX2FsaWduX29mICgpCisrICB7CisrICAg IHJldHVybiBUOjpsYXlvdXQ6OmFsaWduICgpOworICAgfQorICAgdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CistICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfYmFzZV9vZjxP cGFxdWUsIFQ+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6 OnNpemVfdD46OnR5cGUKKy0gIGRvX2FsaWduX29mKCkgeworLSAgICByZXR1cm4gYWxpZ25vZihU KTsKKysgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19iYXNlX29mPE9w YXF1ZSwgVD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUKKysgIGRvX2FsaWduX29mICgpCisr ICB7CisrICAgIHJldHVybiBhbGlnbm9mIChUKTsKKyAgIH0KKyAgIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgorLSAgc3RhdGljCistICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ZGV0YWlsOjpp c19jb21wbGV0ZTxUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQorLSAgICAgIGFsaWduX29m KCkgeworLSAgICByZXR1cm4gZG9fYWxpZ25fb2Y8VD4oKTsKKysgIHN0YXRpYyB0eXBlbmFtZSBz dGQ6OmVuYWJsZV9pZjxkZXRhaWw6OmlzX2NvbXBsZXRlPFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+ Ojp0eXBlCisrICBhbGlnbl9vZiAoKQorKyAgeworKyAgICByZXR1cm4gZG9fYWxpZ25fb2Y8VD4g KCk7CisgICB9CisgfTsKKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1zdGQ6OnNpemVfdCBz aXplX29mKCkgeworLSAgcmV0dXJuIGxheW91dDo6c2l6ZV9vZjxUPigpOworK3N0ZDo6c2l6ZV90 Cisrc2l6ZV9vZiAoKQorK3sKKysgIHJldHVybiBsYXlvdXQ6OnNpemVfb2Y8VD4gKCk7CisgfQor IAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXN0ZDo6c2l6ZV90IGFsaWduX29mKCkgeworLSAg cmV0dXJuIGxheW91dDo6YWxpZ25fb2Y8VD4oKTsKKytzdGQ6OnNpemVfdAorK2FsaWduX29mICgp CisreworKyAgcmV0dXJuIGxheW91dDo6YWxpZ25fb2Y8VD4gKCk7CisgfQorICNlbmRpZiAvLyBD WFhCUklER0UxX0xBWU9VVAorIAorLWNsYXNzIFN0cjo6dW5pbml0IHt9OworLWlubGluZSBTdHI6 OlN0cih1bmluaXQpIG5vZXhjZXB0IHt9CisrY2xhc3MgU3RyOjp1bmluaXQKKyt7CisrfTsKKytp bmxpbmUgU3RyOjpTdHIgKHVuaW5pdCkgbm9leGNlcHQge30KKyAKKy10ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy1jbGFzcyBTbGljZTxUPjo6dW5pbml0IHt9OworLXRlbXBsYXRlIDx0eXBlbmFtZSBU PgorLWlubGluZSBTbGljZTxUPjo6U2xpY2UodW5pbml0KSBub2V4Y2VwdCB7fQorK3RlbXBsYXRl IDx0eXBlbmFtZSBUPiBjbGFzcyBTbGljZTxUPjo6dW5pbml0CisreworK307CisrdGVtcGxhdGUg PHR5cGVuYW1lIFQ+IGlubGluZSBTbGljZTxUPjo6U2xpY2UgKHVuaW5pdCkgbm9leGNlcHQge30K KyAKKy1uYW1lc3BhY2UgcmVwciB7CisrbmFtZXNwYWNlIHJlcHIKKyt7CisgdXNpbmcgRmF0ID0g OjpzdGQ6OmFycmF5PDo6c3RkOjp1aW50cHRyX3QsIDI+OworIAorLXN0cnVjdCBQdHJMZW4gZmlu YWwgeworK3N0cnVjdCBQdHJMZW4gZmluYWwKKyt7CisgICB2b2lkICpwdHI7CisgICA6OnN0ZDo6 c2l6ZV90IGxlbjsKKyB9OworIH0gLy8gbmFtZXNwYWNlIHJlcHIKKyAKKy1uYW1lc3BhY2UgZGV0 YWlsIHsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkICo+Cistc3RydWN0 IG9wZXJhdG9yX25ldyB7CistICB2b2lkICpvcGVyYXRvcigpKDo6c3RkOjpzaXplX3Qgc3opIHsg cmV0dXJuIDo6b3BlcmF0b3IgbmV3KHN6KTsgfQorK25hbWVzcGFjZSBkZXRhaWwKKyt7CisrdGVt cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZCAqPiBzdHJ1Y3Qgb3BlcmF0b3JfbmV3 CisreworKyAgdm9pZCAqCisrICBvcGVyYXRvcigpICg6OnN0ZDo6c2l6ZV90IHN6KQorKyAgewor KyAgICByZXR1cm4gOjpvcGVyYXRvciBuZXcgKHN6KTsKKysgIH0KKyB9OworIAorLXRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLXN0cnVjdCBvcGVyYXRvcl9uZXc8VCwgZGVjbHR5cGUoVDo6b3BlcmF0 b3IgbmV3KHNpemVvZihUKSkpPiB7CistICB2b2lkICpvcGVyYXRvcigpKDo6c3RkOjpzaXplX3Qg c3opIHsgcmV0dXJuIFQ6Om9wZXJhdG9yIG5ldyhzeik7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gc3RydWN0IG9wZXJhdG9yX25ldzxULCBkZWNsdHlwZSAoVDo6b3BlcmF0b3IgbmV3IChzaXpl b2YgKFQpKSk+CisreworKyAgdm9pZCAqCisrICBvcGVyYXRvcigpICg6OnN0ZDo6c2l6ZV90IHN6 KQorKyAgeworKyAgICByZXR1cm4gVDo6b3BlcmF0b3IgbmV3IChzeik7CisrICB9CisgfTsKKyAK Ky1jbGFzcyBGYWlsIGZpbmFsIHsKKytjbGFzcyBGYWlsIGZpbmFsCisreworICAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gJnRocm93JDsKKysKKyBwdWJsaWM6CistICBGYWlsKDo6cnVzdDo6cmVwcjo6 UHRyTGVuICZ0aHJvdyQpIG5vZXhjZXB0IDogdGhyb3ckKHRocm93JCkge30KKy0gIHZvaWQgb3Bl cmF0b3IoKShjaGFyIGNvbnN0ICopIG5vZXhjZXB0OworLSAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6 c3RyaW5nIGNvbnN0ICYpIG5vZXhjZXB0OworKyAgRmFpbCAoOjpydXN0OjpyZXByOjpQdHJMZW4g JnRocm93JCkgbm9leGNlcHQgOiB0aHJvdyQgKHRocm93JCkge30KKysgIHZvaWQgb3BlcmF0b3Io KSAoY2hhciBjb25zdCAqKSBub2V4Y2VwdDsKKysgIHZvaWQgb3BlcmF0b3IoKSAoc3RkOjpzdHJp bmcgY29uc3QgJikgbm9leGNlcHQ7CisgfTsKKyB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKyAKKy10 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy11bmlvbiBNYW51YWxseURyb3AgeworK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPiB1bmlvbiBNYW51YWxseURyb3AKKyt7CisgICBUIHZhbHVlOworLSAgTWFudWFs bHlEcm9wKFQgJiZ2YWx1ZSkgOiB2YWx1ZSg6OnN0ZDo6bW92ZSh2YWx1ZSkpIHt9CistICB+TWFu dWFsbHlEcm9wKCkge30KKysgIE1hbnVhbGx5RHJvcCAoVCAmJnZhbHVlKSA6IHZhbHVlICg6OnN0 ZDo6bW92ZSAodmFsdWUpKSB7fQorKyAgfk1hbnVhbGx5RHJvcCAoKSB7fQorIH07CisgCistdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistdW5pb24gTWF5YmVVbmluaXQgeworK3RlbXBsYXRlIDx0eXBl bmFtZSBUPiB1bmlvbiBNYXliZVVuaW5pdAorK3sKKyAgIFQgdmFsdWU7CistICB2b2lkICpvcGVy YXRvciBuZXcoOjpzdGQ6OnNpemVfdCBzeikgeyByZXR1cm4gZGV0YWlsOjpvcGVyYXRvcl9uZXc8 VD57fShzeik7IH0KKy0gIE1heWJlVW5pbml0KCkge30KKy0gIH5NYXliZVVuaW5pdCgpIHt9Cisr ICB2b2lkICoKKysgIG9wZXJhdG9yIG5ldyAoOjpzdGQ6OnNpemVfdCBzeikKKysgIHsKKysgICAg cmV0dXJuIGRldGFpbDo6b3BlcmF0b3JfbmV3PFQ+e30oc3opOworKyAgfQorKyAgTWF5YmVVbmlu aXQgKCkge30KKysgIH5NYXliZVVuaW5pdCAoKSB7fQorIH07CisgCistbmFtZXNwYWNlIHsKKy10 ZW1wbGF0ZSA8PgorLWNsYXNzIGltcGw8U3RyPiBmaW5hbCB7CisrbmFtZXNwYWNlCisreworK3Rl bXBsYXRlIDw+IGNsYXNzIGltcGw8U3RyPiBmaW5hbAorK3sKKyBwdWJsaWM6CistICBzdGF0aWMg U3RyIG5ld191bmNoZWNrZWQocmVwcjo6RmF0IHJlcHIpIG5vZXhjZXB0IHsKKysgIHN0YXRpYyBT dHIKKysgIG5ld191bmNoZWNrZWQgKHJlcHI6OkZhdCByZXByKSBub2V4Y2VwdAorKyAgeworICAg ICBTdHIgc3RyID0gU3RyOjp1bmluaXR7fTsKKyAgICAgc3RyLnJlcHIgPSByZXByOworICAgICBy ZXR1cm4gc3RyOworICAgfQorIH07CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3Mg aW1wbDxTbGljZTxUPj4gZmluYWwgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBpbXBs PFNsaWNlPFQ+PiBmaW5hbAorK3sKKyBwdWJsaWM6CistICBzdGF0aWMgU2xpY2U8VD4gc2xpY2Uo cmVwcjo6RmF0IHJlcHIpIG5vZXhjZXB0IHsKKysgIHN0YXRpYyBTbGljZTxUPgorKyAgc2xpY2Ug KHJlcHI6OkZhdCByZXByKSBub2V4Y2VwdAorKyAgeworICAgICBTbGljZTxUPiBzbGljZSA9IHR5 cGVuYW1lIFNsaWNlPFQ+Ojp1bmluaXR7fTsKKyAgICAgc2xpY2UucmVwciA9IHJlcHI7CisgICAg IHJldHVybiBzbGljZTsKKyAgIH0KKyB9OworIAorLXRlbXBsYXRlIDw+CistY2xhc3MgaW1wbDxF cnJvcj4gZmluYWwgeworK3RlbXBsYXRlIDw+IGNsYXNzIGltcGw8RXJyb3I+IGZpbmFsCisrewor IHB1YmxpYzoKKy0gIHN0YXRpYyBFcnJvciBlcnJvcihyZXByOjpQdHJMZW4gcmVwcikgbm9leGNl cHQgeworKyAgc3RhdGljIEVycm9yCisrICBlcnJvciAocmVwcjo6UHRyTGVuIHJlcHIpIG5vZXhj ZXB0CisrICB7CisgICAgIEVycm9yIGVycm9yOworLSAgICBlcnJvci5tc2cgPSBzdGF0aWNfY2Fz dDxjaGFyIGNvbnN0ICo+KHJlcHIucHRyKTsKKysgICAgZXJyb3IubXNnID0gc3RhdGljX2Nhc3Q8 Y2hhciBjb25zdCAqPiAocmVwci5wdHIpOworICAgICBlcnJvci5sZW4gPSByZXByLmxlbjsKKyAg ICAgcmV0dXJuIGVycm9yOworICAgfQorIH07CisgCistdGVtcGxhdGUgPGJvb2w+IHN0cnVjdCBk ZWxldGVyX2lmIHsKKy0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIG9wZXJhdG9yKCkoVCAq KSB7fQorK3RlbXBsYXRlIDxib29sPiBzdHJ1Y3QgZGVsZXRlcl9pZgorK3sKKysgIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorKyAgdm9pZAorKyAgb3BlcmF0b3IoKSAoVCAqKQorKyAgeworKyAgfQor IH07CistdGVtcGxhdGUgPD4gc3RydWN0IGRlbGV0ZXJfaWY8dHJ1ZT4geworLSAgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+IHZvaWQgb3BlcmF0b3IoKShUICpwdHIpIHsgcHRyLT5+VCgpOyB9CisrdGVt cGxhdGUgPD4gc3RydWN0IGRlbGV0ZXJfaWY8dHJ1ZT4KKyt7CisrICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKysgIHZvaWQKKysgIG9wZXJhdG9yKCkgKFQgKnB0cikKKysgIHsKKysgICAgcHRyLT5+ VCAoKTsKKysgIH0KKyB9OworIH0gLy8gbmFtZXNwYWNlCisgfSAvLyBuYW1lc3BhY2UgY3h4YnJp ZGdlMQorIAorLW5hbWVzcGFjZSBiZWhhdmlvciB7CistY2xhc3MgbWlzc2luZyB7fTsKKy1taXNz aW5nIHRyeWNhdGNoKC4uLik7CisrbmFtZXNwYWNlIGJlaGF2aW9yCisreworK2NsYXNzIG1pc3Np bmcKKyt7CisrfTsKKyttaXNzaW5nIHRyeWNhdGNoICguLi4pOworIAorIHRlbXBsYXRlIDx0eXBl bmFtZSBUcnksIHR5cGVuYW1lIEZhaWw+Cisgc3RhdGljIHR5cGVuYW1lIDo6c3RkOjplbmFibGVf aWY8OjpzdGQ6OmlzX3NhbWU8CistICAgIGRlY2x0eXBlKHRyeWNhdGNoKDo6c3RkOjpkZWNsdmFs PFRyeT4oKSwgOjpzdGQ6OmRlY2x2YWw8RmFpbD4oKSkpLAorLSAgICBtaXNzaW5nPjo6dmFsdWU+ Ojp0eXBlCistdHJ5Y2F0Y2goVHJ5ICYmZnVuYywgRmFpbCAmJmZhaWwpIG5vZXhjZXB0IHRyeSB7 CistICBmdW5jKCk7CistfSBjYXRjaCAoOjpzdGQ6OmV4Y2VwdGlvbiBjb25zdCAmZSkgeworLSAg ZmFpbChlLndoYXQoKSk7CistfQorKyAgICBkZWNsdHlwZSAodHJ5Y2F0Y2ggKDo6c3RkOjpkZWNs dmFsPFRyeT4gKCksIDo6c3RkOjpkZWNsdmFsPEZhaWw+ICgpKSksIG1pc3Npbmc+Ojp2YWx1ZT46 OnR5cGUKKyt0cnljYXRjaCAoVHJ5ICYmZnVuYywgRmFpbCAmJmZhaWwpIG5vZXhjZXB0CisrdHJ5 CisrICB7CisrICAgIGZ1bmMgKCk7CisrICB9CisrY2F0Y2ggKDo6c3RkOjpleGNlcHRpb24gY29u c3QgJmUpCisrICB7CisrICAgIGZhaWwgKGUud2hhdCAoKSk7CisrICB9CisgfSAvLyBuYW1lc3Bh Y2UgYmVoYXZpb3IKKyB9IC8vIG5hbWVzcGFjZSBydXN0CisgCitAQCAtMTExNSw1MSArMTI5Miw1 MyBAQCB0cnljYXRjaChUcnkgJiZmdW5jLCBGYWlsICYmZmFpbCkgbm9leGNlcHQgdHJ5IHsKKyAj ZGVmaW5lIENYWF9ERUZBVUxUX1ZBTFVFKHZhbHVlKQorICNlbmRpZgorIAorLW5hbWVzcGFjZSBy cG1vc3RyZWVjeHggeworLSAgc3RydWN0IFN0cmluZ01hcHBpbmc7CistICBlbnVtIGNsYXNzIFN5 c3RlbUhvc3RUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7CistICBlbnVtIGNsYXNzIEJ1YmJsZXdyYXBN dXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3Q7CistICBzdHJ1Y3QgQnViYmxld3JhcDsKKy0gIHN0 cnVjdCBDb250YWluZXJJbWFnZVN0YXRlOworLSAgc3RydWN0IEV4cG9ydGVkTWFuaWZlc3REaWZm OworLSAgc3RydWN0IFBydW5lZENvbnRhaW5lckluZm87CistICBlbnVtIGNsYXNzIFJlZnNwZWNU eXBlIDogOjpzdGQ6OnVpbnQ4X3Q7CistICBzdHJ1Y3QgVGVtcEV0Y0d1YXJkOworLSAgc3RydWN0 IEZpbGVzeXN0ZW1TY3JpcHRQcmVwOworLSAgc3RydWN0IERlcGxveW1lbnRMYXllcmVkTWV0YTsK Ky0gIHN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNlOworLSAgZW51bSBjbGFzcyBQYXJz ZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdDsKKy0gIHN0cnVjdCBQYXJzZWRSZXZpc2lv bjsKKy0gIHN0cnVjdCBScG1JbXBvcnRlckZsYWdzOworLSAgc3RydWN0IFJwbUltcG9ydGVyOwor LSAgc3RydWN0IEhpc3RvcnlFbnRyeTsKKy0gIHN0cnVjdCBIaXN0b3J5Q3R4OworLSAgc3RydWN0 IFRva2lvSGFuZGxlOworLSAgc3RydWN0IFRva2lvRW50ZXJHdWFyZDsKKy0gIGVudW0gY2xhc3Mg UmVwb01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7CistICBlbnVtIGNsYXNzIEFkdmlz b3JpZXNNZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90OworLSAgc3RydWN0IFJlZnNwZWM7 CistICBlbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7 CistICBzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudDsKKy0gIGVudW0gY2xhc3MgT3B0VXNyTG9j YWwgOiA6OnN0ZDo6dWludDhfdDsKKy0gIHN0cnVjdCBUcmVlZmlsZTsKKy0gIHN0cnVjdCBSZXBv UGFja2FnZTsKKy0gIHN0cnVjdCBMaXZlQXBwbHlTdGF0ZTsKKy0gIHN0cnVjdCBQYXNzd2REQjsK Ky0gIHN0cnVjdCBQYXNzd2RFbnRyaWVzOworLSAgc3RydWN0IEV4dGVuc2lvbnM7CistICBzdHJ1 Y3QgTG9ja2VkUGFja2FnZTsKKy0gIHN0cnVjdCBMb2NrZmlsZUNvbmZpZzsKKy0gIHVzaW5nIEN4 eEdPYmplY3RBcnJheSA9IDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk7CistICB1c2lu ZyBDbGllbnRDb25uZWN0aW9uID0gOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb247Cist ICB1c2luZyBSUE1EaWZmID0gOjpycG1vc3RyZWVjeHg6OlJQTURpZmY7CistICB1c2luZyBScG1P c3RyZWVEaWZmUHJpbnRGb3JtYXQgPSA6OnJwbW9zdHJlZWN4eDo6UnBtT3N0cmVlRGlmZlByaW50 Rm9ybWF0OworLSAgdXNpbmcgUHJvZ3Jlc3MgPSA6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M7Cist ICB1c2luZyBScG1UcyA9IDo6cnBtb3N0cmVlY3h4OjpScG1UczsKKy0gIHVzaW5nIFBhY2thZ2VN ZXRhID0gOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOworLX0KKy0KKy1uYW1lc3BhY2UgcnBt b3N0cmVlY3h4IHsKKytuYW1lc3BhY2UgcnBtb3N0cmVlY3h4CisreworK3N0cnVjdCBTdHJpbmdN YXBwaW5nOworK2VudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdDsKKytl bnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3Q7Cisrc3RydWN0 IEJ1YmJsZXdyYXA7Cisrc3RydWN0IENvbnRhaW5lckltYWdlU3RhdGU7Cisrc3RydWN0IEV4cG9y dGVkTWFuaWZlc3REaWZmOworK3N0cnVjdCBQcnVuZWRDb250YWluZXJJbmZvOworK2VudW0gY2xh c3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhfdDsKKytzdHJ1Y3QgVGVtcEV0Y0d1YXJkOwor K3N0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcDsKKytzdHJ1Y3QgRGVwbG95bWVudExheWVyZWRN ZXRhOworK3N0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50U291cmNlOworK2VudW0gY2xhc3MgUGFy c2VkUmV2aXNpb25LaW5kIDogOjpzdGQ6OnVpbnQ4X3Q7Cisrc3RydWN0IFBhcnNlZFJldmlzaW9u OworK3N0cnVjdCBScG1JbXBvcnRlckZsYWdzOworK3N0cnVjdCBScG1JbXBvcnRlcjsKKytzdHJ1 Y3QgSGlzdG9yeUVudHJ5OworK3N0cnVjdCBIaXN0b3J5Q3R4OworK3N0cnVjdCBUb2tpb0hhbmRs ZTsKKytzdHJ1Y3QgVG9raW9FbnRlckd1YXJkOworK2VudW0gY2xhc3MgUmVwb01ldGFkYXRhVGFy Z2V0IDogOjpzdGQ6OnVpbnQ4X3Q7CisrZW51bSBjbGFzcyBBZHZpc29yaWVzTWV0YWRhdGFUYXJn ZXQgOiA6OnN0ZDo6dWludDhfdDsKKytzdHJ1Y3QgUmVmc3BlYzsKKytlbnVtIGNsYXNzIE92ZXJy aWRlUmVwbGFjZW1lbnRUeXBlIDogOjpzdGQ6OnVpbnQ4X3Q7Cisrc3RydWN0IE92ZXJyaWRlUmVw bGFjZW1lbnQ7CisrZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6IDo6c3RkOjp1aW50OF90OworK3N0 cnVjdCBUcmVlZmlsZTsKKytzdHJ1Y3QgUmVwb1BhY2thZ2U7Cisrc3RydWN0IExpdmVBcHBseVN0 YXRlOworK3N0cnVjdCBQYXNzd2REQjsKKytzdHJ1Y3QgUGFzc3dkRW50cmllczsKKytzdHJ1Y3Qg RXh0ZW5zaW9uczsKKytzdHJ1Y3QgTG9ja2VkUGFja2FnZTsKKytzdHJ1Y3QgTG9ja2ZpbGVDb25m aWc7CisrdXNpbmcgQ3h4R09iamVjdEFycmF5ID0gOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RB cnJheTsKKyt1c2luZyBDbGllbnRDb25uZWN0aW9uID0gOjpycG1vc3RyZWVjeHg6OkNsaWVudENv bm5lY3Rpb247CisrdXNpbmcgUlBNRGlmZiA9IDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOworK3Vz aW5nIFJwbU9zdHJlZURpZmZQcmludEZvcm1hdCA9IDo6cnBtb3N0cmVlY3h4OjpScG1Pc3RyZWVE aWZmUHJpbnRGb3JtYXQ7CisrdXNpbmcgUHJvZ3Jlc3MgPSA6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jl c3M7CisrdXNpbmcgUnBtVHMgPSA6OnJwbW9zdHJlZWN4eDo6UnBtVHM7CisrdXNpbmcgUGFja2Fn ZU1ldGEgPSA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE7CisrfQorKworK25hbWVzcGFjZSBy cG1vc3RyZWVjeHgKKyt7CisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk U3RyaW5nTWFwcGluZworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmcKKyAvLyBDdXJyZW50bHkgY3h4LXJzIGRvZXNuJ3Qgc3VwcG9ydCBtYXBwaW5n czsgbGlrZSBwcm9iYWJseSBtb3N0IHByb2plY3RzLAorQEAgLTExNjcsNyArMTM0Niw4IEBAIG5h bWVzcGFjZSBycG1vc3RyZWVjeHggeworIC8vIG91ciBkYXRhIHNpemVzIGFyZW4ndCBsYXJnZSwg d2Ugc2VyaWFsaXplIHRoaXMgYXMgYSB2ZWN0b3Igb2Ygc3RyaW5ncyBwYWlycy4KKyAvLyBJbiB0 aGUgZnV0dXJlIGl0J3MgYWxzbyBsaWtlbHkgdGhhdCBjeHgtcnMgd2lsbCBzdXBwb3J0IGEgQysr IHN0cmluZ192aWV3CisgLy8gc28gd2UgY291bGQgYXZvaWQgZHVwbGljYXRpbmcgaW4gdGhhdCBk aXJlY3Rpb24uCistc3RydWN0IFN0cmluZ01hcHBpbmcgZmluYWwgeworK3N0cnVjdCBTdHJpbmdN YXBwaW5nIGZpbmFsCisreworICAgOjpydXN0OjpTdHJpbmcgazsKKyAgIDo6cnVzdDo6U3RyaW5n IHY7CisgCitAQCAtMTE3OCw3ICsxMzU4LDggQEAgc3RydWN0IFN0cmluZ01hcHBpbmcgZmluYWwg eworICNpZm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRTeXN0ZW1Ib3N0VHlwZQor ICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRTeXN0ZW1Ib3N0VHlwZQorIC8v IENsYXNzaWZ5IHRoZSBydW5uaW5nIHN5c3RlbS4KKy1lbnVtIGNsYXNzIFN5c3RlbUhvc3RUeXBl IDogOjpzdGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUgOiA6OnN0ZDo6 dWludDhfdAorK3sKKyAgIE9zdHJlZUNvbnRhaW5lciA9IDAsCisgICBPc3RyZWVIb3N0ID0gMSwK KyAgIFVua25vd24gPSAyLAorQEAgLTExODcsNyArMTM2OCw4IEBAIGVudW0gY2xhc3MgU3lzdGVt SG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX0VOVU1f cnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXBNdXRhYmlsaXR5CisgI2RlZmluZSBDWFhCUklER0UxX0VO VU1fcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXBNdXRhYmlsaXR5CistZW51bSBjbGFzcyBCdWJibGV3 cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNzIEJ1YmJsZXdyYXBN dXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3QKKyt7CisgICBJbW11dGFibGUgPSAwLAorICAgUm9G aWxlcyA9IDEsCisgICBNdXRhdGVGcmVlbHkgPSAyLAorQEAgLTExOTYsNDkgKzEzNzgsNTIgQEAg ZW51bSBjbGFzcyBCdWJibGV3cmFwTXV0YWJpbGl0eSA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAj aWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwCisgI2RlZmlu ZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkQnViYmxld3JhcAorLXN0cnVjdCBCdWJi bGV3cmFwIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIDo6c3RkOjppbnQzMl90 IGdldF9yb290ZnNfZmQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgYXBwZW5kX2J3cmFwX2Fy Zyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OworLSAgdm9pZCBhcHBlbmRfY2hpbGRfYXJnKDo6 cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CistICB2b2lkIHNldGVudig6OnJ1c3Q6OlN0ciBrLCA6 OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdDsKKy0gIHZvaWQgdGFrZV9mZCg6OnN0ZDo6aW50MzJfdCBz b3VyY2VfZmQsIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNlcHQ7CistICB2b2lkIHNl dF9pbmhlcml0X3N0ZGluKCkgbm9leGNlcHQ7CistICB2b2lkIHRha2Vfc3RkaW5fZmQoOjpzdGQ6 OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKy0gIHZvaWQgdGFrZV9zdGRvdXRfZmQoOjpz dGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKy0gIHZvaWQgdGFrZV9zdGRlcnJfZmQo OjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKy0gIHZvaWQgdGFrZV9zdGRvdXRf YW5kX3N0ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworLSAgdm9p ZCBiaW5kX3JlYWQoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsK Ky0gIHZvaWQgYmluZF9yZWFkd3JpdGUoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0 KSBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0dXBfY29tcGF0X3ZhcigpOworLSAgdm9pZCBydW4oOjpy cG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpOworLSAgfkJ1YmJs ZXdyYXAoKSA9IGRlbGV0ZTsKKytzdHJ1Y3QgQnViYmxld3JhcCBmaW5hbCA6IHB1YmxpYyA6OnJ1 c3Q6Ok9wYXF1ZQorK3sKKysgIDo6c3RkOjppbnQzMl90IGdldF9yb290ZnNfZmQgKCkgY29uc3Qg bm9leGNlcHQ7CisrICB2b2lkIGFwcGVuZF9id3JhcF9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9l eGNlcHQ7CisrICB2b2lkIGFwcGVuZF9jaGlsZF9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNl cHQ7CisrICB2b2lkIHNldGVudiAoOjpydXN0OjpTdHIgaywgOjpydXN0OjpTdHIgdikgbm9leGNl cHQ7CisrICB2b2lkIHRha2VfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCwgOjpzdGQ6Omlu dDMyX3QgdGFyZ2V0X2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQgc2V0X2luaGVyaXRfc3RkaW4gKCkg bm9leGNlcHQ7CisrICB2b2lkIHRha2Vfc3RkaW5fZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9m ZCkgbm9leGNlcHQ7CisrICB2b2lkIHRha2Vfc3Rkb3V0X2ZkICg6OnN0ZDo6aW50MzJfdCBzb3Vy Y2VfZmQpIG5vZXhjZXB0OworKyAgdm9pZCB0YWtlX3N0ZGVycl9mZCAoOjpzdGQ6OmludDMyX3Qg c291cmNlX2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQgdGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCAo OjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQgYmluZF9yZWFkICg6 OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0OworKyAgdm9pZCBiaW5k X3JlYWR3cml0ZSAoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdDsK KysgIHZvaWQgc2V0dXBfY29tcGF0X3ZhciAoKTsKKysgIHZvaWQgcnVuICg6OnJwbW9zdHJlZWN4 eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7CisrICB+QnViYmxld3JhcCAoKSA9 IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3Ry dWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsK Ky0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBs YXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsK KysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07 CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwCisg CisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRXhwb3J0ZWRNYW5pZmVz dERpZmYKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRFeHBvcnRlZE1h bmlmZXN0RGlmZgorLXN0cnVjdCBFeHBvcnRlZE1hbmlmZXN0RGlmZiBmaW5hbCB7Cisrc3RydWN0 IEV4cG9ydGVkTWFuaWZlc3REaWZmIGZpbmFsCisreworICAgLy8gQ2hlY2sgaWYgdGhlIHN0cnVj dCBpcyBpbml0aWFsaXplZAorLSAgYm9vbCBpbml0aWFsaXplZCBDWFhfREVGQVVMVF9WQUxVRShm YWxzZSk7CisrICBib29sIGluaXRpYWxpemVkIENYWF9ERUZBVUxUX1ZBTFVFIChmYWxzZSk7Cisg ICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2thZ2VzIGluIHRoZSBuZXh0IHVwZ3JhZGUKKy0g IDo6c3RkOjp1aW50NjRfdCB0b3RhbCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6c3RkOjp1 aW50NjRfdCB0b3RhbCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBUaGUgc2l6ZSBvZiB0 aGUgdG90YWwgbnVtYmVyIG9mIHBhY2thZ2VzIGluIHRoZSBuZXh0IHVwZ3JhZGUKKy0gIDo6c3Rk Ojp1aW50NjRfdCB0b3RhbF9zaXplIENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAgOjpzdGQ6OnVp bnQ2NF90IHRvdGFsX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8gVGhlIHRvdGFs IG51bWJlciBvZiByZW1vdmVkIHBhY2thZ2VzIGluIHRoZSBuZXh0IHVwZ3JhZGUKKy0gIDo6c3Rk Ojp1aW50NjRfdCBuX3JlbW92ZWQgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6OnN0ZDo6dWlu dDY0X3Qgbl9yZW1vdmVkIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRoZSBzaXplIG9m IHRvdGFsIG51bWJlciBvZiByZW1vdmVkIHBhY2thZ2VzIGluIHRoZSBuZXh0IHVwZ3JhZGUKKy0g IDo6c3RkOjp1aW50NjRfdCByZW1vdmVkX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6 OnN0ZDo6dWludDY0X3QgcmVtb3ZlZF9zaXplIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8v IFRoZSB0b3RhbCBudW1iZXIgb2YgYWRkZWQgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQor LSAgOjpzdGQ6OnVpbnQ2NF90IG5fYWRkZWQgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6OnN0 ZDo6dWludDY0X3Qgbl9hZGRlZCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBUaGUgc2l6 ZSBvZiB0b3RhbCBudW1iZXIgb2YgYWRkZWQgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQor LSAgOjpzdGQ6OnVpbnQ2NF90IGFkZGVkX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6 OnN0ZDo6dWludDY0X3QgYWRkZWRfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBU aGUgdmVyc2lvbiBvZiB0aGUgbmV4dCB1cGdyYWRlCisgICA6OnJ1c3Q6OlN0cmluZyB2ZXJzaW9u OworIAorQEAgLTEyNDgsMTAgKzE0MzMsMTEgQEAgc3RydWN0IEV4cG9ydGVkTWFuaWZlc3REaWZm IGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRDb250 YWluZXJJbWFnZVN0YXRlCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk Q29udGFpbmVySW1hZ2VTdGF0ZQorLS8vIGBDb250YWluZXJJbWFnZVN0YXRlYCBpcyBjdXJyZW50 bHkgaWRlbnRpY2FsIHRvIG9zdHJlZS1ycy1leHQncyBgTGF5ZXJlZEltYWdlU3RhdGVgIHN0cnVj dCwgYmVjYXVzZQorLS8vIGN4eC5ycyBjdXJyZW50bHkgcmVxdWlyZXMgdHlwZXMgdXNlZCBhcyBl eHRlcm4gUnVzdCB0eXBlcyB0byBiZSBkZWZpbmVkIGJ5IHRoZSBzYW1lIGNyYXRlCisrLy8gYENv bnRhaW5lckltYWdlU3RhdGVgIGlzIGN1cnJlbnRseSBpZGVudGljYWwgdG8gb3N0cmVlLXJzLWV4 dCdzIGBMYXllcmVkSW1hZ2VTdGF0ZWAgc3RydWN0LAorKy8vIGJlY2F1c2UgY3h4LnJzIGN1cnJl bnRseSByZXF1aXJlcyB0eXBlcyB1c2VkIGFzIGV4dGVybiBSdXN0IHR5cGVzIHRvIGJlIGRlZmlu ZWQgYnkgdGhlIHNhbWUgY3JhdGUKKyAvLyB0aGF0IGNvbnRhaW5zIHRoZSBicmlkZ2UgdXNpbmcg dGhlbSwgc28gd2UgcmVkZWZpbmUgYW4gYENvbnRhaW5lckltcG9ydGAgc3RydWN0IGhlcmUuCist c3RydWN0IENvbnRhaW5lckltYWdlU3RhdGUgZmluYWwgeworK3N0cnVjdCBDb250YWluZXJJbWFn ZVN0YXRlIGZpbmFsCisreworICAgOjpydXN0OjpTdHJpbmcgYmFzZV9jb21taXQ7CisgICA6OnJ1 c3Q6OlN0cmluZyBtZXJnZV9jb21taXQ7CisgICA6OnJ1c3Q6OlN0cmluZyBpbWFnZV9kaWdlc3Q7 CitAQCAtMTI2NSwxOSArMTQ1MSwyMSBAQCBzdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZSBmaW5h bCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUHJ1bmVkQ29u dGFpbmVySW5mbworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBydW5l ZENvbnRhaW5lckluZm8KKy1zdHJ1Y3QgUHJ1bmVkQ29udGFpbmVySW5mbyBmaW5hbCB7CistICA6 OnN0ZDo6dWludDMyX3QgaW1hZ2VzIENYWF9ERUZBVUxUX1ZBTFVFKDApOworLSAgOjpzdGQ6OnVp bnQzMl90IGxheWVycyBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKytzdHJ1Y3QgUHJ1bmVkQ29udGFp bmVySW5mbyBmaW5hbAorK3sKKysgIDo6c3RkOjp1aW50MzJfdCBpbWFnZXMgQ1hYX0RFRkFVTFRf VkFMVUUgKDApOworKyAgOjpzdGQ6OnVpbnQzMl90IGxheWVycyBDWFhfREVGQVVMVF9WQUxVRSAo MCk7CisgCistICBib29sIG9wZXJhdG9yPT0oUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmKSBj b25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3IhPShQcnVuZWRDb250YWluZXJJbmZvIGNv bnN0ICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChQcnVuZWRDb250YWlu ZXJJbmZvIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChQcnVu ZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OworICAgdXNpbmcgSXNSZWxv Y2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFBydW5lZENvbnRhaW5lckluZm8KKyAKKyAjaWZuZGVmIENYWEJS SURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUmVmc3BlY1R5cGUKKyAjZGVmaW5lIENYWEJSSURHRTFf RU5VTV9ycG1vc3RyZWVjeHgkUmVmc3BlY1R5cGUKKy1lbnVtIGNsYXNzIFJlZnNwZWNUeXBlIDog OjpzdGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3MgUmVmc3BlY1R5cGUgOiA6OnN0ZDo6dWludDhf dAorK3sKKyAgIE9zdHJlZSA9IDAsCisgICBDaGVja3N1bSA9IDEsCisgICBDb250YWluZXIgPSAy LAorQEAgLTEyODYsNDAgKzE0NzQsNDUgQEAgZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3Rk Ojp1aW50OF90IHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRU ZW1wRXRjR3VhcmQKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRUZW1w RXRjR3VhcmQKKy1zdHJ1Y3QgVGVtcEV0Y0d1YXJkIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3Bh cXVlIHsKKy0gIHZvaWQgdW5kbygpIGNvbnN0OworLSAgflRlbXBFdGNHdWFyZCgpID0gZGVsZXRl OworK3N0cnVjdCBUZW1wRXRjR3VhcmQgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7 CisrICB2b2lkIHVuZG8gKCkgY29uc3Q7CisrICB+VGVtcEV0Y0d1YXJkICgpID0gZGVsZXRlOwor IAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0 IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0 aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAg eworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0 aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYg Ly8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZAorIAorICNpZm5k ZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwCisg I2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFBy ZXAKKy1zdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXAgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpP cGFxdWUgeworLSAgdm9pZCB1bmRvKCk7CistICB+RmlsZXN5c3RlbVNjcmlwdFByZXAoKSA9IGRl bGV0ZTsKKytzdHJ1Y3QgRmlsZXN5c3RlbVNjcmlwdFByZXAgZmluYWwgOiBwdWJsaWMgOjpydXN0 OjpPcGFxdWUKKyt7CisrICB2b2lkIHVuZG8gKCk7CisrICB+RmlsZXN5c3RlbVNjcmlwdFByZXAg KCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0g IHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNl cHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1 Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNl cHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsK KyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRmlsZXN5c3Rl bVNjcmlwdFByZXAKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRE ZXBsb3ltZW50TGF5ZXJlZE1ldGEKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCREZXBsb3ltZW50TGF5ZXJlZE1ldGEKKy1zdHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRh IGZpbmFsIHsKKy0gIGJvb2wgaXNfbGF5ZXJlZCBDWFhfREVGQVVMVF9WQUxVRShmYWxzZSk7Cisr c3RydWN0IERlcGxveW1lbnRMYXllcmVkTWV0YSBmaW5hbAorK3sKKysgIGJvb2wgaXNfbGF5ZXJl ZCBDWFhfREVGQVVMVF9WQUxVRSAoZmFsc2UpOworICAgOjpydXN0OjpTdHJpbmcgYmFzZV9jb21t aXQ7CistICA6OnN0ZDo6dWludDMyX3QgY2xpZW50bGF5ZXJfdmVyc2lvbiBDWFhfREVGQVVMVF9W QUxVRSgwKTsKKysgIDo6c3RkOjp1aW50MzJfdCBjbGllbnRsYXllcl92ZXJzaW9uIENYWF9ERUZB VUxUX1ZBTFVFICgwKTsKKyAKKyAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90 eXBlOworIH07CitAQCAtMTMyNyw3ICsxNTIwLDggQEAgc3RydWN0IERlcGxveW1lbnRMYXllcmVk TWV0YSBmaW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZQorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBt b3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UKKy1zdHJ1Y3QgT3ZlcnJpZGVSZXBs YWNlbWVudFNvdXJjZSBmaW5hbCB7Cisrc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2Ug ZmluYWwKKyt7CisgICA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUga2lu ZDsKKyAgIDo6cnVzdDo6U3RyaW5nIG5hbWU7CisgCitAQCAtMTMzNyw3ICsxNTMxLDggQEAgc3Ry dWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UgZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJ REdFMV9FTlVNX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbktpbmQKKyAjZGVmaW5lIENYWEJS SURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUGFyc2VkUmV2aXNpb25LaW5kCistZW51bSBjbGFzcyBQ YXJzZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBQYXJzZWRS ZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdAorK3sKKyAgIFZlcnNpb24gPSAwLAorICAgQ2hl Y2tzdW0gPSAxLAorIH07CitAQCAtMTM0NSw3ICsxNTQwLDggQEAgZW51bSBjbGFzcyBQYXJzZWRS ZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkUGFyc2VkUmV2aXNpb24KKyAjZGVmaW5lIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbgorLXN0cnVjdCBQYXJzZWRSZXZpc2lvbiBm aW5hbCB7Cisrc3RydWN0IFBhcnNlZFJldmlzaW9uIGZpbmFsCisreworICAgOjpycG1vc3RyZWVj eHg6OlBhcnNlZFJldmlzaW9uS2luZCBraW5kOworICAgOjpydXN0OjpTdHJpbmcgdmFsdWU7Cisg CitAQCAtMTM1NSw0NCArMTU1MSw1MCBAQCBzdHJ1Y3QgUGFyc2VkUmV2aXNpb24gZmluYWwgewor IAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxh Z3MKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZs YWdzCistc3RydWN0IFJwbUltcG9ydGVyRmxhZ3MgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFx dWUgeworLSAgYm9vbCBpc19pbWFfZW5hYmxlZCgpIGNvbnN0IG5vZXhjZXB0OworLSAgflJwbUlt cG9ydGVyRmxhZ3MoKSA9IGRlbGV0ZTsKKytzdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFncyBmaW5hbCA6 IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIGJvb2wgaXNfaW1hX2VuYWJsZWQgKCkgY29u c3Qgbm9leGNlcHQ7CisrICB+UnBtSW1wb3J0ZXJGbGFncyAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2 YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0IGxheW91dCB7CistICAg IHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0gICAgc3RhdGljIDo6c3Rk OjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlvdXQKKysgIHsKKysgICAg c3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysgICAgc3RhdGljIDo6c3Rk OjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07CisgI2VuZGlmIC8vIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzCisgCisgI2lmbmRlZiBD WFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIKKyAjZGVmaW5lIENYWEJS SURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBvcnRlcgorLXN0cnVjdCBScG1JbXBvcnRl ciBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CistICA6OnJ1c3Q6OlN0cmluZyBoYW5k bGVfdHJhbnNsYXRlX3BhdGhuYW1lKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OworLSAgOjpy dXN0OjpTdHJpbmcgb3N0cmVlX2JyYW5jaCgpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpT dHJpbmcgcGtnX25hbWUoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZG9jX2ZpbGVzX2FyZV9m aWx0ZXJlZCgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBkb2NfZmlsZXNfaW5zZXJ0KDo6cnVz dDo6U3RyIHBhdGgpIG5vZXhjZXB0OworLSAgYm9vbCBkb2NfZmlsZXNfY29udGFpbnMoOjpydXN0 OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIHJwbWZpX292ZXJyaWRlc19pbnNl cnQoOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90IGluZGV4KSBub2V4Y2VwdDsKKy0g IGJvb2wgcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5v ZXhjZXB0OworLSAgOjpzdGQ6OnVpbnQ2NF90IHJwbWZpX292ZXJyaWRlc19nZXQoOjpydXN0OjpT dHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGlzX2ltYV9lbmFibGVkKCkgY29uc3Qg bm9leGNlcHQ7CistICB2b2lkIHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyg6OnJwbW9zdHJlZWN4 eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBp c19maWxlX2ZpbHRlcmVkKDo6cnVzdDo6U3RyIHBhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUlu Zm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Q7CistICB2b2lkIHRyYW5zbGF0ZV90b190bXBmaWxl c19lbnRyeSg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBj b25zdCAmZmlsZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwgOjpydXN0OjpTdHIgZ3JvdXBu YW1lKTsKKy0gIGJvb2wgaGFzX3RtcGZpbGVzX2VudHJpZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0g IDo6cnVzdDo6U3RyaW5nIHNlcmlhbGl6ZV90bXBmaWxlc19jb250ZW50KCkgY29uc3Qgbm9leGNl cHQ7CistICB+UnBtSW1wb3J0ZXIoKSA9IGRlbGV0ZTsKKytzdHJ1Y3QgUnBtSW1wb3J0ZXIgZmlu YWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7CisrICA6OnJ1c3Q6OlN0cmluZyBoYW5kbGVf dHJhbnNsYXRlX3BhdGhuYW1lICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKysgIDo6cnVz dDo6U3RyaW5nIG9zdHJlZV9icmFuY2ggKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0 cmluZyBwa2dfbmFtZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZG9jX2ZpbGVzX2FyZV9m aWx0ZXJlZCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgZG9jX2ZpbGVzX2luc2VydCAoOjpy dXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CisrICBib29sIGRvY19maWxlc19jb250YWlucyAoOjpy dXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHJwbWZpX292ZXJyaWRlc19p bnNlcnQgKDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNlcHQ7 CisrICBib29sIHJwbWZpX292ZXJyaWRlc19jb250YWlucyAoOjpydXN0OjpTdHIgcGF0aCkgY29u c3Qgbm9leGNlcHQ7CisrICA6OnN0ZDo6dWludDY0X3QgcnBtZmlfb3ZlcnJpZGVzX2dldCAoOjpy dXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGlzX2ltYV9lbmFibGVkICgp IGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCB0d2Vha19pbXBvcnRlZF9maWxlX2luZm8gKDo6cnBt b3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Qgbm9leGNlcHQ7Cisr ICBib29sIGlzX2ZpbGVfZmlsdGVyZWQgKDo6cnVzdDo6U3RyIHBhdGgsIDo6cnBtb3N0cmVlY3h4 OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Q7CisrICB2b2lkIHRyYW5zbGF0ZV90 b190bXBmaWxlc19lbnRyeSAoOjpydXN0OjpTdHIgYWJzX3BhdGgsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmls ZV9pbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3Ry IHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpOworKyAgYm9vbCBoYXNfdG1wZmlsZXNf ZW50cmllcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIHNlcmlhbGl6ZV90 bXBmaWxlc19jb250ZW50ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgflJwbUltcG9ydGVyICgpID0g ZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1 Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0Owor LSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxh eW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0Owor KyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsK KyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyCitA QCAtMTQwMSw3MyArMTYwMyw4MSBAQCBzdHJ1Y3QgUnBtSW1wb3J0ZXIgZmluYWwgOiBwdWJsaWMg OjpydXN0OjpPcGFxdWUgeworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JEhpc3RvcnlFbnRyeQorIC8vIEEgaGlzdG9yeSBlbnRyeSBpbiB0aGUgam91cm5hbC4gSXQgbWF5 IHJlcHJlc2VudCBtdWx0aXBsZSBjb25zZWN1dGl2ZSBib290cworIC8vIGludG8gdGhlIHNhbWUg ZGVwbG95bWVudC4gVGhpcyBzdHJ1Y3QgaXMgZXhwb3NlZCBkaXJlY3RseSB2aWEgRkZJIHRvIEMu Cistc3RydWN0IEhpc3RvcnlFbnRyeSBmaW5hbCB7Cisrc3RydWN0IEhpc3RvcnlFbnRyeSBmaW5h bAorK3sKKyAgIC8vIFRoZSBkZXBsb3ltZW50IHJvb3QgdGltZXN0YW1wLgorLSAgOjpzdGQ6OnVp bnQ2NF90IGRlcGxveV90aW1lc3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6OnN0ZDo6 dWludDY0X3QgZGVwbG95X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBU aGUgY29tbWFuZC1saW5lIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSBkZXBsb3ltZW50LCBp ZiBhbnkuCisgICA6OnJ1c3Q6OlN0cmluZyBkZXBsb3lfY21kbGluZTsKKyAgIC8vIFRoZSBudW1i ZXIgb2YgY29uc2VjdXRpdmUgdGltZXMgdGhlIGRlcGxveW1lbnQgd2FzIGJvb3RlZC4KKy0gIDo6 c3RkOjp1aW50NjRfdCBib290X2NvdW50IENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAgOjpzdGQ6 OnVpbnQ2NF90IGJvb3RfY291bnQgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8gVGhlIGZp cnN0IHRpbWUgdGhlIGRlcGxveW1lbnQgd2FzIGJvb3RlZCBpZiBtdWx0aXBsZSBjb25zZWN1dGl2 ZSB0aW1lcy4KKy0gIDo6c3RkOjp1aW50NjRfdCBmaXJzdF9ib290X3RpbWVzdGFtcCBDWFhfREVG QVVMVF9WQUxVRSgwKTsKKysgIDo6c3RkOjp1aW50NjRfdCBmaXJzdF9ib290X3RpbWVzdGFtcCBD WFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBUaGUgbGFzdCB0aW1lIHRoZSBkZXBsb3ltZW50 IHdhcyBib290ZWQgaWYgbXVsdGlwbGUgY29uc2VjdXRpdmUgdGltZXMuCistICA6OnN0ZDo6dWlu dDY0X3QgbGFzdF9ib290X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6c3Rk Ojp1aW50NjRfdCBsYXN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAg IC8vIGB0cnVlYCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBlbnRyaWVzLgorLSAgYm9vbCBlb2YgQ1hY X0RFRkFVTFRfVkFMVUUoZmFsc2UpOworKyAgYm9vbCBlb2YgQ1hYX0RFRkFVTFRfVkFMVUUgKGZh bHNlKTsKKyAKKy0gIGJvb2wgb3BlcmF0b3I9PShIaXN0b3J5RW50cnkgY29uc3QgJikgY29uc3Qg bm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yIT0oSGlzdG9yeUVudHJ5IGNvbnN0ICYpIGNvbnN0 IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChIaXN0b3J5RW50cnkgY29uc3QgJikgY29u c3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yIT0gKEhpc3RvcnlFbnRyeSBjb25zdCAmKSBj b25zdCBub2V4Y2VwdDsKKyAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBl OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRIaXN0b3J5 RW50cnkKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRIaXN0b3J5 Q3R4CisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkSGlzdG9yeUN0eAor LXN0cnVjdCBIaXN0b3J5Q3R4IGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIDo6 cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgbmV4dF9lbnRyeSgpOworLSAgfkhpc3RvcnlDdHgo KSA9IGRlbGV0ZTsKKytzdHJ1Y3QgSGlzdG9yeUN0eCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9w YXF1ZQorK3sKKysgIDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgbmV4dF9lbnRyeSAoKTsK KysgIH5IaXN0b3J5Q3R4ICgpID0gZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpy dXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXpl X3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5v ZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBu b2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JEhpc3RvcnlDdHgKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRUb2tpb0hhbmRsZQorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JFRva2lvSGFuZGxlCistc3RydWN0IFRva2lvSGFuZGxlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6 T3BhcXVlIHsKKy0gIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+ IGVudGVyKCkgY29uc3Qgbm9leGNlcHQ7CistICB+VG9raW9IYW5kbGUoKSA9IGRlbGV0ZTsKKytz dHJ1Y3QgVG9raW9IYW5kbGUgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7CisrICA6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPiBlbnRlciAoKSBjb25z dCBub2V4Y2VwdDsKKysgIH5Ub2tpb0hhbmRsZSAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgor ICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0IGxheW91dCB7CistICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXpl X3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGlj IDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXpl X3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZQorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZAorICNkZWZpbmUgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZAorLXN0cnVjdCBUb2tpb0VudGVyR3Vh cmQgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgeworLSAgflRva2lvRW50ZXJHdWFyZCgp ID0gZGVsZXRlOworK3N0cnVjdCBUb2tpb0VudGVyR3VhcmQgZmluYWwgOiBwdWJsaWMgOjpydXN0 OjpPcGFxdWUKKyt7CisrICB+VG9raW9FbnRlckd1YXJkICgpID0gZGVsZXRlOworIAorIHByaXZh dGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAg c3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgeworKyAgICBz dGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZAorIAorICNpZm5kZWYgQ1hY QlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZXBvTWV0YWRhdGFUYXJnZXQKKyAjZGVmaW5lIENY WEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkUmVwb01ldGFkYXRhVGFyZ2V0CistZW51bSBjbGFz cyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBSZXBv TWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdAorK3sKKyAgIElubGluZSA9IDAsCisgICBE ZXRhY2hlZCA9IDEsCisgICBEaXNhYmxlZCA9IDIsCitAQCAtMTQ3Niw3ICsxNjg2LDggQEAgZW51 bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdCB7CisgCisgI2lmbmRl ZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldAor ICNkZWZpbmUgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRBZHZpc29yaWVzTWV0YWRhdGFU YXJnZXQKKy1lbnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50 OF90IHsKKytlbnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50 OF90CisreworICAgSW5saW5lID0gMCwKKyAgIERldGFjaGVkID0gMSwKKyAgIERpc2FibGVkID0g MiwKK0BAIC0xNDg1LDM5ICsxNjk2LDQzIEBAIGVudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRh VGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3QgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFJlZnNwZWMKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRSZWZzcGVjCistc3RydWN0IFJlZnNwZWMgZmluYWwgeworK3N0cnVjdCBSZWZzcGVjIGZp bmFsCisreworICAgOjpycG1vc3RyZWVjeHg6OlJlZnNwZWNUeXBlIGtpbmQ7CisgICA6OnJ1c3Q6 OlN0cmluZyByZWZzcGVjOworIAorLSAgYm9vbCBvcGVyYXRvcj09KFJlZnNwZWMgY29uc3QgJikg Y29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yIT0oUmVmc3BlYyBjb25zdCAmKSBjb25z dCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoUmVmc3BlYyBjb25zdCAmKSBjb25zdCBu b2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoUmVmc3BlYyBjb25zdCAmKSBjb25zdCBub2V4 Y2VwdDsKKyAgIHVzaW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBlOworIH07Cisg I2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZWZzcGVjCisgCisgI2lm bmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBl CisgI2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1l bnRUeXBlCistZW51bSBjbGFzcyBPdmVycmlkZVJlcGxhY2VtZW50VHlwZSA6IDo6c3RkOjp1aW50 OF90IHsKKytlbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlIDogOjpzdGQ6OnVpbnQ4 X3QKKyt7CisgICBSZXBvID0gMCwKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX0VOVU1fcnBt b3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlCisgCisgI2lmbmRlZiBDWFhCUklER0Ux X1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudAorICNkZWZpbmUgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQKKy1zdHJ1Y3QgT3Zl cnJpZGVSZXBsYWNlbWVudCBmaW5hbCB7Cisrc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnQgZmlu YWwKKyt7CisgICA6OnJ1c3Q6OlN0cmluZyBmcm9tOworICAgOjpycG1vc3RyZWVjeHg6Ok92ZXJy aWRlUmVwbGFjZW1lbnRUeXBlIGZyb21fa2luZDsKKyAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBwYWNrYWdlczsKKyAKKy0gIGJvb2wgb3BlcmF0b3I9PShPdmVycmlkZVJlcGxhY2VtZW50 IGNvbnN0ICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvciE9KE92ZXJyaWRlUmVw bGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKE92 ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJh dG9yIT0gKE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisgICB1 c2luZyBJc1JlbG9jYXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsKKyB9OworICNlbmRpZiAvLyBD WFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudAorIAorICNp Zm5kZWYgQ1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRPcHRVc3JMb2NhbAorICNkZWZpbmUg Q1hYQlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRPcHRVc3JMb2NhbAorLWVudW0gY2xhc3MgT3B0 VXNyTG9jYWwgOiA6OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBPcHRVc3JMb2NhbCA6IDo6 c3RkOjp1aW50OF90CisreworICAgVmFyID0gMCwKKyAgIFJvb3QgPSAxLAorICAgU3RhdGVPdmVy bGF5ID0gMiwKK0BAIC0xNTI2LDEyNSArMTc0MSwxMzEgQEAgZW51bSBjbGFzcyBPcHRVc3JMb2Nh bCA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9z dHJlZWN4eCRUcmVlZmlsZQorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4 JFRyZWVmaWxlCistc3RydWN0IFRyZWVmaWxlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVl IHsKKy0gIDo6cnVzdDo6U3RyIGdldF93b3JrZGlyKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnN0 ZDo6aW50MzJfdCBnZXRfcGFzc3dkX2ZkKCkgbm9leGNlcHQ7CistICA6OnN0ZDo6aW50MzJfdCBn ZXRfZ3JvdXBfZmQoKSBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9qc29uX3N0cmlu ZygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9v c3RyZWVfbGF5ZXJzKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfYWxsX29zdHJlZV9sYXllcnMoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVwb3MoKSBjb25z dCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXMo KSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIHJlcXVpcmVfYXV0b21hdGljX3Zl cnNpb25fcHJlZml4KCkgY29uc3Q7CistICBib29sIGFkZF9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOworLSAgYm9vbCBo YXNfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBnZXRfbG9jYWxfcGFja2FnZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgYWRkX2xv Y2FsX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBh bGxvd19leGlzdGluZyk7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2Fs X2ZpbGVvdmVycmlkZV9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBhZGRfbG9j YWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNr YWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7CistICBib29sIHJlbW92ZV9wYWNrYWdlcyg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfbm9lbnQpOworLSAg OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+IGdldF9wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGhhc19wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGFkZF9wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50 IHJlcGxhY2VtZW50KSBub2V4Y2VwdDsKKy0gIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVf cmVwbGFjZSg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCgpIGNvbnN0 IG5vZXhjZXB0OworLSAgdm9pZCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCg6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMpOworLSAgYm9vbCByZW1vdmVfcGFj a2FnZV9vdmVycmlkZV9yZXBsYWNlX2xvY2FsKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0 OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19vdmVycmlkZV9y ZW1vdmUoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3Jl bW92ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMpOworLSAgYm9vbCByZW1v dmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7 CistICBib29sIGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSg6OnJ1c3Q6OlN0ciBu YW1lKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgcmVtb3ZlX2FsbF9vdmVycmlkZXMoKSBub2V4 Y2VwdDsKKy0gIGJvb2wgcmVtb3ZlX2FsbF9wYWNrYWdlcygpIG5vZXhjZXB0OworLSAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9leGNsdWRlX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNl cHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfcGxhdGZvcm1fbW9kdWxlKCkgY29uc3Qgbm9leGNl cHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2luc3RhbGxfbGFuZ3MoKSBj b25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGZvcm1hdF9pbnN0YWxsX2xhbmdzX21h Y3JvKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0 X2xvY2tmaWxlX3JlcG9zKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0ciBnZXRfcmVm KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGdldF9jbGl3cmFwKCkgY29uc3Qgbm9leGNlcHQ7 CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2NsaXdyYXBfYmluYXJpZXMoKSBj b25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0X2NsaXdyYXAoYm9vbCBlbmFibGVkKSBub2V4Y2Vw dDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfY29udGFpbmVyX2NtZCgpIGNv bnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X2RvY3VtZW50YXRpb24oKSBjb25zdCBub2V4Y2VwdDsKKy0g IGJvb2wgZ2V0X3JlY29tbWVuZHMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X3NlbGlu dXgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X3N5c3VzZXJzX2lzX2ZvcmNlZCgpIGNv bnN0IG5vZXhjZXB0OworLSAgOjpzdGQ6OnVpbnQzMl90IGdldF9zZWxpbnV4X2xhYmVsX3ZlcnNp b24oKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9ncGdfa2V5KCkgY29u c3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfYXV0b21hdGljX3ZlcnNpb25fc3Vm Zml4KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGdldF9jb250YWluZXIoKSBjb25zdCBub2V4 Y2VwdDsKKy0gIGJvb2wgZ2V0X21hY2hpbmVpZF9jb21wYXQoKSBjb25zdCBub2V4Y2VwdDsKKy0g IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfZXRjX2dyb3VwX21lbWJlcnMoKSBjb25z dCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X2Jvb3RfbG9jYXRpb25faXNfbW9kdWxlcygpIGNvbnN0 IG5vZXhjZXB0OworLSAgYm9vbCB1c2Vfa2VybmVsX2luc3RhbGwoKSBjb25zdCBub2V4Y2VwdDsK Ky0gIGJvb2wgZ2V0X2ltYSgpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0 X3JlbGVhc2V2ZXIoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnBtb3N0cmVlY3h4OjpSZXBvTWV0 YWRhdGFUYXJnZXQgZ2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7Cist ICA6OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IGdldF9hZHZpc29yaWVz X21ldGFkYXRhX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBycG1kYl9iYWNrZW5k X2lzX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBzaG91bGRfbm9ybWFsaXplX3Jw bWRiKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJwbW9zdHJlZWN4eDo6T3B0VXNyTG9jYWwgZ2V0 X29wdF91c3Jsb2NhbCgpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9maWxlc19yZW1vdmVfcmVnZXgoOjpydXN0OjpTdHIgcGFja2FnZSkgY29uc3Qg bm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfY2hlY2tzdW0oOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIGNvbnN0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X29z dHJlZV9yZWYoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVj eHg6OlJlcG9QYWNrYWdlIGNvbnN0PiBnZXRfcmVwb19wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0 OworLSAgdm9pZCBjbGVhcl9yZXBvX3BhY2thZ2VzKCkgbm9leGNlcHQ7CistICB2b2lkIHByZXR0 eXByaW50X2pzb25fc3Rkb3V0KCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIHByaW50X2RlcHJl Y2F0aW9uX3dhcm5pbmdzKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIHByaW50X2V4cGVyaW1l bnRhbF9ub3RpY2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIHNhbml0eWNoZWNrX2V4dGVy bmFscygpIGNvbnN0OworLSAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy RmxhZ3M+IGltcG9ydGVyX2ZsYWdzKDo6cnVzdDo6U3RyIHBrZ19uYW1lKSBjb25zdCBub2V4Y2Vw dDsKKy0gIDo6cnVzdDo6U3RyaW5nIHdyaXRlX3JlcG92YXJzKDo6c3RkOjppbnQzMl90IHdvcmtk aXJfZGZkX3JhdykgY29uc3Q7CistICB2b2lkIHNldF9yZWxlYXNldmVyKDo6cnVzdDo6U3RyIHJl bGVhc2V2ZXIpOworLSAgdm9pZCBzZXRfcmVjb21tZW5kcyhib29sIHZhbCk7CistICB2b2lkIGVu YWJsZV9yZXBvKDo6cnVzdDo6U3RyIHJlcG8pOworLSAgdm9pZCBkaXNhYmxlX3JlcG8oOjpydXN0 OjpTdHIgcmVwbyk7CistICB2b2lkIHZhbGlkYXRlX2Zvcl9jb250YWluZXIoKSBjb25zdDsKKy0g IDo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjIGdldF9iYXNlX3JlZnNwZWMoKSBjb25zdCBub2V4Y2Vw dDsKKy0gIHZvaWQgcmViYXNlKDo6cnVzdDo6U3RyIG5ld19yZWZzcGVjLCA6OnJ1c3Q6OlN0ciBj dXN0b21fb3JpZ2luX3VybCwgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl9kZXNjcmlwdGlvbikg bm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3JpZ2luX2N1c3RvbV91cmwoKSBjb25z dCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX2Rlc2NyaXB0 aW9uKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3ZlcnJpZGVfY29t bWl0KCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIHNldF9vdmVycmlkZV9jb21taXQoOjpydXN0 OjpTdHIgY2hlY2tzdW0pIG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGhhc19p bml0cmFtZnNfZXRjX2ZpbGVzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGluaXRyYW1mc19l dGNfZmlsZXNfdHJhY2soOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2Vw dDsKKy0gIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrKDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQ7CistICBib29sIGluaXRyYW1mc19ldGNfZmlsZXNf dW50cmFja19hbGwoKSBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X2luaXRyYW1mc19yZWdlbmVyYXRl KCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2lu aXRyYW1mc19hcmdzKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIHNldF9pbml0cmFtZnNfcmVn ZW5lcmF0ZShib29sIGVuYWJsZWQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKSBu b2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF91bmNvbmZpZ3VyZWRfc3RhdGUoKSBjb25z dCBub2V4Y2VwdDsKKy0gIGJvb2wgbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIGJvb2wgaGFzX2FueV9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAg Ym9vbCBtZXJnZV90cmVlZmlsZSg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSk7CistICBib29sIGdldF9u b19pbml0cmFtZnMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIH5UcmVlZmlsZSgpID0gZGVsZXRlOwor K3N0cnVjdCBUcmVlZmlsZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIDo6 cnVzdDo6U3RyIGdldF93b3JrZGlyICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpzdGQ6OmludDMy X3QgZ2V0X3Bhc3N3ZF9mZCAoKSBub2V4Y2VwdDsKKysgIDo6c3RkOjppbnQzMl90IGdldF9ncm91 cF9mZCAoKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIGdldF9qc29uX3N0cmluZyAoKSBj b25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3N0cmVl X2xheWVycyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfYWxsX29zdHJlZV9sYXllcnMgKCkgY29uc3Qgbm9l eGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9zICgpIGNvbnN0 IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlcyAo KSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5nIHJlcXVpcmVfYXV0b21hdGljX3Zl cnNpb25fcHJlZml4ICgpIGNvbnN0OworKyAgYm9vbCBhZGRfcGFja2FnZXMgKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7CisrICBib29s IGhhc19wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfbG9jYWxfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGFk ZF9sb2NhbF9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBi b29sIGFsbG93X2V4aXN0aW5nKTsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRf bG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBh ZGRfbG9jYWxfZmlsZW92ZXJyaWRlX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcpOworKyAgYm9vbCByZW1vdmVfcGFja2Fn ZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19ub2Vu dCk7CisrICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4g Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29s IGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9v bCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRl UmVwbGFjZW1lbnQgcmVwbGFjZW1lbnQpIG5vZXhjZXB0OworKyAgYm9vbCByZW1vdmVfcGFja2Fn ZV9vdmVycmlkZV9yZXBsYWNlICg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9s b2NhbCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgYWRkX3BhY2thZ2VzX292ZXJyaWRlX3Jl cGxhY2VfbG9jYWwgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcyk7CisrICBi b29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKDo6cnVzdDo6U3RyIHBh Y2thZ2UpIG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNr YWdlc19vdmVycmlkZV9yZW1vdmUgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIGFkZF9wYWNr YWdlc19vdmVycmlkZV9yZW1vdmUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdl cyk7CisrICBib29sIHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSAoOjpydXN0OjpTdHIg cGFja2FnZSkgbm9leGNlcHQ7CisrICBib29sIGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVf bmFtZSAoOjpydXN0OjpTdHIgbmFtZSkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIHJlbW92ZV9h bGxfb3ZlcnJpZGVzICgpIG5vZXhjZXB0OworKyAgYm9vbCByZW1vdmVfYWxsX3BhY2thZ2VzICgp IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9leGNsdWRlX3Bh Y2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X3BsYXRmb3Jt X21vZHVsZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBnZXRfaW5zdGFsbF9sYW5ncyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3RyaW5n IGZvcm1hdF9pbnN0YWxsX2xhbmdzX21hY3JvICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9sb2NrZmlsZV9yZXBvcyAoKSBjb25zdCBub2V4Y2Vw dDsKKysgIDo6cnVzdDo6U3RyIGdldF9yZWYgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGdl dF9jbGl3cmFwICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGdldF9jbGl3cmFwX2JpbmFyaWVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBzZXRf Y2xpd3JhcCAoYm9vbCBlbmFibGVkKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfY29udGFpbmVyX2NtZCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZ2V0 X3JlYWRvbmx5X2V4ZWN1dGFibGVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBnZXRfZG9j dW1lbnRhdGlvbiAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZ2V0X3JlY29tbWVuZHMgKCkg Y29uc3Qgbm9leGNlcHQ7CisrICBib29sIGdldF9zZWxpbnV4ICgpIGNvbnN0IG5vZXhjZXB0Owor KyAgYm9vbCBnZXRfc3lzdXNlcnNfaXNfZm9yY2VkICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpz dGQ6OnVpbnQzMl90IGdldF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24gKCkgY29uc3Qgbm9leGNlcHQ7 CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfZ3BnX2tleSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6U3RyaW5nIGdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZmaXggKCkgY29uc3Qgbm9leGNl cHQ7CisrICBib29sIGdldF9jb250YWluZXIgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGdl dF9tYWNoaW5laWRfY29tcGF0ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGdldF9ldGNfZ3JvdXBfbWVtYmVycyAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGJvb2wgZ2V0X2Jvb3RfbG9jYXRpb25faXNfbW9kdWxlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysg IGJvb2wgdXNlX2tlcm5lbF9pbnN0YWxsICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBnZXRf aW1hICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X3JlbGVhc2V2ZXIg KCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0 IGdldF9yZXBvX21ldGFkYXRhX3RhcmdldCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnBtb3N0 cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgZ2V0X2Fkdmlzb3JpZXNfbWV0YWRhdGFf dGFyZ2V0ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBycG1kYl9iYWNrZW5kX2lzX3Rhcmdl dCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgc2hvdWxkX25vcm1hbGl6ZV9ycG1kYiAoKSBj b25zdCBub2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpPcHRVc3JMb2NhbCBnZXRfb3B0X3Vz cmxvY2FsICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9maWxlc19yZW1vdmVfcmVnZXggKDo6cnVzdDo6U3RyIHBhY2thZ2UpIGNvbnN0IG5vZXhj ZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2NoZWNrc3VtICg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlUmVwbyBjb25zdCAmcmVwbykgY29uc3Q7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3N0cmVl X3JlZiAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6 OlJlcG9QYWNrYWdlIGNvbnN0PiBnZXRfcmVwb19wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsK KysgIHZvaWQgY2xlYXJfcmVwb19wYWNrYWdlcyAoKSBub2V4Y2VwdDsKKysgIHZvaWQgcHJldHR5 cHJpbnRfanNvbl9zdGRvdXQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHByaW50X2RlcHJl Y2F0aW9uX3dhcm5pbmdzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBwcmludF9leHBlcmlt ZW50YWxfbm90aWNlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgc2FuaXR5Y2hlY2tfZXh0 ZXJuYWxzICgpIGNvbnN0OworKyAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyRmxhZ3M+CisrICBpbXBvcnRlcl9mbGFncyAoOjpydXN0OjpTdHIgcGtnX25hbWUpIGNvbnN0 IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgd3JpdGVfcmVwb3ZhcnMgKDo6c3RkOjppbnQz Ml90IHdvcmtkaXJfZGZkX3JhdykgY29uc3Q7CisrICB2b2lkIHNldF9yZWxlYXNldmVyICg6OnJ1 c3Q6OlN0ciByZWxlYXNldmVyKTsKKysgIHZvaWQgc2V0X3JlY29tbWVuZHMgKGJvb2wgdmFsKTsK KysgIHZvaWQgZW5hYmxlX3JlcG8gKDo6cnVzdDo6U3RyIHJlcG8pOworKyAgdm9pZCBkaXNhYmxl X3JlcG8gKDo6cnVzdDo6U3RyIHJlcG8pOworKyAgdm9pZCB2YWxpZGF0ZV9mb3JfY29udGFpbmVy ICgpIGNvbnN0OworKyAgOjpycG1vc3RyZWVjeHg6OlJlZnNwZWMgZ2V0X2Jhc2VfcmVmc3BlYyAo KSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgcmViYXNlICg6OnJ1c3Q6OlN0ciBuZXdfcmVmc3Bl YywgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsCisrICAgICAgICAgICAgICAgOjpydXN0 OjpTdHIgY3VzdG9tX29yaWdpbl9kZXNjcmlwdGlvbikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0 cmluZyBnZXRfb3JpZ2luX2N1c3RvbV91cmwgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6 OlN0cmluZyBnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlwdGlvbiAoKSBjb25zdCBub2V4Y2VwdDsK KysgIDo6cnVzdDo6U3RyaW5nIGdldF9vdmVycmlkZV9jb21taXQgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICB2b2lkIHNldF9vdmVycmlkZV9jb21taXQgKDo6cnVzdDo6U3RyIGNoZWNrc3VtKSBub2V4 Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5pdHJhbWZzX2V0Y19m aWxlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgaGFzX2luaXRyYW1mc19ldGNfZmlsZXMg KCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGluaXRyYW1mc19ldGNfZmlsZXNfdHJhY2sgKDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQ7CisrICBib29sIGluaXRy YW1mc19ldGNfZmlsZXNfdW50cmFjayAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVz KSBub2V4Y2VwdDsKKysgIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc191bnRyYWNrX2FsbCAoKSBu b2V4Y2VwdDsKKysgIGJvb2wgZ2V0X2luaXRyYW1mc19yZWdlbmVyYXRlICgpIGNvbnN0IG5vZXhj ZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbml0cmFtZnNfYXJncyAo KSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgc2V0X2luaXRyYW1mc19yZWdlbmVyYXRlIChib29s IGVuYWJsZWQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKSBub2V4Y2VwdDsKKysg IDo6cnVzdDo6U3RyaW5nIGdldF91bmNvbmZpZ3VyZWRfc3RhdGUgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICBib29sIG1heV9yZXF1aXJlX2xvY2FsX2Fzc2VtYmx5ICgpIGNvbnN0IG5vZXhjZXB0Owor KyAgYm9vbCBoYXNfYW55X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBtZXJn ZV90cmVlZmlsZSAoOjpydXN0OjpTdHIgdHJlZWZpbGUpOworKyAgYm9vbCBnZXRfbm9faW5pdHJh bWZzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgflRyZWVmaWxlICgpID0gZGVsZXRlOworIAorIHBy aXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0g ICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgeworKyAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpz dGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRyZWVmaWxlCisgCisgI2lmbmRlZiBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVwb1BhY2thZ2UKKyAjZGVmaW5lIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRSZXBvUGFja2FnZQorLXN0cnVjdCBSZXBvUGFja2FnZSBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CistICA6OnJ1c3Q6OlN0ciBnZXRfcmVwbygpIGNv bnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdl cygpIGNvbnN0IG5vZXhjZXB0OworLSAgflJlcG9QYWNrYWdlKCkgPSBkZWxldGU7Cisrc3RydWN0 IFJlcG9QYWNrYWdlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgOjpydXN0 OjpTdHIgZ2V0X3JlcG8gKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gZ2V0X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgflJlcG9QYWNrYWdl ICgpID0gZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7Cist ICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhj ZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3Ry dWN0IGxheW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhj ZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07 CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlcG9QYWNr YWdlCitAQCAtMTY1NCw3ICsxODc1LDggQEAgc3RydWN0IFJlcG9QYWNrYWdlIGZpbmFsIDogcHVi bGljIDo6cnVzdDo6T3BhcXVlIHsKKyAvLyBBIGNvcHkgb2YgTGl2ZUZzU3RhdGUgdGhhdCBpcyBi cmlkZ2VkIHRvIEMrKzsgdGhlIG1haW4KKyAvLyBjaGFuZ2UgaGVyZSBpcyB3ZSBjYW4ndCB1c2Ug T3B0aW9uPD4geWV0LCBzbyBlbXB0eSB2YWx1ZXMKKyAvLyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhl IGVtcHR5IHN0cmluZy4KKy1zdHJ1Y3QgTGl2ZUFwcGx5U3RhdGUgZmluYWwgeworK3N0cnVjdCBM aXZlQXBwbHlTdGF0ZSBmaW5hbAorK3sKKyAgIDo6cnVzdDo6U3RyaW5nIGlucHJvZ3Jlc3M7Cisg ICA6OnJ1c3Q6OlN0cmluZyBjb21taXQ7CisgCitAQCAtMTY2NCw2NCArMTg4Niw3MiBAQCBzdHJ1 Y3QgTGl2ZUFwcGx5U3RhdGUgZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1Rf cnBtb3N0cmVlY3h4JFBhc3N3ZERCCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkUGFzc3dkREIKKy1zdHJ1Y3QgUGFzc3dkREIgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpP cGFxdWUgeworLSAgOjpydXN0OjpTdHJpbmcgbG9va3VwX3VzZXIoOjpzdGQ6OnVpbnQzMl90IHVp ZCkgY29uc3Q7CistICA6OnJ1c3Q6OlN0cmluZyBsb29rdXBfZ3JvdXAoOjpzdGQ6OnVpbnQzMl90 IGdpZCkgY29uc3Q7CistICB+UGFzc3dkREIoKSA9IGRlbGV0ZTsKKytzdHJ1Y3QgUGFzc3dkREIg ZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7CisrICA6OnJ1c3Q6OlN0cmluZyBsb29r dXBfdXNlciAoOjpzdGQ6OnVpbnQzMl90IHVpZCkgY29uc3Q7CisrICA6OnJ1c3Q6OlN0cmluZyBs b29rdXBfZ3JvdXAgKDo6c3RkOjp1aW50MzJfdCBnaWQpIGNvbnN0OworKyAgflBhc3N3ZERCICgp ID0gZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBz dHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0 OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0 IGxheW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0 OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07Cisg fTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhc3N3ZERCCisg CisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcwor ICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMKKy1z dHJ1Y3QgUGFzc3dkRW50cmllcyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CistICB2 b2lkIGFkZF9ncm91cF9jb250ZW50KDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIg cGF0aCk7CistICB2b2lkIGFkZF9wYXNzd2RfY29udGVudCg6OnN0ZDo6aW50MzJfdCByb290ZnMs IDo6cnVzdDo6U3RyIHBhdGgpOworLSAgYm9vbCBjb250YWluc19ncm91cCg6OnJ1c3Q6OlN0ciB1 c2VyKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgY29udGFpbnNfdXNlcig6OnJ1c3Q6OlN0ciB1 c2VyKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6c3RkOjp1aW50MzJfdCBsb29rdXBfdXNlcl9pZCg6 OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdDsKKy0gIDo6c3RkOjp1aW50MzJfdCBsb29rdXBfZ3JvdXBf aWQoOjpydXN0OjpTdHIgZ3JvdXApIGNvbnN0OworLSAgflBhc3N3ZEVudHJpZXMoKSA9IGRlbGV0 ZTsKKytzdHJ1Y3QgUGFzc3dkRW50cmllcyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQor K3sKKysgIHZvaWQgYWRkX2dyb3VwX2NvbnRlbnQgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpy dXN0OjpTdHIgcGF0aCk7CisrICB2b2lkIGFkZF9wYXNzd2RfY29udGVudCAoOjpzdGQ6OmludDMy X3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBwYXRoKTsKKysgIGJvb2wgY29udGFpbnNfZ3JvdXAgKDo6 cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBjb250YWluc191c2VyICg6 OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6c3RkOjp1aW50MzJfdCBsb29r dXBfdXNlcl9pZCAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Q7CisrICA6OnN0ZDo6dWludDMyX3Qg bG9va3VwX2dyb3VwX2lkICg6OnJ1c3Q6OlN0ciBncm91cCkgY29uc3Q7CisrICB+UGFzc3dkRW50 cmllcyAoKSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0 OworLSAgc3RydWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBu b2V4Y2VwdDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysg IHN0cnVjdCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBu b2V4Y2VwdDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7Cisg ICB9OworIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNz d2RFbnRyaWVzCisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRXh0 ZW5zaW9ucworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4dGVuc2lv bnMKKy1zdHJ1Y3QgRXh0ZW5zaW9ucyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7Cist ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9zKCkgY29uc3Qgbm9leGNlcHQ7 CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X29zX2V4dGVuc2lvbl9wYWNrYWdl cygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9k ZXZlbG9wbWVudF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBzdGF0ZV9jaGVj a3N1bV9jaGFuZ2VkKDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0cHV0X2Rpcikg Y29uc3Q7CistICB2b2lkIHVwZGF0ZV9zdGF0ZV9jaGVja3N1bSg6OnJ1c3Q6OlN0ciBjaGtzdW0s IDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OworLSAgdm9pZCBzZXJpYWxpemVfdG9fZGly KDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OworLSAgOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlPiBnZW5lcmF0ZV90cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNyYykgY29uc3Q7CistICB+RXh0ZW5zaW9ucygpID0gZGVsZXRlOworK3N0cnVj dCBFeHRlbnNpb25zIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9yZXBvcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3NfZXh0ZW5zaW9uX3BhY2thZ2VzICgpIGNv bnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9kZXZlbG9w bWVudF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgc3RhdGVfY2hlY2tzdW1f Y2hhbmdlZCAoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25z dDsKKysgIHZvaWQgdXBkYXRlX3N0YXRlX2NoZWNrc3VtICg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6 cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OworKyAgdm9pZCBzZXJpYWxpemVfdG9fZGlyICg6 OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdDsKKysgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT4KKysgIGdlbmVyYXRlX3RyZWVmaWxlICg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNyYykgY29uc3Q7CisrICB+RXh0ZW5zaW9ucyAoKSA9IGRlbGV0ZTsKKyAK KyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAgc3RydWN0IGxheW91dCB7 CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdDsKKy0gICAgc3RhdGlj IDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVjdCBsYXlvdXQKKysgIHsK KysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2VwdDsKKysgICAgc3RhdGlj IDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9OworIH07CisgI2VuZGlmIC8v IENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRFeHRlbnNpb25zCisgCisgI2lmbmRlZiBD WFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZQorICNkZWZpbmUgQ1hY QlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UKKy1zdHJ1Y3QgTG9ja2Vk UGFja2FnZSBmaW5hbCB7Cisrc3RydWN0IExvY2tlZFBhY2thZ2UgZmluYWwKKyt7CisgICA6OnJ1 c3Q6OlN0cmluZyBuYW1lOworICAgOjpydXN0OjpTdHJpbmcgZXZyOworICAgOjpydXN0OjpTdHJp bmcgYXJjaDsKK0BAIC0xNzMzLDMyNjIgKzE5NjMsNDk4NSBAQCBzdHJ1Y3QgTG9ja2VkUGFja2Fn ZSBmaW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9j a2ZpbGVDb25maWcKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2Nr ZmlsZUNvbmZpZworLXN0cnVjdCBMb2NrZmlsZUNvbmZpZyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6 Ok9wYXF1ZSB7CistICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4g Z2V0X2xvY2tlZF9wYWNrYWdlcygpIGNvbnN0OworLSAgfkxvY2tmaWxlQ29uZmlnKCkgPSBkZWxl dGU7Cisrc3RydWN0IExvY2tmaWxlQ29uZmlnIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVl CisreworKyAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGdldF9s b2NrZWRfcGFja2FnZXMgKCkgY29uc3Q7CisrICB+TG9ja2ZpbGVDb25maWcgKCkgPSBkZWxldGU7 CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlv dXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0Cisr ICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRp ZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWcKKyAKKy1z dGF0aWNfYXNzZXJ0KDo6c3RkOjppc19lbnVtPFJwbU9zdHJlZURpZmZQcmludEZvcm1hdD46OnZh bHVlLCAiZXhwZWN0ZWQgZW51bSIpOworLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFJwbU9zdHJlZURp ZmZQcmludEZvcm1hdCkgPT0gc2l6ZW9mKDo6c3RkOjp1aW50OF90KSwgImluY29ycmVjdCBzaXpl Iik7Cistc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4oUnBtT3N0cmVl RGlmZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfU1VNTUFSWSkgPT0g MCwgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOworLXN0YXRp Y19hc3NlcnQoc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+KFJwbU9zdHJlZURpZmZQcmludEZv cm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfQUxJR05FRCkgPT0gMSwgImRp c2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOworLXN0YXRpY19hc3Nl cnQoc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+KFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6 UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfTVVMVElMSU5FKSA9PSAyLCAiZGlzYWdy ZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7CistCistZXh0ZXJuICJDIiB7 CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2Jh cmVfc3BsaXRfeGF0dHJzKGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OworLQorLWJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX2h0dHBfYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNl cHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGlzX29zdHJlZV9jb250YWluZXIoYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CistCistOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9zeXN0ZW1faG9z dF90eXBlKDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSAqcmV0dXJuJCkgbm9leGNlcHQ7 CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJl cXVpcmVfc3lzdGVtX2hvc3RfdHlwZSg6OnJwbW9zdHJlZWN4eDo6U3lzdGVtSG9zdFR5cGUgdCkg bm9leGNlcHQ7Cisrc3RhdGljX2Fzc2VydCAoOjpzdGQ6OmlzX2VudW08UnBtT3N0cmVlRGlmZlBy aW50Rm9ybWF0Pjo6dmFsdWUsICJleHBlY3RlZCBlbnVtIik7Cisrc3RhdGljX2Fzc2VydCAoc2l6 ZW9mIChScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQpID09IHNpemVvZiAoOjpzdGQ6OnVpbnQ4X3Qp LCAiaW5jb3JyZWN0IHNpemUiKTsKKytzdGF0aWNfYXNzZXJ0ICgKKysgICAgc3RhdGljX2Nhc3Q8 OjpzdGQ6OnVpbnQ4X3Q+IChScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZG X1BSSU5UX0ZPUk1BVF9TVU1NQVJZKQorKyAgICAgICAgPT0gMCwKKysgICAgImRpc2FncmVlcyB3 aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOworK3N0YXRpY19hc3NlcnQgKAorKyAg ICBzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4gKFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6 UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfQUxJR05FRCkKKysgICAgICAgID09IDEs CisrICAgICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFsdWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKKytz dGF0aWNfYXNzZXJ0IChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4gKAorKyAgICAgICAgICAg ICAgICAgICBScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZP Uk1BVF9GVUxMX01VTFRJTElORSkKKysgICAgICAgICAgICAgICAgICAgPT0gMiwKKysgICAgICAg ICAgICAgICAiZGlzYWdyZWVzIHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Cisg CistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfcnBtX2FyZyg6OnJ1c3Q6OlN0 ciBhcmcpIG5vZXhjZXB0OworK2V4dGVybiAiQyIKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfYmFyZV9zcGxpdF94YXR0cnMgKGJvb2wg KnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfc3RhcnRfZGFlbW9uKCkgbm9leGNlcHQ7CisrICBib29s IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19odHRwX2FyZyAoOjpydXN0OjpTdHIgYXJn KSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY2xpZW50X2hhbmRsZV9mZF9hcmd1bWVudCg6OnJ1c3Q6OlN0ciBhcmcsIDo6cnVz dDo6U3RyIGFyY2gsIGJvb2wgaXNfcmVwbGFjZSwgOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRpc19vc3RyZWVfY29udGFpbmVyIChib29sICpyZXR1cm4kKSBub2V4 Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfcmVuZGVy X2Rvd25sb2FkX3Byb2dyZXNzKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmcHJvZ3Jl c3MsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfc3lzdGVtX2hvc3RfdHlwZSAo CisrICAgICAgOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlICpyZXR1cm4kKSBub2V4Y2Vw dDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5uaW5nX2luX2NvbnRh aW5lcigpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRyZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUgKDo6cnBtb3N0cmVlY3h4 OjpTeXN0ZW1Ib3N0VHlwZSB0KSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlybShib29sICpyZXR1cm4kKSBub2V4Y2Vw dDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlzX3JwbV9hcmcgKDo6cnVz dDo6U3RyIGFyZykgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm1fb3JfYWJvcnQoKSBub2V4Y2VwdDsKKy06OnN0ZDo6 c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJG9wZXJhdG9yJHNp emVvZigpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEJ1YmJsZXdyYXAkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9zdGFydF9kYWVt b24gKCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfc2VsZnRlc3QoKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfaGFuZGxlX2Zk X2FyZ3VtZW50ICgKKysgICAgICA6OnJ1c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsIGJv b2wgaXNfcmVwbGFjZSwKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4gKnJldHVy biQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRidWJibGV3cmFwX3J1bl9zeW5jKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQs IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncywgYm9vbCBjYXB0dXJlX3N0 ZG91dCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHksIDo6 cnVzdDo6VmVjPDo6c3RkOjp1aW50OF90PiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfcmVuZGVyX2Rvd25sb2FkX3Byb2dyZXNz ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJnByb2dyZXNzLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3KDo6c3RkOjppbnQzMl90 IHJvb3Rmc19mZCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bm5p bmdfaW5fY29udGFpbmVyICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX25ld193aXRoX211dGFiaWxpdHko OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFi aWxpdHkgbXV0YWJpbGl0eSwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb25maXJtIChib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06 OnN0ZDo6aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRnZXRf cm9vdGZzX2ZkKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwIGNvbnN0ICZzZWxmKSBub2V4Y2Vw dDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b25maXJtX29yX2Fib3J0ICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7 CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfYndyYXBfYXJnKDo6cnBtb3N0cmVlY3h4OjpC dWJibGV3cmFwICZzZWxmLCA6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfc2VsZnRl c3QgKCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnVi Ymxld3JhcCRhcHBlbmRfY2hpbGRfYXJnKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxm LCA6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfcnVuX3N5bmMgKAorKyAgICAgIDo6 c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25z dCAmYXJncywgYm9vbCBjYXB0dXJlX3N0ZG91dCwKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6QnVi Ymxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eSwKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnN0ZDo6 dWludDhfdD4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0ZW52KDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZz ZWxmLCA6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX25ldyAo CisrICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcD4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9mZCg6OnJwbW9zdHJlZWN4eDo6QnVi Ymxld3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkLCA6OnN0ZDo6aW50MzJfdCB0 YXJnZXRfZmQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3X3dpdGhfbXV0YWJpbGl0eSAoCisrICAgICAg OjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkLCA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFi aWxpdHkgbXV0YWJpbGl0eSwKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnVi Ymxld3JhcD4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0X2luaGVyaXRfc3RkaW4oOjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXAgJnNlbGYpIG5vZXhjZXB0OworKyAgOjpzdGQ6OmludDMyX3QgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkZ2V0X3Jvb3Rmc19mZCAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OkJ1YmJsZXdyYXAgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLXZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRpbl9mZCg6OnJwbW9z dHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4 Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkYXBw ZW5kX2J3cmFwX2FyZyAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZG91dF9mZCg6OnJwbW9zdHJlZWN4eDo6QnViYmxl d3JhcCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkYXBwZW5kX2NoaWxkX2FyZyAo OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGFy Zykgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxl d3JhcCR0YWtlX3N0ZGVycl9mZCg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpz dGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0ZW52ICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdDsKKyAKKy12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2FuZF9z dGRlcnJfZmQoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsIDo6c3RkOjppbnQzMl90 IHNvdXJjZV9mZCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRCdWJibGV3cmFwJHRha2VfZmQgKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxmLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90IHRhcmdldF9mZCkgbm9leGNl cHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5k X3JlYWQoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsIDo6cnVzdDo6U3RyIHNyYywg OjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRCdWJibGV3cmFwJHNldF9pbmhlcml0X3N0ZGluICgKKysgICAgICA6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWR3cml0ZSg6OnJwbW9zdHJlZWN4eDo6 QnViYmxld3JhcCAmc2VsZiwgOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4 Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFr ZV9zdGRpbl9mZCAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgJnNlbGYsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3Rk OjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkc2V0dXBfY29tcGF0X3Zhcig6 OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vfc3Rkb3V0X2ZkICg6OnJwbW9z dHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjppbnQzMl90IHNvdXJjZV9m ZCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JEJ1YmJsZXdyYXAkcnVuKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICZzZWxm LCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSkgbm9leGNl cHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHRha2Vf c3RkZXJyX2ZkICg6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3Rk OjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CisgCistOjpycG1vc3RyZWVjeHg6OkJ1YmJs ZXdyYXBNdXRhYmlsaXR5IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtdXRhYmlsaXR5X2Zv cl91bmlmaWVkX2NvcmUoYm9vbCB1bmlmaWVkX2NvcmUpIG5vZXhjZXB0OworKyAgdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZG91dF9hbmRfc3RkZXJy X2ZkICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpzdGQ6Omlu dDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdXNyb3ZlcmxheV9lbnRyeXBvaW50KDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZCAoOjpycG1vc3RyZWVjeHg6 OkJ1YmJsZXdyYXAgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGRlc3Qp IG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRhcHBseWxpdmVfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Y29uc3QgJmFyZ3MpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkQnViYmxld3JhcCRiaW5kX3JlYWR3cml0ZSAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAg JnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBkZXN0KSBu b2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkYXBwbHlsaXZlX2ZpbmlzaCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25z dCAmc3lzcm9vdCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRzZXR1cF9jb21wYXRfdmFyICgKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2V1dGlsX2xlZ2Fj eV9wcmVwX2Rldl9hbmRfcnVuKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpIG5vZXhjZXB0Owor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJs ZXdyYXAkcnVuICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAmc2VsZiwgOjpy cG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIG5vZXhjZXB0Owor IAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X29zdHJlZV90eG5fc3Rh dHMoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG9UcmFuc2FjdGlvblN0YXRzICZzdGF0cykgbm9l eGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkKKysgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtdXRhYmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUgKGJvb2wg dW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkd3JpdGVfY29tbWl0X2lkKDo6cnVzdDo6U3RyIHRhcmdldF9w YXRoLCA6OnJ1c3Q6OlN0ciByZXZpc2lvbikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdXNyb3ZlcmxheV9lbnRyeXBvaW50ICgK KysgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpIG5vZXhjZXB0 OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj bGl3cmFwX3dyaXRlX3dyYXBwZXJzKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7Cisr ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHls aXZlX2VudHJ5cG9pbnQgKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25z dCAmYXJncykgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVycyg6OnN0ZDo6aW50MzJf dCByb290ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykgbm9leGNl cHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk YXBwbHlsaXZlX2ZpbmlzaCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3Qg Y29uc3QgJnN5c3Jvb3QpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNsaXdyYXBfZGVzdGRpcig6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7 CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29t cG9zZXV0aWxfbGVnYWN5X3ByZXBfZGV2X2FuZF9ydW4gKAorKyAgICAgIDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfZW5jYXBzdWxhdGUoOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICphcmdzKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JHByaW50X29zdHJlZV90eG5fc3RhdHMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvVHJhbnNhY3Rpb25TdGF0cyAmc3RhdHMpIG5vZXhjZXB0OworIAorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lfZnJvbV9z ZWxmX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICphcmdzKSBub2V4Y2Vw dDsKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQcnVuZWRDb250YWluZXJJbmZv JG9wZXJhdG9yJGVxKFBydW5lZENvbnRhaW5lckluZm8gY29uc3QgJiwgUHJ1bmVkQ29udGFpbmVy SW5mbyBjb25zdCAmKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCR3cml0ZV9jb21taXRfaWQgKDo6cnVzdDo6U3RyIHRhcmdldF9w YXRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmV2aXNpb24pIG5vZXhjZXB0OworIAorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdWxsX2NvbnRh aW5lcig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVj eHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZiwg OjpydXN0OjpTdHIgZGlnZXN0X292ZXJyaWRlLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGl3cmFwX3dyaXRlX3dy YXBwZXJzICg6OnN0ZDo6aW50MzJfdCByb290ZnMpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfcHJ1bmUoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4 OjpQcnVuZWRDb250YWluZXJJbmZvICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGl3cmFwX3dyaXRlX3NvbWVf d3JhcHBlcnMgKAorKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcXVlcnlfY29udGFpbmVyX2ltYWdlX2Nv bW1pdCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIg YywgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+ICpyZXR1 cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdy YXBfZGVzdGRpciAoOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdXJnZV9yZWZzcGVj KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZz cGVjKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29udGFpbmVyX2VuY2Fwc3VsYXRlICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19jb250YWluZXJfdXBkYXRlKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxl IGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmLCBib29sICpyZXR1cm4kKSBu b2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1w RXRjR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVGVtcEV0Y0d1YXJkJG9wZXJhdG9yJGFsaWdub2YoKSBu b2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxl c3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRvcGVy YXRvciRhbGlnbm9mKCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95X2Zyb21fc2VsZl9lbnRyeXBvaW50ICgKKysgICAg ICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OworKyAgYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUHJ1bmVkQ29udGFpbmVySW5mbyRvcGVyYXRvciRl cSAoCisrICAgICAgUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmLCBQcnVuZWRDb250YWluZXJJ bmZvIGNvbnN0ICYpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX3RlbXBldGNfZ3VhcmQoOjpzdGQ6OmludDMyX3Qg cm9vdGZzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPiAqcmV0dXJu JCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkcHVsbF9jb250YWluZXIgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5j ZWxsYWJsZSwKKysgICAgICA6OnJ1c3Q6OlN0ciBpbWdyZWYsIDo6cnVzdDo6U3RyIGRpZ2VzdF9v dmVycmlkZSwKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1h Z2VTdGF0ZT4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkdW5kbyg6OnJwbW9zdHJlZWN4 eDo6VGVtcEV0Y0d1YXJkIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWluZXJfcHJ1bmUgKAorKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAorKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpQcnVuZWRDb250YWluZXJJbmZvICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJl cGFyZV9maWxlc3lzdGVtX3NjcmlwdF9wcmVwKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0 OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPiAqcmV0dXJuJCkgbm9l eGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJHVuZG8oOjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1T Y3JpcHRQcmVwICZzZWxmKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVuX2RlcG1vZCg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZGZkLCA6OnJ1c3Q6OlN0ciBrdmVyLCBib29sIHVuaWZpZWRfY29yZSkgbm9leGNlcHQ7CistCist OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9zeXN1 c2Vycyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCBib29sIGZvcmNlKSBub2V4Y2VwdDsKKy0K Ky12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2dfdHJlZWZpbGUoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0Zikgbm9leGNlcHQ7CistCistYm9vbCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkaXNfY29udGFpbmVyX2ltYWdlX3JlZmVyZW5jZSg6OnJ1c3Q6OlN0 ciByZWZzcGVjKSBub2V4Y2VwdDsKKy0KKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRpc19jb250YWluZXJfaW1hZ2VfZGlnZXN0X3JlZmVyZW5jZSg6OnJ1c3Q6OlN0ciByZWZzcGVj KSBub2V4Y2VwdDsKKy0KKy06OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5cGUgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHJlZnNwZWNfY2xhc3NpZnkoOjpydXN0OjpTdHIgcmVmc3BlYykgbm9l eGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHZlcmlmeV9rZXJuZWxfaG1hYyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3Ry IG1vZGRpcikgbm9leGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1zKDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqcnBtcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkc3RhZ2VfY29udGFpbmVyX3JwbV9yYXdfZmRzKDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90 PiAqZmRzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0Owor LQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21t aXRfaGFzX21hdGNoaW5nX3NlcG9saWN5KDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAm Y29tbWl0LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU2VQb2xpY3kgY29uc3QgJnBvbGljeSwgYm9v bCAqcmV0dXJuJCkgbm9leGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGdldF9oZWFkZXJfdmFyaWFudCg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgY2FjaGVicmFuY2gsIDo6cnBtb3N0cmVl Y3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX2J1aWxkX2NodW5rZWRfb2Np X2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICphcmdzKSBub2V4Y2VwdDsK Ky0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29t cG9zZV9pbWFnZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0Owor LQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21w b3NlX3Jvb3Rmc19lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJncykg bm9leGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGNvbmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFyZ2V0KDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVSZXBvIGNvbnN0ICZidWlsZF9yZXBvLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBj b25zdCAmdGFyZ2V0X3JlcG8pIG5vZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3ByZXBhcmVfcm9vdGZzKDo6c3RkOjpp bnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50MzJfdCBkZXN0X3Jvb3Rmc19kZmQsIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUpIG5vZXhjZXB0OworLQorLTo6cnVzdDo6 cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlcG9zdF9uc3N3 aXRjaF9hbHRmaWxlcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSBub2V4Y2VwdDsKKy0KKy06 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9w b3N0cHJvY2Vzcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgJnRyZWVmaWxlLCA6OnJ1c3Q6OlN0ciBuZXh0X3ZlcnNpb24sIGJvb2wgdW5pZmllZF9j b3JlKSBub2V4Y2VwdDsKKy0KKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUoOjpzdGQ6OmludDMyX3Qg cm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkgbm9l eGNlcHQ7CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkgbm9leGNlcHQ7CistCist OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnZlcnRf dmFyX3RvX3RtcGZpbGVzX2QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVj eHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpIG5vZXhjZXB0OworLQorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyb290ZnNfcHJlcGFy ZV9saW5rcyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnRyZWVmaWxlLCBib29sIHNraXBfdXNybG9jYWwpIG5vZXhjZXB0OworLQorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3b3JrYXJvdW5k X3NlbGludXhfY3Jvc3NfbGFiZWxpbmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1v c3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpIG5vZXhjZXB0OworLQorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwb3N0cHJvY2Vzc19j bGVhbnVwX3JwbWRiKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpIG5vZXhjZXB0OworLQorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXdyaXRlX3Jw bWRiX2Zvcl90YXJnZXQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBub3JtYWxpemUp IG5vZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRkaXJlY3Rvcnlfc2l6ZSg6OnN0ZDo6aW50MzJfdCBkZmQsIDo6cnBtb3N0cmVlY3h4 OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlLCA6OnN0ZDo6dWludDY0X3QgKnJldHVy biQpIG5vZXhjZXB0OworLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRjb250YWluZXJfcmVidWlsZCg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSkgbm9leGNl cHQgeworLSAgdm9pZCAoKmNvbnRhaW5lcl9yZWJ1aWxkJCkoOjpydXN0OjpTdHIpID0gOjpycG1v c3RyZWVjeHg6OmNvbnRhaW5lcl9yZWJ1aWxkOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhy b3ckOworLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAg ICAgIGNvbnRhaW5lcl9yZWJ1aWxkJCh0cmVlZmlsZSk7CistICAgICAgICB0aHJvdyQucHRyID0g bnVsbHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkp OworLSAgcmV0dXJuIHRocm93JDsKKy19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkcXVlcnlfY29udGFpbmVyX2ltYWdlX2NvbW1pdCAoCisrICAg ICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGMs CisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9mb3JfaWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRlcGxveV9pZCwgOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZURlcGxveW1lbnQgKipyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHVyZ2VfcmVmc3BlYyAoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQ7 CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRl cGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZz eXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjaGVja19jb250YWluZXJfdXBkYXRlICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAm Y2FuY2VsbGFibGUsCisrICAgICAgOjpydXN0OjpTdHIgaW1ncmVmLCBib29sICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRl bXBFdGNHdWFyZCRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3IkYWxpZ25v ZiAoKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKKysg IDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3Jp cHRQcmVwJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZ2V0X2Jhc2UoOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIG9wdF9kZXBs b3lfaWQsIDo6cnVzdDo6U3RyIG9wdF9vc19uYW1lLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVw bG95bWVudCAqKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfdGVtcGV0Y19ndWFyZCAoCisrICAgICAg OjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0 Y0d1YXJkPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlmZig6OnJwbW9zdHJlZWN4eDo6R1Zh cmlhbnREaWN0IGNvbnN0ICZkaWN0LCA6OnJwbW9zdHJlZWN4eDo6RXhwb3J0ZWRNYW5pZmVzdERp ZmYgY29uc3QgJmRpZmYpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkdW5kbyAoOjpycG1vc3RyZWVj eHg6OlRlbXBFdGNHdWFyZCBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRhZW1vbl9zYW5pdHljaGVja19l bnZpcm9ubWVudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkcHJlcGFyZV9maWxlc3lzdGVtX3NjcmlwdF9wcmVwICgKKysgICAgICA6OnN0ZDo6aW50 MzJfdCByb290ZnMsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0 UHJlcD4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JGRlcGxveW1lbnRfZ2VuZXJhdGVfaWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxv eW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRG aWxlc3lzdGVtU2NyaXB0UHJlcCR1bmRvICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6RmlsZXN5 c3RlbVNjcmlwdFByZXAgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6 R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5fZGVwbW9kICg6OnN0ZDo6aW50MzJf dCByb290ZnNfZGZkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGt2ZXIsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlm aWVkX2NvcmUpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8g Y29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxh YmxlKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRydW5fc3lzdXNlcnMgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGZvcmNlKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmVmc3BlYywgOjpy dXN0OjpTdHIgYmFzZV9jaGVja3N1bSwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25z dCAmZGljdCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRs b2dfdHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYpIG5vZXhjZXB0 OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRk ZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVE ZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29u c3QgJmNvbW1pdCwgOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSAqcmV0dXJu JCkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250 YWluZXJfaW1hZ2VfcmVmZXJlbmNlICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKKyAK Ky06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95 bWVudF9sYXllcmVkbWV0YV9sb2FkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwg OjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSAqcmV0dXJuJCkgbm9leGNlcHQ7 CisrICBib29sCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfY29udGFpbmVyX2lt YWdlX2RpZ2VzdF9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0OworIAor LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXJzZV9v dmVycmlkZV9zb3VyY2UoOjpydXN0OjpTdHIgc291cmNlLCA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJp ZGVSZXBsYWNlbWVudFNvdXJjZSAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4 eDo6UmVmc3BlY1R5cGUKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZWZzcGVjX2Ns YXNzaWZ5ICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFyc2VfcmV2aXNpb24oOjpydXN0 OjpTdHIgc291cmNlLCA6OnJwbW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb24gKnJldHVybiQpIG5v ZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHZlcmlmeV9rZXJuZWxfaG1hYyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpTdHIgbW9kZGlyKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2VuZXJhdGVfb2JqZWN0X3BhdGgoOjpy dXN0OjpTdHIgYmFzZSwgOjpydXN0OjpTdHIgbmV4dF9zZWdtZW50LCA6OnJ1c3Q6OlN0cmluZyAq cmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1zICg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKnJwbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9l eGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGZhaWxwb2ludCg6OnJ1c3Q6OlN0ciBwKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJG9wZXJhdG9yJHNpemVv ZigpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5l cl9ycG1fcmF3X2ZkcyAoCisrICAgICAgOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+ICpmZHMs IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKnJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5KCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tbWl0X2hhc19tYXRjaGlu Z19zZXBvbGljeSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZjb21t aXQsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBjb25zdCAmcG9saWN5LAorKyAgICAg IGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3MkaXNfaW1hX2VuYWJsZWQoOjpycG1vc3RyZWVjeHg6OlJw bUltcG9ydGVyRmxhZ3MgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJG9wZXJhdG9yJHNpemVvZigpIG5v ZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2hlYWRlcl92YXJpYW50ICg6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGNhY2hlYnJhbmNo LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpy cG1vc3RyZWVjeHg6OkdWYXJpYW50ICoqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9uZXco OjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVzdDo6U3RyIG9zdHJlZV9icmFuY2gsIDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0ICZmbGFncywgOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9idWlsZF9jaHVu a2VkX29jaV9lbnRyeXBvaW50ICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g KmFyZ3MpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyJGhhbmRsZV90cmFuc2xhdGVfcGF0aG5hbWUoOjpycG1vc3RyZWVjeHg6OlJwbUlt cG9ydGVyICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNvbXBvc2VfaW1hZ2UgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqYXJn cykgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXIkb3N0cmVlX2JyYW5jaCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNl bGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Jvb3Rmc19lbnRyeXBv aW50ICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0 OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHBrZ19u YW1lKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJp bmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFyZ2V0ICgKKysg ICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmYnVpbGRfcmVwbywKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmdGFyZ2V0X3JlcG8pIG5vZXhjZXB0 OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19m aWxlc19hcmVfZmlsdGVyZWQoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxm KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY29tcG9zZV9wcmVwYXJlX3Jvb3RmcyAoOjpzdGQ6OmludDMyX3Qgc3JjX3Jv b3Rmc19kZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpzdGQ6OmludDMyX3QgZGVzdF9yb290ZnNfZGZkLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSAmdHJlZWZpbGUpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19pbnNlcnQoOjpycG1vc3RyZWVjeHg6OlJw bUltcG9ydGVyICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZXBvc3Rf bnNzd2l0Y2hfYWx0ZmlsZXMgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpIG5vZXhjZXB0Owor IAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxl c19jb250YWlucyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVz dDo6U3RyIHBhdGgpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3MgKAorKyAgICAgIDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6 cnVzdDo6U3RyIG5leHRfdmVyc2lvbiwKKysgICAgICBib29sIHVuaWZpZWRfY29yZSkgbm9leGNl cHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBt Zmlfb3ZlcnJpZGVzX2luc2VydCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgJnNlbGYsIDo6 cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNlcHQ7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wb3N0 cHJvY2Vzc19maW5hbF9wcmUgKAorKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpIG5vZXhjZXB0OworIAorLWJv b2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHJwbWZpX292ZXJyaWRl c19jb250YWlucyg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVz dDo6U3RyIHBhdGgpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwgKAorKyAgICAgIDo6 c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm dHJlZWZpbGUpIG5vZXhjZXB0OworIAorLTo6c3RkOjp1aW50NjRfdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2dldCg6OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0Owor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnZl cnRfdmFyX3RvX3RtcGZpbGVzX2QgKAorKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQs IDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSBub2V4Y2Vw dDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRpc19p bWFfZW5hYmxlZCg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYpIG5vZXhj ZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRyb290ZnNfcHJlcGFyZV9saW5rcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBza2lwX3VzcmxvY2FsKSBub2V4 Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciR0 d2Vha19pbXBvcnRlZF9maWxlX2luZm8oOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0 ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIG5vZXhj ZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJlbGluZyAoCisrICAgICAgOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUp IG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRScG1JbXBvcnRlciRpc19maWxlX2ZpbHRlcmVkKDo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlciBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdG aWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcG9zdHBy b2Nlc3NfY2xlYW51cF9ycG1kYiAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNlcHQ7 CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyJHRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSg6OnJwbW9zdHJlZWN4eDo6UnBt SW1wb3J0ZXIgJnNlbGYsIDo6cnVzdDo6U3RyIGFic19wYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0Zp bGVJbmZvIGNvbnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0 ciBncm91cG5hbWUpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXdyaXRlX3JwbWRiX2Zvcl90YXJnZXQgKDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZSkgbm9leGNlcHQ7CisgCistYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFzX3RtcGZpbGVzX2VudHJp ZXMoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGly ZWN0b3J5X3NpemUgKDo6c3RkOjppbnQzMl90IGRmZCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25z dCAmY2FuY2VsbGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6c3RkOjp1aW50NjRfdCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkc2VyaWFsaXplX3RtcGZpbGVzX2Nv bnRlbnQoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0 cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnRhaW5lcl9yZWJ1aWxkICg6OnJ1c3Q6OlN0ciB0 cmVlZmlsZSkgbm9leGNlcHQKKysgIHsKKysgICAgdm9pZCAoKmNvbnRhaW5lcl9yZWJ1aWxkJCkg KDo6cnVzdDo6U3RyKSA9IDo6cnBtb3N0cmVlY3h4Ojpjb250YWluZXJfcmVidWlsZDsKKysgICAg OjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnlj YXRjaCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIGNvbnRhaW5l cl9yZWJ1aWxkJCAodHJlZWZpbGUpOworKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBudWxscHRy OworKyAgICAgICAgICB9LAorKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkp OworKyAgICByZXR1cm4gdGhyb3ckOworKyAgfQorIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0bXBmaWxlc190cmFuc2xhdGUoOjpydXN0OjpTdHIg YWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpy dXN0OjpTdHIgdXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSwgOjpydXN0OjpTdHJpbmcg KnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZm9yX2lkICgKKysgICAgICA6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIgZGVwbG95X2lkLAorKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50ICoqcmV0dXJuJCkgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFwcGVu ZF9kcmFjdXRfcmFuZG9tX2NwaW8oOjpzdGQ6OmludDMyX3QgZmQpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3lt ZW50X2NoZWNrc3VtX2Zvcl9pZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jv b3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyIGRlcGxveV9pZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQp IG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRpbml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gY29uc3QgJmZpbGVzLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxs YWJsZSwgOjpzdGQ6OmludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZ2V0X2Jhc2Ug KAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6 OlN0ciBvcHRfZGVwbG95X2lkLCA6OnJ1c3Q6OlN0ciBvcHRfb3NfbmFtZSwKKysgICAgICA6OnJw bW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGpvdXJuYWxfcHJpbnRfc3RhZ2luZ19mYWls dXJlKCkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBs b3ltZW50X2FkZF9tYW5pZmVzdF9kaWZmICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnREaWN0IGNvbnN0ICZkaWN0LAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHBvcnRlZE1hbmlm ZXN0RGlmZiBjb25zdCAmZGlmZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl90YXNrKDo6cnVzdDo6U3RyIG1zZykg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25tZW50ICgKKysgICAgICA6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkgbm9leGNlcHQ7CisgCistdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1z KDo6cnVzdDo6U3RyIG1zZywgOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0OworKyAgdm9pZCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9nZW5lcmF0ZV9pZCAoCisrICAg ICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIDo6 cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQoOjpydXN0OjpTdHIg bXNnKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRkZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQgKAorKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAorKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LAorKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QpIG5vZXhjZXB0OworIAorLXZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X21lc3NhZ2UoOjpy dXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyAoCisrICAgICAgOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3NldF9zdWJfbWVzc2FnZSg6OnJ1c3Q6 OlN0ciBtc2cpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHZhcmlhbnRfYWRkX3JlbW90ZV9zdGF0dXMgKAorKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjLCA6 OnJ1c3Q6OlN0ciBiYXNlX2NoZWNrc3VtLAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFu dERpY3QgY29uc3QgJmRpY3QpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfdXBkYXRlKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4 Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0ICgKKysgICAgICA6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgOjpycG1vc3RyZWVjeHg6 OkdWYXJpYW50IGNvbnN0ICZjb21taXQsCisrICAgICAgOjpycG1vc3RyZWVjeHg6OkRlcGxveW1l bnRMYXllcmVkTWV0YSAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19lbmQoOjpydXN0OjpTdHIgc3VmZml4KSBu b2V4Y2VwdDsKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5RW50cnkk b3BlcmF0b3IkZXEoSGlzdG9yeUVudHJ5IGNvbnN0ICYsIEhpc3RvcnlFbnRyeSBjb25zdCAmKSBu b2V4Y2VwdDsKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5RW50cnkk b3BlcmF0b3IkbmUoSGlzdG9yeUVudHJ5IGNvbnN0ICYsIEhpc3RvcnlFbnRyeSBjb25zdCAmKSBu b2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0 b3J5Q3R4JG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhj ZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRlcGxveW1lbnRfbGF5ZXJlZG1ldGFfbG9hZCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNv bnN0ICZkZXBsb3ltZW50LAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpEZXBsb3ltZW50TGF5ZXJl ZE1ldGEgKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X2N0eF9uZXcoOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6Okhpc3RvcnlDdHg+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXJzZV9vdmVycmlkZV9zb3Vy Y2UgKAorKyAgICAgIDo6cnVzdDo6U3RyIHNvdXJjZSwgOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRl UmVwbGFjZW1lbnRTb3VyY2UgKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG5leHRfZW50cnko OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggJnNlbGYsIDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5 RW50cnkgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXJzZV9yZXZpc2lvbiAoOjpydXN0OjpTdHIgc291 cmNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJw bW9zdHJlZWN4eDo6UGFyc2VkUmV2aXNpb24gKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X3BydW5l KCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VG9raW9IYW5kbGUkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3IkYWxpZ25vZigp IG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRv a2lvRW50ZXJHdWFyZCRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQkb3BlcmF0b3IkYWxp Z25vZigpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9vYmplY3RfcGF0aCAoOjpydXN0OjpTdHIgYmFzZSwg OjpydXN0OjpTdHIgbmV4dF9zZWdtZW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7 CisgCistOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICpycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkdG9raW9faGFuZGxlX2dldCgpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGZhaWxwb2ludCAoOjpydXN0OjpTdHIgcCkg bm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRS cG1JbXBvcnRlckZsYWdzJG9wZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpz aXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyRmxhZ3Mkb3BlcmF0 b3IkYWxpZ25vZiAoKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1 YXJkICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkZW50ZXIoOjpycG1v c3RyZWVjeHg6OlRva2lvSGFuZGxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIDo6cnBtb3N0 cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICoKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5ICgpIG5vZXhjZXB0OworIAorLWJvb2wgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNjcmlwdF9pc19pZ25vcmVkKDo6cnVzdDo6U3RyIHBr ZywgOjpydXN0OjpTdHIgc2NyaXB0LCBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCkgbm9leGNlcHQ7 CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJGlz X2ltYV9lbmFibGVkICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyBj b25zdCAmc2VsZikgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7CisrICA6 OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvcGVy YXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0ZXN0dXRpbHNfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKmFyZ3YpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9uZXcgKAorKyAgICAgIDo6 cnVzdDo6U3RyIHBrZ19uYW1lLCA6OnJ1c3Q6OlN0ciBvc3RyZWVfYnJhbmNoLAorKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0ICZmbGFncywKKysgICAgICA6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+ICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtYXliZV9zaGVsbF9xdW90ZSg6 OnJ1c3Q6OlN0ciBpbnB1dCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworLWJv b2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlZnNwZWMkb3BlcmF0b3IkZXEoUmVmc3Bl YyBjb25zdCAmLCBSZWZzcGVjIGNvbnN0ICYpIG5vZXhjZXB0OworLWJvb2wgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JE92ZXJyaWRlUmVwbGFjZW1lbnQkb3BlcmF0b3IkZXEoT3ZlcnJpZGVS ZXBsYWNlbWVudCBjb25zdCAmLCBPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICYpIG5vZXhjZXB0 OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG9w ZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKKysgIHZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGhhbmRsZV90cmFuc2xh dGVfcGF0aG5hbWUgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciAmc2VsZiwg OjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAor LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmls ZV9uZXcoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZv aWQKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvc3RyZWVfYnJh bmNoICg6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpT dHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZW1wdHkoOjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRwa2dfbmFtZSAoOjpycG1vc3RyZWVj eHg6OlJwbUltcG9ydGVyIGNvbnN0ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkdHJlZWZpbGVfbmV3X2Zyb21fc3RyaW5nKDo6cnVzdDo6U3RyIGJ1ZiwgYm9vbCBjbGll bnQsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhj ZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkZG9j X2ZpbGVzX2FyZV9maWx0ZXJlZCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy IGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NvbXBvc2UoOjpydXN0OjpTdHIgZmls ZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19pbnNlcnQgKDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlciAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0Owor IAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVl ZmlsZV9uZXdfY2xpZW50KDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJj aCwgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiAqcmV0dXJuJCkgbm9leGNl cHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRkb2Nf ZmlsZXNfY29udGFpbnMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25z dCAmc2VsZiwgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQ dHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19jbGllbnRfZnJv bV9ldGMoOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2luc2VydCAoCisrICAgICAgOjpy cG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnN0ZDo6 dWludDY0X3QgaW5kZXgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9kZWxldGVfY2xpZW50X2V0Yyg6OnN0ZDo6 dWludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zICgKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgp IG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6RmF0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfd29ya2Rpcig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnVpbnQ2NF90IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRScG1JbXBvcnRlciRycG1maV9vdmVycmlkZXNfZ2V0ICgKKysgICAgICA6OnJwbW9z dHJlZWN4eDo6UnBtSW1wb3J0ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhj ZXB0OworIAorLTo6c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfcGFzc3dkX2ZkKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNl cHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRpc19p bWFfZW5hYmxlZCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZz ZWxmKSBub2V4Y2VwdDsKKyAKKy06OnN0ZDo6aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2dyb3VwX2ZkKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2Vs Zikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBv cnRlciR0d2Vha19pbXBvcnRlZF9maWxlX2luZm8gKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlciBjb25zdCAmc2VsZiwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAm ZmlsZV9pbmZvKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfanNvbl9zdHJpbmcoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0 ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaXNfZmls ZV9maWx0ZXJlZCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlN0ciBwYXRoLAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8g Y29uc3QgJmZpbGVfaW5mbywgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29zdHJlZV9sYXllcnMoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHRyYW5zbGF0ZV90b190bXBmaWxlc19lbnRy eSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICZzZWxmLCA6OnJ1c3Q6OlN0 ciBhYnNfcGF0aCwKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxl X2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1lLAorKyAgICAgIDo6cnVzdDo6U3RyIGdyb3VwbmFt ZSkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X29zdHJlZV9vdmVycmlkZV9sYXllcnMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0 OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFzX3Rt cGZpbGVzX2VudHJpZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlciBjb25z dCAmc2VsZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X2FsbF9vc3RyZWVfbGF5ZXJzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2Vw dDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHNlcmlh bGl6ZV90bXBmaWxlc19jb250ZW50ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXIgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb3MoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHRtcGZpbGVzX3RyYW5zbGF0ZSAoCisrICAgICAgOjpydXN0OjpT dHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywg OjpydXN0OjpTdHIgdXNlcm5hbWUsCisrICAgICAgOjpydXN0OjpTdHIgZ3JvdXBuYW1lLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkYXBwZW5kX2RyYWN1dF9yYW5kb21fY3BpbyAoOjpzdGQ6OmludDMyX3QgZmQpIG5vZXhj ZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRyZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9uX3ByZWZpeCg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2Vw dDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkaW5pdHJhbWZzX292ZXJsYXlfZ2VuZXJhdGUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBjb25zdCAmZmlsZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxh YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnN0ZDo6aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNr YWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiAqcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcsIGJvb2wgKnJldHVybiQpIG5v ZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkam91cm5hbF9wcmlu dF9zdGFnaW5nX2ZhaWx1cmUgKCkgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2sgKDo6cnVzdDo6U3RyIG1zZykgbm9leGNl cHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xv Y2FsX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fbl9pdGVtcyAoOjpy dXN0OjpTdHIgbXNnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6dWludDY0X3Qgbikgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGFkZF9sb2NhbF9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3Rpbmcs IGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50ICg6OnJ1c3Q6OlN0ciBtc2cpIG5v ZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0 OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19z ZXRfbWVzc2FnZSAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX2xvY2FsX2Zp bGVvdmVycmlkZV9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsIGJvb2wgYWxsb3dfZXhpc3RpbmcsIGJv b2wgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY29uc29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2UgKDo6cnVzdDo6U3RyIG1zZykgbm9l eGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNl bGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsIGJvb2wgYWxsb3dfbm9l bnQsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc191cGRhdGUgKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4 Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf cGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYsIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAq cmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRj b25zb2xlX3Byb2dyZXNzX2VuZCAoOjpydXN0OjpTdHIgc3VmZml4KSBub2V4Y2VwdDsKKysgIGJv b2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVyYXRvciRlcSAo SGlzdG9yeUVudHJ5IGNvbnN0ICYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcnlFbnRyeSBjb25zdCAmKSBub2V4Y2Vw dDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlFbnRyeSRvcGVy YXRvciRuZSAoSGlzdG9yeUVudHJ5IGNvbnN0ICYsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcnlFbnRyeSBjb25zdCAm KSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JEhpc3RvcnlDdHgkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVf dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9yeUN0eCRvcGVyYXRvciRhbGlnbm9m ICgpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGlzdG9yeV9jdHhfbmV3ICgKKysgICAgICA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLWJv b2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVy cmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpycG1vc3RyZWVj eHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgKnJlcGxhY2VtZW50KSBub2V4Y2VwdDsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG5l eHRfZW50cnkgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICZzZWxmLCA6OnJw bW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlk ZV9yZXBsYWNlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgcGFj a2FnZSkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkaGlzdG9yeV9wcnVuZSAoKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3Qg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvSGFuZGxlJG9wZXJhdG9yJHNpemVvZiAo KSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRva2lvSGFuZGxlJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUb2tpb0VudGVyR3VhcmQkb3BlcmF0b3Ik c2l6ZW9mICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7Cisg Cistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2Vz X292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAg OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk dG9raW9faGFuZGxlX2dldCAoKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRl X3JlcGxhY2VfbG9jYWwoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzKSBub2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4 OjpUb2tpb0VudGVyR3VhcmQgKgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lv SGFuZGxlJGVudGVyICg6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgY29uc3QgJnNlbGYpIG5v ZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJl bW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHNjcmlwdF9pc19pZ25vcmVkICg6OnJ1c3Q6OlN0ciBwa2cs IDo6cnVzdDo6U3RyIHNjcmlwdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCkgbm9leGNlcHQ7Cisg Cistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2Vz X292ZXJyaWRlX3JlbW92ZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRlc3R1dGlsc19l bnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3YpIG5vZXhjZXB0Owor IAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVtb3ZlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdlcykgbm9leGNlcHQ7 CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtYXliZV9zaGVsbF9xdW90ZSAo OjpydXN0OjpTdHIgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAg Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVmc3BlYyRvcGVyYXRvciRlcSAoUmVm c3BlYyBjb25zdCAmLCBSZWZzcGVjIGNvbnN0ICYpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkT3ZlcnJpZGVSZXBsYWNlbWVudCRvcGVyYXRvciRlcSAoCisr ICAgICAgT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmLCBPdmVycmlkZVJlcGxhY2VtZW50IGNv bnN0ICYpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNp emVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkb3BlcmF0b3IkYWxpZ25v ZiAoKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXcgKAorKyAg ICAgIDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwKKysgICAgICA6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFja2Fn ZXNfb3ZlcnJpZGVfcmVtb3ZlX25hbWUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlN0ciBuYW1lKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZW1wdHkgKAorKyAgICAg IDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0 OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9h bGxfb3ZlcnJpZGVzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Cisr ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZp bGVfbmV3X2Zyb21fc3RyaW5nICgKKysgICAgICA6OnJ1c3Q6OlN0ciBidWYsIGJvb2wgY2xpZW50 LCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2Vw dDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVf YWxsX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7Cisr ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZp bGVfbmV3X2NvbXBvc2UgKAorKyAgICAgIDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0 ciBiYXNlYXJjaCwKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfZXhjbHVkZV9wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNl cHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk dHJlZWZpbGVfbmV3X2NsaWVudCAoCisrICAgICAgOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVz dDo6U3RyIGJhc2VhcmNoLAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9wbGF0Zm9ybV9tb2R1bGUoOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVf bmV3X2NsaWVudF9mcm9tX2V0YyAoCisrICAgICAgOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0OworIAor LXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbnN0YWxsX2xh bmdzKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfZGVsZXRlX2NsaWVudF9l dGMgKDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8o OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0 dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OkZhdAorKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF93b3JrZGlyICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NrZmlsZV9yZXBvcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9l eGNlcHQ7CisrICA6OnN0ZDo6aW50MzJfdAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9wYXNzd2RfZmQgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikg bm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpGYXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9yZWYoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm KSBub2V4Y2VwdDsKKysgIDo6c3RkOjppbnQzMl90CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2dyb3VwX2ZkICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNl bGYpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9jbGl3cmFwKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9l eGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf anNvbl9zdHJpbmcgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3cmFwX2JpbmFyaWVzKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpy ZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9vc3RyZWVfbGF5ZXJzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9l eGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0 X2NsaXdyYXAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCBib29sIGVuYWJsZWQpIG5v ZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X29zdHJlZV9vdmVycmlkZV9sYXllcnMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4 Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf Y29udGFpbmVyX2NtZCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYWxsX29zdHJlZV9sYXllcnMgKAor KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQKKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb3MgKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJu JCkgbm9leGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X2RvY3VtZW50YXRpb24oOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxm KSBub2V4Y2VwdDsKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfcGFja2FnZXMgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistYm9vbCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlY29tbWVuZHMoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZXF1aXJlX2F1 dG9tYXRpY192ZXJzaW9uX3ByZWZpeCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXgoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3Bh Y2thZ2VzICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gKnBhY2thZ2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd19leGlzdGluZywgYm9vbCAqcmV0dXJuJCkgbm9l eGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X3N5c3VzZXJzX2lzX2ZvcmNlZCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYp IG5vZXhjZXB0OworKyAgYm9vbAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGhhc19wYWNrYWdlcyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBu b2V4Y2VwdDsKKyAKKy06OnN0ZDo6dWludDMyX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24oOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9sb2NhbF9wYWNrYWdlcyAoCisrICAgICAgOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJl dHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9ncGdfa2V5KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwg OjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9sb2NhbF9wYWNrYWdl cyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nLAorKyAgICAgIGJv b2wgKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZmaXgoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7 CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9jYWxf ZmlsZW92ZXJyaWRlX3BhY2thZ2VzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNl cHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Nv bnRhaW5lcig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0Owor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKAorKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpwYWNrYWdl cywgYm9vbCBhbGxvd19leGlzdGluZywKKysgICAgICBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbWFjaGlu ZWlkX2NvbXBhdCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0 OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZXMgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2Vs ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcGFja2FnZXMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X25v ZW50LCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXRjX2dyb3VwX21lbWJlcnMoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVy biQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLWJvb2wgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9ib290X2xvY2F0aW9uX2lzX21v ZHVsZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysg IGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlc19v dmVycmlkZV9yZXBsYWNlICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJHVzZV9rZXJuZWxfaW5zdGFsbCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKAorKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQg KnJlcGxhY2VtZW50KSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfaW1hKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2Vs Zikgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlICgKKysgICAgICA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworIAorLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWxlYXNldmVyKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVy biQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKAorKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6UmVwb01ldGFkYXRhVGFy Z2V0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb19tZXRhZGF0 YV90YXJnZXQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnBh Y2thZ2VzKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01ldGFkYXRh VGFyZ2V0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYWR2aXNvcmll c19tZXRhZGF0YV90YXJnZXQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBu b2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJl bW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKAorKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7CisgCist Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcnBtZGJfYmFja2VuZF9p c190YXJnZXQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsK KysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdl c19vdmVycmlkZV9yZW1vdmUgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsK KyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzaG91bGRfbm9y bWFsaXplX3JwbWRiKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNl cHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSAoCisrICAgICAgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnBhY2th Z2VzKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6T3B0VXNyTG9jYWwgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcHRfdXNybG9jYWwoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSAo CisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciBwYWNr YWdlKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZiwgOjpydXN0OjpTdHIgcGFja2FnZSwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVfbmFtZSAoCisrICAgICAgOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBuYW1lKSBub2V4 Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2NoZWNrc3VtKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm c2VsZiwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3Ry aW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfb3ZlcnJpZGVzICgKKysgICAgICA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVfcmVmKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgYm9v bCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVtb3ZlX2FsbF9wYWNrYWdl cyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmKSBub2V4Y2VwdDsKKyAK Ky06OnJ1c3Q6OnJlcHI6OkZhdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X3JlcG9fcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBu b2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9leGNsdWRlX3BhY2thZ2VzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7 CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkY2xlYXJfcmVw b19wYWNrYWdlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYpIG5vZXhjZXB0OworKyAg dm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wbGF0Zm9y bV9tb2R1bGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJldHR5cHJpbnRfanNvbl9zdGRvdXQoOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbnN0YWxsX2xhbmdzICgKKysgICAgICA6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MoOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGZvcm1hdF9pbnN0YWxsX2xhbmdzX21hY3JvICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpy ZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRwcmludF9leHBlcmltZW50YWxfbm90aWNlcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2tmaWxlX3JlcG9zICgKKysgICAgICA6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0 dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNhbml0eWNoZWNrX2V4dGVybmFscyg6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpGYXQK KysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVmICg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVl Y3h4OjpScG1JbXBvcnRlckZsYWdzICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkaW1wb3J0ZXJfZmxhZ3MoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6 OnJ1c3Q6OlN0ciBwa2dfbmFtZSkgbm9leGNlcHQ7CisrICBib29sCisrICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2NsaXdyYXAgKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHdyaXRlX3JlcG92YXJzKDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRf cmF3LCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xpd3JhcF9iaW5hcmllcyAoCisrICAg ICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfcmVsZWFzZXZlcig6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHJlbGVhc2V2ZXIpIG5vZXhj ZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X2Ns aXdyYXAgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuYWJsZWQpIG5v ZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRzZXRfcmVjb21tZW5kcyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNl bGYsIGJvb2wgdmFsKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9jb250YWluZXJfY21kICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJu JCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGVuYWJsZV9yZXBvKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAm c2VsZiwgOjpydXN0OjpTdHIgcmVwbykgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMgKAorKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpy dXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGRp c2FibGVfcmVwbyg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6U3RyIHJl cG8pIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X2RvY3VtZW50YXRpb24gKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHZhbGlkYXRlX2Zvcl9jb250YWluZXIoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZWNvbW1lbmRzICgKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLXZvaWQg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9iYXNlX3JlZnNwZWMoOjpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJwbW9zdHJlZWN4eDo6UmVmc3Bl YyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICBib29sCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXggKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25z dCAmc2VsZikgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkcmViYXNlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgOjpydXN0OjpT dHIgbmV3X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fdXJsLCA6OnJ1c3Q6OlN0 ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zeXN1c2Vyc19pc19mb3JjZWQgKAorKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisgCist dm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29yaWdpbl9jdXN0 b21fdXJsKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJp bmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnVpbnQzMl90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfc2VsaW51eF9sYWJlbF92ZXJzaW9uICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLXZv aWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcmlnaW5fY3VzdG9t X2Rlc2NyaXB0aW9uKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0 OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dwZ19rZXkgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X292ZXJyaWRlX2NvbW1p dCg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyaW5nICpy ZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZmaXggKAorKyAgICAgIDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhj ZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNldF9v dmVycmlkZV9jb21taXQoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0 ciBjaGVja3N1bSkgbm9leGNlcHQ7CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfY29udGFpbmVyICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4k KSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9tYWNoaW5laWRfY29tcGF0ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGhhc19pbml0cmFtZnNfZXRjX2ZpbGVzKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfZXRjX2dyb3VwX21lbWJlcnMgKAorKyAgICAgIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNrKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpmaWxlcykgbm9leGNlcHQ7 CisrICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYm9vdF9s b2NhdGlvbl9pc19tb2R1bGVzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnNlbGYpIG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFjayg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqZmlsZXMpIG5vZXhjZXB0 OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdXNlX2tlcm5l bF9pbnN0YWxsICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYp IG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl ICZzZWxmKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9pbWEgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9l eGNlcHQ7CisgCistYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X2luaXRyYW1mc19yZWdlbmVyYXRlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2Vs Zikgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfcmVsZWFzZXZlciAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5pdHJhbWZzX2FyZ3MoOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g KnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6OlJlcG9NZXRhZGF0YVRhcmdl dCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fbWV0YWRhdGFf dGFyZ2V0ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5v ZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNl dF9pbml0cmFtZnNfcmVnZW5lcmF0ZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIGJv b2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICphcmdzKSBub2V4Y2VwdDsK KysgIDo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQKKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90YXJn ZXQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNl cHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Vu Y29uZmlndXJlZF9zdGF0ZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6 cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJwbWRiX2JhY2tlbmRfaXNfdGFyZ2V0ICgKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLWJvb2wg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG1heV9yZXF1aXJlX2xvY2FsX2Fz c2VtYmx5KDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7Cisr ICBib29sIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzaG91bGRfbm9ybWFs aXplX3JwbWRiICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYp IG5vZXhjZXB0OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGhhc19hbnlfcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBu b2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpPcHRVc3JMb2NhbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X29wdF91c3Jsb2NhbCAoCisrICAgICAgOjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkbWVyZ2VfdHJlZWZp bGUoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLCA6OnJ1c3Q6OlN0ciB0cmVlZmlsZSwg Ym9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfZmlsZXNfcmVtb3ZlX3JlZ2V4ICgKKysgICAgICA6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3RyIHBhY2thZ2UsCisrICAgICAg OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy1ib29s IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbm9faW5pdHJhbWZzKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CistOjpzdGQ6OnNp emVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2Ukb3BlcmF0b3Ikc2l6 ZW9mKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUmVwb1BhY2thZ2Ukb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRf Y2hlY2tzdW0gKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhj ZXB0OworIAorLTo6cnVzdDo6cmVwcjo6RmF0IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRS ZXBvUGFja2FnZSRnZXRfcmVwbyg6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3QgJnNl bGYpIG5vZXhjZXB0OworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X29zdHJlZV9yZWYgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2UkZ2V0X3BhY2thZ2VzKDo6cnBtb3N0cmVl Y3h4OjpSZXBvUGFja2FnZSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6RmF0IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVwb19wYWNrYWdlcyAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyc3Vic3RpdHV0ZSg6OnJ1 c3Q6OlN0ciBzLCA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29u c3QgJnZhcnMsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGNsZWFyX3JlcG9fcGFja2FnZXMgKAor KyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZikgbm9leGNlcHQ7CisgCistdm9p ZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X2ZlYXR1cmVzKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRwcmV0dHlwcmludF9qc29uX3N0ZG91dCAoCisrICAgICAg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcnBtX2Jhc2VhcmNoKDo6cnVzdDo6U3Ry aW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJHByaW50X2RlcHJlY2F0aW9uX3dhcm5pbmdzICgKKysgICAgICA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzZWFsZWRfbWVtZmQoOjpydXN0 OjpTdHIgZGVzY3JpcHRpb24sIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNv bnRlbnQsIDo6c3RkOjppbnQzMl90ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHByaW50X2V4cGVyaW1lbnRhbF9ub3RpY2Vz ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0 OworIAorLWJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bm5pbmdfaW5fc3lzdGVt ZCgpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJHNhbml0eWNoZWNrX2V4dGVybmFscyAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2FsY3VsYXRlX2Fkdmlzb3Jp ZXNfZGlmZig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpT dHIgY2hlY2tzdW1fZnJvbSwgOjpydXN0OjpTdHIgY2hlY2tzdW1fdG8sIDo6cnBtb3N0cmVlY3h4 OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6OlJwbUlt cG9ydGVyRmxhZ3MgKgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGlt cG9ydGVyX2ZsYWdzICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVz dDo6U3RyIHBrZ19uYW1lKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCR0cmFuc2xhdGVfcGF0aF9mb3Jfb3N0cmVlKDo6cnVzdDo6U3RyIHBhdGgsIDo6cnVz dDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisr ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkd3JpdGVfcmVwb3ZhcnMgKDo6 cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OmludDMyX3Qgd29ya2Rp cl9kZmRfcmF3LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9saXZlX2FwcGx5 X3N0YXRlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJw bW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgOjpycG1vc3Ry ZWVjeHg6OkxpdmVBcHBseVN0YXRlICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X3Jl bGVhc2V2ZXIgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmVs ZWFzZXZlcikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGhhc19saXZlX2FwcGx5X3N0YXRlKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVu dCBjb25zdCAmZGVwbG95bWVudCwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHNl dF9yZWNvbW1lbmRzICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmFsKSBu b2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkYXBwbHlsaXZlX3N5bmNfcmVmKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNv bnN0ICZzeXNyb290KSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZW5hYmxlX3JlcG8gKDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZSAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgcmVwbykgbm9leGNlcHQ7CisgCistOjpydXN0 OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5zYWN0aW9uX2Fw cGx5X2xpdmUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6 cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmdGFyZ2V0KSBub2V4Y2VwdDsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk ZGlzYWJsZV9yZXBvICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBy ZXBvKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkbm9ybWFsaXplX2V0Y19zaGFkb3coOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkdmFsaWRhdGVfZm9yX2NvbnRhaW5lciAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJl cHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV9ycG1fbGF5ZXJp bmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnN0ZDo6aW50MzJfdCBtZXJnZV9wYXNzd2RfZGly LCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYmFzZV9yZWZzcGVjICg6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgY29uc3QgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlJlZnNwZWMgKnJldHVybiQpIG5v ZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjb21wbGV0ZV9ycG1fbGF5ZXJpbmcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2Vw dDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlYmFzZSAo OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0 OjpTdHIgY3VzdG9tX29yaWdpbl91cmwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRp b24pIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRkZWR1cGxpY2F0ZV90bXBmaWxlc19lbnRyaWVzKDo6c3RkOjppbnQzMl90IHJv b3Rmcykgbm9leGNlcHQ7CisrICB2b2lkCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X29yaWdpbl9jdXN0b21fdXJsICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3 ZF9jbGVhbnVwKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV9kZXNjcmlw dGlvbiAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVfZ3JvdXBfZXhjZXB0X3Jvb3QoOjpz dGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJnBy ZXNlcnZlZF9ncm91cHMpIG5vZXhjZXB0OworKyAgdm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vdmVycmlkZV9jb21taXQgKDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNl cHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JG1pZ3JhdGVfcGFzc3dkX2V4Y2VwdF9yb290KDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNl cHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfb3Zl cnJpZGVfY29tbWl0ICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jb21wb3NlX3ByZXAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKSBub2V4Y2Vw dDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0 cmFtZnNfZXRjX2ZpbGVzICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3Qg JnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Cisg CistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3 ZF9jb21wb3NlX3ByZXBfcmVwbyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnBtb3N0cmVlY3h4 OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19jaGVja3N1bSwgYm9vbCB1bmlmaWVkX2NvcmUpIG5v ZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFz X2luaXRyYW1mc19ldGNfZmlsZXMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc191aWQoOjpzdGQ6OmludDMyX3QgZGlyZmQs IDo6c3RkOjp1aW50MzJfdCBpZCwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICBib29sIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3Ry YWNrICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYsIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiAqZmlsZXMpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJfY29udGFpbnNfZ2lkKDo6c3RkOjpp bnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQsIGJvb2wgKnJldHVybiQpIG5vZXhjZXB0 OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZz X2V0Y19maWxlc191bnRyYWNrICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNl bGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqZmlsZXMpIG5vZXhjZXB0OworIAorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19wYXNz d2RfZ3JvdXBfZW50cmllcyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmZmZpX3Jl cG8sIDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAm dHJlZWZpbGUsIDo6cnVzdDo6U3RyIHByZXZpb3VzX3Jldikgbm9leGNlcHQ7CisrICBib29sIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3Vu dHJhY2tfYWxsICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnNlbGYpIG5vZXhj ZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRwYXNzd2RkYl9vcGVuKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlBhc3N3ZERCPiAqcmV0dXJuJCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkREIkb3BlcmF0b3Ikc2l6ZW9mKCkgbm9l eGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dk REIkb3BlcmF0b3IkYWxpZ25vZigpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2luaXRyYW1mc19yZWdlbmVyYXRlICgKKysgICAgICA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNlbGYpIG5vZXhjZXB0OworIAorLTo6cnVz dDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29r dXBfdXNlcig6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgY29uc3QgJnNlbGYsIDo6c3RkOjp1aW50 MzJfdCB1aWQsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfYXJncyAoCisr ICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBfZ3JvdXAoOjpy cG1vc3RyZWVjeHg6OlBhc3N3ZERCIGNvbnN0ICZzZWxmLCA6OnN0ZDo6dWludDMyX3QgZ2lkLCA6 OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKAorKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmc2VsZiwgYm9vbCBlbmFibGVkLCA6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gKmFyZ3MpIG5vZXhjZXB0OworIAorLTo6cnBtb3N0cmVlY3h4OjpQ YXNzd2RFbnRyaWVzICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV3X3Bhc3N3ZF9lbnRy aWVzKCkgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6 ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJG9wZXJhdG9yJGFs aWdub2YoKSBub2V4Y2VwdDsKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfdW5jb25maWd1cmVkX3N0YXRlICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZp bGUgY29uc3QgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0 OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQ YXNzd2RFbnRyaWVzJGFkZF9ncm91cF9jb250ZW50KDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRy aWVzICZzZWxmLCA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhj ZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkbWF5X3Jl cXVpcmVfbG9jYWxfYXNzZW1ibHkgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBj b25zdCAmc2VsZikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX3Bhc3N3ZF9jb250ZW50KDo6cnBt b3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICZzZWxmLCA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6 cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkaGFzX2FueV9wYWNrYWdlcyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlIGNvbnN0ICZzZWxmKSBub2V4Y2VwdDsKKyAKKy1ib29sIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGNvbnRhaW5zX2dyb3VwKDo6cnBtb3N0cmVlY3h4 OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyKSBub2V4Y2VwdDsK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRtZXJnZV90cmVlZmlsZSAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZz ZWxmLCA6OnJ1c3Q6OlN0ciB0cmVlZmlsZSwgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCist Ym9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRjb250YWluc191 c2VyKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0 ciB1c2VyKSBub2V4Y2VwdDsKKysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJGdldF9ub19pbml0cmFtZnMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc2VsZikgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNlcHQ7Cisr ICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRv cGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGxvb2t1cF91c2VyX2lkKDo6 cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciB1c2Vy LCA6OnN0ZDo6dWludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpG YXQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJGdldF9yZXBvICgKKysg ICAgICA6OnJwbW9zdHJlZWN4eDo6UmVwb1BhY2thZ2UgY29uc3QgJnNlbGYpIG5vZXhjZXB0Owor IAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNz d2RFbnRyaWVzJGxvb2t1cF9ncm91cF9pZCg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyBj b25zdCAmc2VsZiwgOjpydXN0OjpTdHIgZ3JvdXAsIDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkg bm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0 ZW5zaW9ucyRvcGVyYXRvciRzaXplb2YoKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJGFsaWdub2YoKSBub2V4 Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJGdl dF9wYWNrYWdlcyAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAor LTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRleHRlbnNp b25zX2xvYWQoOjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpTdHIgYmFzZWFyY2gsIDo6cnVzdDo6 VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzLCA6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4gKnJldHVybiQpIG5vZXhjZXB0Owor KyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X3JlcG9zX2RpcnMgKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfcmVwb3MoOjpycG1vc3RyZWVj eHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAq cmV0dXJuJCkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHZhcnN1YnN0aXR1dGUgKDo6cnVzdDo6U3RyIHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpycG1v c3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZ2YXJzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4 Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdl dF9vc19leHRlbnNpb25fcGFja2FnZXMoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3Qg JnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7Cisr ICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfZmVhdHVyZXMgKDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMo OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRnZXRfcnBtX2Jhc2VhcmNoICg6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9l eGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEV4dGVuc2lvbnMkc3RhdGVfY2hlY2tzdW1fY2hhbmdlZCg6OnJwbW9zdHJlZWN4eDo6RXh0 ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRw dXRfZGlyLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2VhbGVkX21lbWZkICg6OnJ1c3Q6OlN0 ciBkZXNjcmlwdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNvbnRlbnQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCAqcmV0 dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkdXBkYXRlX3N0YXRlX2NoZWNrc3VtKDo6cnBtb3N0cmVl Y3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6 U3RyIG91dHB1dF9kaXIpIG5vZXhjZXB0OworKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkcnVubmluZ19pbl9zeXN0ZW1kICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6 UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHNlcmlhbGl6ZV90 b19kaXIoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnMgY29uc3QgJnNlbGYsIDo6cnVzdDo6U3Ry IG91dHB1dF9kaXIpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNhbGN1bGF0ZV9hZHZpc29yaWVzX2RpZmYgKAorKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjaGVja3N1 bV9mcm9tLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV90bywKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6 R1ZhcmlhbnQgKipyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZW5lcmF0ZV90cmVlZmlsZSg6 OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlIGNvbnN0ICZzcmMsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4g KnJldHVybiQpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJHNpemVvZigpIG5vZXhjZXB0OworLTo6c3Rk OjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJh dG9yJGFsaWdub2YoKSBub2V4Y2VwdDsKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHRyYW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUgKDo6cnVzdDo6U3RyIHBhdGgsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvY2tmaWxlX3JlYWQoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlbmFtZXMsIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpMb2NrZmlsZUNvbmZpZz4gKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9saXZlX2FwcGx5X3N0YXRl ICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwK KysgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVu dCwKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGUgKnJldHVybiQpIG5vZXhj ZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRsb2NrZmlsZV93cml0ZSg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpycG1vc3RyZWVjeHg6OkN4 eEdPYmplY3RBcnJheSAmcGFja2FnZXMsIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkg JnJwbW1kX3JlcG9zKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRoYXNfbGl2ZV9hcHBseV9zdGF0ZSAoCisrICAgICAgOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisrICAgICAgOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsIGJvb2wgKnJldHVybiQp IG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRnZXRfbG9ja2VkX3BhY2thZ2VzKDo6cnBtb3N0cmVlY3h4 OjpMb2NrZmlsZUNvbmZpZyBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 OkxvY2tlZFBhY2thZ2U+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfc3luY19yZWYgKAorKyAg ICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSBub2V4Y2Vw dDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk b3JpZ2luX3RvX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YsIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnJldHVybiQpIG5vZXhjZXB0Owor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5z YWN0aW9uX2FwcGx5X2xpdmUgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290 IGNvbnN0ICZzeXNyb290LAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAm dGFyZ2V0KSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfdG9fb3JpZ2luKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmdGYsIDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSAqKnJldHVybiQpIG5vZXhjZXB0 OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRub3JtYWxpemVfZXRjX3NoYWRvdyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgbm9leGNl cHQ7CisgCistdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3ZhbGlkYXRl X3JvdW5kdHJpcCg6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmKSBub2V4Y2VwdDsK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVw YXJlX3JwbV9sYXllcmluZyAoCisrICAgICAgOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnN0ZDo6 aW50MzJfdCBtZXJnZV9wYXNzd2RfZGlyLCBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12 b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjYWNoZV9icmFuY2hfdG9fbmV2cmEoOjpy dXN0OjpTdHIgbmV2cmEsIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcGxl dGVfcnBtX2xheWVyaW5nICg6OnN0ZDo6aW50MzJfdCByb290ZnMpIG5vZXhjZXB0OworIAorLTo6 c3RkOjp1aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ3h4R09iamVjdEFycmF5 JGxlbmd0aCg6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZzZWxmKSBub2V4Y2VwdCB7 CistICA6OnN0ZDo6dWludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6Oips ZW5ndGgkKSgpID0gJjo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6Omxlbmd0aDsKKy0g IHJldHVybiAoc2VsZi4qbGVuZ3RoJCkoKTsKKy19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlZHVwbGljYXRlX3RtcGZpbGVzX2VudHJp ZXMgKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7CisgCistdm9pZCBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQ3h4R09iamVjdEFycmF5JGdldCg6OnJwbW9zdHJlZWN4eDo6Q3h4 R09iamVjdEFycmF5ICZzZWxmLCA6OnN0ZDo6dWludDMyX3QgaSwgOjpycG1vc3RyZWVjeHg6OkdP YmplY3QgKipyZXR1cm4kKSBub2V4Y2VwdCB7CistICA6OnJwbW9zdHJlZWN4eDo6R09iamVjdCAm KDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6OipnZXQkKSg6OnN0ZDo6dWludDMyX3Qp ID0gJjo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXk6OmdldDsKKy0gIG5ldyAocmV0dXJu JCkgOjpycG1vc3RyZWVjeHg6OkdPYmplY3QgKigmKHNlbGYuKmdldCQpKGkpKTsKKy19CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2Ns ZWFudXAgKDo6c3RkOjppbnQzMl90IHJvb3Rmcykgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHV0aWxfbmV4dF92ZXJzaW9uKDo6 cnVzdDo6U3RyIGF1dG9fdmVyc2lvbl9wcmVmaXgsIDo6cnVzdDo6U3RyIHZlcnNpb25fc3VmZml4 LCA6OnJ1c3Q6OlN0ciBsYXN0X3ZlcnNpb24sIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBub2V4 Y2VwdCB7CistICA6OnJ1c3Q6OlN0cmluZyAoKnV0aWxfbmV4dF92ZXJzaW9uJCkoOjpydXN0OjpT dHIsIDo6cnVzdDo6U3RyLCA6OnJ1c3Q6OlN0cikgPSA6OnJwbW9zdHJlZWN4eDo6dXRpbF9uZXh0 X3ZlcnNpb247CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CistICA6OnJ1c3Q6OmJl aGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAgICAgbmV3IChyZXR1cm4kKSA6 OnJ1c3Q6OlN0cmluZyh1dGlsX25leHRfdmVyc2lvbiQoYXV0b192ZXJzaW9uX3ByZWZpeCwgdmVy c2lvbl9zdWZmaXgsIGxhc3RfdmVyc2lvbikpOworLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxw dHI7CistICAgICAgfSwKKy0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKKy0g IHJldHVybiB0aHJvdyQ7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVfZ3JvdXBfZXhjZXB0X3Jvb3QgKAorKyAgICAgIDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZwcmVz ZXJ2ZWRfZ3JvdXBzKSBub2V4Y2VwdDsKKyAKKy06OnN0ZDo6aW50MzJfdCBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkdGVzdHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFzc3Rocm91Z2goOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8pIG5vZXhjZXB0IHsKKy0gIDo6c3RkOjpp bnQzMl90ICgqdGVzdHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFzc3Rocm91Z2gkKSg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmKSA9IDo6cnBtb3N0cmVlY3h4Ojp0ZXN0dXRpbF92YWxp ZGF0ZV9jeHhyc19wYXNzdGhyb3VnaDsKKy0gIHJldHVybiB0ZXN0dXRpbF92YWxpZGF0ZV9jeHhy c19wYXNzdGhyb3VnaCQocmVwbyk7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdCAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRlYXJseV9tYWluKCkgbm9leGNlcHQgeworLSAgdm9pZCAoKmVhcmx5X21haW4k KSgpID0gOjpycG1vc3RyZWVjeHg6OmVhcmx5X21haW47CistICBlYXJseV9tYWluJCgpOworLX0K KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk cGFzc3dkX2NvbXBvc2VfcHJlcCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSAmdHJlZWZpbGUpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1vc3RyZWVfbWFpbig6OnJ1c3Q6OlNsaWNlPDo6 cnVzdDo6U3RyIGNvbnN0PiBhcmdzLCA6OnN0ZDo6aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQg eworLSAgOjpzdGQ6OmludDMyX3QgKCpycG1vc3RyZWVfbWFpbiQpKDo6cnVzdDo6U2xpY2U8Ojpy dXN0OjpTdHIgY29uc3Q+KSA9IDo6cnBtb3N0cmVlY3h4OjpycG1vc3RyZWVfbWFpbjsKKy0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKy0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNo KAorLSAgICAgIFsmXSB7CistICAgICAgICBuZXcgKHJldHVybiQpIDo6c3RkOjppbnQzMl90KHJw bW9zdHJlZV9tYWluJChhcmdzKSk7CistICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKy0g ICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOworLSAgcmV0dXJu IHRocm93JDsKKy19CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJlcF9yZXBvICgKKysgICAgICA6OnN0ZDo6aW50MzJf dCByb290ZnMsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsCisrICAgICAgOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHByZXZpb3Vz X2NoZWNrc3VtLAorKyAgICAgIGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKKyAKKy12b2lk IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxfdGVh cmRvd24oKSBub2V4Y2VwdCB7CistICB2b2lkICgqcnBtb3N0cmVlX3Byb2Nlc3NfZ2xvYmFsX3Rl YXJkb3duJCkoKSA9IDo6cnBtb3N0cmVlY3h4OjpycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxfdGVh cmRvd247CistICBycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxfdGVhcmRvd24kKCk7CistfQorKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250 YWluc191aWQgKDo6c3RkOjppbnQzMl90IGRpcmZkLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjp1aW50 MzJfdCBpZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sICpyZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy06OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY191bml0X3Rlc3Rz KCkgbm9leGNlcHQgeworLSAgdm9pZCAoKmNfdW5pdF90ZXN0cyQpKCkgPSA6OnJwbW9zdHJlZWN4 eDo6Y191bml0X3Rlc3RzOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworLSAgOjpy dXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIGNfdW5pdF90 ZXN0cyQoKTsKKy0gICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOworLSAgICAgIH0sCistICAg ICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7CistICByZXR1cm4gdGhyb3ckOworLX0K KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJf Y29udGFpbnNfZ2lkICg6OnN0ZDo6aW50MzJfdCBkaXJmZCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0ZDo6 dWludDMyX3QgaWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqcmV0dXJuJCkgbm9leGNlcHQ7CisgCist OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9y ZXF1aXJlX3Jvb3QoKSBub2V4Y2VwdCB7CistICB2b2lkICgqY2xpZW50X3JlcXVpcmVfcm9vdCQp KCkgPSA6OnJwbW9zdHJlZWN4eDo6Y2xpZW50X3JlcXVpcmVfcm9vdDsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHRocm93JDsKKy0gIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoKAorLSAgICAg IFsmXSB7CistICAgICAgICBjbGllbnRfcmVxdWlyZV9yb290JCgpOworLSAgICAgICAgdGhyb3ck LnB0ciA9IG51bGxwdHI7CistICAgICAgfSwKKy0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0 aHJvdyQpKTsKKy0gIHJldHVybiB0aHJvdyQ7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzICgK KysgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmZmZpX3JlcG8sIDo6c3Rk OjppbnQzMl90IHJvb3Rmc19kZmQsCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0 cmVlZmlsZSwgOjpydXN0OjpTdHIgcHJldmlvdXNfcmV2KSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV3X2NsaWVudF9jb25u ZWN0aW9uKDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uICoqcmV0dXJuJCkgbm9leGNl cHQgeworLSAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rp b24+ICgqbmV3X2NsaWVudF9jb25uZWN0aW9uJCkoKSA9IDo6cnBtb3N0cmVlY3h4OjpuZXdfY2xp ZW50X2Nvbm5lY3Rpb247CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CistICA6OnJ1 c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAgICAgbmV3IChyZXR1 cm4kKSA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbiAqKG5ld19jbGllbnRfY29ubmVj dGlvbiQoKS5yZWxlYXNlKCkpOworLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CistICAg ICAgfSwKKy0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKKy0gIHJldHVybiB0 aHJvdyQ7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHBhc3N3ZGRiX29wZW4gKAorKyAgICAgIDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPiAqcmV0dXJuJCkgbm9leGNlcHQ7Cisr ICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRvcGVy YXRvciRzaXplb2YgKCkgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRQYXNzd2REQiRvcGVyYXRvciRhbGlnbm9mICgpIG5vZXhjZXB0OworIAor LTo6cnBtb3N0cmVlY3h4OjpHREJ1c0Nvbm5lY3Rpb24gY29uc3QgKnJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRDbGllbnRDb25uZWN0aW9uJGdldF9jb25uZWN0aW9uKDo6cnBtb3N0cmVlY3h4 OjpDbGllbnRDb25uZWN0aW9uICZzZWxmKSBub2V4Y2VwdCB7CistICA6OnJwbW9zdHJlZWN4eDo6 R0RCdXNDb25uZWN0aW9uIGNvbnN0ICYoOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb246 OipnZXRfY29ubmVjdGlvbiQpKCkgPSAmOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb246 OmdldF9jb25uZWN0aW9uOworLSAgcmV0dXJuICYoc2VsZi4qZ2V0X2Nvbm5lY3Rpb24kKSgpOwor LX0KKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQ YXNzd2REQiRsb29rdXBfdXNlciAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCIGNv bnN0ICZzZWxmLCA6OnN0ZDo6dWludDMyX3QgdWlkLCA6OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkg bm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JENsaWVudENvbm5lY3Rpb24kdHJhbnNhY3Rpb25fY29ubmVjdF9wcm9ncmVzc19zeW5j KDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0 ciBhZGRyZXNzKSBub2V4Y2VwdCB7CistICB2b2lkICg6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbjo6KnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jlc3Nfc3luYyQpKDo6cnVzdDo6U3Ry KSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjo6dHJhbnNhY3Rpb25f Y29ubmVjdF9wcm9ncmVzc19zeW5jOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwor LSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIChz ZWxmLip0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmMkKShhZGRyZXNzKTsKKy0gICAg ICAgIHRocm93JC5wdHIgPSBudWxscHRyOworLSAgICAgIH0sCistICAgICAgOjpydXN0OjpkZXRh aWw6OkZhaWwodGhyb3ckKSk7CistICByZXR1cm4gdGhyb3ckOworLX0KKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBfZ3Jv dXAgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQiBjb25zdCAmc2VsZiwgOjpzdGQ6 OnVpbnQzMl90IGdpZCwgOjpydXN0OjpTdHJpbmcgKnJldHVybiQpIG5vZXhjZXB0OworIAorLTo6 c3RkOjppbnQzMl90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJG5fcmVtb3Zl ZCg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNlcHQgeworLSAgOjpz dGQ6OmludDMyX3QgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqbl9yZW1vdmVkJCkoKSBjb25z dCA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6bl9yZW1vdmVkOworLSAgcmV0dXJuIChzZWxm LipuX3JlbW92ZWQkKSgpOworLX0KKy0KKy06OnN0ZDo6aW50MzJfdCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUlBNRGlmZiRuX2FkZGVkKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmIGNvbnN0 ICZzZWxmKSBub2V4Y2VwdCB7CistICA6OnN0ZDo6aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OlJQ TURpZmY6OipuX2FkZGVkJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6bl9h ZGRlZDsKKy0gIHJldHVybiAoc2VsZi4qbl9hZGRlZCQpKCk7CistfQorLQorLTo6c3RkOjppbnQz Ml90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJG5fbW9kaWZpZWQoOjpycG1v c3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0IHsKKy0gIDo6c3RkOjppbnQz Ml90ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6Km5fbW9kaWZpZWQkKSgpIGNvbnN0ID0gJjo6 cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpuX21vZGlmaWVkOworLSAgcmV0dXJuIChzZWxmLipuX21v ZGlmaWVkJCkoKTsKKy19CistCistOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHJwbWRiX2RpZmYoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3Qg JnJlcG8sIDo6c3RkOjpzdHJpbmcgY29uc3QgJnNyYywgOjpzdGQ6OnN0cmluZyBjb25zdCAmZGVz dCwgYm9vbCBhbGxvd19ub2VudCwgOjpycG1vc3RyZWVjeHg6OlJQTURpZmYgKipyZXR1cm4kKSBu b2V4Y2VwdCB7CistICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4g KCpycG1kYl9kaWZmJCkoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJiwgOjpzdGQ6 OnN0cmluZyBjb25zdCAmLCA6OnN0ZDo6c3RyaW5nIGNvbnN0ICYsIGJvb2wpID0gOjpycG1vc3Ry ZWVjeHg6OnJwbWRiX2RpZmY7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CistICA6 OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAgICAgbmV3IChy ZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZiAqKHJwbWRiX2RpZmYkKHJlcG8sIHNyYywg ZGVzdCwgYWxsb3dfbm9lbnQpLnJlbGVhc2UoKSk7CistICAgICAgICB0aHJvdyQucHRyID0gbnVs bHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwor LSAgcmV0dXJuIHRocm93JDsKKy19CisrICA6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAq cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG5ld19wYXNzd2RfZW50cmllcyAoKSBub2V4Y2Vw dDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVu dHJpZXMkb3BlcmF0b3Ikc2l6ZW9mICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRhbGlnbm9mICgp IG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJQTURpZmYk cHJpbnQoOjpycG1vc3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0IHsKKy0g IHZvaWQgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqcHJpbnQkKSgpIGNvbnN0ID0gJjo6cnBt b3N0cmVlY3h4OjpSUE1EaWZmOjpwcmludDsKKy0gIChzZWxmLipwcmludCQpKCk7CistfQorKyAg OjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVu dHJpZXMkYWRkX2dyb3VwX2NvbnRlbnQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RF bnRyaWVzICZzZWxmLCA6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpIG5v ZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X3RyZWVw a2dfZGlmZl9mcm9tX3N5c3Jvb3RfcGF0aCg6OnJ1c3Q6OlN0ciBzeXNyb290X3BhdGgsIDo6cnBt b3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQgZm9ybWF0LCA6OnN0ZDo6dWludDMy X3QgbWF4X2tleV9sZW4sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxl KSBub2V4Y2VwdCB7CistICB2b2lkICgqcHJpbnRfdHJlZXBrZ19kaWZmX2Zyb21fc3lzcm9vdF9w YXRoJCkoOjpydXN0OjpTdHIsIDo6cnBtb3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3Jt YXQsIDo6c3RkOjp1aW50MzJfdCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAqKSA9IDo6 cnBtb3N0cmVlY3h4OjpwcmludF90cmVlcGtnX2RpZmZfZnJvbV9zeXNyb290X3BhdGg7CistICBw cmludF90cmVlcGtnX2RpZmZfZnJvbV9zeXNyb290X3BhdGgkKHN5c3Jvb3RfcGF0aCwgZm9ybWF0 LCBtYXhfa2V5X2xlbiwgY2FuY2VsbGFibGUpOworLX0KKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGFkZF9wYXNzd2RfY29u dGVudCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgJnNlbGYsIDo6c3Rk OjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CisgCistOjpycG1v c3RyZWVjeHg6OlByb2dyZXNzICpycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJvZ3Jlc3Nf YmVnaW5fdGFzayg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0IHsKKy0gIDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKCpwcm9ncmVzc19iZWdpbl90YXNrJCkoOjpy dXN0OjpTdHIpID0gOjpycG1vc3RyZWVjeHg6OnByb2dyZXNzX2JlZ2luX3Rhc2s7CistICByZXR1 cm4gcHJvZ3Jlc3NfYmVnaW5fdGFzayQobXNnKS5yZWxlYXNlKCk7CistfQorLQorLXZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFByb2dyZXNzJGVuZCg6OnJwbW9zdHJlZWN4eDo6UHJv Z3Jlc3MgJnNlbGYsIDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgeworLSAgdm9pZCAoOjpycG1v c3RyZWVjeHg6OlByb2dyZXNzOjoqZW5kJCkoOjpydXN0OjpTdHIpID0gJjo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzczo6ZW5kOworLSAgKHNlbGYuKmVuZCQpKG1zZyk7CistfQorLQorLXZvaWQgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG91dHB1dF9tZXNzYWdlKDo6cnVzdDo6U3RyIG1zZykg bm9leGNlcHQgeworLSAgdm9pZCAoKm91dHB1dF9tZXNzYWdlJCkoOjpydXN0OjpTdHIpID0gOjpy cG1vc3RyZWVjeHg6Om91dHB1dF9tZXNzYWdlOworLSAgb3V0cHV0X21lc3NhZ2UkKG1zZyk7Cist fQorLQorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRu ZXZyYV90b19jYWNoZV9icmFuY2goOjpzdGQ6OnN0cmluZyBjb25zdCAmbmV2cmEsIDo6cnVzdDo6 U3RyaW5nICpyZXR1cm4kKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6OlN0cmluZyAoKm5ldnJhX3Rv X2NhY2hlX2JyYW5jaCQpKDo6c3RkOjpzdHJpbmcgY29uc3QgJikgPSA6OnJwbW9zdHJlZWN4eDo6 bmV2cmFfdG9fY2FjaGVfYnJhbmNoOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwor LSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIG5l dyAocmV0dXJuJCkgOjpydXN0OjpTdHJpbmcobmV2cmFfdG9fY2FjaGVfYnJhbmNoJChuZXZyYSkp OworLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CistICAgICAgfSwKKy0gICAgICA6OnJ1 c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKKy0gIHJldHVybiB0aHJvdyQ7CistfQorLQorLTo6 cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZXRfcmVwb2Rh dGFfY2hrc3VtX3JlcHIoOjpkbmZjeHg6OkZGSURuZlBhY2thZ2UgJnBrZywgOjpydXN0OjpTdHJp bmcgKnJldHVybiQpIG5vZXhjZXB0IHsKKy0gIDo6cnVzdDo6U3RyaW5nICgqZ2V0X3JlcG9kYXRh X2Noa3N1bV9yZXByJCkoOjpkbmZjeHg6OkZGSURuZlBhY2thZ2UgJikgPSA6OnJwbW9zdHJlZWN4 eDo6Z2V0X3JlcG9kYXRhX2Noa3N1bV9yZXByOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhy b3ckOworLSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAg ICAgIG5ldyAocmV0dXJuJCkgOjpydXN0OjpTdHJpbmcoZ2V0X3JlcG9kYXRhX2Noa3N1bV9yZXBy JChwa2cpKTsKKy0gICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOworLSAgICAgIH0sCistICAg ICAgOjpydXN0OjpkZXRhaWw6OkZhaWwodGhyb3ckKSk7CistICByZXR1cm4gdGhyb3ckOworLX0K KysgIGJvb2wgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkY29udGFp bnNfZ3JvdXAgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZz ZWxmLCA6OnJ1c3Q6OlN0ciB1c2VyKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtdHNfZm9yX2NvbW1pdCg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmV2LCA6OnJwbW9zdHJl ZWN4eDo6UnBtVHMgKipyZXR1cm4kKSBub2V4Y2VwdCB7CistICA6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICgqcnBtdHNfZm9yX2NvbW1pdCQpKDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICYsIDo6cnVzdDo6U3RyKSA9IDo6cnBtb3N0cmVlY3h4OjpycG10 c19mb3JfY29tbWl0OworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworLSAgOjpydXN0 OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIG5ldyAocmV0dXJu JCkgOjpycG1vc3RyZWVjeHg6OlJwbVRzICoocnBtdHNfZm9yX2NvbW1pdCQocmVwbywgcmV2KS5y ZWxlYXNlKCkpOworLSAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CistICAgICAgfSwKKy0g ICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0aHJvdyQpKTsKKy0gIHJldHVybiB0aHJvdyQ7Cist fQorKyAgYm9vbCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRjb250 YWluc191c2VyICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyBjb25zdCAm c2VsZiwgOjpydXN0OjpTdHIgdXNlcikgbm9leGNlcHQ7CisgCistOjpydXN0OjpyZXByOjpQdHJM ZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbWRiX3BhY2thZ2VfbmFtZV9saXN0KDo6 c3RkOjppbnQzMl90IGRmZCwgOjpydXN0OjpTdHJpbmcgY29uc3QgKnBhdGgsIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQgeworLSAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+ICgqcnBtZGJfcGFja2FnZV9uYW1lX2xpc3QkKSg6OnN0ZDo6aW50MzJfdCwg OjpydXN0OjpTdHJpbmcpID0gOjpycG1vc3RyZWVjeHg6OnJwbWRiX3BhY2thZ2VfbmFtZV9saXN0 OworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworLSAgOjpydXN0OjpiZWhhdmlvcjo6 dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIG5ldyAocmV0dXJuJCkgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+KHJwbWRiX3BhY2thZ2VfbmFtZV9saXN0JChkZmQsIDo6cnVzdDo6 U3RyaW5nKDo6cnVzdDo6dW5zYWZlX2JpdGNvcHksICpwYXRoKSkpOworLSAgICAgICAgdGhyb3ck LnB0ciA9IG51bGxwdHI7CistICAgICAgfSwKKy0gICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCh0 aHJvdyQpKTsKKy0gIHJldHVybiB0aHJvdyQ7CistfQorKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX3VzZXJfaWQg KAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1 c3Q6OlN0ciB1c2VyLAorKyAgICAgIDo6c3RkOjp1aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQ7 CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UGFzc3dkRW50cmllcyRsb29rdXBfZ3JvdXBfaWQgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2RFbnRyaWVzIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBncm91cCwKKysgICAgICA6OnN0 ZDo6dWludDMyX3QgKnJldHVybiQpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRvcGVyYXRvciRzaXplb2YgKCkgbm9leGNl cHQ7CisrICA6OnN0ZDo6c2l6ZV90IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNp b25zJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNlcHQ7CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZXh0ZW5zaW9uc19sb2FkICgKKysgICAg ICA6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCwKKysgICAgICA6OnJ1c3Q6 OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJmJhc2VfcGtncywKKysg ICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4gKnJldHVybiQpIG5v ZXhjZXB0OworIAorLTo6cnVzdDo6cmVwcjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1UcyRwYWNrYWdlX21ldGEoOjpycG1vc3RyZWVjeHg6OlJwbVRzIGNvbnN0ICZzZWxm LCA6OnJ1c3Q6OlN0ciBuYW1lLCA6OnJ1c3Q6OlN0ciBhcmNoLCA6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGEgKipyZXR1cm4kKSBub2V4Y2VwdCB7CistICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICg6OnJwbW9zdHJlZWN4eDo6UnBtVHM6OipwYWNrYWdl X21ldGEkKSg6OnJ1c3Q6OlN0ciwgOjpydXN0OjpTdHIpIGNvbnN0ID0gJjo6cnBtb3N0cmVlY3h4 OjpScG1Uczo6cGFja2FnZV9tZXRhOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOwor LSAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIG5l dyAocmV0dXJuJCkgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhICooKHNlbGYuKnBhY2thZ2Vf bWV0YSQpKG5hbWUsIGFyY2gpLnJlbGVhc2UoKSk7CistICAgICAgICB0aHJvdyQucHRyID0gbnVs bHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsKHRocm93JCkpOwor LSAgcmV0dXJuIHRocm93JDsKKy19CistCistOjpzdGQ6OnVpbnQ2NF90IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRQYWNrYWdlTWV0YSRzaXplKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0 YSBjb25zdCAmc2VsZikgbm9leGNlcHQgeworLSAgOjpzdGQ6OnVpbnQ2NF90ICg6OnJwbW9zdHJl ZWN4eDo6UGFja2FnZU1ldGE6OipzaXplJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGE6OnNpemU7CistICByZXR1cm4gKHNlbGYuKnNpemUkKSgpOworLX0KKy0KKy06OnN0 ZDo6dWludDY0X3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJGJ1aWxk dGltZSg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgY29uc3QgJnNlbGYpIG5vZXhjZXB0IHsK Ky0gIDo6c3RkOjp1aW50NjRfdCAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqYnVpbGR0 aW1lJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OmJ1aWxkdGltZTsK Ky0gIHJldHVybiAoc2VsZi4qYnVpbGR0aW1lJCkoKTsKKy19CisrICB2b2lkCisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfcmVwb3MgKDo6cnBtb3N0cmVlY3h4 OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKnJldHVy biQpIG5vZXhjZXB0OworKworKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0 ZW5zaW9ucyRnZXRfb3NfZXh0ZW5zaW9uX3BhY2thZ2VzICgKKysgICAgICA6OnJwbW9zdHJlZWN4 eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpy ZXR1cm4kKSBub2V4Y2VwdDsKKyAKKy12b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQ YWNrYWdlTWV0YSRjaGFuZ2Vsb2dzKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAm c2VsZiwgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ2NF90PiAqcmV0dXJuJCkgbm9leGNlcHQgewor LSAgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ2NF90PiAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VN ZXRhOjoqY2hhbmdlbG9ncyQpKCkgY29uc3QgPSAmOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRh OjpjaGFuZ2Vsb2dzOworLSAgbmV3IChyZXR1cm4kKSA6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDY0 X3Q+KChzZWxmLipjaGFuZ2Vsb2dzJCkoKSk7CistfQorKyAgdm9pZCBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMgKAorKyAgICAg IDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gKnJldHVybiQpIG5vZXhjZXB0OworIAorLXZvaWQgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHNyY19wa2coOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VN ZXRhIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciAqcmV0dXJuJCkgbm9leGNlcHQgeworLSAgOjpy dXN0OjpTdHIgKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6KnNyY19wa2ckKSgpIGNvbnN0 ID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6c3JjX3BrZzsKKy0gIG5ldyAocmV0dXJu JCkgOjpydXN0OjpTdHIoKHNlbGYuKnNyY19wa2ckKSgpKTsKKy19CistCistOjpydXN0OjpyZXBy OjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhY2thZ2VNZXRhJHByb3ZpZGVk X3BhdGhzKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZiwgOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gKDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6KnByb3ZpZGVkX3Bh dGhzJCkoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OnByb3ZpZGVkX3Bh dGhzOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworLSAgOjpydXN0OjpiZWhhdmlv cjo6dHJ5Y2F0Y2goCistICAgICAgWyZdIHsKKy0gICAgICAgIG5ldyAocmV0dXJuJCkgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+KChzZWxmLipwcm92aWRlZF9wYXRocyQpKCkpOworLSAgICAg ICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CistICAgICAgfSwKKy0gICAgICA6OnJ1c3Q6OmRldGFp bDo6RmFpbCh0aHJvdyQpKTsKKy0gIHJldHVybiB0aHJvdyQ7CistfQorLQorLTo6cnVzdDo6cmVw cjo6UHRyTGVuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYWNrYWdlX3ZhcmlhbnRfbGlz dF9mb3JfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1 c3Q6OlN0ciByZXYsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxh YmxlLCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKipyZXR1cm4kKSBub2V4Y2VwdCB7CistICA6 OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKigqcGFja2FnZV92YXJpYW50X2xpc3RfZm9yX2NvbW1p dCQpKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICYsIDo6cnVzdDo6U3RyLCA6OnJw bW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICYpID0gOjpycG1vc3RyZWVjeHg6OnBhY2th Z2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJv dyQ7CistICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCgKKy0gICAgICBbJl0geworLSAgICAg ICAgbmV3IChyZXR1cm4kKSA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgKihwYWNrYWdlX3Zhcmlh bnRfbGlzdF9mb3JfY29tbWl0JChyZXBvLCByZXYsIGNhbmNlbGxhYmxlKSk7CistICAgICAgICB0 aHJvdyQucHRyID0gbnVsbHB0cjsKKy0gICAgICB9LAorLSAgICAgIDo6cnVzdDo6ZGV0YWlsOjpG YWlsKHRocm93JCkpOworLSAgcmV0dXJuIHRocm93JDsKKy19CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRzdGF0ZV9jaGVja3N1 bV9jaGFuZ2VkICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2Vs ZiwgOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyLAorKyAgICAgIGJv b2wgKnJldHVybiQpIG5vZXhjZXB0OworKworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkdXBkYXRlX3N0YXRlX2NoZWNrc3VtICgK KysgICAgICA6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2VsZiwgOjpydXN0OjpT dHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBub2V4Y2VwdDsKKysKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9u cyRzZXJpYWxpemVfdG9fZGlyICg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyBjb25zdCAmc2Vs ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIG5vZXhjZXB0OworKworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2VuZXJh dGVfdHJlZWZpbGUgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zIGNvbnN0ICZz ZWxmLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYywKKysgICAgICA6OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBub2V4Y2VwdDsKKysgIDo6 c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9w ZXJhdG9yJHNpemVvZiAoKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJGFsaWdub2YgKCkgbm9leGNl cHQ7CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkbG9ja2ZpbGVfcmVhZCAoCisrICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNv bnN0ICZmaWxlbmFtZXMsCisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tm aWxlQ29uZmlnPiAqcmV0dXJuJCkgbm9leGNlcHQ7CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2ZpbGVfd3JpdGUgKAorKyAgICAgIDo6 cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZwYWNr YWdlcywKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5ICZycG1tZF9yZXBv cykgbm9leGNlcHQ7CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkTG9ja2ZpbGVDb25maWckZ2V0X2xvY2tlZF9wYWNrYWdlcyAoCisrICAgICAg OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29uZmlnIGNvbnN0ICZzZWxmLAorKyAgICAgIDo6cnVz dDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcmV0dXJuJCkgbm9leGNlcHQ7 CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk b3JpZ2luX3RvX3RyZWVmaWxlICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29u c3QgJmtmLCA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+ICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkdHJlZWZpbGVfdG9fb3JpZ2luICg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUg Y29uc3QgJnRmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlICoqcmV0dXJuJCkgbm9leGNlcHQ7CisrCisr ICB2b2lkIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRvcmlnaW5fdmFsaWRhdGVfcm91bmR0 cmlwICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29uc3QgJmtmKSBub2V4Y2Vw dDsKKysKKysgIHZvaWQgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNhY2hlX2JyYW5jaF90 b19uZXZyYSAoOjpydXN0OjpTdHIgbmV2cmEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpyZXR1cm4kKSBu b2V4Y2VwdDsKKysKKysgIDo6c3RkOjp1aW50MzJfdAorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEN4eEdPYmplY3RBcnJheSRsZW5ndGggKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpD eHhHT2JqZWN0QXJyYXkgJnNlbGYpIG5vZXhjZXB0CisrICB7CisrICAgIDo6c3RkOjp1aW50MzJf dCAoOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6Kmxlbmd0aCQpICgpCisrICAgICAg ICA9ICY6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5OjpsZW5ndGg7CisrICAgIHJldHVy biAoc2VsZi4qbGVuZ3RoJCkgKCk7CisrICB9CisrCisrICB2b2lkCisrICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkQ3h4R09iamVjdEFycmF5JGdldCAoOjpycG1vc3RyZWVjeHg6OkN4eEdP YmplY3RBcnJheSAmc2VsZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnN0ZDo6dWludDMyX3QgaSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R09iamVjdCAqKnJl dHVybiQpIG5vZXhjZXB0CisrICB7CisrICAgIDo6cnBtb3N0cmVlY3h4OjpHT2JqZWN0ICYoOjpy cG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTo6KmdldCQpICg6OnN0ZDo6dWludDMyX3QpCisr ICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFycmF5OjpnZXQ7CisrICAgIG5l dyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6R09iamVjdCAqKCYoc2VsZi4qZ2V0JCkgKGkpKTsK KysgIH0KKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkdXRpbF9uZXh0X3ZlcnNpb24gKDo6cnVzdDo6U3RyIGF1dG9fdmVyc2lvbl9wcmVm aXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnVzdDo6U3RyIHZlcnNpb25fc3VmZml4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBsYXN0X3ZlcnNpb24sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyaW5nICpy ZXR1cm4kKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnJ1c3Q6OlN0cmluZyAoKnV0aWxfbmV4dF92 ZXJzaW9uJCkgKDo6cnVzdDo6U3RyLCA6OnJ1c3Q6OlN0ciwgOjpydXN0OjpTdHIpCisrICAgICAg ICA9IDo6cnBtb3N0cmVlY3h4Ojp1dGlsX25leHRfdmVyc2lvbjsKKysgICAgOjpydXN0OjpyZXBy OjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCisrICAg ICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJ1c3Q6 OlN0cmluZyAoCisrICAgICAgICAgICAgICAgIHV0aWxfbmV4dF92ZXJzaW9uJCAoYXV0b192ZXJz aW9uX3ByZWZpeCwgdmVyc2lvbl9zdWZmaXgsIGxhc3RfdmVyc2lvbikpOworKyAgICAgICAgICAg IHRocm93JC5wdHIgPSBudWxscHRyOworKyAgICAgICAgICB9LAorKyAgICAgICAgOjpydXN0Ojpk ZXRhaWw6OkZhaWwgKHRocm93JCkpOworKyAgICByZXR1cm4gdGhyb3ckOworKyAgfQorKworKyAg OjpzdGQ6OmludDMyX3QKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0ZXN0dXRpbF92 YWxpZGF0ZV9jeHhyc19wYXNzdGhyb3VnaCAoCisrICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVJlcG8gY29uc3QgJnJlcG8pIG5vZXhjZXB0CisrICB7CisrICAgIDo6c3RkOjppbnQzMl90ICgq dGVzdHV0aWxfdmFsaWRhdGVfY3h4cnNfcGFzc3Rocm91Z2gkKSAoOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVJlcG8gY29uc3QgJikKKysgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnRlc3R1dGlsX3Zh bGlkYXRlX2N4eHJzX3Bhc3N0aHJvdWdoOworKyAgICByZXR1cm4gdGVzdHV0aWxfdmFsaWRhdGVf Y3h4cnNfcGFzc3Rocm91Z2gkIChyZXBvKTsKKysgIH0KKysKKysgIHZvaWQKKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRlYXJseV9tYWluICgpIG5vZXhjZXB0CisrICB7CisrICAgIHZv aWQgKCplYXJseV9tYWluJCkgKCkgPSA6OnJwbW9zdHJlZWN4eDo6ZWFybHlfbWFpbjsKKysgICAg ZWFybHlfbWFpbiQgKCk7CisrICB9CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbW9zdHJlZV9tYWluICg6OnJ1c3Q6OlNsaWNlPDo6 cnVzdDo6U3RyIGNvbnN0PiBhcmdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnN0ZDo6aW50MzJfdCAqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysg ICAgOjpzdGQ6OmludDMyX3QgKCpycG1vc3RyZWVfbWFpbiQpICg6OnJ1c3Q6OlNsaWNlPDo6cnVz dDo6U3RyIGNvbnN0PikKKysgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OnJwbW9zdHJlZV9tYWlu OworKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CisrICAgIDo6cnVzdDo6YmVoYXZp b3I6OnRyeWNhdGNoICgKKysgICAgICAgIFsmXQorKyAgICAgICAgICB7CisrICAgICAgICAgICAg bmV3IChyZXR1cm4kKTo6c3RkOjppbnQzMl90IChycG1vc3RyZWVfbWFpbiQgKGFyZ3MpKTsKKysg ICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKysgICAgICAgICAgfSwKKysgICAgICAg IDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKKysgICAgcmV0dXJuIHRocm93JDsKKysg IH0KKysKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1vc3RyZWVf cHJvY2Vzc19nbG9iYWxfdGVhcmRvd24gKCkgbm9leGNlcHQKKysgIHsKKysgICAgdm9pZCAoKnJw bW9zdHJlZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93biQpICgpCisrICAgICAgICA9IDo6cnBtb3N0 cmVlY3h4OjpycG1vc3RyZWVfcHJvY2Vzc19nbG9iYWxfdGVhcmRvd247CisrICAgIHJwbW9zdHJl ZV9wcm9jZXNzX2dsb2JhbF90ZWFyZG93biQgKCk7CisrICB9CisrCisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNfdW5pdF90ZXN0cyAoKSBu b2V4Y2VwdAorKyAgeworKyAgICB2b2lkICgqY191bml0X3Rlc3RzJCkgKCkgPSA6OnJwbW9zdHJl ZWN4eDo6Y191bml0X3Rlc3RzOworKyAgICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiB0aHJvdyQ7Cisr ICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgKKysgICAgICAgIFsmXQorKyAgICAgICAg ICB7CisrICAgICAgICAgICAgY191bml0X3Rlc3RzJCAoKTsKKysgICAgICAgICAgICB0aHJvdyQu cHRyID0gbnVsbHB0cjsKKysgICAgICAgICAgfSwKKysgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpG YWlsICh0aHJvdyQpKTsKKysgICAgcmV0dXJuIHRocm93JDsKKysgIH0KKysKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50X3JlcXVp cmVfcm9vdCAoKSBub2V4Y2VwdAorKyAgeworKyAgICB2b2lkICgqY2xpZW50X3JlcXVpcmVfcm9v dCQpICgpID0gOjpycG1vc3RyZWVjeHg6OmNsaWVudF9yZXF1aXJlX3Jvb3Q7CisrICAgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2gg KAorKyAgICAgICAgWyZdCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBjbGllbnRfcmVxdWly ZV9yb290JCAoKTsKKysgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKysgICAgICAg ICAgfSwKKysgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKKysgICAgcmV0 dXJuIHRocm93JDsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV3X2NsaWVudF9jb25uZWN0aW9uICgKKysgICAgICA6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbiAqKnJldHVybiQpIG5vZXhjZXB0CisrICB7Cisr ICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAo Km5ld19jbGllbnRfY29ubmVjdGlvbiQpICgpCisrICAgICAgICA9IDo6cnBtb3N0cmVlY3h4Ojpu ZXdfY2xpZW50X2Nvbm5lY3Rpb247CisrICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsK KysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAorKyAgICAgICAgWyZdCisrICAgICAg ICAgIHsKKysgICAgICAgICAgICBuZXcgKHJldHVybiQpOjpycG1vc3RyZWVjeHg6OkNsaWVudENv bm5lY3Rpb24gKihuZXdfY2xpZW50X2Nvbm5lY3Rpb24kICgpLnJlbGVhc2UgKCkpOworKyAgICAg ICAgICAgIHRocm93JC5wdHIgPSBudWxscHRyOworKyAgICAgICAgICB9LAorKyAgICAgICAgOjpy dXN0OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOworKyAgICByZXR1cm4gdGhyb3ckOworKyAgfQor KworKyAgOjpycG1vc3RyZWVjeHg6OkdEQnVzQ29ubmVjdGlvbiBjb25zdCAqCisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ2xpZW50Q29ubmVjdGlvbiRnZXRfY29ubmVjdGlvbiAoCisr ICAgICAgOjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24gJnNlbGYpIG5vZXhjZXB0Cisr ICB7CisrICAgIDo6cnBtb3N0cmVlY3h4OjpHREJ1c0Nvbm5lY3Rpb24gY29uc3QgJig6OnJwbW9z dHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjo6KmdldF9jb25uZWN0aW9uJCkgKCkKKysgICAgICAg ID0gJjo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOjpnZXRfY29ubmVjdGlvbjsKKysg ICAgcmV0dXJuICYoc2VsZi4qZ2V0X2Nvbm5lY3Rpb24kKSAoKTsKKysgIH0KKysKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQ2xpZW50Q29u bmVjdGlvbiR0cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmMgKAorKyAgICAgIDo6cnBt b3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uIGNvbnN0ICZzZWxmLCA6OnJ1c3Q6OlN0ciBhZGRy ZXNzKSBub2V4Y2VwdAorKyAgeworKyAgICB2b2lkICg6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbjo6KnRyYW5zYWN0aW9uX2Nvbm5lY3RfcHJvZ3Jlc3Nfc3luYyQpICg6OnJ1c3Q6OlN0 cikgY29uc3QKKysgICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uOjp0 cmFuc2FjdGlvbl9jb25uZWN0X3Byb2dyZXNzX3N5bmM7CisrICAgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIHRocm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAorKyAgICAgICAg WyZdCisrICAgICAgICAgIHsKKysgICAgICAgICAgICAoc2VsZi4qdHJhbnNhY3Rpb25fY29ubmVj dF9wcm9ncmVzc19zeW5jJCkgKGFkZHJlc3MpOworKyAgICAgICAgICAgIHRocm93JC5wdHIgPSBu dWxscHRyOworKyAgICAgICAgICB9LAorKyAgICAgICAgOjpydXN0OjpkZXRhaWw6OkZhaWwgKHRo cm93JCkpOworKyAgICByZXR1cm4gdGhyb3ckOworKyAgfQorKworKyAgOjpzdGQ6OmludDMyX3QK KysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJG5fcmVtb3ZlZCAoOjpycG1v c3RyZWVjeHg6OlJQTURpZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0CisrICB7CisrICAgIDo6c3Rk OjppbnQzMl90ICg6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6Km5fcmVtb3ZlZCQpICgpIGNvbnN0 CisrICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6bl9yZW1vdmVkOworKyAgICBy ZXR1cm4gKHNlbGYuKm5fcmVtb3ZlZCQpICgpOworKyAgfQorKworKyAgOjpzdGQ6OmludDMyX3QK KysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSUE1EaWZmJG5fYWRkZWQgKDo6cnBtb3N0 cmVlY3h4OjpSUE1EaWZmIGNvbnN0ICZzZWxmKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnN0ZDo6 aW50MzJfdCAoOjpycG1vc3RyZWVjeHg6OlJQTURpZmY6OipuX2FkZGVkJCkgKCkgY29uc3QKKysg ICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjpuX2FkZGVkOworKyAgICByZXR1cm4g KHNlbGYuKm5fYWRkZWQkKSAoKTsKKysgIH0KKysKKysgIDo6c3RkOjppbnQzMl90CisrICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUlBNRGlmZiRuX21vZGlmaWVkICg6OnJwbW9zdHJlZWN4 eDo6UlBNRGlmZiBjb25zdCAmc2VsZikgbm9leGNlcHQKKysgIHsKKysgICAgOjpzdGQ6OmludDMy X3QgKDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmOjoqbl9tb2RpZmllZCQpICgpIGNvbnN0CisrICAg ICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6bl9tb2RpZmllZDsKKysgICAgcmV0dXJu IChzZWxmLipuX21vZGlmaWVkJCkgKCk7CisrICB9CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl bgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbWRiX2RpZmYgKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6c3RkOjpzdHJpbmcgY29uc3QgJnNyYywgOjpzdGQ6OnN0cmluZyBj b25zdCAmZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIGFsbG93X25vZW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmICoqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysg ICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICgqcnBtZGJfZGlm ZiQpICgKKysgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICYsIDo6c3Rk OjpzdHJpbmcgY29uc3QgJiwgOjpzdGQ6OnN0cmluZyBjb25zdCAmLCBib29sKQorKyAgICAgICAg PSA6OnJwbW9zdHJlZWN4eDo6cnBtZGJfZGlmZjsKKysgICAgOjpydXN0OjpyZXByOjpQdHJMZW4g dGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCisrICAgICAgICBbJl0K KysgICAgICAgICAgeworKyAgICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6 UlBNRGlmZiAqKAorKyAgICAgICAgICAgICAgICBycG1kYl9kaWZmJCAocmVwbywgc3JjLCBkZXN0 LCBhbGxvd19ub2VudCkucmVsZWFzZSAoKSk7CisrICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51 bGxwdHI7CisrICAgICAgICAgIH0sCisrICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhy b3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7CisrICB9CisrCisrICB2b2lkCisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkUlBNRGlmZiRwcmludCAoOjpycG1vc3RyZWVjeHg6OlJQTURp ZmYgY29uc3QgJnNlbGYpIG5vZXhjZXB0CisrICB7CisrICAgIHZvaWQgKDo6cnBtb3N0cmVlY3h4 OjpSUE1EaWZmOjoqcHJpbnQkKSAoKSBjb25zdCA9ICY6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjo6 cHJpbnQ7CisrICAgIChzZWxmLipwcmludCQpICgpOworKyAgfQorKworKyAgdm9pZAorKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jvb3Rf cGF0aCAoCisrICAgICAgOjpydXN0OjpTdHIgc3lzcm9vdF9wYXRoLCA6OnJwbW9zdHJlZWN4eDo6 UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0IGZvcm1hdCwKKysgICAgICA6OnN0ZDo6dWludDMyX3Qg bWF4X2tleV9sZW4sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlKSBu b2V4Y2VwdAorKyAgeworKyAgICB2b2lkICgqcHJpbnRfdHJlZXBrZ19kaWZmX2Zyb21fc3lzcm9v dF9wYXRoJCkgKDo6cnVzdDo6U3RyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRGb3Jt YXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OjpzdGQ6OnVpbnQzMl90LCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICopCisrICAgICAg ICA9IDo6cnBtb3N0cmVlY3h4OjpwcmludF90cmVlcGtnX2RpZmZfZnJvbV9zeXNyb290X3BhdGg7 CisrICAgIHByaW50X3RyZWVwa2dfZGlmZl9mcm9tX3N5c3Jvb3RfcGF0aCQgKHN5c3Jvb3RfcGF0 aCwgZm9ybWF0LCBtYXhfa2V5X2xlbiwgY2FuY2VsbGFibGUpOworKyAgfQorKworKyAgOjpycG1v c3RyZWVjeHg6OlByb2dyZXNzICoKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwcm9n cmVzc19iZWdpbl90YXNrICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0CisrICB7CisrICAgIDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKCpwcm9ncmVzc19iZWdp bl90YXNrJCkgKDo6cnVzdDo6U3RyKQorKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6cHJvZ3Jl c3NfYmVnaW5fdGFzazsKKysgICAgcmV0dXJuIHByb2dyZXNzX2JlZ2luX3Rhc2skIChtc2cpLnJl bGVhc2UgKCk7CisrICB9CisrCisrICB2b2lkCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkUHJvZ3Jlc3MkZW5kICg6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3MgJnNlbGYsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBtc2cpIG5v ZXhjZXB0CisrICB7CisrICAgIHZvaWQgKDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzczo6KmVuZCQp ICg6OnJ1c3Q6OlN0cikgPSAmOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzOjplbmQ7CisrICAgIChz ZWxmLiplbmQkKSAobXNnKTsKKysgIH0KKysKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRvdXRwdXRfbWVzc2FnZSAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdAorKyAg eworKyAgICB2b2lkICgqb3V0cHV0X21lc3NhZ2UkKSAoOjpydXN0OjpTdHIpID0gOjpycG1vc3Ry ZWVjeHg6Om91dHB1dF9tZXNzYWdlOworKyAgICBvdXRwdXRfbWVzc2FnZSQgKG1zZyk7CisrICB9 CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JG5ldnJhX3RvX2NhY2hlX2JyYW5jaCAoOjpzdGQ6OnN0cmluZyBjb25zdCAmbmV2cmEsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1 c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysgICAgOjpydXN0OjpTdHJpbmcg KCpuZXZyYV90b19jYWNoZV9icmFuY2gkKSAoOjpzdGQ6OnN0cmluZyBjb25zdCAmKQorKyAgICAg ICAgPSA6OnJwbW9zdHJlZWN4eDo6bmV2cmFfdG9fY2FjaGVfYnJhbmNoOworKyAgICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiB0aHJvdyQ7CisrICAgIDo6cnVzdDo6YmVoYXZpb3I6OnRyeWNhdGNoICgK KysgICAgICAgIFsmXQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgbmV3IChyZXR1cm4kKTo6 cnVzdDo6U3RyaW5nIChuZXZyYV90b19jYWNoZV9icmFuY2gkIChuZXZyYSkpOworKyAgICAgICAg ICAgIHRocm93JC5wdHIgPSBudWxscHRyOworKyAgICAgICAgICB9LAorKyAgICAgICAgOjpydXN0 OjpkZXRhaWw6OkZhaWwgKHRocm93JCkpOworKyAgICByZXR1cm4gdGhyb3ckOworKyAgfQorKwor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRn ZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIgKDo6ZG5mY3h4OjpGRklEbmZQYWNrYWdlICZwa2csCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 OnJ1c3Q6OlN0cmluZyAqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysgICAgOjpydXN0OjpTdHJp bmcgKCpnZXRfcmVwb2RhdGFfY2hrc3VtX3JlcHIkKSAoOjpkbmZjeHg6OkZGSURuZlBhY2thZ2Ug JikKKysgICAgICAgID0gOjpycG1vc3RyZWVjeHg6OmdldF9yZXBvZGF0YV9jaGtzdW1fcmVwcjsK KysgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1c3Q6OmJlaGF2aW9y Ojp0cnljYXRjaCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAgICAgICAgICAgIG5l dyAocmV0dXJuJCk6OnJ1c3Q6OlN0cmluZyAoZ2V0X3JlcG9kYXRhX2Noa3N1bV9yZXByJCAocGtn KSk7CisrICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisr ICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJv dyQ7CisrICB9CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHJwbXRzX2Zvcl9jb21taXQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBv IGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDo6cnVzdDo6U3RyIHJldiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtVHMgKipyZXR1cm4kKSBub2V4Y2Vw dAorKyAgeworKyAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICgq cnBtdHNfZm9yX2NvbW1pdCQpICgKKysgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBv IGNvbnN0ICYsIDo6cnVzdDo6U3RyKQorKyAgICAgICAgPSA6OnJwbW9zdHJlZWN4eDo6cnBtdHNf Zm9yX2NvbW1pdDsKKysgICAgOjpydXN0OjpyZXByOjpQdHJMZW4gdGhyb3ckOworKyAgICA6OnJ1 c3Q6OmJlaGF2aW9yOjp0cnljYXRjaCAoCisrICAgICAgICBbJl0KKysgICAgICAgICAgeworKyAg ICAgICAgICAgIG5ldyAocmV0dXJuJCk6OnJwbW9zdHJlZWN4eDo6UnBtVHMgKihycG10c19mb3Jf Y29tbWl0JCAocmVwbywgcmV2KS5yZWxlYXNlICgpKTsKKysgICAgICAgICAgICB0aHJvdyQucHRy ID0gbnVsbHB0cjsKKysgICAgICAgICAgfSwKKysgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWls ICh0aHJvdyQpKTsKKysgICAgcmV0dXJuIHRocm93JDsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtZGJfcGFja2FnZV9u YW1lX2xpc3QgKAorKyAgICAgIDo6c3RkOjppbnQzMl90IGRmZCwgOjpydXN0OjpTdHJpbmcgY29u c3QgKnBhdGgsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiAqcmV0dXJuJCkgbm9leGNlcHQK KysgIHsKKysgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICgqcnBtZGJfcGFja2FnZV9u YW1lX2xpc3QkKSAoOjpzdGQ6OmludDMyX3QsIDo6cnVzdDo6U3RyaW5nKQorKyAgICAgICAgPSA6 OnJwbW9zdHJlZWN4eDo6cnBtZGJfcGFja2FnZV9uYW1lX2xpc3Q7CisrICAgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIHRocm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0Y2ggKAorKyAg ICAgICAgWyZdCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBuZXcgKHJldHVybiQpOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+ICgKKysgICAgICAgICAgICAgICAgcnBtZGJfcGFja2FnZV9u YW1lX2xpc3QkIChkZmQsIDo6cnVzdDo6U3RyaW5nICg6OnJ1c3Q6OnVuc2FmZV9iaXRjb3B5LCAq cGF0aCkpKTsKKysgICAgICAgICAgICB0aHJvdyQucHRyID0gbnVsbHB0cjsKKysgICAgICAgICAg fSwKKysgICAgICAgIDo6cnVzdDo6ZGV0YWlsOjpGYWlsICh0aHJvdyQpKTsKKysgICAgcmV0dXJu IHRocm93JDsKKysgIH0KKysKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUnBtVHMkcGFja2FnZV9tZXRhICg6OnJwbW9zdHJlZWN4eDo6UnBt VHMgY29uc3QgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6OnJ1c3Q6OlN0ciBuYW1lLCA6OnJ1c3Q6OlN0ciBhcmNoLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OlBhY2thZ2VNZXRhICoqcmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysgICAgOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAoOjpycG1vc3RyZWVjeHg6OlJwbVRz OjoqcGFja2FnZV9tZXRhJCkgKAorKyAgICAgICAgOjpydXN0OjpTdHIsIDo6cnVzdDo6U3RyKSBj b25zdAorKyAgICAgICAgPSAmOjpycG1vc3RyZWVjeHg6OlJwbVRzOjpwYWNrYWdlX21ldGE7Cisr ICAgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6 dHJ5Y2F0Y2ggKAorKyAgICAgICAgWyZdCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBuZXcg KHJldHVybiQpOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhICooCisrICAgICAgICAgICAgICAg IChzZWxmLipwYWNrYWdlX21ldGEkKSAobmFtZSwgYXJjaCkucmVsZWFzZSAoKSk7CisrICAgICAg ICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisrICAgICAgICA6OnJ1 c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7CisrICB9Cisr CisrICA6OnN0ZDo6dWludDY0X3QKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYWNr YWdlTWV0YSRzaXplICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgY29uc3QgJnNlbGYpIG5v ZXhjZXB0CisrICB7CisrICAgIDo6c3RkOjp1aW50NjRfdCAoOjpycG1vc3RyZWVjeHg6OlBhY2th Z2VNZXRhOjoqc2l6ZSQpICgpIGNvbnN0CisrICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UGFj a2FnZU1ldGE6OnNpemU7CisrICAgIHJldHVybiAoc2VsZi4qc2l6ZSQpICgpOworKyAgfQorKwor KyAgOjpzdGQ6OnVpbnQ2NF90CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFja2Fn ZU1ldGEkYnVpbGR0aW1lICgKKysgICAgICA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgY29u c3QgJnNlbGYpIG5vZXhjZXB0CisrICB7CisrICAgIDo6c3RkOjp1aW50NjRfdCAoOjpycG1vc3Ry ZWVjeHg6OlBhY2thZ2VNZXRhOjoqYnVpbGR0aW1lJCkgKCkgY29uc3QKKysgICAgICAgID0gJjo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6YnVpbGR0aW1lOworKyAgICByZXR1cm4gKHNlbGYu KmJ1aWxkdGltZSQpICgpOworKyAgfQorKworKyAgdm9pZAorKyAgcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFBhY2thZ2VNZXRhJGNoYW5nZWxvZ3MgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpQYWNrYWdlTWV0YSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ2NF90PiAq cmV0dXJuJCkgbm9leGNlcHQKKysgIHsKKysgICAgOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ2NF90 PiAoOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhOjoqY2hhbmdlbG9ncyQpICgpIGNvbnN0Cisr ICAgICAgICA9ICY6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OmNoYW5nZWxvZ3M7CisrICAg IG5ldyAocmV0dXJuJCk6OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDY0X3Q+ICgoc2VsZi4qY2hhbmdl bG9ncyQpICgpKTsKKysgIH0KKysKKysgIHZvaWQKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRQYWNrYWdlTWV0YSRzcmNfcGtnICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGEgY29u c3QgJnNlbGYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpTdHIgKnJldHVybiQpIG5vZXhjZXB0CisrICB7CisrICAgIDo6cnVzdDo6 U3RyICg6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE6OipzcmNfcGtnJCkgKCkgY29uc3QKKysg ICAgICAgID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6c3JjX3BrZzsKKysgICAgbmV3 IChyZXR1cm4kKTo6cnVzdDo6U3RyICgoc2VsZi4qc3JjX3BrZyQpICgpKTsKKysgIH0KKysKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuCisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFj a2FnZU1ldGEkcHJvdmlkZWRfcGF0aHMgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YSBjb25zdCAmc2VsZiwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICpyZXR1cm4kKSBu b2V4Y2VwdAorKyAgeworKyAgICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gKDo6cnBtb3N0 cmVlY3h4OjpQYWNrYWdlTWV0YTo6KnByb3ZpZGVkX3BhdGhzJCkgKCkgY29uc3QKKysgICAgICAg ID0gJjo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTo6cHJvdmlkZWRfcGF0aHM7CisrICAgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0 Y2ggKAorKyAgICAgICAgWyZdCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBuZXcgKHJldHVy biQpOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ICgoc2VsZi4qcHJvdmlkZWRfcGF0aHMkKSAo KSk7CisrICAgICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisr ICAgICAgICA6OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJv dyQ7CisrICB9CisrCisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbgorKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHBhY2thZ2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQgKAorKyAgICAgIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZXYsCisr ICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6 cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKnJldHVybiQpIG5vZXhjZXB0CisrICB7CisrICAgIDo6 cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqKCpwYWNrYWdlX3ZhcmlhbnRfbGlzdF9mb3JfY29tbWl0 JCkgKAorKyAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJiwgOjpydXN0 OjpTdHIsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJikKKysgICAgICAgID0g OjpycG1vc3RyZWVjeHg6OnBhY2thZ2VfdmFyaWFudF9saXN0X2Zvcl9jb21taXQ7CisrICAgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIHRocm93JDsKKysgICAgOjpydXN0OjpiZWhhdmlvcjo6dHJ5Y2F0 Y2ggKAorKyAgICAgICAgWyZdCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBuZXcgKHJldHVy biQpOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICooCisrICAgICAgICAgICAgICAgIHBhY2thZ2Vf dmFyaWFudF9saXN0X2Zvcl9jb21taXQkIChyZXBvLCByZXYsIGNhbmNlbGxhYmxlKSk7CisrICAg ICAgICAgICAgdGhyb3ckLnB0ciA9IG51bGxwdHI7CisrICAgICAgICAgIH0sCisrICAgICAgICA6 OnJ1c3Q6OmRldGFpbDo6RmFpbCAodGhyb3ckKSk7CisrICAgIHJldHVybiB0aHJvdyQ7CisrICB9 CisgfSAvLyBleHRlcm4gIkMiCisgCistYm9vbCBpc19iYXJlX3NwbGl0X3hhdHRycygpIHsKKyti b29sCisraXNfYmFyZV9zcGxpdF94YXR0cnMgKCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfYmFyZV9zcGxpdF94YXR0cnMoJnJldHVybiQudmFsdWUp OworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVy biQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGlzX2JhcmVfc3BsaXRfeGF0dHJzICgmcmV0dXJuJC52YWx1ZSk7Cisr ICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgaXNfaHR0cF9hcmcoOjpydXN0OjpTdHIg YXJnKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGlz X2h0dHBfYXJnKGFyZyk7CisrYm9vbAorK2lzX2h0dHBfYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5v ZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19odHRw X2FyZyAoYXJnKTsKKyB9CisgCistYm9vbCBpc19vc3RyZWVfY29udGFpbmVyKCkgeworK2Jvb2wK Kytpc19vc3RyZWVfY29udGFpbmVyICgpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29s PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGlzX29zdHJlZV9jb250YWluZXIoJnJldHVybiQudmFsdWUpOworLSAg aWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGlzX29zdHJlZV9jb250YWluZXIgKCZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChl cnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1 cm4kLnZhbHVlKTsKKyB9CisgCistOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlIGdldF9z eXN0ZW1faG9zdF90eXBlKCkgeworKzo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZQorK2dl dF9zeXN0ZW1faG9zdF90eXBlICgpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9z dHJlZWN4eDo6U3lzdGVtSG9zdFR5cGU+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X3N5c3RlbV9ob3N0X3R5 cGUoJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9zeXN0ZW1faG9zdF90eXBlICgm cmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysg IHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgcmVxdWly ZV9zeXN0ZW1faG9zdF90eXBlKDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSB0KSB7Cist ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkcmVxdWlyZV9zeXN0ZW1faG9zdF90eXBlKHQpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorK3ZvaWQKKytyZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUgKDo6cnBtb3N0cmVlY3h4OjpTeXN0 ZW1Ib3N0VHlwZSB0KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRyZXF1aXJlX3N5c3RlbV9ob3N0X3R5cGUgKHQpOworKyAg aWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLWJvb2wgaXNfcnBtX2Fy Zyg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkaXNfcnBtX2FyZyhhcmcpOworK2Jvb2wKKytpc19ycG1fYXJnICg6OnJ1c3Q6 OlN0ciBhcmcpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRpc19ycG1fYXJnIChhcmcpOworIH0KKyAKKy12b2lkIGNsaWVudF9zdGFydF9kYWVtb24o KSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY2xpZW50X3N0YXJ0X2RhZW1vbigpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorK3ZvaWQKKytjbGllbnRfc3RhcnRfZGFlbW9uICgpCisreworKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9zdGFydF9k YWVtb24gKCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCist OjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGNsaWVudF9oYW5kbGVfZmRfYXJndW1lbnQoOjpy dXN0OjpTdHIgYXJnLCA6OnJ1c3Q6OlN0ciBhcmNoLCBib29sIGlzX3JlcGxhY2UpIHsKKys6OnJ1 c3Q6OlZlYzw6OnN0ZDo6aW50MzJfdD4KKytjbGllbnRfaGFuZGxlX2ZkX2FyZ3VtZW50ICg6OnJ1 c3Q6OlN0ciBhcmcsIDo6cnVzdDo6U3RyIGFyY2gsIGJvb2wgaXNfcmVwbGFjZSkKKyt7CisgICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90Pj4gcmV0dXJuJDsK Ky0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjbGllbnRfaGFuZGxlX2ZkX2FyZ3VtZW50KGFyZywgYXJjaCwgaXNfcmVwbGFjZSwgJnJl dHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaWVudF9oYW5kbGVfZmRfYXJndW1lbnQgKAor KyAgICAgIGFyZywgYXJjaCwgaXNfcmVwbGFjZSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVy cm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBjbGllbnRfcmVuZGVyX2Rvd25sb2Fk X3Byb2dyZXNzKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmcHJvZ3Jlc3MpIG5vZXhj ZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK2NsaWVudF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3Mg KDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25zdCAmcHJvZ3Jlc3MpIG5vZXhjZXB0Cisrewor ICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGllbnRfcmVuZGVyX2Rvd25sb2FkX3Byb2dyZXNzKHBy b2dyZXNzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpZW50X3JlbmRlcl9kb3du bG9hZF9wcm9ncmVzcyAocHJvZ3Jlc3MsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0 ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgcnVubmluZ19pbl9jb250YWlu ZXIoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1 bm5pbmdfaW5fY29udGFpbmVyKCk7CisrYm9vbAorK3J1bm5pbmdfaW5fY29udGFpbmVyICgpIG5v ZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5uaW5n X2luX2NvbnRhaW5lciAoKTsKKyB9CisgCistYm9vbCBjb25maXJtKCkgeworK2Jvb2wKKytjb25m aXJtICgpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOworLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNv bmZpcm0oJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbmZpcm0gKCZyZXR1cm4kLnZh bHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6 c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBjb25maXJtX29yX2Fib3J0 KCkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGNvbmZpcm1fb3JfYWJvcnQoKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0K Kyt2b2lkCisrY29uZmlybV9vcl9hYm9ydCAoKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25maXJtX29yX2Fib3J0ICgp OworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6c3RkOjpz aXplX3QgQnViYmxld3JhcDo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJG9wZXJhdG9yJHNpemVvZigpOwor Kzo6c3RkOjpzaXplX3QKKytCdWJibGV3cmFwOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQKKyt7 CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkb3BlcmF0 b3Ikc2l6ZW9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IEJ1YmJsZXdyYXA6OmxheW91dDo6 YWxpZ24oKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JEJ1YmJsZXdyYXAkb3BlcmF0b3IkYWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QKKytCdWJibGV3 cmFwOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAor LXZvaWQgYnViYmxld3JhcF9zZWxmdGVzdCgpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX3NlbGZ0ZXN0KCk7 CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2J1YmJsZXdyYXBfc2VsZnRlc3Qg KCkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkYnViYmxld3JhcF9zZWxmdGVzdCAoKTsKKysgIGlmIChlcnJvciQucHRyKQor KyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnN0ZDo6dWludDhfdD4gYnVi Ymxld3JhcF9ydW5fc3luYyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MsIGJvb2wgY2FwdHVyZV9zdGRvdXQsIDo6cnBtb3N0 cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5KSB7CisrOjpydXN0OjpWZWM8 OjpzdGQ6OnVpbnQ4X3Q+CisrYnViYmxld3JhcF9ydW5fc3luYyAoOjpzdGQ6OmludDMyX3Qgcm9v dGZzX2RmZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzLAorKyAgICAg ICAgICAgICAgICAgICAgIGJvb2wgY2FwdHVyZV9zdGRvdXQsIDo6cnBtb3N0cmVlY3h4OjpCdWJi bGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ4X3Q+PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGJ1YmJsZXdyYXBfcnVu X3N5bmMocm9vdGZzX2RmZCwgYXJncywgY2FwdHVyZV9zdGRvdXQsIG11dGFiaWxpdHksICZyZXR1 cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6 bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX3J1bl9zeW5jICgKKysgICAgICBy b290ZnNfZGZkLCBhcmdzLCBjYXB0dXJlX3N0ZG91dCwgbXV0YWJpbGl0eSwgJnJldHVybiQudmFs dWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6QnViYmxld3JhcD4gYnViYmxld3JhcF9uZXcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Zk KSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+CisrYnViYmxld3Jh cF9uZXcgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19mZCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPj4gcmV0dXJuJDsKKy0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRidWJibGV3cmFwX25ldyhyb290ZnNfZmQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGJ1YmJsZXdyYXBfbmV3IChyb290ZnNfZmQsICZyZXR1cm4kLnZhbHVlKTsKKysg IGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3Zl IChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXA+IGJ1YmJsZXdyYXBfbmV3X3dpdGhfbXV0YWJpbGl0eSg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZmQsIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5 KSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+CisrYnViYmxld3Jh cF9uZXdfd2l0aF9tdXRhYmlsaXR5ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZmQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFi aWxpdHkgbXV0YWJpbGl0eSkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRidWJibGV3cmFwX25l d193aXRoX211dGFiaWxpdHkocm9vdGZzX2ZkLCBtdXRhYmlsaXR5LCAmcmV0dXJuJC52YWx1ZSk7 CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpF cnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkYnViYmxld3JhcF9uZXdfd2l0aF9tdXRhYmlsaXR5ICgKKysgICAgICBy b290ZnNfZmQsIG11dGFiaWxpdHksICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRy KQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKKyB9CisgCistOjpzdGQ6OmludDMyX3QgQnViYmxld3JhcDo6Z2V0X3Jvb3Rmc19mZCgpIGNv bnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnVi Ymxld3JhcCRnZXRfcm9vdGZzX2ZkKCp0aGlzKTsKKys6OnN0ZDo6aW50MzJfdAorK0J1YmJsZXdy YXA6OmdldF9yb290ZnNfZmQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkZ2V0X3Jvb3Rmc19mZCAoKnRoaXMpOwor IH0KKyAKKy12b2lkIEJ1YmJsZXdyYXA6OmFwcGVuZF9id3JhcF9hcmcoOjpydXN0OjpTdHIgYXJn KSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRh cHBlbmRfYndyYXBfYXJnKCp0aGlzLCBhcmcpOworK3ZvaWQKKytCdWJibGV3cmFwOjphcHBlbmRf YndyYXBfYXJnICg6OnJ1c3Q6OlN0ciBhcmcpIG5vZXhjZXB0CisreworKyAgcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkYXBwZW5kX2J3cmFwX2FyZyAoKnRoaXMsIGFyZyk7 CisgfQorIAorLXZvaWQgQnViYmxld3JhcDo6YXBwZW5kX2NoaWxkX2FyZyg6OnJ1c3Q6OlN0ciBh cmcpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JGFwcGVuZF9jaGlsZF9hcmcoKnRoaXMsIGFyZyk7Cisrdm9pZAorK0J1YmJsZXdyYXA6OmFwcGVu ZF9jaGlsZF9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRhcHBlbmRfY2hpbGRfYXJnICgqdGhpcywgYXJn KTsKKyB9CisgCistdm9pZCBCdWJibGV3cmFwOjpzZXRlbnYoOjpydXN0OjpTdHIgaywgOjpydXN0 OjpTdHIgdikgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJs ZXdyYXAkc2V0ZW52KCp0aGlzLCBrLCB2KTsKKyt2b2lkCisrQnViYmxld3JhcDo6c2V0ZW52ICg6 OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHNldGVudiAoKnRoaXMsIGssIHYpOworIH0KKyAK Ky12b2lkIEJ1YmJsZXdyYXA6OnRha2VfZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkLCA6OnN0 ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRCdWJibGV3cmFwJHRha2VfZmQoKnRoaXMsIHNvdXJjZV9mZCwgdGFyZ2V0X2ZkKTsK Kyt2b2lkCisrQnViYmxld3JhcDo6dGFrZV9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkLCA6 OnN0ZDo6aW50MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0CisreworKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JEJ1YmJsZXdyYXAkdGFrZV9mZCAoKnRoaXMsIHNvdXJjZV9mZCwgdGFyZ2V0 X2ZkKTsKKyB9CisgCistdm9pZCBCdWJibGV3cmFwOjpzZXRfaW5oZXJpdF9zdGRpbigpIG5vZXhj ZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJHNldF9pbmhl cml0X3N0ZGluKCp0aGlzKTsKKyt2b2lkCisrQnViYmxld3JhcDo6c2V0X2luaGVyaXRfc3RkaW4g KCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3Jh cCRzZXRfaW5oZXJpdF9zdGRpbiAoKnRoaXMpOworIH0KKyAKKy12b2lkIEJ1YmJsZXdyYXA6OnRh a2Vfc3RkaW5fZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdCB7CistICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGluX2ZkKCp0aGlzLCBz b3VyY2VfZmQpOworK3ZvaWQKKytCdWJibGV3cmFwOjp0YWtlX3N0ZGluX2ZkICg6OnN0ZDo6aW50 MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0CisreworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEJ1YmJsZXdyYXAkdGFrZV9zdGRpbl9mZCAoKnRoaXMsIHNvdXJjZV9mZCk7CisgfQorIAor LXZvaWQgQnViYmxld3JhcDo6dGFrZV9zdGRvdXRfZmQoOjpzdGQ6OmludDMyX3Qgc291cmNlX2Zk KSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0 YWtlX3N0ZG91dF9mZCgqdGhpcywgc291cmNlX2ZkKTsKKyt2b2lkCisrQnViYmxld3JhcDo6dGFr ZV9zdGRvdXRfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQKKyt7CisrICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZG91dF9mZCAoKnRo aXMsIHNvdXJjZV9mZCk7CisgfQorIAorLXZvaWQgQnViYmxld3JhcDo6dGFrZV9zdGRlcnJfZmQo OjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQnViYmxld3JhcCR0YWtlX3N0ZGVycl9mZCgqdGhpcywgc291cmNlX2ZkKTsK Kyt2b2lkCisrQnViYmxld3JhcDo6dGFrZV9zdGRlcnJfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJj ZV9mZCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxl d3JhcCR0YWtlX3N0ZGVycl9mZCAoKnRoaXMsIHNvdXJjZV9mZCk7CisgfQorIAorLXZvaWQgQnVi Ymxld3JhcDo6dGFrZV9zdGRvdXRfYW5kX3N0ZGVycl9mZCg6OnN0ZDo6aW50MzJfdCBzb3VyY2Vf ZmQpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFw JHRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQoKnRoaXMsIHNvdXJjZV9mZCk7Cisrdm9pZAorK0J1 YmJsZXdyYXA6OnRha2Vfc3Rkb3V0X2FuZF9zdGRlcnJfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJj ZV9mZCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxl d3JhcCR0YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkICgqdGhpcywgc291cmNlX2ZkKTsKKyB9Cisg Cistdm9pZCBCdWJibGV3cmFwOjpiaW5kX3JlYWQoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0 ciBkZXN0KSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxl d3JhcCRiaW5kX3JlYWQoKnRoaXMsIHNyYywgZGVzdCk7Cisrdm9pZAorK0J1YmJsZXdyYXA6OmJp bmRfcmVhZCAoOjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdAorK3sK KysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJibGV3cmFwJGJpbmRfcmVhZCAoKnRo aXMsIHNyYywgZGVzdCk7CisgfQorIAorLXZvaWQgQnViYmxld3JhcDo6YmluZF9yZWFkd3JpdGUo OjpydXN0OjpTdHIgc3JjLCA6OnJ1c3Q6OlN0ciBkZXN0KSBub2V4Y2VwdCB7CistICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWR3cml0ZSgqdGhpcywgc3Jj LCBkZXN0KTsKKyt2b2lkCisrQnViYmxld3JhcDo6YmluZF9yZWFkd3JpdGUgKDo6cnVzdDo6U3Ry IHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkQnViYmxld3JhcCRiaW5kX3JlYWR3cml0ZSAoKnRoaXMsIHNyYywgZGVzdCk7 CisgfQorIAorLXZvaWQgQnViYmxld3JhcDo6c2V0dXBfY29tcGF0X3ZhcigpIHsKKy0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRCdWJi bGV3cmFwJHNldHVwX2NvbXBhdF92YXIoKnRoaXMpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorK3ZvaWQKKytCdWJibGV3cmFwOjpzZXR1cF9jb21wYXRfdmFyICgpCisreworKyAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEJ1YmJs ZXdyYXAkc2V0dXBfY29tcGF0X3ZhciAoKnRoaXMpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAg IHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOworKyAgICB9CisgfQorIAorLXZvaWQgQnViYmxld3JhcDo6cnVuKDo6cnBtb3N0cmVlY3h4 OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRydW4o KnRoaXMsIGNhbmNlbGxhYmxlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisr QnViYmxld3JhcDo6cnVuICg6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5j ZWxsYWJsZSkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkQnViYmxld3JhcCRydW4gKCp0aGlzLCBjYW5jZWxsYWJsZSk7Cisr ICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistOjpycG1vc3RyZWVj eHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHlfZm9yX3VuaWZpZWRfY29yZShib29s IHVuaWZpZWRfY29yZSkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRtdXRhYmlsaXR5X2Zvcl91bmlmaWVkX2NvcmUodW5pZmllZF9jb3JlKTsKKys6OnJw bW9zdHJlZWN4eDo6QnViYmxld3JhcE11dGFiaWxpdHkKKyttdXRhYmlsaXR5X2Zvcl91bmlmaWVk X2NvcmUgKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkbXV0YWJpbGl0eV9mb3JfdW5pZmllZF9jb3JlICh1bmlmaWVk X2NvcmUpOworIH0KKyAKKy12b2lkIHVzcm92ZXJsYXlfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVy cm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR1c3JvdmVybGF5X2VudHJ5cG9pbnQo YXJncyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3Vzcm92ZXJsYXlfZW50 cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKQorK3sKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR1c3JvdmVybGF5X2VudHJ5cG9pbnQgKGFyZ3MpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAg IHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOworKyAgICB9CisgfQorIAorLXZvaWQgYXBwbHlsaXZlX2VudHJ5cG9pbnQoOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX2VudHJ5cG9p bnQoYXJncyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2FwcGx5bGl2ZV9l bnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpCisrewor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGFwcGx5bGl2ZV9lbnRyeXBvaW50IChhcmdzKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAg ICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIGFwcGx5bGl2ZV9maW5pc2goOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBseWxpdmVfZmluaXNo KHN5c3Jvb3QpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKythcHBseWxpdmVf ZmluaXNoICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCkKKyt7 CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkYXBwbHlsaXZlX2ZpbmlzaCAoc3lzcm9vdCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBjb21wb3NldXRpbF9sZWdhY3lfcHJlcF9kZXZf YW5kX3J1big6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZXV0aWxfbGVn YWN5X3ByZXBfZGV2X2FuZF9ydW4ocm9vdGZzX2RmZCk7CistICBpZiAoZXJyb3IkLnB0cikgewor LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Cist ICB9Cisrdm9pZAorK2NvbXBvc2V1dGlsX2xlZ2FjeV9wcmVwX2Rldl9hbmRfcnVuICg6OnN0ZDo6 aW50MzJfdCByb290ZnNfZGZkKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAor KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2V1dGlsX2xlZ2FjeV9w cmVwX2Rldl9hbmRfcnVuIChyb290ZnNfZGZkKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7 CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKKysgICAgfQorIH0KKyAKKy12b2lkIHByaW50X29zdHJlZV90eG5fc3RhdHMoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG9UcmFuc2FjdGlvblN0YXRzICZzdGF0cykgbm9leGNlcHQgeworLSAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByaW50X29zdHJlZV90eG5fc3RhdHMoc3RhdHMp OworK3ZvaWQKKytwcmludF9vc3RyZWVfdHhuX3N0YXRzICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl UmVwb1RyYW5zYWN0aW9uU3RhdHMgJnN0YXRzKSBub2V4Y2VwdAorK3sKKysgIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRwcmludF9vc3RyZWVfdHhuX3N0YXRzIChzdGF0cyk7CisgfQorIAor LXZvaWQgd3JpdGVfY29tbWl0X2lkKDo6cnVzdDo6U3RyIHRhcmdldF9wYXRoLCA6OnJ1c3Q6OlN0 ciByZXZpc2lvbikgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHdyaXRlX2NvbW1pdF9pZCh0YXJnZXRfcGF0aCwgcmV2aXNpb24p OworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKyt3cml0ZV9jb21taXRfaWQgKDo6 cnVzdDo6U3RyIHRhcmdldF9wYXRoLCA6OnJ1c3Q6OlN0ciByZXZpc2lvbikKKyt7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkd3Jp dGVfY29tbWl0X2lkICh0YXJnZXRfcGF0aCwgcmV2aXNpb24pOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgY2xpd3JhcF93cml0ZV93cmFwcGVycyg6 OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGl3cmFwX3dyaXRlX3dyYXBwZXJzKHJvb3Rm cyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2NsaXdyYXBfd3JpdGVfd3Jh cHBlcnMgKDo6c3RkOjppbnQzMl90IHJvb3RmcykKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2xpd3JhcF93cml0ZV93cmFw cGVycyAocm9vdGZzKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0K KyAKKy12b2lkIGNsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVycyg6OnN0ZDo6aW50MzJfdCByb290 ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncykgeworLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdy YXBfd3JpdGVfc29tZV93cmFwcGVycyhyb290ZnMsIGFyZ3MpOworLSAgaWYgKGVycm9yJC5wdHIp IHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OworLSAgfQorK3ZvaWQKKytjbGl3cmFwX3dyaXRlX3NvbWVfd3JhcHBlcnMgKDo6c3RkOjppbnQz Ml90IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKQorK3sK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JGNsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVycyAocm9vdGZzLCBhcmdzKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnJ1c3Q6OlN0 cmluZyBjbGl3cmFwX2Rlc3RkaXIoKSBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytjbGl3 cmFwX2Rlc3RkaXIgKCkgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVz dDo6U3RyaW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNsaXdy YXBfZGVzdGRpcigmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJu JC52YWx1ZSk7CistfQorLQorLXZvaWQgY29udGFpbmVyX2VuY2Fwc3VsYXRlKDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBhcmdzKSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjptb3ZlKGFyZ3MpKTsKKy0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250 YWluZXJfZW5jYXBzdWxhdGUoJmFyZ3MkLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7Cist ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0g IH0KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjbGl3cmFwX2Rlc3RkaXIgKCZyZXR1 cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisrfQor KworK3ZvaWQKKytjb250YWluZXJfZW5jYXBzdWxhdGUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBhcmdzKQorK3sKKysgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPj4gYXJncyQgKDo6c3RkOjptb3ZlIChhcmdzKSk7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udGFpbmVyX2Vu Y2Fwc3VsYXRlICgmYXJncyQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwor KyAgICB9CisgfQorIAorLXZvaWQgZGVwbG95X2Zyb21fc2VsZl9lbnRyeXBvaW50KDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjptb3ZlKGFyZ3MpKTsKKy0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRk ZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQoJmFyZ3MkLnZhbHVlKTsKKy0gIGlmIChlcnJvciQu cHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKKy0gIH0KKyt2b2lkCisrZGVwbG95X2Zyb21fc2VsZl9lbnRyeXBvaW50ICg6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncykKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkICg6OnN0ZDo6bW92ZSAoYXJncykpOwor KyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkZGVwbG95X2Zyb21fc2VsZl9lbnRyeXBvaW50ICgmYXJncyQudmFsdWUpOwor KyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLWJvb2wgUHJ1bmVk Q29udGFpbmVySW5mbzo6b3BlcmF0b3I9PShQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICZyaHMp IGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk UHJ1bmVkQ29udGFpbmVySW5mbyRvcGVyYXRvciRlcSgqdGhpcywgcmhzKTsKKytib29sCisrUHJ1 bmVkQ29udGFpbmVySW5mbzo6b3BlcmF0b3I9PSAoUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAm cmhzKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkUHJ1bmVkQ29udGFpbmVySW5mbyRvcGVyYXRvciRlcSAoKnRoaXMsIHJocyk7CisgfQor IAorLWJvb2wgUHJ1bmVkQ29udGFpbmVySW5mbzo6b3BlcmF0b3IhPShQcnVuZWRDb250YWluZXJJ bmZvIGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrUHJ1bmVkQ29udGFpbmVy SW5mbzo6b3BlcmF0b3IhPSAoUHJ1bmVkQ29udGFpbmVySW5mbyBjb25zdCAmcmhzKSBjb25zdCBu b2V4Y2VwdAorK3sKKyAgIHJldHVybiAhKCp0aGlzID09IHJocyk7CisgfQorIAorLTo6cnVzdDo6 Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiBwdWxsX2NvbnRhaW5lcig6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6OkdD YW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZiwgOjpydXN0 OjpTdHIgZGlnZXN0X292ZXJyaWRlKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNv bnRhaW5lckltYWdlU3RhdGU+CisrcHVsbF9jb250YWluZXIgKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0Nh bmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmLAorKyAgICAg ICAgICAgICAgICA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUpCisreworICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0 ZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkcHVsbF9jb250YWluZXIocmVwbywgY2FuY2VsbGFibGUsIGltZ3Jl ZiwgZGlnZXN0X292ZXJyaWRlLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHVsbF9j b250YWluZXIgKAorKyAgICAgIHJlcG8sIGNhbmNlbGxhYmxlLCBpbWdyZWYsIGRpZ2VzdF9vdmVy cmlkZSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAg ICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJw bW9zdHJlZWN4eDo6UHJ1bmVkQ29udGFpbmVySW5mbyBjb250YWluZXJfcHJ1bmUoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpIHsKKys6OnJwbW9zdHJlZWN4eDo6 UHJ1bmVkQ29udGFpbmVySW5mbworK2NvbnRhaW5lcl9wcnVuZSAoOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6 OnJwbW9zdHJlZWN4eDo6UHJ1bmVkQ29udGFpbmVySW5mbz4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb250YWlu ZXJfcHJ1bmUoc3lzcm9vdCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsK Ky0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwor LSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk Y29udGFpbmVyX3BydW5lIChzeXNyb290LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3Ik LnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52 YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFn ZVN0YXRlPiBxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjKSB7CisrOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+CisrcXVlcnlfY29udGFpbmVyX2ltYWdlX2Nv bW1pdCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3Ry IGMpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcXVlcnlfY29udGFpbmVyX2lt YWdlX2NvbW1pdChyZXBvLCBjLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRxdWVyeV9jb250YWluZXJfaW1hZ2VfY29tbWl0IChyZXBvLCBjLCAmcmV0dXJuJC52YWx1ZSk7 CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgcHVyZ2VfcmVmc3BlYyg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmVmc3BlYykgewor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHB1cmdlX3JlZnNwZWMocmVwbywgcmVmc3BlYyk7CistICBpZiAoZXJyb3IkLnB0cikgewor LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Cist ICB9Cisrdm9pZAorK3B1cmdlX3JlZnNwZWMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNv bnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwdXJnZV9yZWZzcGVjIChy ZXBvLCByZWZzcGVjKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0K KyAKKy1ib29sIGNoZWNrX2NvbnRhaW5lcl91cGRhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJl cG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNl bGxhYmxlLCA6OnJ1c3Q6OlN0ciBpbWdyZWYpIHsKKytib29sCisrY2hlY2tfY29udGFpbmVyX3Vw ZGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAg ICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2Vs bGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZikKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJv b2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY2hlY2tfY29udGFpbmVyX3VwZGF0ZShyZXBvLCBjYW5jZWxsYWJs ZSwgaW1ncmVmLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY2hlY2tfY29udGFpbmVy X3VwZGF0ZSAoCisrICAgICAgcmVwbywgY2FuY2VsbGFibGUsIGltZ3JlZiwgJnJldHVybiQudmFs dWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFRlbXBFdGNH dWFyZDo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3Ikc2l6ZW9mKCk7CisrOjpzdGQ6OnNp emVfdAorK1RlbXBFdGNHdWFyZDo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3Ikc2l6 ZW9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFRlbXBFdGNHdWFyZDo6bGF5b3V0OjphbGln bigpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVGVt cEV0Y0d1YXJkJG9wZXJhdG9yJGFsaWdub2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrVGVtcEV0Y0d1 YXJkOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUZW1wRXRjR3VhcmQkb3BlcmF0b3IkYWxpZ25vZiAoKTsKKyB9Cisg CistOjpzdGQ6OnNpemVfdCBGaWxlc3lzdGVtU2NyaXB0UHJlcDo6bGF5b3V0OjpzaXplKCkgbm9l eGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVt U2NyaXB0UHJlcCRvcGVyYXRvciRzaXplb2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrRmlsZXN5c3Rl bVNjcmlwdFByZXA6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRmlsZXN5c3RlbVNjcmlwdFByZXAkb3BlcmF0b3Ikc2l6 ZW9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IEZpbGVzeXN0ZW1TY3JpcHRQcmVwOjpsYXlv dXQ6OmFsaWduKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRvcGVyYXRvciRhbGlnbm9mKCk7CisrOjpzdGQ6OnNp emVfdAorK0ZpbGVzeXN0ZW1TY3JpcHRQcmVwOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0 UHJlcCRvcGVyYXRvciRhbGlnbm9mICgpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6VGVtcEV0Y0d1YXJkPiBwcmVwYXJlX3RlbXBldGNfZ3VhcmQoOjpzdGQ6OmludDMyX3Qg cm9vdGZzKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD4KKytw cmVwYXJlX3RlbXBldGNfZ3VhcmQgKDo6c3RkOjppbnQzMl90IHJvb3RmcykKKyt7CisgICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+ PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfdGVtcGV0Y19ndWFyZChyb290ZnMsICZyZXR1cm4kLnZh bHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHByZXBhcmVfdGVtcGV0Y19ndWFyZCAocm9vdGZz LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0K KysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgVGVt cEV0Y0d1YXJkOjp1bmRvKCkgY29uc3QgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCR1bmRvKCp0aGlzKTsK Ky0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrVGVtcEV0Y0d1YXJkOjp1bmRvICgp IGNvbnN0CisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRlbXBFdGNHdWFyZCR1bmRvICgqdGhpcyk7CisrICBpZiAoZXJyb3Ik LnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPiBwcmVwYXJlX2ZpbGVzeXN0ZW1fc2NyaXB0X3ByZXAo OjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkZp bGVzeXN0ZW1TY3JpcHRQcmVwPgorK3ByZXBhcmVfZmlsZXN5c3RlbV9zY3JpcHRfcHJlcCAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpC b3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPj4gcmV0dXJuJDsKKy0gIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRw cmVwYXJlX2ZpbGVzeXN0ZW1fc2NyaXB0X3ByZXAocm9vdGZzLCAmcmV0dXJuJC52YWx1ZSk7Cist ICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX2ZpbGVzeXN0ZW1fc2NyaXB0X3ByZXAgKHJvb3Rm cywgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9 CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy12b2lkIEZp bGVzeXN0ZW1TY3JpcHRQcmVwOjp1bmRvKCkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJHVu ZG8oKnRoaXMpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytGaWxlc3lzdGVt U2NyaXB0UHJlcDo6dW5kbyAoKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRGaWxlc3lzdGVtU2NyaXB0UHJlcCR1bmRvICgq dGhpcyk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9p ZCBydW5fZGVwbW9kKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnVzdDo6U3RyIGt2ZXIs IGJvb2wgdW5pZmllZF9jb3JlKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnVuX2RlcG1vZChyb290ZnNfZGZkLCBrdmVyLCB1 bmlmaWVkX2NvcmUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytydW5fZGVw bW9kICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlN0ciBrdmVyLCBib29sIHVu aWZpZWRfY29yZSkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5fZGVwbW9kIChyb290ZnNfZGZkLCBrdmVy LCB1bmlmaWVkX2NvcmUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9Cisg fQorIAorLXZvaWQgcnVuX3N5c3VzZXJzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wg Zm9yY2UpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRydW5fc3lzdXNlcnMocm9vdGZzX2RmZCwgZm9yY2UpOworLSAgaWYgKGVy cm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv cihlcnJvciQpOworLSAgfQorK3ZvaWQKKytydW5fc3lzdXNlcnMgKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQsIGJvb2wgZm9yY2UpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJ1bl9zeXN1c2VycyAocm9vdGZzX2RmZCwg Zm9yY2UpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZv aWQgbG9nX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYpIG5vZXhj ZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRsb2dfdHJlZWZpbGUodGYpOwor K3ZvaWQKKytsb2dfdHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYp IG5vZXhjZXB0CisreworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGxvZ190cmVlZmls ZSAodGYpOworIH0KKyAKKy1ib29sIGlzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2UoOjpydXN0 OjpTdHIgcmVmc3BlYykgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNlKHJlZnNwZWMpOworK2Jvb2wKKytp c19jb250YWluZXJfaW1hZ2VfcmVmZXJlbmNlICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2Vw dAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaXNfY29udGFpbmVy X2ltYWdlX3JlZmVyZW5jZSAocmVmc3BlYyk7CisgfQorIAorLWJvb2wgaXNfY29udGFpbmVyX2lt YWdlX2RpZ2VzdF9yZWZlcmVuY2UoOjpydXN0OjpTdHIgcmVmc3BlYykgbm9leGNlcHQgeworLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfZGln ZXN0X3JlZmVyZW5jZShyZWZzcGVjKTsKKytib29sCisraXNfY29udGFpbmVyX2ltYWdlX2RpZ2Vz dF9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0CisreworKyAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRpc19jb250YWluZXJfaW1hZ2VfZGlnZXN0X3Jl ZmVyZW5jZSAocmVmc3BlYyk7CisgfQorIAorLTo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZSBy ZWZzcGVjX2NsYXNzaWZ5KDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0IHsKKy0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmVmc3BlY19jbGFzc2lmeShyZWZzcGVjKTsK Kys6OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5cGUKKytyZWZzcGVjX2NsYXNzaWZ5ICg6OnJ1c3Q6 OlN0ciByZWZzcGVjKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkcmVmc3BlY19jbGFzc2lmeSAocmVmc3BlYyk7CisgfQorIAorLXZvaWQgdmVyaWZ5 X2tlcm5lbF9obWFjKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgbW9kZGlyKSB7 CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkdmVyaWZ5X2tlcm5lbF9obWFjKHJvb3RmcywgbW9kZGlyKTsKKy0gIGlmIChlcnJvciQu cHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJy b3IkKTsKKy0gIH0KKyt2b2lkCisrdmVyaWZ5X2tlcm5lbF9obWFjICg6OnN0ZDo6aW50MzJfdCBy b290ZnMsIDo6cnVzdDo6U3RyIG1vZGRpcikKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmVyaWZ5X2tlcm5lbF9obWFjIChy b290ZnMsIG1vZGRpcik7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9 CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHN0YWdlX2NvbnRhaW5lcl9ycG1zKDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBycG1zKSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJv cDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJwbXMkKDo6c3RkOjptb3ZlKHJwbXMpKTsK Kys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytzdGFnZV9jb250YWluZXJfcnBtcyAoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHJwbXMpCisreworKyAgOjpydXN0OjpNYW51YWxseURy b3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBycG1zJCAoOjpzdGQ6Om1vdmUgKHJwbXMp KTsKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBy ZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1zKCZycG1zJC52YWx1ZSwgJnJldHVybiQu dmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc3RhZ2VfY29udGFpbmVyX3JwbXMgKCZycG1z JC52YWx1ZSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysg ICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOwor KyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gc3RhZ2VfY29udGFpbmVyX3JwbV9yYXdfZmRzKDo6 cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PiBmZHMpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9w PDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90Pj4gZmRzJCg6OnN0ZDo6bW92ZShmZHMpKTsKKys6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytzdGFnZV9jb250YWluZXJfcnBtX3Jhd19mZHMg KDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PiBmZHMpCisreworKyAgOjpydXN0OjpNYW51YWxs eURyb3A8OjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+PiBmZHMkICg6OnN0ZDo6bW92ZSAoZmRz KSk7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4g cmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRzdGFnZV9jb250YWluZXJfcnBtX3Jhd19mZHMoJmZkcyQudmFsdWUsICZy ZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0 ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAor KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHN0YWdlX2NvbnRhaW5lcl9ycG1f cmF3X2ZkcyAoJmZkcyQudmFsdWUsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRy KQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv ciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKKyB9CisgCistYm9vbCBjb21taXRfaGFzX21hdGNoaW5nX3NlcG9saWN5KDo6cnBtb3N0cmVl Y3h4OjpHVmFyaWFudCBjb25zdCAmY29tbWl0LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU2VQb2xp Y3kgY29uc3QgJnBvbGljeSkgeworK2Jvb2wKKytjb21taXRfaGFzX21hdGNoaW5nX3NlcG9saWN5 ICg6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU2VQb2xpY3kgY29uc3QgJnBv bGljeSkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29t bWl0X2hhc19tYXRjaGluZ19zZXBvbGljeShjb21taXQsIHBvbGljeSwgJnJldHVybiQudmFsdWUp OworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVy biQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tbWl0X2hhc19tYXRjaGluZ19zZXBvbGljeSAoY29t bWl0LCBwb2xpY3ksICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7 CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9Cisg CistOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICpnZXRfaGVhZGVyX3ZhcmlhbnQoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIGNhY2hlYnJhbmNoKSB7 CisrOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICoKKytnZXRfaGVhZGVyX3ZhcmlhbnQgKDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjYWNoZWJyYW5j aCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAq PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JGdldF9oZWFkZXJfdmFyaWFudChyZXBvLCBjYWNoZWJyYW5jaCwgJnJl dHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOworLX0KKy0KKy12b2lkIGNvbXBvc2VfYnVpbGRfY2h1bmtl ZF9vY2lfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncykgeworLSAg OjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdzJCg6 OnN0ZDo6bW92ZShhcmdzKSk7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9idWlsZF9jaHVua2VkX29jaV9lbnRyeXBv aW50KCZhcmdzJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRnZXRfaGVhZGVyX3ZhcmlhbnQgKHJlcG8sIGNhY2hlYnJhbmNoLCAmcmV0dXJuJC52YWx1ZSk7 CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7CisrfQorKworK3ZvaWQKKytjb21wb3NlX2J1aWxkX2NodW5r ZWRfb2NpX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKQorK3sK KysgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJn cyQgKDo6c3RkOjptb3ZlIChhcmdzKSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQK KysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX2J1aWxkX2NodW5r ZWRfb2NpX2VudHJ5cG9pbnQgKCZhcmdzJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBjb21wb3NlX2ltYWdlKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBhcmdzKSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjptb3ZlKGFyZ3MpKTsKKy0gIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3Nl X2ltYWdlKCZhcmdzJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAor K2NvbXBvc2VfaW1hZ2UgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKQorK3sKKysg IDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJncyQg KDo6c3RkOjptb3ZlIChhcmdzKSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9pbWFnZSAoJmFyZ3MkLnZhbHVlKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIGNvbXBv c2Vfcm9vdGZzX2VudHJ5cG9pbnQoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIHsK Ky0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gYXJn cyQoOjpzdGQ6Om1vdmUoYXJncykpOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vfcm9vdGZzX2VudHJ5cG9pbnQoJmFy Z3MkLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrY29tcG9zZV9y b290ZnNfZW50cnlwb2ludCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpCisrewor KyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmdz JCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAor KyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vfcm9vdGZzX2VudHJ5 cG9pbnQgKCZhcmdzJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAg IH0KKyB9CisgCistdm9pZCBjb25maWd1cmVfYnVpbGRfcmVwb19mcm9tX3RhcmdldCg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmYnVpbGRfcmVwbywgOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVJlcG8gY29uc3QgJnRhcmdldF9yZXBvKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uZmlndXJlX2J1aWxkX3JlcG9f ZnJvbV90YXJnZXQoYnVpbGRfcmVwbywgdGFyZ2V0X3JlcG8pOworLSAgaWYgKGVycm9yJC5wdHIp IHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OworLSAgfQorK3ZvaWQKKytjb25maWd1cmVfYnVpbGRfcmVwb19mcm9tX3RhcmdldCAoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmJ1aWxkX3JlcG8sCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZ0YXJn ZXRfcmVwbykKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25maWd1cmVfYnVpbGRfcmVwb19mcm9tX3Rhcmdl dCAoYnVpbGRfcmVwbywgdGFyZ2V0X3JlcG8pOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsK KysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQp OworKyAgICB9CisgfQorIAorLXZvaWQgY29tcG9zZV9wcmVwYXJlX3Jvb3Rmcyg6OnN0ZDo6aW50 MzJfdCBzcmNfcm9vdGZzX2RmZCwgOjpzdGQ6OmludDMyX3QgZGVzdF9yb290ZnNfZGZkLCA6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wcmVwYXJlX3Jv b3RmcyhzcmNfcm9vdGZzX2RmZCwgZGVzdF9yb290ZnNfZGZkLCB0cmVlZmlsZSk7CistICBpZiAo ZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2NvbXBvc2VfcHJlcGFyZV9yb290ZnMgKDo6c3Rk OjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50MzJfdCBkZXN0X3Jvb3Rmc19kZmQs CisrICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVl ZmlsZSkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY29tcG9zZV9wcmVwYXJlX3Jvb3RmcyAoCisrICAgICAgc3JjX3Jvb3Rm c19kZmQsIGRlc3Rfcm9vdGZzX2RmZCwgdHJlZWZpbGUpOworKyAgaWYgKGVycm9yJC5wdHIpCisr ICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChl cnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgY29tcG9zZXBvc3RfbnNzd2l0Y2hfYWx0Zmls ZXMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBvc2Vwb3N0X25zc3dpdGNo X2FsdGZpbGVzKHJvb3Rmc19kZmQpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQK Kytjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2Rm ZCkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlcG9zdF9uc3N3aXRjaF9hbHRmaWxlcyAocm9vdGZz X2RmZCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9p ZCBjb21wb3NlX3Bvc3Rwcm9jZXNzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6U3RyIG5leHRfdmVyc2lvbiwgYm9v bCB1bmlmaWVkX2NvcmUpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzKHJvb3Rmc19kZmQsIHRy ZWVmaWxlLCBuZXh0X3ZlcnNpb24sIHVuaWZpZWRfY29yZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9Cisrdm9pZAorK2NvbXBvc2VfcG9zdHByb2Nlc3MgKDo6c3RkOjppbnQzMl90IHJvb3Rm c19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsCisrICAgICAgICAgICAg ICAgICAgICAgOjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLCBib29sIHVuaWZpZWRfY29yZSkKKyt7 CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkY29tcG9zZV9wb3N0cHJvY2VzcyAoCisrICAgICAgcm9vdGZzX2RmZCwgdHJlZWZpbGUs IG5leHRfdmVyc2lvbiwgdW5pZmllZF9jb3JlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7 CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKKysgICAgfQorIH0KKyAKKy12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWxfcHJlKDo6 c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAm dHJlZWZpbGUpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsX3ByZShyb290ZnNfZGZk LCB0cmVlZmlsZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2NvbXBvc2Vf cG9zdHByb2Nlc3NfZmluYWxfcHJlICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbXBv c2VfcG9zdHByb2Nlc3NfZmluYWxfcHJlIChyb290ZnNfZGZkLCB0cmVlZmlsZSk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBjb21wb3NlX3Bvc3Rw cm9jZXNzX2ZpbmFsKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZSBjb25zdCAmdHJlZWZpbGUpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFs KHJvb3Rmc19kZmQsIHRyZWVmaWxlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lk CisrY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwg OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSkKKyt7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsIChyb290ZnNfZGZkLCB0cmVlZmlsZSk7CisrICBp ZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6 OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBjb252ZXJ0X3Zh cl90b190bXBmaWxlc19kKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4 OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udmVydF92YXJfdG9f dG1wZmlsZXNfZChyb290ZnNfZGZkLCBjYW5jZWxsYWJsZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9Cisrdm9pZAorK2NvbnZlcnRfdmFyX3RvX3RtcGZpbGVzX2QgKDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpCisreworKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29udmVy dF92YXJfdG9fdG1wZmlsZXNfZCAocm9vdGZzX2RmZCwgY2FuY2VsbGFibGUpOworKyAgaWYgKGVy cm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgcm9vdGZzX3ByZXBhcmVf bGlua3MoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl IGNvbnN0ICZ0cmVlZmlsZSwgYm9vbCBza2lwX3VzcmxvY2FsKSB7CistICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcm9vdGZzX3ByZXBh cmVfbGlua3Mocm9vdGZzX2RmZCwgdHJlZWZpbGUsIHNraXBfdXNybG9jYWwpOworLSAgaWYgKGVy cm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJv cihlcnJvciQpOworLSAgfQorK3ZvaWQKKytyb290ZnNfcHJlcGFyZV9saW5rcyAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmls ZSwKKysgICAgICAgICAgICAgICAgICAgICAgYm9vbCBza2lwX3VzcmxvY2FsKQorK3sKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JHJvb3Rmc19wcmVwYXJlX2xpbmtzIChyb290ZnNfZGZkLCB0cmVlZmlsZSwgc2tpcF91 c3Jsb2NhbCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCist dm9pZCB3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFiZWxpbmcoOjpzdGQ6OmludDMyX3Qgcm9v dGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpIHsKKy0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCR3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFiZWxpbmcocm9vdGZzX2RmZCwgY2FuY2VsbGFi bGUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKyt3b3JrYXJvdW5kX3NlbGlu dXhfY3Jvc3NfbGFiZWxpbmcgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZj YW5jZWxsYWJsZSkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9 IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR3b3JrYXJvdW5kX3NlbGludXhfY3Jvc3NfbGFi ZWxpbmcgKHJvb3Rmc19kZmQsIGNhbmNlbGxhYmxlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAg ICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJy b3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIHBvc3Rwcm9jZXNzX2NsZWFudXBfcnBtZGIoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2RmZCkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBvc3Rwcm9jZXNzX2NsZWFudXBfcnBtZGIo cm9vdGZzX2RmZCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3Bvc3Rwcm9j ZXNzX2NsZWFudXBfcnBtZGIgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpCisreworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBv c3Rwcm9jZXNzX2NsZWFudXBfcnBtZGIgKHJvb3Rmc19kZmQpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgcmV3cml0ZV9ycG1kYl9mb3JfdGFyZ2V0 KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgbm9ybWFsaXplKSB7CistICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmV3cml0 ZV9ycG1kYl9mb3JfdGFyZ2V0KHJvb3Rmc19kZmQsIG5vcm1hbGl6ZSk7CistICBpZiAoZXJyb3Ik LnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7CistICB9Cisrdm9pZAorK3Jld3JpdGVfcnBtZGJfZm9yX3RhcmdldCAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBub3JtYWxpemUpCisreworKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcmV3cml0 ZV9ycG1kYl9mb3JfdGFyZ2V0IChyb290ZnNfZGZkLCBub3JtYWxpemUpOworKyAgaWYgKGVycm9y JC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6c3RkOjp1aW50NjRfdCBkaXJlY3Rv cnlfc2l6ZSg6OnN0ZDo6aW50MzJfdCBkZmQsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUg Y29uc3QgJmNhbmNlbGxhYmxlKSB7CisrOjpzdGQ6OnVpbnQ2NF90CisrZGlyZWN0b3J5X3NpemUg KDo6c3RkOjppbnQzMl90IGRmZCwgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25zdCAm Y2FuY2VsbGFibGUpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnN0ZDo6dWludDY0X3Q+ IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkZGlyZWN0b3J5X3NpemUoZGZkLCBjYW5jZWxsYWJsZSwgJnJldHVybiQu dmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyZWN0b3J5X3NpemUgKGRmZCwgY2FuY2Vs bGFibGUsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAg ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysg ICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpy cG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgKmRlcGxveW1lbnRfZm9yX2lkKDo6cnBtb3N0 cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQpIHsK Kys6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqCisrZGVwbG95bWVudF9mb3JfaWQg KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNyb290LCA6OnJ1c3Q6OlN0ciBkZXBs b3lfaWQpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6T3N0cmVl RGVwbG95bWVudCAqPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZm9yX2lkKHN5c3Jvb3QsIGRl cGxveV9pZCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAg cmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVu dF9mb3JfaWQgKHN5c3Jvb3QsIGRlcGxveV9pZCwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVy cm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBkZXBsb3ltZW50X2NoZWNrc3VtX2Zv cl9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIg ZGVwbG95X2lkKSB7CisrOjpydXN0OjpTdHJpbmcKKytkZXBsb3ltZW50X2NoZWNrc3VtX2Zvcl9p ZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIGRl cGxveV9pZCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1 cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JGRlcGxveW1lbnRfY2hlY2tzdW1fZm9yX2lkKHN5c3Jvb3QsIGRlcGxveV9pZCwg JnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik CisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9jaGVja3N1 bV9mb3JfaWQgKHN5c3Jvb3QsIGRlcGxveV9pZCwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVy cm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqZGVw bG95bWVudF9nZXRfYmFzZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwg OjpydXN0OjpTdHIgb3B0X2RlcGxveV9pZCwgOjpydXN0OjpTdHIgb3B0X29zX25hbWUpIHsKKys6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqCisrZGVwbG95bWVudF9nZXRfYmFzZSAo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsIDo6cnVzdDo6U3RyIG9wdF9k ZXBsb3lfaWQsCisrICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgb3B0X29zX25hbWUp CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95 bWVudCAqPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZ2V0X2Jhc2Uoc3lzcm9vdCwgb3B0X2Rl cGxveV9pZCwgb3B0X29zX25hbWUsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRy KSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3Ik KTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBs b3ltZW50X2dldF9iYXNlICgKKysgICAgICBzeXNyb290LCBvcHRfZGVwbG95X2lkLCBvcHRfb3Nf bmFtZSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAg ICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy1ib29s IGRlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGlj dCBjb25zdCAmZGljdCwgOjpycG1vc3RyZWVjeHg6OkV4cG9ydGVkTWFuaWZlc3REaWZmIGNvbnN0 ICZkaWZmKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRlcGxveW1lbnRfYWRkX21hbmlmZXN0X2RpZmYoZGljdCwgZGlmZik7CisrYm9vbAorK2RlcGxv eW1lbnRfYWRkX21hbmlmZXN0X2RpZmYgKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29u c3QgJmRpY3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6 OkV4cG9ydGVkTWFuaWZlc3REaWZmIGNvbnN0ICZkaWZmKSBub2V4Y2VwdAorK3sKKysgIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9hZGRfbWFuaWZlc3RfZGlm ZiAoZGljdCwgZGlmZik7CisgfQorIAorLXZvaWQgZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25t ZW50KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSB7CistICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk ZGFlbW9uX3Nhbml0eWNoZWNrX2Vudmlyb25tZW50KHN5c3Jvb3QpOworLSAgaWYgKGVycm9yJC5w dHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJv ciQpOworLSAgfQorK3ZvaWQKKytkYWVtb25fc2FuaXR5Y2hlY2tfZW52aXJvbm1lbnQgKDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KQorK3sKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGRhZW1vbl9zYW5pdHljaGVja19lbnZpcm9ubWVudCAoc3lzcm9vdCk7CisrICBpZiAoZXJyb3Ik LnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistOjpydXN0OjpTdHJpbmcgZGVwbG95bWVu dF9nZW5lcmF0ZV9pZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVw bG95bWVudCkgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrZGVwbG95bWVudF9nZW5lcmF0 ZV9pZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQp IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0 dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2dlbmVyYXRl X2lkKGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKy19CistCistdm9pZCBkZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6 R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9wb3B1bGF0ZV92YXJp YW50KHN5c3Jvb3QsIGRlcGxveW1lbnQsIGRpY3QpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1lbnRfZ2VuZXJhdGVfaWQg KGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7CisrfQorKworK3ZvaWQKKytkZXBsb3ltZW50X3BvcHVsYXRlX3ZhcmlhbnQg KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29u c3QgJmRlcGxveW1lbnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJl ZWN4eDo6R1ZhcmlhbnREaWN0IGNvbnN0ICZkaWN0KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1l bnRfcG9wdWxhdGVfdmFyaWFudCAoc3lzcm9vdCwgZGVwbG95bWVudCwgZGljdCk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBnZW5lcmF0ZV9iYXNl bGF5ZXJfcmVmcyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwg OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpH Q2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2VuZXJhdGVfYmFzZWxheWVy X3JlZnMoc3lzcm9vdCwgcmVwbywgY2FuY2VsbGFibGUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsK Ky0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwor LSAgfQorK3ZvaWQKKytnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyAoOjpycG1vc3RyZWVjeHg6Ok9z dHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSkK Kyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyAoc3lzcm9vdCwgcmVwbywg Y2FuY2VsbGFibGUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQor IAorLXZvaWQgdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl UmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmVmc3BlYywgOjpydXN0OjpTdHIgYmFzZV9j aGVja3N1bSwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCkgeworLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHZhcmlhbnRfYWRkX3JlbW90ZV9zdGF0dXMocmVwbywgcmVmc3BlYywgYmFzZV9jaGVja3N1bSwg ZGljdCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3ZhcmlhbnRfYWRkX3Jl bW90ZV9zdGF0dXMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1 c3Q6OlN0ciByZWZzcGVjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3Ry IGJhc2VfY2hlY2tzdW0sIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3Qp CisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkdmFyaWFudF9hZGRfcmVtb3RlX3N0YXR1cyAocmVwbywgcmVmc3Bl YywgYmFzZV9jaGVja3N1bSwgZGljdCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKyB9CisgCistOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSBkZXBs b3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBs b3ltZW50IGNvbnN0ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3Qg JmNvbW1pdCkgeworKzo6cnBtb3N0cmVlY3h4OjpEZXBsb3ltZW50TGF5ZXJlZE1ldGEKKytkZXBs b3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVw bG95bWVudCBjb25zdCAmZGVwbG95bWVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCkKKyt7CisgICA6 OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpEZXBsb3ltZW50TGF5ZXJlZE1ldGE+ IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9sYXllcmVkbWV0YV9mcm9tX2NvbW1pdChkZXBsb3lt ZW50LCBjb21taXQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0K Ky0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6 UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZXBsb3ltZW50X2xh eWVyZWRtZXRhX2Zyb21fY29tbWl0ICgKKysgICAgICBkZXBsb3ltZW50LCBjb21taXQsICZyZXR1 cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0 dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpycG1vc3RyZWVjeHg6 OkRlcGxveW1lbnRMYXllcmVkTWV0YSBkZXBsb3ltZW50X2xheWVyZWRtZXRhX2xvYWQoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVE ZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KSB7CisrOjpycG1vc3RyZWVjeHg6OkRlcGxveW1l bnRMYXllcmVkTWV0YQorK2RlcGxveW1lbnRfbGF5ZXJlZG1ldGFfbG9hZCAoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCkKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnBtb3N0cmVlY3h4OjpEZXBsb3ltZW50TGF5ZXJl ZE1ldGE+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGVwbG95bWVudF9sYXllcmVkbWV0YV9sb2FkKHJlcG8sIGRl cGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRlcGxveW1l bnRfbGF5ZXJlZG1ldGFfbG9hZCAocmVwbywgZGVwbG95bWVudCwgJnJldHVybiQudmFsdWUpOwor KyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudFNvdXJjZSBwYXJzZV9vdmVycmlkZV9zb3VyY2UoOjpydXN0OjpTdHIgc291cmNlKSB7 CisrOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UKKytwYXJzZV9vdmVy cmlkZV9zb3VyY2UgKDo6cnVzdDo6U3RyIHNvdXJjZSkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50U291cmNlPiByZXR1cm4kOwor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JHBhcnNlX292ZXJyaWRlX3NvdXJjZShzb3VyY2UsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlm IChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6 ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVl KTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHBhcnNlX292ZXJyaWRlX3NvdXJjZSAoc291cmNlLCAmcmV0dXJuJC52 YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnBtb3N0cmVlY3h4OjpQYXJz ZWRSZXZpc2lvbiBwYXJzZV9yZXZpc2lvbig6OnJ1c3Q6OlN0ciBzb3VyY2UpIHsKKys6OnJwbW9z dHJlZWN4eDo6UGFyc2VkUmV2aXNpb24KKytwYXJzZV9yZXZpc2lvbiAoOjpydXN0OjpTdHIgc291 cmNlKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OlBhcnNlZFJl dmlzaW9uPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX3JldmlzaW9uKHNvdXJjZSwgJnJldHVybiQudmFs dWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJl dHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHBhcnNlX3JldmlzaW9uIChzb3VyY2UsICZyZXR1cm4kLnZhbHVl KTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3Rk Ojptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcgZ2VuZXJhdGVf b2JqZWN0X3BhdGgoOjpydXN0OjpTdHIgYmFzZSwgOjpydXN0OjpTdHIgbmV4dF9zZWdtZW50KSB7 CisrOjpydXN0OjpTdHJpbmcKKytnZW5lcmF0ZV9vYmplY3RfcGF0aCAoOjpydXN0OjpTdHIgYmFz ZSwgOjpydXN0OjpTdHIgbmV4dF9zZWdtZW50KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2VuZXJhdGVfb2JqZWN0X3BhdGgoYmFzZSwg bmV4dF9zZWdtZW50LCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9 CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRnZW5l cmF0ZV9vYmplY3RfcGF0aCAoYmFzZSwgbmV4dF9zZWdtZW50LCAmcmV0dXJuJC52YWx1ZSk7Cisr ICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgZmFpbHBvaW50KDo6cnVzdDo6U3RyIHAp IHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRmYWlscG9pbnQocCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAor K2ZhaWxwb2ludCAoOjpydXN0OjpTdHIgcCkKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZmFpbHBvaW50IChwKTsKKysgIGlm IChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6 RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFJw bUltcG9ydGVyRmxhZ3M6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXJGbGFncyRvcGVyYXRvciRzaXplb2Yo KTsKKys6OnN0ZDo6c2l6ZV90CisrUnBtSW1wb3J0ZXJGbGFnczo6bGF5b3V0OjpzaXplICgpIG5v ZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBv cnRlckZsYWdzJG9wZXJhdG9yJHNpemVvZiAoKTsKKyB9CisgCistOjpzdGQ6OnNpemVfdCBScG1J bXBvcnRlckZsYWdzOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJG9wZXJhdG9yJGFsaWdub2Yo KTsKKys6OnN0ZDo6c2l6ZV90CisrUnBtSW1wb3J0ZXJGbGFnczo6bGF5b3V0OjphbGlnbiAoKSBu b2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXJGbGFncyRvcGVyYXRvciRhbGlnbm9mICgpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gcnBtX2ltcG9ydGVyX2ZsYWdzX25ld19lbXB0 eSgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBt SW1wb3J0ZXJGbGFncz46OmZyb21fcmF3KHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRycG1f aW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5KCkpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpScG1JbXBvcnRlckZsYWdzPgorK3JwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkgKCkgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyRmxhZ3M+Ojpmcm9tX3JhdyAoCisrICAgICAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHJwbV9pbXBvcnRlcl9mbGFnc19uZXdfZW1wdHkgKCkpOworIH0KKyAKKy1ib29sIFJwbUltcG9y dGVyRmxhZ3M6OmlzX2ltYV9lbmFibGVkKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlckZsYWdzJGlzX2ltYV9lbmFibGVk KCp0aGlzKTsKKytib29sCisrUnBtSW1wb3J0ZXJGbGFnczo6aXNfaW1hX2VuYWJsZWQgKCkgY29u c3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJw bUltcG9ydGVyRmxhZ3MkaXNfaW1hX2VuYWJsZWQgKCp0aGlzKTsKKyB9CisgCistOjpzdGQ6OnNp emVfdCBScG1JbXBvcnRlcjo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRzaXplb2YoKTsK Kys6OnN0ZDo6c2l6ZV90CisrUnBtSW1wb3J0ZXI6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAor K3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkb3Bl cmF0b3Ikc2l6ZW9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFJwbUltcG9ydGVyOjpsYXlv dXQ6OmFsaWduKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRhbGlnbm9mKCk7CisrOjpzdGQ6OnNpemVfdAorK1Jw bUltcG9ydGVyOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvcGVyYXRvciRhbGlnbm9mICgpOwor IH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+IHJwbV9pbXBv cnRlcl9uZXcoOjpydXN0OjpTdHIgcGtnX25hbWUsIDo6cnVzdDo6U3RyIG9zdHJlZV9icmFuY2gs IDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzIGNvbnN0ICZmbGFncykgeworKzo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj4KKytycG1faW1wb3J0ZXJfbmV3ICg6 OnJ1c3Q6OlN0ciBwa2dfbmFtZSwgOjpydXN0OjpTdHIgb3N0cmVlX2JyYW5jaCwKKysgICAgICAg ICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyBjb25zdCAmZmxhZ3Mp CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXI+PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHJwbV9pbXBvcnRlcl9uZXcocGtnX25hbWUsIG9z dHJlZV9icmFuY2gsIGZsYWdzLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcnBtX2lt cG9ydGVyX25ldyAoCisrICAgICAgcGtnX25hbWUsIG9zdHJlZV9icmFuY2gsIGZsYWdzLCAmcmV0 dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5n IFJwbUltcG9ydGVyOjpoYW5kbGVfdHJhbnNsYXRlX3BhdGhuYW1lKDo6cnVzdDo6U3RyIHBhdGgp IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK1JwbUltcG9ydGVyOjpoYW5kbGVfdHJhbnNs YXRlX3BhdGhuYW1lICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFuZGxlX3RyYW5zbGF0ZV9wYXRobmFtZSgqdGhpcywg cGF0aCwgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGhhbmRsZV90 cmFuc2xhdGVfcGF0aG5hbWUgKCp0aGlzLCBwYXRoLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBS cG1JbXBvcnRlcjo6b3N0cmVlX2JyYW5jaCgpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0 cmluZworK1JwbUltcG9ydGVyOjpvc3RyZWVfYnJhbmNoICgpIGNvbnN0IG5vZXhjZXB0Cisrewor ICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRvc3RyZWVfYnJhbmNoKCp0aGlzLCAm cmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7Cisr ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkb3N0cmVlX2JyYW5jaCAo KnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52 YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFJwbUltcG9ydGVyOjpwa2dfbmFtZSgpIGNv bnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK1JwbUltcG9ydGVyOjpwa2dfbmFtZSAo KSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJp bmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIk cGtnX25hbWUoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRl ciRwa2dfbmFtZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgUnBtSW1wb3J0ZXI6OmRvY19maWxlc19h cmVfZmlsdGVyZWQoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRvY19maWxlc19hcmVfZmlsdGVyZWQoKnRoaXMpOwor K2Jvb2wKKytScG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCAoKSBjb25zdCBub2V4 Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0 ZXIkZG9jX2ZpbGVzX2FyZV9maWx0ZXJlZCAoKnRoaXMpOworIH0KKyAKKy12b2lkIFJwbUltcG9y dGVyOjpkb2NfZmlsZXNfaW5zZXJ0KDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0IHsKKy0gIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRkb2NfZmlsZXNfaW5zZXJ0KCp0 aGlzLCBwYXRoKTsKKyt2b2lkCisrUnBtSW1wb3J0ZXI6OmRvY19maWxlc19pbnNlcnQgKDo6cnVz dDo6U3RyIHBhdGgpIG5vZXhjZXB0CisreworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFJwbUltcG9ydGVyJGRvY19maWxlc19pbnNlcnQgKCp0aGlzLCBwYXRoKTsKKyB9CisgCistYm9v bCBScG1JbXBvcnRlcjo6ZG9jX2ZpbGVzX2NvbnRhaW5zKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXIkZG9jX2ZpbGVzX2NvbnRhaW5zKCp0aGlzLCBwYXRoKTsKKytib29sCisrUnBtSW1wb3J0 ZXI6OmRvY19maWxlc19jb250YWlucyAoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQK Kyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGRv Y19maWxlc19jb250YWlucyAoKnRoaXMsIHBhdGgpOworIH0KKyAKKy12b2lkIFJwbUltcG9ydGVy OjpycG1maV9vdmVycmlkZXNfaW5zZXJ0KDo6cnVzdDo6U3RyIHBhdGgsIDo6c3RkOjp1aW50NjRf dCBpbmRleCkgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUlt cG9ydGVyJHJwbWZpX292ZXJyaWRlc19pbnNlcnQoKnRoaXMsIHBhdGgsIGluZGV4KTsKKyt2b2lk CisrUnBtSW1wb3J0ZXI6OnJwbWZpX292ZXJyaWRlc19pbnNlcnQgKDo6cnVzdDo6U3RyIHBhdGgs IDo6c3RkOjp1aW50NjRfdCBpbmRleCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2luc2VydCAoKnRoaXMsIHBh dGgsIGluZGV4KTsKKyB9CisgCistYm9vbCBScG1JbXBvcnRlcjo6cnBtZmlfb3ZlcnJpZGVzX2Nv bnRhaW5zKDo6cnVzdDo6U3RyIHBhdGgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkcnBtZmlfb3ZlcnJpZGVzX2NvbnRh aW5zKCp0aGlzLCBwYXRoKTsKKytib29sCisrUnBtSW1wb3J0ZXI6OnJwbWZpX292ZXJyaWRlc19j b250YWlucyAoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHJwbWZpX292ZXJyaWRlc19j b250YWlucyAoKnRoaXMsIHBhdGgpOworIH0KKyAKKy06OnN0ZDo6dWludDY0X3QgUnBtSW1wb3J0 ZXI6OnJwbWZpX292ZXJyaWRlc19nZXQoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNlcHQg eworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRycG1m aV9vdmVycmlkZXNfZ2V0KCp0aGlzLCBwYXRoKTsKKys6OnN0ZDo6dWludDY0X3QKKytScG1JbXBv cnRlcjo6cnBtZmlfb3ZlcnJpZGVzX2dldCAoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9leGNl cHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVy JHJwbWZpX292ZXJyaWRlc19nZXQgKCp0aGlzLCBwYXRoKTsKKyB9CisgCistYm9vbCBScG1JbXBv cnRlcjo6aXNfaW1hX2VuYWJsZWQoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ltYV9lbmFibGVkKCp0aGlzKTsK Kytib29sCisrUnBtSW1wb3J0ZXI6OmlzX2ltYV9lbmFibGVkICgpIGNvbnN0IG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRpc19p bWFfZW5hYmxlZCAoKnRoaXMpOworIH0KKyAKKy12b2lkIFJwbUltcG9ydGVyOjp0d2Vha19pbXBv cnRlZF9maWxlX2luZm8oOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZv KSBjb25zdCBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1w b3J0ZXIkdHdlYWtfaW1wb3J0ZWRfZmlsZV9pbmZvKCp0aGlzLCBmaWxlX2luZm8pOworK3ZvaWQK KytScG1JbXBvcnRlcjo6dHdlYWtfaW1wb3J0ZWRfZmlsZV9pbmZvICg6OnJwbW9zdHJlZWN4eDo6 R0ZpbGVJbmZvIGNvbnN0ICZmaWxlX2luZm8pIGNvbnN0IG5vZXhjZXB0CisreworKyAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5m byAoKnRoaXMsIGZpbGVfaW5mbyk7CisgfQorIAorLWJvb2wgUnBtSW1wb3J0ZXI6OmlzX2ZpbGVf ZmlsdGVyZWQoOjpydXN0OjpTdHIgcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5mbyBjb25z dCAmZmlsZV9pbmZvKSBjb25zdCB7CisrYm9vbAorK1JwbUltcG9ydGVyOjppc19maWxlX2ZpbHRl cmVkICg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZm aWxlX2luZm8pIGNvbnN0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4k OworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFJwbUltcG9ydGVyJGlzX2ZpbGVfZmlsdGVyZWQoKnRoaXMsIHBhdGgsIGZpbGVfaW5m bywgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworLX0KKy0KKy12b2lkIFJwbUltcG9ydGVyOjp0 cmFuc2xhdGVfdG9fdG1wZmlsZXNfZW50cnkoOjpydXN0OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0 cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywgOjpydXN0OjpTdHIgdXNlcm5hbWUs IDo6cnVzdDo6U3RyIGdyb3VwbmFtZSkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHRyYW5zbGF0ZV90b190 bXBmaWxlc19lbnRyeSgqdGhpcywgYWJzX3BhdGgsIGZpbGVfaW5mbywgdXNlcm5hbWUsIGdyb3Vw bmFtZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaXNfZmls ZV9maWx0ZXJlZCAoCisrICAgICAgKnRoaXMsIHBhdGgsIGZpbGVfaW5mbywgJnJldHVybiQudmFs dWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworK30KKysKKyt2b2lkCisrUnBtSW1wb3J0ZXI6OnRy YW5zbGF0ZV90b190bXBmaWxlc19lbnRyeSAoOjpydXN0OjpTdHIgYWJzX3BhdGgsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdGaWxl SW5mbyBjb25zdCAmZmlsZV9pbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpCisr eworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkUnBtSW1wb3J0ZXIkdHJhbnNsYXRlX3RvX3RtcGZpbGVzX2VudHJ5ICgK KysgICAgICAgICAgKnRoaXMsIGFic19wYXRoLCBmaWxlX2luZm8sIHVzZXJuYW1lLCBncm91cG5h bWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLWJvb2wg UnBtSW1wb3J0ZXI6Omhhc190bXBmaWxlc19lbnRyaWVzKCkgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRScG1JbXBvcnRlciRoYXNfdG1wZmls ZXNfZW50cmllcygqdGhpcyk7CisrYm9vbAorK1JwbUltcG9ydGVyOjpoYXNfdG1wZmlsZXNfZW50 cmllcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkUnBtSW1wb3J0ZXIkaGFzX3RtcGZpbGVzX2VudHJpZXMgKCp0aGlzKTsKKyB9Cisg CistOjpydXN0OjpTdHJpbmcgUnBtSW1wb3J0ZXI6OnNlcmlhbGl6ZV90bXBmaWxlc19jb250ZW50 KCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrUnBtSW1wb3J0ZXI6OnNlcmlh bGl6ZV90bXBmaWxlc19jb250ZW50ICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRScG1JbXBvcnRlciRzZXJpYWxpemVfdG1wZmlsZXNfY29udGVudCgqdGhpcywg JnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOwor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJwbUltcG9ydGVyJHNlcmlhbGl6ZV90bXBm aWxlc19jb250ZW50ICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjpt b3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcgdG1wZmlsZXNfdHJh bnNsYXRlKDo6cnVzdDo6U3RyIGFic19wYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNv bnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5h bWUpIHsKKys6OnJ1c3Q6OlN0cmluZworK3RtcGZpbGVzX3RyYW5zbGF0ZSAoOjpydXN0OjpTdHIg YWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbywKKysg ICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91 cG5hbWUpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJu JDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCR0bXBmaWxlc190cmFuc2xhdGUoYWJzX3BhdGgsIGZpbGVfaW5mbywgdXNlcm5hbWUs IGdyb3VwbmFtZSwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQor LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRtcGZpbGVzX3RyYW5z bGF0ZSAoCisrICAgICAgYWJzX3BhdGgsIGZpbGVfaW5mbywgdXNlcm5hbWUsIGdyb3VwbmFtZSwg JnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9Cisr ICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy12b2lkIGFwcGVu ZF9kcmFjdXRfcmFuZG9tX2NwaW8oOjpzdGQ6OmludDMyX3QgZmQpIHsKKy0gIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRhcHBlbmRfZHJh Y3V0X3JhbmRvbV9jcGlvKGZkKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisr YXBwZW5kX2RyYWN1dF9yYW5kb21fY3BpbyAoOjpzdGQ6OmludDMyX3QgZmQpCisreworKyAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGFw cGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8gKGZkKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7 CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKKysgICAgfQorIH0KKyAKKy06OnN0ZDo6aW50MzJfdCBpbml0cmFtZnNfb3ZlcmxheV9nZW5l cmF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVzLCA6OnJwbW9zdHJl ZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5jZWxsYWJsZSkgeworKzo6c3RkOjppbnQzMl90CisraW5p dHJhbWZzX292ZXJsYXlfZ2VuZXJhdGUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25z dCAmZmlsZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpH Q2FuY2VsbGFibGUgJmNhbmNlbGxhYmxlKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8Ojpz dGQ6OmludDMyX3Q+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaW5pdHJhbWZzX292ZXJsYXlfZ2VuZXJhdGUoZmls ZXMsIGNhbmNlbGxhYmxlLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgewor LSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7Cist ICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRp bml0cmFtZnNfb3ZlcmxheV9nZW5lcmF0ZSAoZmlsZXMsIGNhbmNlbGxhYmxlLCAmcmV0dXJuJC52 YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgam91cm5hbF9wcmludF9z dGFnaW5nX2ZhaWx1cmUoKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkam91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUoKTsKKyt2b2lkCisram91cm5hbF9wcmlu dF9zdGFnaW5nX2ZhaWx1cmUgKCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkam91cm5hbF9wcmludF9zdGFnaW5nX2ZhaWx1cmUgKCk7CisgfQorIAorLXZvaWQg Y29uc29sZV9wcm9ncmVzc19iZWdpbl90YXNrKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgewor LSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fdGFz ayhtc2cpOworK3ZvaWQKKytjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3Rhc2sgKDo6cnVzdDo6U3Ry IG1zZykgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29s ZV9wcm9ncmVzc19iZWdpbl90YXNrIChtc2cpOworIH0KKyAKKy12b2lkIGNvbnNvbGVfcHJvZ3Jl c3NfYmVnaW5fbl9pdGVtcyg6OnJ1c3Q6OlN0ciBtc2csIDo6c3RkOjp1aW50NjRfdCBuKSBub2V4 Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19i ZWdpbl9uX2l0ZW1zKG1zZywgbik7Cisrdm9pZAorK2NvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fbl9p dGVtcyAoOjpydXN0OjpTdHIgbXNnLCA6OnN0ZDo6dWludDY0X3Qgbikgbm9leGNlcHQKKyt7Cisr ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29sZV9wcm9ncmVzc19iZWdpbl9uX2l0 ZW1zIChtc2csIG4pOworIH0KKyAKKy12b2lkIGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fcGVyY2Vu dCg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRjb25zb2xlX3Byb2dyZXNzX2JlZ2luX3BlcmNlbnQobXNnKTsKKyt2b2lkCisrY29uc29s ZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50ICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0Cisrewor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfYmVnaW5fcGVy Y2VudCAobXNnKTsKKyB9CisgCistdm9pZCBjb25zb2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlKDo6 cnVzdDo6U3RyIG1zZykgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X21lc3NhZ2UobXNnKTsKKyt2b2lkCisrY29uc29sZV9wcm9n cmVzc19zZXRfbWVzc2FnZSAoOjpydXN0OjpTdHIgbXNnKSBub2V4Y2VwdAorK3sKKysgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjb25zb2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlIChtc2cp OworIH0KKyAKKy12b2lkIGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X3N1Yl9tZXNzYWdlKDo6cnVzdDo6 U3RyIG1zZykgbm9leGNlcHQgeworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNv bGVfcHJvZ3Jlc3Nfc2V0X3N1Yl9tZXNzYWdlKG1zZyk7Cisrdm9pZAorK2NvbnNvbGVfcHJvZ3Jl c3Nfc2V0X3N1Yl9tZXNzYWdlICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0CisreworKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3Nfc2V0X3N1Yl9tZXNzYWdl IChtc2cpOworIH0KKyAKKy12b2lkIGNvbnNvbGVfcHJvZ3Jlc3NfdXBkYXRlKDo6c3RkOjp1aW50 NjRfdCBuKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkY29uc29s ZV9wcm9ncmVzc191cGRhdGUobik7Cisrdm9pZAorK2NvbnNvbGVfcHJvZ3Jlc3NfdXBkYXRlICg6 OnN0ZDo6dWludDY0X3Qgbikgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkY29uc29sZV9wcm9ncmVzc191cGRhdGUgKG4pOworIH0KKyAKKy12b2lkIGNvbnNvbGVf cHJvZ3Jlc3NfZW5kKDo6cnVzdDo6U3RyIHN1ZmZpeCkgbm9leGNlcHQgeworLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfZW5kKHN1ZmZpeCk7Cisrdm9pZAor K2NvbnNvbGVfcHJvZ3Jlc3NfZW5kICg6OnJ1c3Q6OlN0ciBzdWZmaXgpIG5vZXhjZXB0Cisrewor KyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNvbnNvbGVfcHJvZ3Jlc3NfZW5kIChzdWZm aXgpOworIH0KKyAKKy1ib29sIEhpc3RvcnlFbnRyeTo6b3BlcmF0b3I9PShIaXN0b3J5RW50cnkg Y29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRIaXN0b3J5RW50cnkkb3BlcmF0b3IkZXEoKnRoaXMsIHJocyk7CisrYm9vbAor K0hpc3RvcnlFbnRyeTo6b3BlcmF0b3I9PSAoSGlzdG9yeUVudHJ5IGNvbnN0ICZyaHMpIGNvbnN0 IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0 b3J5RW50cnkkb3BlcmF0b3IkZXEgKCp0aGlzLCByaHMpOworIH0KKyAKKy1ib29sIEhpc3RvcnlF bnRyeTo6b3BlcmF0b3IhPShIaXN0b3J5RW50cnkgY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQg eworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5RW50cnkkb3Bl cmF0b3IkbmUoKnRoaXMsIHJocyk7CisrYm9vbAorK0hpc3RvcnlFbnRyeTo6b3BlcmF0b3IhPSAo SGlzdG9yeUVudHJ5IGNvbnN0ICZyaHMpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5RW50cnkkb3BlcmF0b3IkbmUgKCp0aGlz LCByaHMpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IEhpc3RvcnlDdHg6OmxheW91dDo6c2l6ZSgp IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9y eUN0eCRvcGVyYXRvciRzaXplb2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrSGlzdG9yeUN0eDo6bGF5 b3V0OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJHNpemVvZiAoKTsKKyB9CisgCistOjpzdGQ6OnNp emVfdCBIaXN0b3J5Q3R4OjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG9wZXJhdG9yJGFsaWdub2YoKTsK Kys6OnN0ZDo6c2l6ZV90CisrSGlzdG9yeUN0eDo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAor K3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkSGlzdG9yeUN0eCRvcGVy YXRvciRhbGlnbm9mICgpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlz dG9yeUN0eD4gaGlzdG9yeV9jdHhfbmV3KCkgeworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpIaXN0b3J5Q3R4PgorK2hpc3RvcnlfY3R4X25ldyAoKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHg+PiByZXR1cm4kOwor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGhpc3RvcnlfY3R4X25ldygmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkaGlzdG9y eV9jdHhfbmV3ICgmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgewor KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAor LTo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5RW50cnkgSGlzdG9yeUN0eDo6bmV4dF9lbnRyeSgpIHsK Kys6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUVudHJ5CisrSGlzdG9yeUN0eDo6bmV4dF9lbnRyeSAo KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRy eT4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRIaXN0b3J5Q3R4JG5leHRfZW50cnkoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1 c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShy ZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEhpc3RvcnlDdHgkbmV4dF9lbnRyeSAoKnRoaXMs ICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhy b3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQor KyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBoaXN0 b3J5X3BydW5lKCkgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGhpc3RvcnlfcHJ1bmUoKTsKKy0gIGlmIChlcnJvciQucHRyKSB7 CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK Ky0gIH0KKyt2b2lkCisraGlzdG9yeV9wcnVuZSAoKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRoaXN0b3J5X3BydW5lICgp OworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6c3RkOjpz aXplX3QgVG9raW9IYW5kbGU6OmxheW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3Ikc2l6ZW9mKCk7 CisrOjpzdGQ6OnNpemVfdAorK1Rva2lvSGFuZGxlOjpsYXlvdXQ6OnNpemUgKCkgbm9leGNlcHQK Kyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvSGFuZGxlJG9w ZXJhdG9yJHNpemVvZiAoKTsKKyB9CisgCistOjpzdGQ6OnNpemVfdCBUb2tpb0hhbmRsZTo6bGF5 b3V0OjphbGlnbigpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3IkYWxpZ25vZigpOworKzo6c3RkOjpzaXplX3QKKytU b2tpb0hhbmRsZTo6bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9IYW5kbGUkb3BlcmF0b3IkYWxpZ25vZiAoKTsK KyB9CisgCistOjpzdGQ6OnNpemVfdCBUb2tpb0VudGVyR3VhcmQ6OmxheW91dDo6c2l6ZSgpIG5v ZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVG9raW9FbnRl ckd1YXJkJG9wZXJhdG9yJHNpemVvZigpOworKzo6c3RkOjpzaXplX3QKKytUb2tpb0VudGVyR3Vh cmQ6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJHNpemVvZiAoKTsKKyB9Cisg CistOjpzdGQ6OnNpemVfdCBUb2tpb0VudGVyR3VhcmQ6OmxheW91dDo6YWxpZ24oKSBub2V4Y2Vw dCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvRW50ZXJHdWFy ZCRvcGVyYXRvciRhbGlnbm9mKCk7CisrOjpzdGQ6OnNpemVfdAorK1Rva2lvRW50ZXJHdWFyZDo6 bGF5b3V0OjphbGlnbiAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVG9raW9FbnRlckd1YXJkJG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAor LTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZT4gdG9raW9faGFuZGxlX2dl dCgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9r aW9IYW5kbGU+Ojpmcm9tX3JhdyhycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdG9raW9faGFu ZGxlX2dldCgpKTsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+Cisr dG9raW9faGFuZGxlX2dldCAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiA6OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGU+Ojpmcm9tX3JhdyAoCisrICAgICAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHRva2lvX2hhbmRsZV9nZXQgKCkpOworIH0KKyAKKy06OnJ1c3Q6 OkJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkPiBUb2tpb0hhbmRsZTo6ZW50ZXIo KSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRva2lvRW50ZXJHdWFyZD46OmZyb21fcmF3KHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU b2tpb0hhbmRsZSRlbnRlcigqdGhpcykpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU b2tpb0VudGVyR3VhcmQ+CisrVG9raW9IYW5kbGU6OmVudGVyICgpIGNvbnN0IG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+ Ojpmcm9tX3JhdyAoCisrICAgICAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRva2lvSGFu ZGxlJGVudGVyICgqdGhpcykpOworIH0KKyAKKy1ib29sIHNjcmlwdF9pc19pZ25vcmVkKDo6cnVz dDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LCBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCkg bm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzY3JpcHRf aXNfaWdub3JlZChwa2csIHNjcmlwdCwgdXNlX2tlcm5lbF9pbnN0YWxsKTsKKytib29sCisrc2Ny aXB0X2lzX2lnbm9yZWQgKDo6cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LCBib29s IHVzZV9rZXJuZWxfaW5zdGFsbCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JHNjcmlwdF9pc19pZ25vcmVkIChwa2csIHNjcmlwdCwgdXNlX2tlcm5l bF9pbnN0YWxsKTsKKyB9CisgCistdm9pZCB0ZXN0dXRpbHNfZW50cnlwb2ludCg6OnJ1c3Q6OlZl Yzw6OnJ1c3Q6OlN0cmluZz4gYXJndikgeworLSAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBhcmd2JCg6OnN0ZDo6bW92ZShhcmd2KSk7CistICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdGVz dHV0aWxzX2VudHJ5cG9pbnQoJmFyZ3YkLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7Cist ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0g IH0KKyt2b2lkCisrdGVzdHV0aWxzX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBhcmd2KQorK3sKKysgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPj4gYXJndiQgKDo6c3RkOjptb3ZlIChhcmd2KSk7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdGVzdHV0aWxzX2Vu dHJ5cG9pbnQgKCZhcmd2JC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKyB9CisgCistOjpydXN0OjpTdHJpbmcgbWF5YmVfc2hlbGxfcXVvdGUoOjpydXN0OjpT dHIgaW5wdXQpIG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZworK21heWJlX3NoZWxsX3F1b3Rl ICg6OnJ1c3Q6OlN0ciBpbnB1dCkgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JG1heWJlX3NoZWxsX3F1b3RlKGlucHV0LCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk bWF5YmVfc2hlbGxfcXVvdGUgKGlucHV0LCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy1ib29sIFJlZnNwZWM6Om9wZXJhdG9y PT0oUmVmc3BlYyBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlZnNwZWMkb3BlcmF0b3IkZXEoKnRoaXMsIHJocyk7Cisr Ym9vbAorK1JlZnNwZWM6Om9wZXJhdG9yPT0gKFJlZnNwZWMgY29uc3QgJnJocykgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlZnNwZWMk b3BlcmF0b3IkZXEgKCp0aGlzLCByaHMpOworIH0KKyAKKy1ib29sIFJlZnNwZWM6Om9wZXJhdG9y IT0oUmVmc3BlYyBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1JlZnNwZWM6 Om9wZXJhdG9yIT0gKFJlZnNwZWMgY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQKKyt7CisgICBy ZXR1cm4gISgqdGhpcyA9PSByaHMpOworIH0KKyAKKy1ib29sIE92ZXJyaWRlUmVwbGFjZW1lbnQ6 Om9wZXJhdG9yPT0oT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmcmhzKSBjb25zdCBub2V4Y2Vw dCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JE92ZXJyaWRlUmVwbGFj ZW1lbnQkb3BlcmF0b3IkZXEoKnRoaXMsIHJocyk7CisrYm9vbAorK092ZXJyaWRlUmVwbGFjZW1l bnQ6Om9wZXJhdG9yPT0gKE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJnJocykgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JE92ZXJyaWRl UmVwbGFjZW1lbnQkb3BlcmF0b3IkZXEgKCp0aGlzLCByaHMpOworIH0KKyAKKy1ib29sIE92ZXJy aWRlUmVwbGFjZW1lbnQ6Om9wZXJhdG9yIT0oT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmcmhz KSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK092ZXJyaWRlUmVwbGFjZW1lbnQ6Om9wZXJhdG9y IT0gKE92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgJnJocykgY29uc3Qgbm9leGNlcHQKKyt7Cisg ICByZXR1cm4gISgqdGhpcyA9PSByaHMpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFRyZWVmaWxl OjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJHNpemVvZigpOworKzo6c3RkOjpzaXplX3QKKytU cmVlZmlsZTo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRvcGVyYXRvciRzaXplb2YgKCk7CisgfQorIAor LTo6c3RkOjpzaXplX3QgVHJlZWZpbGU6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG9wZXJhdG9yJGFsaWdu b2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrVHJlZWZpbGU6OmxheW91dDo6YWxpZ24gKCkgbm9leGNl cHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG9w ZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZT4gdHJlZWZpbGVfbmV3KDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBi YXNlYXJjaCkgeworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4KKyt0cmVl ZmlsZV9uZXcgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCkKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3KGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJl dHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3Rk Ojptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisr ICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3IChmaWxlbmFt ZSwgYmFzZWFyY2gsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7 CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3Ik KTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9Cisg CistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfZW1w dHkoKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgorK3RyZWVmaWxl X25ld19lbXB0eSAoKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpCb3g8Ojpy cG1vc3RyZWVjeHg6OlRyZWVmaWxlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmlsZV9uZXdfZW1wdHko JnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19lbXB0eSAoJnJldHVy biQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19mcm9tX3N0cmluZyg6OnJ1c3Q6OlN0 ciBidWYsIGJvb2wgY2xpZW50KSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlPgorK3RyZWVmaWxlX25ld19mcm9tX3N0cmluZyAoOjpydXN0OjpTdHIgYnVmLCBib29sIGNs aWVudCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2Zyb21fc3RyaW5nKGJ1 ZiwgY2xpZW50LCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmls ZV9uZXdfZnJvbV9zdHJpbmcgKGJ1ZiwgY2xpZW50LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZT4gdHJlZWZpbGVfbmV3X2NvbXBvc2UoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVzdDo6U3Ry IGJhc2VhcmNoKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPgorK3Ry ZWVmaWxlX25ld19jb21wb3NlICg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIgYmFz ZWFyY2gpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGU+PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik ID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19jb21wb3NlKGZpbGVu YW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJl ZWZpbGVfbmV3X2NvbXBvc2UgKGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUpOwor KyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnQoOjpydXN0OjpTdHIgZmlsZW5hbWUsIDo6cnVz dDo6U3RyIGJhc2VhcmNoKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxl PgorK3RyZWVmaWxlX25ld19jbGllbnQgKDo6cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0 ciBiYXNlYXJjaCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdHJlZWZpbGVfbmV3X2NsaWVudChm aWxlbmFtZSwgYmFzZWFyY2gsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7 CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK Ky0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHRyZWVmaWxlX25ld19jbGllbnQgKGZpbGVuYW1lLCBiYXNlYXJjaCwgJnJldHVybiQudmFsdWUp OworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8 OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6 Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnRfZnJvbV9ldGMoOjpydXN0OjpTdHIgYmFz ZWFyY2gpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+CisrdHJlZWZp bGVfbmV3X2NsaWVudF9mcm9tX2V0YyAoOjpydXN0OjpTdHIgYmFzZWFyY2gpCisreworICAgOjpy dXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+PiBy ZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19jbGllbnRfZnJvbV9ldGMoYmFzZWFyY2gsICZyZXR1 cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1w bDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6 bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAg ICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxlX25ld19jbGllbnRfZnJv bV9ldGMgKGJhc2VhcmNoLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Cisg fQorIAorLTo6c3RkOjp1aW50MzJfdCB0cmVlZmlsZV9kZWxldGVfY2xpZW50X2V0YygpIHsKKys6 OnN0ZDo6dWludDMyX3QKKyt0cmVlZmlsZV9kZWxldGVfY2xpZW50X2V0YyAoKQorK3sKKyAgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8OjpzdGQ6OnVpbnQzMl90PiByZXR1cm4kOworLSAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyZWVmaWxl X2RlbGV0ZV9jbGllbnRfZXRjKCZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7 CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK Ky0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHRyZWVmaWxlX2RlbGV0ZV9jbGllbnRfZXRjICgmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJy b3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJu JC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyIFRyZWVmaWxlOjpnZXRfd29ya2RpcigpIGNv bnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiA6OnJ1c3Q6OmltcGw8OjpydXN0OjpTdHI+OjpuZXdf dW5jaGVja2VkKHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfd29ya2Rp cigqdGhpcykpOworKzo6cnVzdDo6U3RyCisrVHJlZWZpbGU6OmdldF93b3JrZGlyICgpIGNvbnN0 IG5vZXhjZXB0CisreworKyAgcmV0dXJuIDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OlN0cj46Om5ld191 bmNoZWNrZWQgKAorKyAgICAgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRn ZXRfd29ya2RpciAoKnRoaXMpKTsKKyB9CisgCistOjpzdGQ6OmludDMyX3QgVHJlZWZpbGU6Omdl dF9wYXNzd2RfZmQoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9wYXNzd2RfZmQoKnRoaXMpOworKzo6c3RkOjppbnQzMl90Cisr VHJlZWZpbGU6OmdldF9wYXNzd2RfZmQgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYXNzd2RfZmQgKCp0aGlzKTsKKyB9 CisgCistOjpzdGQ6OmludDMyX3QgVHJlZWZpbGU6OmdldF9ncm91cF9mZCgpIG5vZXhjZXB0IHsK Ky0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2dyb3Vw X2ZkKCp0aGlzKTsKKys6OnN0ZDo6aW50MzJfdAorK1RyZWVmaWxlOjpnZXRfZ3JvdXBfZmQgKCkg bm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9ncm91cF9mZCAoKnRoaXMpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBUcmVlZmls ZTo6Z2V0X2pzb25fc3RyaW5nKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisr VHJlZWZpbGU6OmdldF9qc29uX3N0cmluZyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVz dDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2pzb25fc3RyaW5nKCp0aGlzLCAmcmV0dXJuJC52 YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2pzb25fc3RyaW5nICgqdGhpcywgJnJl dHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9 CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfb3N0cmVlX2xh eWVycygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytU cmVlZmlsZTo6Z2V0X29zdHJlZV9sYXllcnMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0g IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX2xheWVycygq dGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVf bGF5ZXJzICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChy ZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVm aWxlOjpnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X29zdHJlZV9vdmVycmlkZV9s YXllcnMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycygqdGhpcywgJnJldHVy biQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5 ZXJzICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1 cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxl OjpnZXRfYWxsX29zdHJlZV9sYXllcnMoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+CisrVHJlZWZpbGU6OmdldF9hbGxfb3N0cmVlX2xheWVycyAoKSBjb25z dCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9hbGxfb3N0cmVlX2xheWVycygqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9hbGxfb3N0cmVlX2xheWVycyAoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X3JlcG9zKCkgY29uc3Qgbm9l eGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRfcmVw b3MgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfcmVwb3MoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVy biA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfcmVwb3MgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKKys6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzICgpIGNv bnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X3BhY2thZ2VzICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJu IDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcgVHJl ZWZpbGU6OnJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4KCkgY29uc3QgeworKzo6cnVz dDo6U3RyaW5nCisrVHJlZWZpbGU6OnJlcXVpcmVfYXV0b21hdGljX3ZlcnNpb25fcHJlZml4ICgp IGNvbnN0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJu JDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRyZXF1aXJlX2F1dG9tYXRpY192ZXJzaW9uX3ByZWZpeCgqdGhpcywg JnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik CisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmVxdWlyZV9h dXRvbWF0aWNfdmVyc2lvbl9wcmVmaXggKCp0aGlzLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm cmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysg IHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZp bGU6OmFkZF9wYWNrYWdlcyg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJv b2wgYWxsb3dfZXhpc3RpbmcpIHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjptb3ZlKHBhY2thZ2VzKSk7CisrYm9v bAorK1RyZWVmaWxlOjphZGRfcGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBw YWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZykKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJv cDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCAoOjpzdGQ6Om1vdmUgKHBh Y2thZ2VzKSk7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkYWRkX3BhY2thZ2VzKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19leGlzdGlu ZywgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlcyAo CisrICAgICAgKnRoaXMsICZwYWNrYWdlcyQudmFsdWUsIGFsbG93X2V4aXN0aW5nLCAmcmV0dXJu JC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVy biA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6Omhh c19wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzKCp0aGlzKTsKKytib29sCisrVHJlZWZp bGU6Omhhc19wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzICgqdGhpcyk7CisgfQor IAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2xvY2FsX3BhY2th Z2VzKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1Ry ZWVmaWxlOjpnZXRfbG9jYWxfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1 c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0g IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9jYWxfcGFja2FnZXMo KnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZh bHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9jYWxf cGFja2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUg KHJldHVybiQudmFsdWUpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjphZGRfbG9jYWxfcGFja2Fn ZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0 aW5nKSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4+IHBhY2thZ2VzJCg6OnN0ZDo6bW92ZShwYWNrYWdlcykpOworK2Jvb2wKKytUcmVlZmlsZTo6 YWRkX2xvY2FsX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMs IGJvb2wgYWxsb3dfZXhpc3RpbmcpCisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBwYWNrYWdlcyQgKDo6c3RkOjptb3ZlIChwYWNrYWdlcykp OworICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFk ZF9sb2NhbF9wYWNrYWdlcygqdGhpcywgJnBhY2thZ2VzJC52YWx1ZSwgYWxsb3dfZXhpc3Rpbmcs ICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6 OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfbG9jYWxfcGFja2Fn ZXMgKAorKyAgICAgICp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19leGlzdGluZywgJnJl dHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICBy ZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMo KSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+CisrVHJlZWZp bGU6OmdldF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0 dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbG9jYWxf ZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoKnRoaXMsICZyZXR1 cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQor IAorLWJvb2wgVHJlZWZpbGU6OmFkZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKSB7Cist ICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2th Z2VzJCg6OnN0ZDo6bW92ZShwYWNrYWdlcykpOworK2Jvb2wKKytUcmVlZmlsZTo6YWRkX2xvY2Fs X2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2th Z2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs bG93X2V4aXN0aW5nKQorK3sKKysgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkICg6OnN0ZDo6bW92ZSAocGFja2FnZXMpKTsKKyAgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8Ym9vbD4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfbG9jYWxf ZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlLCBhbGxvd19leGlz dGluZywgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRk X2xvY2FsX2ZpbGVvdmVycmlkZV9wYWNrYWdlcyAoCisrICAgICAgICAgICp0aGlzLCAmcGFja2Fn ZXMkLnZhbHVlLCBhbGxvd19leGlzdGluZywgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9y JC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQu dmFsdWUpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpyZW1vdmVfcGFja2FnZXMoOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X25vZW50KSB7CistICA6OnJ1 c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCg6 OnN0ZDo6bW92ZShwYWNrYWdlcykpOworK2Jvb2wKKytUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vz ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJvb2wgYWxsb3dfbm9lbnQp CisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ PiBwYWNrYWdlcyQgKDo6c3RkOjptb3ZlIChwYWNrYWdlcykpOworICAgOjpydXN0OjpNYXliZVVu aW5pdDxib29sPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9wYWNrYWdlcygqdGhpcywg JnBhY2thZ2VzJC52YWx1ZSwgYWxsb3dfbm9lbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChl cnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJy b3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsK KysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZXMgKAorKyAgICAgICp0aGlzLCAmcGFja2FnZXMk LnZhbHVlLCBhbGxvd19ub2VudCwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVu dD4gVHJlZWZpbGU6OmdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKCkgY29uc3Qgbm9leGNl cHQgeworKzo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pgor K1RyZWVmaWxlOjpnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKSBjb25zdCBub2V4Y2Vw dAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKCp0aGlzLCAmcmV0 dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRl X3JlcGxhY2UgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUg KHJldHVybiQudmFsdWUpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpoYXNfcGFja2FnZXNfb3Zl cnJpZGVfcmVwbGFjZSgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UoKnRo aXMpOworK2Jvb2wKKytUcmVlZmlsZTo6aGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCkg Y29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICgqdGhpcyk7CisgfQorIAor LWJvb2wgVHJlZWZpbGU6OmFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlKDo6cnBtb3N0cmVl Y3h4OjpPdmVycmlkZVJlcGxhY2VtZW50IHJlcGxhY2VtZW50KSBub2V4Y2VwdCB7CistICA6OnJ1 c3Q6Ok1hbnVhbGx5RHJvcDw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gcmVw bGFjZW1lbnQkKDo6c3RkOjptb3ZlKHJlcGxhY2VtZW50KSk7CistICByZXR1cm4gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNl KCp0aGlzLCAmcmVwbGFjZW1lbnQkLnZhbHVlKTsKKytib29sCisrVHJlZWZpbGU6OmFkZF9wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlICg6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVu dCByZXBsYWNlbWVudCkgbm9leGNlcHQKKyt7CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJw bW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gcmVwbGFjZW1lbnQkICgKKysgICAgICA6 OnN0ZDo6bW92ZSAocmVwbGFjZW1lbnQpKTsKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCp0aGlzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnJlcGxhY2VtZW50JC52YWx1ZSk7CisgfQorIAorLWJvb2wg VHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UoOjpydXN0OjpTdHIgcGFj a2FnZSkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlKCp0aGlzLCBwYWNrYWdlKTsK Kytib29sCisrVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2UgKDo6cnVz dDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNlICgqdGhp cywgcGFja2FnZSk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBUcmVlZmls ZTo6Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoKSBjb25zdCBub2V4Y2VwdCB7 CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+CisrVHJlZWZpbGU6OmdldF9wYWNrYWdlc19v dmVycmlkZV9yZXBsYWNlX2xvY2FsICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3Jl cGxhY2VfbG9jYWwoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKKy19CistCistdm9pZCBUcmVlZmlsZTo6YWRkX3BhY2thZ2VzX292 ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2Vz KSB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+ IHBhY2thZ2VzJCg6OnN0ZDo6bW92ZShwYWNrYWdlcykpOworLSAgOjpydXN0OjpyZXByOjpQdHJM ZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGFkZF9wYWNr YWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlKTsKKy0g IGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRU cmVlZmlsZSRnZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoKnRoaXMsICZyZXR1 cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisrfQor KworK3ZvaWQKKytUcmVlZmlsZTo6YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwg KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcykKKyt7CisrICA6OnJ1c3Q6Ok1h bnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHBhY2thZ2VzJCAoOjpzdGQ6 Om1vdmUgKHBhY2thZ2VzKSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAg ICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRhZGRfcGFja2FnZXNfb3Zl cnJpZGVfcmVwbGFjZV9sb2NhbCAoKnRoaXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZw YWNrYWdlcyQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9Cisg fQorIAorLWJvb2wgVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdlX292ZXJyaWRlX3JlcGxhY2VfbG9j YWwoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZXBsYWNl X2xvY2FsKCp0aGlzLCBwYWNrYWdlKTsKKytib29sCisrVHJlZWZpbGU6OnJlbW92ZV9wYWNrYWdl X292ZXJyaWRlX3JlcGxhY2VfbG9jYWwgKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVf cGFja2FnZV9vdmVycmlkZV9yZXBsYWNlX2xvY2FsICgqdGhpcywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFja2FnZSk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBUcmVlZmlsZTo6Z2V0X3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZSgpIGNvbnN0IG5vZXhjZXB0 IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X3BhY2thZ2Vz X292ZXJyaWRlX3JlbW92ZSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUo KnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZh bHVlKTsKKy19CistCistdm9pZCBUcmVlZmlsZTo6YWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92 ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMpIHsKKy0gIDo6cnVzdDo6TWFu dWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcGFja2FnZXMkKDo6c3RkOjpt b3ZlKHBhY2thZ2VzKSk7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkYWRkX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92 ZSgqdGhpcywgJnBhY2thZ2VzJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0 aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisr ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BhY2thZ2VzX292ZXJy aWRlX3JlbW92ZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisrfQorKworK3ZvaWQKKytUcmVlZmlsZTo6YWRkX3BhY2thZ2Vz X292ZXJyaWRlX3JlbW92ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzKQor K3sKKysgIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4g cGFja2FnZXMkICg6OnN0ZDo6bW92ZSAocGFja2FnZXMpKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZW1vdmUgKCp0aGlzLCAmcGFja2FnZXMkLnZhbHVlKTsK KysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy1ib29sIFRyZWVm aWxlOjpyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUoOjpydXN0OjpTdHIgcGFja2FnZSkg bm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRyZW1vdmVfcGFja2FnZV9vdmVycmlkZV9yZW1vdmUoKnRoaXMsIHBhY2thZ2UpOworK2Jvb2wK KytUcmVlZmlsZTo6cmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVtb3ZlICg6OnJ1c3Q6OlN0ciBw YWNrYWdlKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVtb3ZlICgqdGhpcywgcGFja2Fn ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6Omhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1vdmVf bmFtZSg6OnJ1c3Q6OlN0ciBuYW1lKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19wYWNrYWdlc19vdmVycmlkZV9yZW1v dmVfbmFtZSgqdGhpcywgbmFtZSk7CisrYm9vbAorK1RyZWVmaWxlOjpoYXNfcGFja2FnZXNfb3Zl cnJpZGVfcmVtb3ZlX25hbWUgKDo6cnVzdDo6U3RyIG5hbWUpIGNvbnN0IG5vZXhjZXB0Cisrewor KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfcGFja2Fn ZXNfb3ZlcnJpZGVfcmVtb3ZlX25hbWUgKCp0aGlzLCBuYW1lKTsKKyB9CisgCistYm9vbCBUcmVl ZmlsZTo6cmVtb3ZlX2FsbF9vdmVycmlkZXMoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfb3ZlcnJpZGVzKCp0aGlz KTsKKytib29sCisrVHJlZWZpbGU6OnJlbW92ZV9hbGxfb3ZlcnJpZGVzICgpIG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRyZW1vdmVf YWxsX292ZXJyaWRlcyAoKnRoaXMpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpyZW1vdmVfYWxs X3BhY2thZ2VzKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRyZW1vdmVfYWxsX3BhY2thZ2VzKCp0aGlzKTsKKytib29sCisrVHJlZWZp bGU6OnJlbW92ZV9hbGxfcGFja2FnZXMgKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJlbW92ZV9hbGxfcGFja2FnZXMgKCp0aGlz KTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfZXhj bHVkZV9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4KKytUcmVlZmlsZTo6Z2V0X2V4Y2x1ZGVfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQK Kyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4g cmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZXhj bHVkZV9wYWNrYWdlcygqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjpt b3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9leGNsdWRlX3BhY2thZ2VzICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0 dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcg VHJlZWZpbGU6OmdldF9wbGF0Zm9ybV9tb2R1bGUoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0 OjpTdHJpbmcKKytUcmVlZmlsZTo6Z2V0X3BsYXRmb3JtX21vZHVsZSAoKSBjb25zdCBub2V4Y2Vw dAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7Cist ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3BsYXRmb3JtX21vZHVs ZSgqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9wbGF0 Zm9ybV9tb2R1bGUgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g VHJlZWZpbGU6OmdldF9pbnN0YWxsX2xhbmdzKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6 VmVjPDo6cnVzdDo6U3RyaW5nPgorK1RyZWVmaWxlOjpnZXRfaW5zdGFsbF9sYW5ncyAoKSBjb25z dCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9pbnN0YWxsX2xhbmdzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkZ2V0X2luc3RhbGxfbGFuZ3MgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Cisr ICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0 cmluZyBUcmVlZmlsZTo6Zm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8oKSBjb25zdCBub2V4Y2Vw dCB7CisrOjpydXN0OjpTdHJpbmcKKytUcmVlZmlsZTo6Zm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFj cm8gKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6 U3RyaW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGZvcm1hdF9pbnN0YWxsX2xhbmdzX21hY3JvKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8gKCp0aGlzLCAmcmV0 dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0K KyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gVHJlZWZpbGU6OmdldF9sb2NrZmlsZV9y ZXBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytU cmVlZmlsZTo6Z2V0X2xvY2tmaWxlX3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpy dXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7Cist ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2tmaWxlX3JlcG9z KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2xvY2tm aWxlX3JlcG9zICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3Zl IChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHIgVHJlZWZpbGU6OmdldF9yZWYo KSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gOjpydXN0OjppbXBsPDo6cnVzdDo6U3RyPjo6 bmV3X3VuY2hlY2tlZChycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Jl ZigqdGhpcykpOworKzo6cnVzdDo6U3RyCisrVHJlZWZpbGU6OmdldF9yZWYgKCkgY29uc3Qgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gOjpydXN0OjppbXBsPDo6cnVzdDo6U3RyPjo6bmV3X3VuY2hl Y2tlZCAoCisrICAgICAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9y ZWYgKCp0aGlzKSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmdldF9jbGl3cmFwKCkgY29uc3Qg bm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmls ZSRnZXRfY2xpd3JhcCgqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpnZXRfY2xpd3JhcCAoKSBj b25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkZ2V0X2NsaXdyYXAgKCp0aGlzKTsKKyB9CisgCistOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfY2xpd3JhcF9iaW5hcmllcygpIGNvbnN0IG5vZXhjZXB0 IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X2NsaXdyYXBf YmluYXJpZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY2xpd3JhcF9iaW5hcmllcygqdGhpcywgJnJldHVybiQu dmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jbGl3cmFwX2JpbmFyaWVzICgqdGhp cywgJnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVl KTsKKyB9CisgCistdm9pZCBUcmVlZmlsZTo6c2V0X2NsaXdyYXAoYm9vbCBlbmFibGVkKSBub2V4 Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2V0X2NsaXdy YXAoKnRoaXMsIGVuYWJsZWQpOworK3ZvaWQKKytUcmVlZmlsZTo6c2V0X2NsaXdyYXAgKGJvb2wg ZW5hYmxlZCkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkc2V0X2NsaXdyYXAgKCp0aGlzLCBlbmFibGVkKTsKKyB9CisgCistOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfY29udGFpbmVyX2NtZCgpIGNvbnN0IG5vZXhj ZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X2NvbnRh aW5lcl9jbWQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY29udGFpbmVyX2NtZCgqdGhpcywgJnJldHVybiQudmFs dWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jb250YWluZXJfY21kICgqdGhpcywgJnJl dHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9 CisgCistYm9vbCBUcmVlZmlsZTo6Z2V0X3JlYWRvbmx5X2V4ZWN1dGFibGVzKCkgY29uc3Qgbm9l eGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRn ZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6Z2V0X3Jl YWRvbmx5X2V4ZWN1dGFibGVzICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfcmVhZG9ubHlfZXhlY3V0YWJsZXMg KCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6Z2V0X2RvY3VtZW50YXRpb24oKSBjb25z dCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9kb2N1bWVudGF0aW9uKCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6OmdldF9kb2N1 bWVudGF0aW9uICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfZG9jdW1lbnRhdGlvbiAoKnRoaXMpOworIH0KKyAK Ky1ib29sIFRyZWVmaWxlOjpnZXRfcmVjb21tZW5kcygpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJl dHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlY29tbWVuZHMo KnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6Z2V0X3JlY29tbWVuZHMgKCkgY29uc3Qgbm9leGNl cHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9yZWNvbW1lbmRzICgqdGhpcyk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmdldF9zZWxpbnV4 KCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfc2VsaW51eCgqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpnZXRfc2Vs aW51eCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3NlbGludXggKCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVl ZmlsZTo6Z2V0X3N5c3VzZXJzX2lzX2ZvcmNlZCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVy biBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3N5c3VzZXJzX2lzX2Zv cmNlZCgqdGhpcyk7CisrYm9vbAorK1RyZWVmaWxlOjpnZXRfc3lzdXNlcnNfaXNfZm9yY2VkICgp IGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRnZXRfc3lzdXNlcnNfaXNfZm9yY2VkICgqdGhpcyk7CisgfQorIAorLTo6c3Rk Ojp1aW50MzJfdCBUcmVlZmlsZTo6Z2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbigpIGNvbnN0IG5v ZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbigqdGhpcyk7CisrOjpzdGQ6OnVpbnQzMl90CisrVHJl ZWZpbGU6OmdldF9zZWxpbnV4X2xhYmVsX3ZlcnNpb24gKCkgY29uc3Qgbm9leGNlcHQKKyt7Cisr ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9zZWxpbnV4 X2xhYmVsX3ZlcnNpb24gKCp0aGlzKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcgVHJlZWZpbGU6 OmdldF9ncGdfa2V5KCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrVHJlZWZp bGU6OmdldF9ncGdfa2V5ICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVu aW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRUcmVlZmlsZSRnZXRfZ3BnX2tleSgqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9ncGdfa2V5ICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistOjpydXN0OjpTdHJp bmcgVHJlZWZpbGU6OmdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZmaXgoKSBjb25zdCBub2V4Y2Vw dCB7CisrOjpydXN0OjpTdHJpbmcKKytUcmVlZmlsZTo6Z2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1 ZmZpeCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0 OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCgqdGhpcywgJnJldHVybiQudmFsdWUpOwor LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZmaXggKCp0aGlz LCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpnZXRfY29udGFpbmVyKCkgY29uc3Qgbm9leGNlcHQg eworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfY29u dGFpbmVyKCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6OmdldF9jb250YWluZXIgKCkgY29uc3Qg bm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9jb250YWluZXIgKCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVlZmlsZTo6Z2V0X21h Y2hpbmVpZF9jb21wYXQoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9tYWNoaW5laWRfY29tcGF0KCp0aGlzKTsKKyti b29sCisrVHJlZWZpbGU6OmdldF9tYWNoaW5laWRfY29tcGF0ICgpIGNvbnN0IG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfbWFj aGluZWlkX2NvbXBhdCAoKnRoaXMpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gVHJlZWZpbGU6OmdldF9ldGNfZ3JvdXBfbWVtYmVycygpIGNvbnN0IG5vZXhjZXB0IHsKKys6 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4KKytUcmVlZmlsZTo6Z2V0X2V0Y19ncm91cF9tZW1i ZXJzICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkZ2V0X2V0Y19ncm91cF9tZW1iZXJzKCp0aGlzLCAmcmV0dXJuJC52YWx1 ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2V0Y19ncm91cF9tZW1iZXJzICgqdGhpcywg JnJldHVybiQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK KyB9CisgCistYm9vbCBUcmVlZmlsZTo6Z2V0X2Jvb3RfbG9jYXRpb25faXNfbW9kdWxlcygpIGNv bnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X2Jvb3RfbG9jYXRpb25faXNfbW9kdWxlcygqdGhpcyk7CisrYm9vbAorK1RyZWVm aWxlOjpnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzICgpIGNvbnN0IG5vZXhjZXB0Cisrewor KyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfYm9vdF9s b2NhdGlvbl9pc19tb2R1bGVzICgqdGhpcyk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OnVzZV9r ZXJuZWxfaW5zdGFsbCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdXNlX2tlcm5lbF9pbnN0YWxsKCp0aGlzKTsKKytib29s CisrVHJlZWZpbGU6OnVzZV9rZXJuZWxfaW5zdGFsbCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysg IHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkdXNlX2tlcm5lbF9p bnN0YWxsICgqdGhpcyk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmdldF9pbWEoKSBjb25zdCBu b2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGdldF9pbWEoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6Z2V0X2ltYSAoKSBjb25zdCBub2V4 Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X2ltYSAoKnRoaXMpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X3Jl bGVhc2V2ZXIoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytUcmVlZmlsZTo6 Z2V0X3JlbGVhc2V2ZXIgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5p bml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFRyZWVmaWxlJGdldF9yZWxlYXNldmVyKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlbGVhc2V2ZXIgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7 CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJwbW9z dHJlZWN4eDo6UmVwb01ldGFkYXRhVGFyZ2V0IFRyZWVmaWxlOjpnZXRfcmVwb19tZXRhZGF0YV90 YXJnZXQoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvX21ldGFkYXRhX3RhcmdldCgqdGhpcyk7CisrOjpycG1v c3RyZWVjeHg6OlJlcG9NZXRhZGF0YVRhcmdldAorK1RyZWVmaWxlOjpnZXRfcmVwb19tZXRhZGF0 YV90YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9yZXBvX21ldGFkYXRhX3RhcmdldCAoKnRoaXMpOwor IH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6QWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IFRyZWVmaWxl OjpnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90YXJnZXQoKSBjb25zdCBub2V4Y2VwdCB7CistICBy ZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9hZHZpc29yaWVz X21ldGFkYXRhX3RhcmdldCgqdGhpcyk7CisrOjpycG1vc3RyZWVjeHg6OkFkdmlzb3JpZXNNZXRh ZGF0YVRhcmdldAorK1RyZWVmaWxlOjpnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90YXJnZXQgKCkg Y29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JFRyZWVmaWxlJGdldF9hZHZpc29yaWVzX21ldGFkYXRhX3RhcmdldCAoKnRoaXMpOworIH0KKyAK Ky1ib29sIFRyZWVmaWxlOjpycG1kYl9iYWNrZW5kX2lzX3RhcmdldCgpIGNvbnN0IG5vZXhjZXB0 IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcnBtZGJf YmFja2VuZF9pc190YXJnZXQoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6cnBtZGJfYmFja2Vu ZF9pc190YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHJwbWRiX2JhY2tlbmRfaXNfdGFyZ2V0ICgqdGhpcyk7 CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OnNob3VsZF9ub3JtYWxpemVfcnBtZGIoKSBjb25zdCBu b2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JHNob3VsZF9ub3JtYWxpemVfcnBtZGIoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6c2hvdWxk X25vcm1hbGl6ZV9ycG1kYiAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkc2hvdWxkX25vcm1hbGl6ZV9ycG1kYiAoKnRo aXMpOworIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6T3B0VXNyTG9jYWwgVHJlZWZpbGU6OmdldF9v cHRfdXNybG9jYWwoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcHRfdXNybG9jYWwoKnRoaXMpOworKzo6cnBtb3N0 cmVlY3h4OjpPcHRVc3JMb2NhbAorK1RyZWVmaWxlOjpnZXRfb3B0X3VzcmxvY2FsICgpIGNvbnN0 IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRnZXRfb3B0X3VzcmxvY2FsICgqdGhpcyk7CisgfQorIAorLTo6cnVzdDo6VmVjPDo6cnVz dDo6U3RyaW5nPiBUcmVlZmlsZTo6Z2V0X2ZpbGVzX3JlbW92ZV9yZWdleCg6OnJ1c3Q6OlN0ciBw YWNrYWdlKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Cisr VHJlZWZpbGU6OmdldF9maWxlc19yZW1vdmVfcmVnZXggKDo6cnVzdDo6U3RyIHBhY2thZ2UpIGNv bnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCgqdGhpcywgcGFja2FnZSwgJnJldHVybiQudmFs dWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9maWxlc19yZW1vdmVfcmVnZXggKCp0aGlz LCBwYWNrYWdlLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X2NoZWNrc3Vt KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdCB7CisrOjpydXN0 OjpTdHJpbmcKKytUcmVlZmlsZTo6Z2V0X2NoZWNrc3VtICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVl UmVwbyBjb25zdCAmcmVwbykgY29uc3QKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVz dDo6U3RyaW5nPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9jaGVja3N1bSgqdGhpcywgcmVw bywgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2No ZWNrc3VtICgqdGhpcywgcmVwbywgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIp CisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y IChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUp OworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X29zdHJlZV9yZWYoKSBjb25z dCBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytUcmVlZmlsZTo6Z2V0X29zdHJlZV9yZWYg KCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3Ry aW5nPiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdl dF9vc3RyZWVfcmVmKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1v dmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkZ2V0X29zdHJlZV9yZWYgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlNsaWNlPDo6cnBtb3N0 cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4gVHJlZWZpbGU6OmdldF9yZXBvX3BhY2thZ2VzKCkg Y29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OlNsaWNlPDo6 cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4+OjpzbGljZShycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3JlcG9fcGFja2FnZXMoKnRoaXMpKTsKKys6OnJ1c3Q6 OlNsaWNlPDo6cnBtb3N0cmVlY3h4OjpSZXBvUGFja2FnZSBjb25zdD4KKytUcmVlZmlsZTo6Z2V0 X3JlcG9fcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gOjpydXN0Ojpp bXBsPDo6cnVzdDo6U2xpY2U8OjpycG1vc3RyZWVjeHg6OlJlcG9QYWNrYWdlIGNvbnN0Pj46OnNs aWNlICgKKysgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3Jl cG9fcGFja2FnZXMgKCp0aGlzKSk7CisgfQorIAorLXZvaWQgVHJlZWZpbGU6OmNsZWFyX3JlcG9f cGFja2FnZXMoKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkY2xlYXJfcmVwb19wYWNrYWdlcygqdGhpcyk7Cisrdm9pZAorK1RyZWVmaWxlOjpjbGVh cl9yZXBvX3BhY2thZ2VzICgpIG5vZXhjZXB0CisreworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGNsZWFyX3JlcG9fcGFja2FnZXMgKCp0aGlzKTsKKyB9CisgCistdm9p ZCBUcmVlZmlsZTo6cHJldHR5cHJpbnRfanNvbl9zdGRvdXQoKSBjb25zdCBub2V4Y2VwdCB7Cist ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJldHR5cHJpbnRfanNvbl9z dGRvdXQoKnRoaXMpOworK3ZvaWQKKytUcmVlZmlsZTo6cHJldHR5cHJpbnRfanNvbl9zdGRvdXQg KCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkcHJldHR5cHJpbnRfanNvbl9zdGRvdXQgKCp0aGlzKTsKKyB9CisgCistdm9pZCBUcmVl ZmlsZTo6cHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MoKSBjb25zdCBub2V4Y2VwdCB7CistICBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZGVwcmVjYXRpb25fd2Fy bmluZ3MoKnRoaXMpOworK3ZvaWQKKytUcmVlZmlsZTo6cHJpbnRfZGVwcmVjYXRpb25fd2Fybmlu Z3MgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQk VHJlZWZpbGUkcHJpbnRfZGVwcmVjYXRpb25fd2FybmluZ3MgKCp0aGlzKTsKKyB9CisgCistdm9p ZCBUcmVlZmlsZTo6cHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMoKSBjb25zdCBub2V4Y2VwdCB7 CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkcHJpbnRfZXhwZXJpbWVu dGFsX25vdGljZXMoKnRoaXMpOworK3ZvaWQKKytUcmVlZmlsZTo6cHJpbnRfZXhwZXJpbWVudGFs X25vdGljZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkVHJlZWZpbGUkcHJpbnRfZXhwZXJpbWVudGFsX25vdGljZXMgKCp0aGlzKTsKKyB9Cisg Cistdm9pZCBUcmVlZmlsZTo6c2FuaXR5Y2hlY2tfZXh0ZXJuYWxzKCkgY29uc3QgeworLSAgOjpy dXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRy ZWVmaWxlJHNhbml0eWNoZWNrX2V4dGVybmFscygqdGhpcyk7CistICBpZiAoZXJyb3IkLnB0cikg eworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7 CistICB9Cisrdm9pZAorK1RyZWVmaWxlOjpzYW5pdHljaGVja19leHRlcm5hbHMgKCkgY29uc3QK Kyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkVHJlZWZpbGUkc2FuaXR5Y2hlY2tfZXh0ZXJuYWxzICgqdGhpcyk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+IFRyZWVmaWxlOjppbXBvcnRlcl9mbGFncyg6OnJ1 c3Q6OlN0ciBwa2dfbmFtZSkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIDo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPjo6ZnJvbV9yYXcocnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGltcG9ydGVyX2ZsYWdzKCp0aGlzLCBwa2dfbmFtZSkp OworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPgorK1RyZWVm aWxlOjppbXBvcnRlcl9mbGFncyAoOjpydXN0OjpTdHIgcGtnX25hbWUpIGNvbnN0IG5vZXhjZXB0 CisreworKyAgcmV0dXJuIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZs YWdzPjo6ZnJvbV9yYXcgKAorKyAgICAgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVl ZmlsZSRpbXBvcnRlcl9mbGFncyAoKnRoaXMsIHBrZ19uYW1lKSk7CisgfQorIAorLTo6cnVzdDo6 U3RyaW5nIFRyZWVmaWxlOjp3cml0ZV9yZXBvdmFycyg6OnN0ZDo6aW50MzJfdCB3b3JrZGlyX2Rm ZF9yYXcpIGNvbnN0IHsKKys6OnJ1c3Q6OlN0cmluZworK1RyZWVmaWxlOjp3cml0ZV9yZXBvdmFy cyAoOjpzdGQ6OmludDMyX3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdAorK3sKKyAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkd3JpdGVf cmVwb3ZhcnMoKnRoaXMsIHdvcmtkaXJfZGZkX3JhdywgJnJldHVybiQudmFsdWUpOworLSAgaWYg KGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUp OworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJHdyaXRlX3JlcG92YXJzICgKKysgICAgICAqdGhpcywgd29ya2Rpcl9k ZmRfcmF3LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZv aWQgVHJlZWZpbGU6OnNldF9yZWxlYXNldmVyKDo6cnVzdDo6U3RyIHJlbGVhc2V2ZXIpIHsKKy0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRzZXRfcmVsZWFzZXZlcigqdGhpcywgcmVsZWFzZXZlcik7CistICBpZiAoZXJy b3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9y KGVycm9yJCk7CistICB9Cisrdm9pZAorK1RyZWVmaWxlOjpzZXRfcmVsZWFzZXZlciAoOjpydXN0 OjpTdHIgcmVsZWFzZXZlcikKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysg ICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfcmVsZWFzZXZl ciAoKnRoaXMsIHJlbGVhc2V2ZXIpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAg ICB9CisgfQorIAorLXZvaWQgVHJlZWZpbGU6OnNldF9yZWNvbW1lbmRzKGJvb2wgdmFsKSB7Cist ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkc2V0X3JlY29tbWVuZHMoKnRoaXMsIHZhbCk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9Cisrdm9pZAorK1RyZWVmaWxlOjpzZXRfcmVjb21tZW5kcyAoYm9vbCB2YWwpCisr eworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJHNldF9yZWNvbW1lbmRzICgqdGhpcywgdmFsKTsKKysgIGlmIChlcnJv ciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+ OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIFRyZWVmaWxlOjplbmFibGVf cmVwbyg6OnJ1c3Q6OlN0ciByZXBvKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZW5hYmxlX3JlcG8oKnRoaXMs IHJlcG8pOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytUcmVlZmlsZTo6ZW5h YmxlX3JlcG8gKDo6cnVzdDo6U3RyIHJlcG8pCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGVuYWJsZV9yZXBv ICgqdGhpcywgcmVwbyk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9 CisgCistdm9pZCBUcmVlZmlsZTo6ZGlzYWJsZV9yZXBvKDo6cnVzdDo6U3RyIHJlcG8pIHsKKy0g IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRkaXNhYmxlX3JlcG8oKnRoaXMsIHJlcG8pOworLSAgaWYgKGVycm9yJC5wdHIp IHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQp OworLSAgfQorK3ZvaWQKKytUcmVlZmlsZTo6ZGlzYWJsZV9yZXBvICg6OnJ1c3Q6OlN0ciByZXBv KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRkaXNhYmxlX3JlcG8gKCp0aGlzLCByZXBvKTsKKysgIGlmIChl cnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIFRyZWVmaWxlOjp2YWxp ZGF0ZV9mb3JfY29udGFpbmVyKCkgY29uc3QgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJHZhbGlkYXRlX2Zvcl9j b250YWluZXIoKnRoaXMpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytUcmVl ZmlsZTo6dmFsaWRhdGVfZm9yX2NvbnRhaW5lciAoKSBjb25zdAorK3sKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSR2 YWxpZGF0ZV9mb3JfY29udGFpbmVyICgqdGhpcyk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAg eworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9y JCk7CisrICAgIH0KKyB9CisgCistOjpycG1vc3RyZWVjeHg6OlJlZnNwZWMgVHJlZWZpbGU6Omdl dF9iYXNlX3JlZnNwZWMoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpycG1vc3RyZWVjeHg6OlJlZnNw ZWMKKytUcmVlZmlsZTo6Z2V0X2Jhc2VfcmVmc3BlYyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAg IDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OlJlZnNwZWM+IHJldHVybiQ7Cist ICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X2Jhc2VfcmVmc3BlYygq dGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFs dWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9iYXNlX3Jl ZnNwZWMgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJl dHVybiQudmFsdWUpOworIH0KKyAKKy12b2lkIFRyZWVmaWxlOjpyZWJhc2UoOjpydXN0OjpTdHIg bmV3X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1c3RvbV9vcmlnaW5fdXJsLCA6OnJ1c3Q6OlN0ciBj dXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkVHJlZWZpbGUkcmViYXNlKCp0aGlzLCBuZXdfcmVmc3BlYywgY3VzdG9tX29y aWdpbl91cmwsIGN1c3RvbV9vcmlnaW5fZGVzY3JpcHRpb24pOworK3ZvaWQKKytUcmVlZmlsZTo6 cmViYXNlICg6OnJ1c3Q6OlN0ciBuZXdfcmVmc3BlYywgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdp bl91cmwsCisrICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIgY3VzdG9tX29yaWdpbl9kZXNj cmlwdGlvbikgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJl ZWZpbGUkcmViYXNlICgqdGhpcywgbmV3X3JlZnNwZWMsIGN1c3RvbV9vcmlnaW5fdXJsLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tX29yaWdp bl9kZXNjcmlwdGlvbik7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIFRyZWVmaWxlOjpnZXRfb3Jp Z2luX2N1c3RvbV91cmwoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytUcmVl ZmlsZTo6Z2V0X29yaWdpbl9jdXN0b21fdXJsICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpy dXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4 eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV91cmwoKnRoaXMsICZy ZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3JpZ2luX2N1c3RvbV91 cmwgKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVy biQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0X29yaWdpbl9j dXN0b21fZGVzY3JpcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytU cmVlZmlsZTo6Z2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24gKCkgY29uc3Qgbm9leGNlcHQK Kyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiByZXR1cm4kOworLSAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9vcmlnaW5fY3VzdG9tX2Rl c2NyaXB0aW9uKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUo cmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUk Z2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRpb24gKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7Cisr ICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0 cmluZyBUcmVlZmlsZTo6Z2V0X292ZXJyaWRlX2NvbW1pdCgpIGNvbnN0IG5vZXhjZXB0IHsKKys6 OnJ1c3Q6OlN0cmluZworK1RyZWVmaWxlOjpnZXRfb3ZlcnJpZGVfY29tbWl0ICgpIGNvbnN0IG5v ZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJu JDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfb3ZlcnJpZGVf Y29tbWl0KCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0 dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0 X292ZXJyaWRlX2NvbW1pdCAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0 ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgVHJlZWZpbGU6OnNldF9vdmVy cmlkZV9jb21taXQoOjpydXN0OjpTdHIgY2hlY2tzdW0pIG5vZXhjZXB0IHsKKy0gIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfb3ZlcnJpZGVfY29tbWl0KCp0aGlzLCBj aGVja3N1bSk7Cisrdm9pZAorK1RyZWVmaWxlOjpzZXRfb3ZlcnJpZGVfY29tbWl0ICg6OnJ1c3Q6 OlN0ciBjaGVja3N1bSkgbm9leGNlcHQKKyt7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkVHJlZWZpbGUkc2V0X292ZXJyaWRlX2NvbW1pdCAoKnRoaXMsIGNoZWNrc3VtKTsKKyB9Cisg CistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfaW5pdHJhbWZzX2V0 Y19maWxlcygpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4K KytUcmVlZmlsZTo6Z2V0X2luaXRyYW1mc19ldGNfZmlsZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7 CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0 dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5pdHJh bWZzX2V0Y19maWxlcygqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjpt b3ZlKHJldHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVm aWxlJGdldF9pbml0cmFtZnNfZXRjX2ZpbGVzICgqdGhpcywgJnJldHVybiQudmFsdWUpOworKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistYm9vbCBUcmVlZmls ZTo6aGFzX2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGhhc19pbml0cmFtZnNfZXRjX2Zp bGVzKCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6Omhhc19pbml0cmFtZnNfZXRjX2ZpbGVzICgp IGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5 NCRUcmVlZmlsZSRoYXNfaW5pdHJhbWZzX2V0Y19maWxlcyAoKnRoaXMpOworIH0KKyAKKy1ib29s IFRyZWVmaWxlOjppbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNrKDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBmaWxlcykgbm9leGNlcHQgeworLSAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+PiBmaWxlcyQoOjpzdGQ6Om1vdmUoZmlsZXMpKTsKKy0gIHJl dHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaW5pdHJhbWZzX2V0Y19m aWxlc190cmFjaygqdGhpcywgJmZpbGVzJC52YWx1ZSk7CisrYm9vbAorK1RyZWVmaWxlOjppbml0 cmFtZnNfZXRjX2ZpbGVzX3RyYWNrICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMp IG5vZXhjZXB0CisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+PiBmaWxlcyQgKDo6c3RkOjptb3ZlIChmaWxlcykpOworKyAgcmV0dXJuIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3RyYWNr ICgqdGhpcywgJmZpbGVzJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6OmluaXRyYW1m c19ldGNfZmlsZXNfdW50cmFjayg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5v ZXhjZXB0IHsKKy0gIDo6cnVzdDo6TWFudWFsbHlEcm9wPDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPj4gZmlsZXMkKDo6c3RkOjptb3ZlKGZpbGVzKSk7CistICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFjaygqdGhp cywgJmZpbGVzJC52YWx1ZSk7CisrYm9vbAorK1RyZWVmaWxlOjppbml0cmFtZnNfZXRjX2ZpbGVz X3VudHJhY2sgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBmaWxlcykgbm9leGNlcHQKKyt7 CisrICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IGZp bGVzJCAoOjpzdGQ6Om1vdmUgKGZpbGVzKSk7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFRyZWVmaWxlJGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFjayAoKnRoaXMsICZm aWxlcyQudmFsdWUpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjppbml0cmFtZnNfZXRjX2ZpbGVz X3VudHJhY2tfYWxsKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRUcmVlZmlsZSRpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2tfYWxsKCp0aGlzKTsK Kytib29sCisrVHJlZWZpbGU6OmluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwgKCkgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxl JGluaXRyYW1mc19ldGNfZmlsZXNfdW50cmFja19hbGwgKCp0aGlzKTsKKyB9CisgCistYm9vbCBU cmVlZmlsZTo6Z2V0X2luaXRyYW1mc19yZWdlbmVyYXRlKCkgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5pdHJhbWZz X3JlZ2VuZXJhdGUoKnRoaXMpOworK2Jvb2wKKytUcmVlZmlsZTo6Z2V0X2luaXRyYW1mc19yZWdl bmVyYXRlICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKCp0aGlzKTsKKyB9 CisgCistOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IFRyZWVmaWxlOjpnZXRfaW5pdHJhbWZz X2FyZ3MoKSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+Cisr VHJlZWZpbGU6OmdldF9pbml0cmFtZnNfYXJncyAoKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOwor LSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0cmFtZnNfYXJn cygqdGhpcywgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQu dmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJGdldF9pbml0 cmFtZnNfYXJncyAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgVHJlZWZpbGU6OnNldF9pbml0cmFtZnNf cmVnZW5lcmF0ZShib29sIGVuYWJsZWQsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdz KSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6Ok1hbnVhbGx5RHJvcDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4+IGFyZ3MkKDo6c3RkOjptb3ZlKGFyZ3MpKTsKKy0gIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUoKnRoaXMsIGVuYWJs ZWQsICZhcmdzJC52YWx1ZSk7Cisrdm9pZAorK1RyZWVmaWxlOjpzZXRfaW5pdHJhbWZzX3JlZ2Vu ZXJhdGUgKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIG5v ZXhjZXB0CisreworKyAgOjpydXN0OjpNYW51YWxseURyb3A8OjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+PiBhcmdzJCAoOjpzdGQ6Om1vdmUgKGFyZ3MpKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRUcmVlZmlsZSRzZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKCp0aGlzLCBlbmFi bGVkLCAmYXJncyQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBUcmVlZmlsZTo6Z2V0 X3VuY29uZmlndXJlZF9zdGF0ZSgpIGNvbnN0IG5vZXhjZXB0IHsKKys6OnJ1c3Q6OlN0cmluZwor K1RyZWVmaWxlOjpnZXRfdW5jb25maWd1cmVkX3N0YXRlICgpIGNvbnN0IG5vZXhjZXB0Cisrewor ICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRnZXRfdW5jb25maWd1cmVkX3N0YXRlKCp0 aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1 ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkZ2V0X3VuY29uZmln dXJlZF9zdGF0ZSAoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92 ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6Om1heV9yZXF1aXJlX2xv Y2FsX2Fzc2VtYmx5KCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRj eHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSgqdGhpcyk7 CisrYm9vbAorK1RyZWVmaWxlOjptYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSAoKSBjb25zdCBu b2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZp bGUkbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkgKCp0aGlzKTsKKyB9CisgCistYm9vbCBUcmVl ZmlsZTo6aGFzX2FueV9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1v c3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkaGFzX2FueV9wYWNrYWdlcygqdGhpcyk7 CisrYm9vbAorK1RyZWVmaWxlOjpoYXNfYW55X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRoYXNfYW55 X3BhY2thZ2VzICgqdGhpcyk7CisgfQorIAorLWJvb2wgVHJlZWZpbGU6Om1lcmdlX3RyZWVmaWxl KDo6cnVzdDo6U3RyIHRyZWVmaWxlKSB7CisrYm9vbAorK1RyZWVmaWxlOjptZXJnZV90cmVlZmls ZSAoOjpydXN0OjpTdHIgdHJlZWZpbGUpCisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDxib29s PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFRyZWVmaWxlJG1lcmdlX3RyZWVmaWxlKCp0aGlzLCB0cmVlZmlsZSwg JnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0 OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6 c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3Ik CisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkVHJlZWZpbGUkbWVyZ2VfdHJl ZWZpbGUgKCp0aGlzLCB0cmVlZmlsZSwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5w dHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFs dWUpOworIH0KKyAKKy1ib29sIFRyZWVmaWxlOjpnZXRfbm9faW5pdHJhbWZzKCkgY29uc3Qgbm9l eGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRUcmVlZmlsZSRn ZXRfbm9faW5pdHJhbWZzKCp0aGlzKTsKKytib29sCisrVHJlZWZpbGU6OmdldF9ub19pbml0cmFt ZnMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFRyZWVmaWxlJGdldF9ub19pbml0cmFtZnMgKCp0aGlzKTsKKyB9CisgCistOjpzdGQ6 OnNpemVfdCBSZXBvUGFja2FnZTo6bGF5b3V0OjpzaXplKCkgbm9leGNlcHQgeworLSAgcmV0dXJu IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRzaXplb2Yo KTsKKys6OnN0ZDo6c2l6ZV90CisrUmVwb1BhY2thZ2U6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2Vw dAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2Uk b3BlcmF0b3Ikc2l6ZW9mICgpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IFJlcG9QYWNrYWdlOjps YXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRhbGlnbm9mKCk7CisrOjpzdGQ6OnNpemVfdAor K1JlcG9QYWNrYWdlOjpsYXlvdXQ6OmFsaWduICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRvcGVyYXRvciRhbGlnbm9mICgp OworIH0KKyAKKy06OnJ1c3Q6OlN0ciBSZXBvUGFja2FnZTo6Z2V0X3JlcG8oKSBjb25zdCBub2V4 Y2VwdCB7CistICByZXR1cm4gOjpydXN0OjppbXBsPDo6cnVzdDo6U3RyPjo6bmV3X3VuY2hlY2tl ZChycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2UkZ2V0X3JlcG8oKnRoaXMp KTsKKys6OnJ1c3Q6OlN0cgorK1JlcG9QYWNrYWdlOjpnZXRfcmVwbyAoKSBjb25zdCBub2V4Y2Vw dAorK3sKKysgIHJldHVybiA6OnJ1c3Q6OmltcGw8OjpydXN0OjpTdHI+OjpuZXdfdW5jaGVja2Vk ICgKKysgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUmVwb1BhY2thZ2UkZ2V0X3Jl cG8gKCp0aGlzKSk7CisrfQorKworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPgorK1JlcG9Q YWNrYWdlOjpnZXRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICA6OnJ1c3Q6Ok1h eWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPj4gcmV0dXJuJDsKKysgIHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRSZXBvUGFja2FnZSRnZXRfcGFja2FnZXMgKCp0aGlzLCAm cmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOwor IH0KKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gUmVwb1BhY2thZ2U6OmdldF9wYWNr YWdlcygpIGNvbnN0IG5vZXhjZXB0IHsKKysvLyBSZXR1cm4gdGhlIGxpc3Qgb2YgcmVwbyBjb25m aWd1cmF0aW9uIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAorKy8vIChlLmcuIFsiL2V0Yy95dW0ucmVw b3MuZCIsICIvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCJdKS4KKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4KKytnZXRfcmVwb3NfZGlycyAoKSBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5 YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFJlcG9QYWNrYWdlJGdldF9wYWNrYWdlcygqdGhpcywgJnJl dHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAg cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9yZXBvc19kaXJzICgmcmV0dXJuJC52YWx1 ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1 c3Q6OlN0cmluZyB2YXJzdWJzdGl0dXRlKDo6cnVzdDo6U3RyIHMsIDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmdmFycykgeworKzo6cnVzdDo6U3RyaW5n CisrdmFyc3Vic3RpdHV0ZSAoOjpydXN0OjpTdHIgcywgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVj eHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZ2YXJzKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmlu aXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJv ciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyc3Vic3RpdHV0ZShzLCB2YXJzLCAm cmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6 OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpz dGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkdmFyc3Vic3RpdHV0ZSAocywgdmFycywgJnJl dHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICBy ZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZlYXR1cmVzKCkgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPgorK2dldF9mZWF0dXJlcyAoKSBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+PiByZXR1cm4kOworLSAgcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9mZWF0dXJlcygmcmV0dXJuJC52YWx1ZSk7Cist ICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4 YnJpZGdlMSQxOTQkZ2V0X2ZlYXR1cmVzICgmcmV0dXJuJC52YWx1ZSk7CisrICByZXR1cm4gOjpz dGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OlN0cmluZyBnZXRfcnBt X2Jhc2VhcmNoKCkgbm9leGNlcHQgeworKzo6cnVzdDo6U3RyaW5nCisrZ2V0X3JwbV9iYXNlYXJj aCAoKSBub2V4Y2VwdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+ IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X3JwbV9iYXNlYXJj aCgmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7 CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZ2V0X3JwbV9iYXNlYXJjaCAoJnJldHVy biQudmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9Cisg CistOjpzdGQ6OmludDMyX3Qgc2VhbGVkX21lbWZkKDo6cnVzdDo6U3RyIGRlc2NyaXB0aW9uLCA6 OnJ1c3Q6OlNsaWNlPDo6c3RkOjp1aW50OF90IGNvbnN0PiBjb250ZW50KSB7CisrOjpzdGQ6Omlu dDMyX3QKKytzZWFsZWRfbWVtZmQgKDo6cnVzdDo6U3RyIGRlc2NyaXB0aW9uLCA6OnJ1c3Q6OlNs aWNlPDo6c3RkOjp1aW50OF90IGNvbnN0PiBjb250ZW50KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVV bmluaXQ8OjpzdGQ6OmludDMyX3Q+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkc2VhbGVkX21lbWZkKGRlc2NyaXB0 aW9uLCBjb250ZW50LCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9 CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6 OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRzZWFs ZWRfbWVtZmQgKGRlc2NyaXB0aW9uLCBjb250ZW50LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgcnVubmluZ19pbl9zeXN0ZW1kKCkgbm9leGNlcHQg eworLSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5uaW5nX2luX3N5c3Rl bWQoKTsKKytib29sCisrcnVubmluZ19pbl9zeXN0ZW1kICgpIG5vZXhjZXB0CisreworKyAgcmV0 dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRydW5uaW5nX2luX3N5c3RlbWQgKCk7Cisg fQorIAorLTo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCAqY2FsY3VsYXRlX2Fkdmlzb3JpZXNfZGlm Zig6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgY2hl Y2tzdW1fZnJvbSwgOjpydXN0OjpTdHIgY2hlY2tzdW1fdG8pIHsKKys6OnJwbW9zdHJlZWN4eDo6 R1ZhcmlhbnQgKgorK2NhbGN1bGF0ZV9hZHZpc29yaWVzX2RpZmYgKDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV9mcm9tLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGNoZWNrc3VtX3RvKQorK3sKKyAgIDo6 cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICo+IHJldHVybiQ7Cist ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkY2FsY3VsYXRlX2Fkdmlzb3JpZXNfZGlmZihyZXBvLCBjaGVja3N1bV9mcm9tLCBjaGVja3N1 bV90bywgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0 dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNhbGN1bGF0ZV9hZHZpc29yaWVz X2RpZmYgKAorKyAgICAgIHJlcG8sIGNoZWNrc3VtX2Zyb20sIGNoZWNrc3VtX3RvLCAmcmV0dXJu JC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVy biA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnVzdDo6U3RyaW5nIHRy YW5zbGF0ZV9wYXRoX2Zvcl9vc3RyZWUoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQgeworKzo6 cnVzdDo6U3RyaW5nCisrdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJlZSAoOjpydXN0OjpTdHIgcGF0 aCkgbm9leGNlcHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6U3RyaW5nPiBy ZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5zbGF0ZV9wYXRoX2Zv cl9vc3RyZWUocGF0aCwgJnJldHVybiQudmFsdWUpOworLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJl dHVybiQudmFsdWUpOworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5zbGF0ZV9w YXRoX2Zvcl9vc3RyZWUgKHBhdGgsICZyZXR1cm4kLnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6 bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6cnBtb3N0cmVlY3h4OjpMaXZlQXBwbHlT dGF0ZSBnZXRfbGl2ZV9hcHBseV9zdGF0ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBj b25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRl cGxveW1lbnQpIHsKKys6OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGUKKytnZXRfbGl2ZV9h cHBseV9zdGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qs CisrICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50 IGNvbnN0ICZkZXBsb3ltZW50KQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpycG1vc3Ry ZWVjeHg6OkxpdmVBcHBseVN0YXRlPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGdldF9saXZlX2FwcGx5X3N0YXRl KHN5c3Jvb3QsIGRlcGxveW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRy KSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3Ik KTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JGdldF9saXZlX2FwcGx5X3N0YXRlIChzeXNyb290LCBkZXBsb3ltZW50LCAmcmV0dXJuJC52 YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6 OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLWJvb2wgaGFzX2xpdmVfYXBwbHlf c3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBt b3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0ICZkZXBsb3ltZW50KSB7CisrYm9vbAor K2hhc19saXZlX2FwcGx5X3N0YXRlICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25z dCAmc3lzcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpCisreworICAgOjpydXN0OjpNYXliZVVuaW5p dDxib29sPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0 cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhhc19saXZlX2FwcGx5X3N0YXRlKHN5c3Jvb3QsIGRlcGxv eW1lbnQsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93 IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJl dHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGhhc19saXZlX2Fw cGx5X3N0YXRlIChzeXNyb290LCBkZXBsb3ltZW50LCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAo ZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVy cm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0 dXJuJC52YWx1ZSk7CisgfQorIAorLXZvaWQgYXBwbHlsaXZlX3N5bmNfcmVmKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0 ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkYXBwbHlsaXZlX3N5bmNf cmVmKHN5c3Jvb3QpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0Ojpp bXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKythcHBseWxp dmVfc3luY19yZWYgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290 KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhi cmlkZ2UxJDE5NCRhcHBseWxpdmVfc3luY19yZWYgKHN5c3Jvb3QpOworKyAgaWYgKGVycm9yJC5w dHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgdHJhbnNhY3Rpb25fYXBwbHlfbGl2 ZSg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3Ry ZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZ0YXJnZXQpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmFuc2FjdGlvbl9hcHBseV9s aXZlKHN5c3Jvb3QsIHRhcmdldCk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAor K3RyYW5zYWN0aW9uX2FwcGx5X2xpdmUgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNv bnN0ICZzeXNyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpH VmFyaWFudCBjb25zdCAmdGFyZ2V0KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHRyYW5zYWN0aW9uX2FwcGx5 X2xpdmUgKHN5c3Jvb3QsIHRhcmdldCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAg ICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7Cisr ICAgIH0KKyB9CisgCistdm9pZCBub3JtYWxpemVfZXRjX3NoYWRvdyg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZGZkKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkbm9ybWFsaXplX2V0Y19zaGFkb3cocm9vdGZzX2RmZCk7CistICBp ZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK25vcm1hbGl6ZV9ldGNfc2hhZG93ICg6OnN0 ZDo6aW50MzJfdCByb290ZnNfZGZkKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9y JCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRub3JtYWxpemVfZXRjX3NoYWRvdyAocm9v dGZzX2RmZCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVz dDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCist Ym9vbCBwcmVwYXJlX3JwbV9sYXllcmluZyg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6c3RkOjpp bnQzMl90IG1lcmdlX3Bhc3N3ZF9kaXIpIHsKKytib29sCisrcHJlcGFyZV9ycG1fbGF5ZXJpbmcg KDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpzdGQ6OmludDMyX3QgbWVyZ2VfcGFzc3dkX2RpcikK Kyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJl cHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcHJlcGFyZV9y cG1fbGF5ZXJpbmcocm9vdGZzLCBtZXJnZV9wYXNzd2RfZGlyLCAmcmV0dXJuJC52YWx1ZSk7Cist ICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52 YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRwcmVwYXJlX3JwbV9sYXllcmluZyAocm9vdGZzLCBtZXJnZV9w YXNzd2RfZGlyLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgewor KyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7 CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAor LXZvaWQgY29tcGxldGVfcnBtX2xheWVyaW5nKDo6c3RkOjppbnQzMl90IHJvb3RmcykgeworLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JGNvbXBsZXRlX3JwbV9sYXllcmluZyhyb290ZnMpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0g ICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAg fQorK3ZvaWQKKytjb21wbGV0ZV9ycG1fbGF5ZXJpbmcgKDo6c3RkOjppbnQzMl90IHJvb3RmcykK Kyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJp ZGdlMSQxOTQkY29tcGxldGVfcnBtX2xheWVyaW5nIChyb290ZnMpOworKyAgaWYgKGVycm9yJC5w dHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgZGVkdXBsaWNhdGVfdG1wZmlsZXNf ZW50cmllcyg6OnN0ZDo6aW50MzJfdCByb290ZnMpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVu IGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkZWR1cGxpY2F0ZV90bXBmaWxl c19lbnRyaWVzKHJvb3Rmcyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK2Rl ZHVwbGljYXRlX3RtcGZpbGVzX2VudHJpZXMgKDo6c3RkOjppbnQzMl90IHJvb3RmcykKKyt7Cisr ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyAocm9vdGZzKTsKKysgIGlmIChlcnJvciQu cHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIHBhc3N3ZF9jbGVhbnVwKDo6c3Rk OjppbnQzMl90IHJvb3RmcykgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jbGVhbnVwKHJvb3Rmcyk7CistICBpZiAo ZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK3Bhc3N3ZF9jbGVhbnVwICg6OnN0ZDo6aW50MzJf dCByb290ZnMpCisreworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZF9jbGVhbnVwIChyb290ZnMpOworKyAgaWYgKGVycm9y JC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46 OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgbWlncmF0ZV9ncm91cF9leGNl cHRfcm9vdCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBjb25zdCAmcHJlc2VydmVkX2dyb3VwcykgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG1pZ3JhdGVfZ3JvdXBfZXhjZXB0X3Jv b3Qocm9vdGZzLCBwcmVzZXJ2ZWRfZ3JvdXBzKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAg IHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0K Kyt2b2lkCisrbWlncmF0ZV9ncm91cF9leGNlcHRfcm9vdCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBjb25zdCAmcHJlc2VydmVkX2dyb3VwcykKKyt7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRtaWdyYXRlX2dyb3Vw X2V4Y2VwdF9yb290IChyb290ZnMsIHByZXNlcnZlZF9ncm91cHMpOworKyAgaWYgKGVycm9yJC5w dHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVy cm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLXZvaWQgbWlncmF0ZV9wYXNzd2RfZXhjZXB0 X3Jvb3QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBl cnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWlncmF0ZV9wYXNzd2RfZXhjZXB0 X3Jvb3Qocm9vdGZzKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKyt2b2lkCisrbWlncmF0 ZV9wYXNzd2RfZXhjZXB0X3Jvb3QgKDo6c3RkOjppbnQzMl90IHJvb3RmcykKKyt7CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbWln cmF0ZV9wYXNzd2RfZXhjZXB0X3Jvb3QgKHJvb3Rmcyk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBwYXNzd2RfY29tcG9zZV9wcmVwKDo6c3RkOjpp bnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkgeworLSAg OjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0 JHBhc3N3ZF9jb21wb3NlX3ByZXAocm9vdGZzLCB0cmVlZmlsZSk7CistICBpZiAoZXJyb3IkLnB0 cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9y JCk7CistICB9Cisrdm9pZAorK3Bhc3N3ZF9jb21wb3NlX3ByZXAgKDo6c3RkOjppbnQzMl90IHJv b3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSkKKyt7CisrICA6OnJ1c3Q6 OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dk X2NvbXBvc2VfcHJlcCAocm9vdGZzLCB0cmVlZmlsZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKyB9CisgCistdm9pZCBwYXNzd2RfY29tcG9zZV9wcmVwX3JlcG8oOjpz dGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLCA6 OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcHJldmlv dXNfY2hlY2tzdW0sIGJvb2wgdW5pZmllZF9jb3JlKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkcGFzc3dkX2NvbXBvc2VfcHJl cF9yZXBvKHJvb3RmcywgdHJlZWZpbGUsIHJlcG8sIHByZXZpb3VzX2NoZWNrc3VtLCB1bmlmaWVk X2NvcmUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytwYXNzd2RfY29tcG9z ZV9wcmVwX3JlcG8gKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlICZ0cmVlZmlsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBwcmV2aW91c19jaGVja3N1bSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZmllZF9jb3JlKQorK3sKKysgIDo6 cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRw YXNzd2RfY29tcG9zZV9wcmVwX3JlcG8gKAorKyAgICAgIHJvb3RmcywgdHJlZWZpbGUsIHJlcG8s IHByZXZpb3VzX2NoZWNrc3VtLCB1bmlmaWVkX2NvcmUpOworKyAgaWYgKGVycm9yJC5wdHIpCisr ICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChl cnJvciQpOworKyAgICB9CisgfQorIAorLWJvb2wgZGlyX2NvbnRhaW5zX3VpZCg6OnN0ZDo6aW50 MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKSB7CisrYm9vbAorK2Rpcl9jb250YWluc191 aWQgKDo6c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0ZDo6dWludDMyX3QgaWQpCisreworICAgOjpy dXN0OjpNYXliZVVuaW5pdDxib29sPiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4g ZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc191aWQoZGly ZmQsIGlkLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICBy ZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxl biBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRkaXJfY29udGFp bnNfdWlkIChkaXJmZCwgaWQsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQor KyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAo ZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsK KyB9CisgCistYm9vbCBkaXJfY29udGFpbnNfZ2lkKDo6c3RkOjppbnQzMl90IGRpcmZkLCA6OnN0 ZDo6dWludDMyX3QgaWQpIHsKKytib29sCisrZGlyX2NvbnRhaW5zX2dpZCAoOjpzdGQ6OmludDMy X3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCkKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PGJvb2w+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3Ry ZWVjeHgkY3h4YnJpZGdlMSQxOTQkZGlyX2NvbnRhaW5zX2dpZChkaXJmZCwgaWQsICZyZXR1cm4k LnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6 OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92 ZShyZXR1cm4kLnZhbHVlKTsKKy19CistCistdm9pZCBjaGVja19wYXNzd2RfZ3JvdXBfZW50cmll cyg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmZmZpX3JlcG8sIDo6c3RkOjppbnQz Ml90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVz dDo6U3RyIHByZXZpb3VzX3JldikgeworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzKGZm aV9yZXBvLCByb290ZnNfZGZkLCB0cmVlZmlsZSwgcHJldmlvdXNfcmV2KTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0g cnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JGRpcl9jb250YWluc19naWQgKGRpcmZkLCBpZCwg JnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJv dyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9Cisr ICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworK30KKysKKyt2b2lkCisrY2hl Y2tfcGFzc3dkX2dyb3VwX2VudHJpZXMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0 ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpT dHIgcHJldmlvdXNfcmV2KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRjaGVja19wYXNzd2RfZ3JvdXBfZW50cmllcyAoCisr ICAgICAgZmZpX3JlcG8sIHJvb3Rmc19kZmQsIHRyZWVmaWxlLCBwcmV2aW91c19yZXYpOworKyAg aWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0 OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisgfQorIAorLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpQYXNzd2REQj4gcGFzc3dkZGJfb3Blbig6OnN0ZDo6aW50MzJfdCByb290 ZnMpIHsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+CisrcGFzc3dkZGJf b3BlbiAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKQorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8 OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPj4gcmV0dXJuJDsKKy0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRwYXNz d2RkYl9vcGVuKHJvb3RmcywgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsK Ky0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOwor LSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0Ojpy ZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JHBhc3N3ZGRi X29wZW4gKHJvb3RmcywgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAg IHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0K KyAKKy06OnN0ZDo6c2l6ZV90IFBhc3N3ZERCOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7Cist ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJhdG9yJHNp emVvZigpOworKzo6c3RkOjpzaXplX3QKKytQYXNzd2REQjo6bGF5b3V0OjpzaXplICgpIG5vZXhj ZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRv cGVyYXRvciRzaXplb2YgKCk7CisgfQorIAorLTo6c3RkOjpzaXplX3QgUGFzc3dkREI6OmxheW91 dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JFBhc3N3ZERCJG9wZXJhdG9yJGFsaWdub2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrUGFzc3dk REI6OmxheW91dDo6YWxpZ24gKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4 JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZERCJG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAorLTo6 cnVzdDo6U3RyaW5nIFBhc3N3ZERCOjpsb29rdXBfdXNlcig6OnN0ZDo6dWludDMyX3QgdWlkKSBj b25zdCB7CisrOjpydXN0OjpTdHJpbmcKKytQYXNzd2REQjo6bG9va3VwX3VzZXIgKDo6c3RkOjp1 aW50MzJfdCB1aWQpIGNvbnN0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1c3Q6OlN0 cmluZz4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBfdXNlcigqdGhpcywgdWlkLCAmcmV0 dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6 Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysg ICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBfdXNlciAo KnRoaXMsIHVpZCwgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsK KysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQp OworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAK Ky06OnJ1c3Q6OlN0cmluZyBQYXNzd2REQjo6bG9va3VwX2dyb3VwKDo6c3RkOjp1aW50MzJfdCBn aWQpIGNvbnN0IHsKKys6OnJ1c3Q6OlN0cmluZworK1Bhc3N3ZERCOjpsb29rdXBfZ3JvdXAgKDo6 c3RkOjp1aW50MzJfdCBnaWQpIGNvbnN0CisreworICAgOjpydXN0OjpNYXliZVVuaW5pdDw6OnJ1 c3Q6OlN0cmluZz4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJw bW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2REQiRsb29rdXBfZ3JvdXAoKnRoaXMsIGdp ZCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJu IDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJy b3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkREIkbG9va3Vw X2dyb3VwICgqdGhpcywgZ2lkLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikK KysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Ig KGVycm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7 CisgfQorIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzPiBuZXdf cGFzc3dkX2VudHJpZXMoKSBub2V4Y2VwdCB7CistICByZXR1cm4gOjpydXN0OjpCb3g8OjpycG1v c3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+Ojpmcm9tX3JhdyhycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkbmV3X3Bhc3N3ZF9lbnRyaWVzKCkpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpQYXNzd2RFbnRyaWVzPgorK25ld19wYXNzd2RfZW50cmllcyAoKSBub2V4Y2VwdAorK3sKKysg IHJldHVybiA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmZyb21f cmF3ICgKKysgICAgICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbmV3X3Bhc3N3ZF9lbnRy aWVzICgpKTsKKyB9CisgCistOjpzdGQ6OnNpemVfdCBQYXNzd2RFbnRyaWVzOjpsYXlvdXQ6OnNp emUoKSBub2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBh c3N3ZEVudHJpZXMkb3BlcmF0b3Ikc2l6ZW9mKCk7CisrOjpzdGQ6OnNpemVfdAorK1Bhc3N3ZEVu dHJpZXM6OmxheW91dDo6c2l6ZSAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRvcGVyYXRvciRzaXplb2YgKCk7CisgfQor IAorLTo6c3RkOjpzaXplX3QgUGFzc3dkRW50cmllczo6bGF5b3V0OjphbGlnbigpIG5vZXhjZXB0 IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRv cGVyYXRvciRhbGlnbm9mKCk7CisrOjpzdGQ6OnNpemVfdAorK1Bhc3N3ZEVudHJpZXM6OmxheW91 dDo6YWxpZ24gKCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JFBhc3N3ZEVudHJpZXMkb3BlcmF0b3IkYWxpZ25vZiAoKTsKKyB9CisgCistdm9pZCBQ YXNzd2RFbnRyaWVzOjphZGRfZ3JvdXBfY29udGVudCg6OnN0ZDo6aW50MzJfdCByb290ZnMsIDo6 cnVzdDo6U3RyIHBhdGgpIHsKKy0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9z dHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRQYXNzd2RFbnRyaWVzJGFkZF9ncm91cF9jb250ZW50KCp0 aGlzLCByb290ZnMsIHBhdGgpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytQ YXNzd2RFbnRyaWVzOjphZGRfZ3JvdXBfY29udGVudCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6 OnJ1c3Q6OlN0ciBwYXRoKQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAg ICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkYWRkX2dyb3Vw X2NvbnRlbnQgKCp0aGlzLCByb290ZnMsIHBhdGgpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAg IHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJv ciQpOworKyAgICB9CisgfQorIAorLXZvaWQgUGFzc3dkRW50cmllczo6YWRkX3Bhc3N3ZF9jb250 ZW50KDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCkgeworLSAgOjpydXN0 OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3 ZEVudHJpZXMkYWRkX3Bhc3N3ZF9jb250ZW50KCp0aGlzLCByb290ZnMsIHBhdGgpOworLSAgaWYg KGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+Ojpl cnJvcihlcnJvciQpOworLSAgfQorK3ZvaWQKKytQYXNzd2RFbnRyaWVzOjphZGRfcGFzc3dkX2Nv bnRlbnQgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpydXN0OjpTdHIgcGF0aCkKKyt7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRQYXNzd2RFbnRyaWVzJGFkZF9wYXNzd2RfY29udGVudCAoKnRoaXMsIHJvb3Rmcywg cGF0aCk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6 aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistYm9v bCBQYXNzd2RFbnRyaWVzOjpjb250YWluc19ncm91cCg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdCBu b2V4Y2VwdCB7CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVu dHJpZXMkY29udGFpbnNfZ3JvdXAoKnRoaXMsIHVzZXIpOworK2Jvb2wKKytQYXNzd2RFbnRyaWVz Ojpjb250YWluc19ncm91cCAoOjpydXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQKKyt7Cisr ICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkY29udGFp bnNfZ3JvdXAgKCp0aGlzLCB1c2VyKTsKKyB9CisgCistYm9vbCBQYXNzd2RFbnRyaWVzOjpjb250 YWluc191c2VyKDo6cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dkRW50cmllcyRjb250YWluc191c2VyKCp0 aGlzLCB1c2VyKTsKKytib29sCisrUGFzc3dkRW50cmllczo6Y29udGFpbnNfdXNlciAoOjpydXN0 OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4 eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkY29udGFpbnNfdXNlciAoKnRoaXMsIHVzZXIpOwor IH0KKyAKKy06OnN0ZDo6dWludDMyX3QgUGFzc3dkRW50cmllczo6bG9va3VwX3VzZXJfaWQoOjpy dXN0OjpTdHIgdXNlcikgY29uc3QgeworKzo6c3RkOjp1aW50MzJfdAorK1Bhc3N3ZEVudHJpZXM6 Omxvb2t1cF91c2VyX2lkICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdAorK3sKKyAgIDo6cnVzdDo6 TWF5YmVVbmluaXQ8OjpzdGQ6OnVpbnQzMl90PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMk bG9va3VwX3VzZXJfaWQoKnRoaXMsIHVzZXIsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysg IDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJy aWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX3VzZXJfaWQgKCp0aGlzLCB1c2VyLCAmcmV0 dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6 cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKysgIHJl dHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAorLTo6c3RkOjp1aW50MzJf dCBQYXNzd2RFbnRyaWVzOjpsb29rdXBfZ3JvdXBfaWQoOjpydXN0OjpTdHIgZ3JvdXApIGNvbnN0 IHsKKys6OnN0ZDo6dWludDMyX3QKKytQYXNzd2RFbnRyaWVzOjpsb29rdXBfZ3JvdXBfaWQgKDo6 cnVzdDo6U3RyIGdyb3VwKSBjb25zdAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpzdGQ6 OnVpbnQzMl90PiByZXR1cm4kOworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBt b3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JFBhc3N3ZEVudHJpZXMkbG9va3VwX2dyb3VwX2lkKCp0 aGlzLCBncm91cCwgJnJldHVybiQudmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAg dGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQor LSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQ dHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkUGFzc3dk RW50cmllcyRsb29rdXBfZ3JvdXBfaWQgKCp0aGlzLCBncm91cCwgJnJldHVybiQudmFsdWUpOwor KyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8Ojpy dXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1v dmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnN0ZDo6c2l6ZV90IEV4dGVuc2lvbnM6Omxh eW91dDo6c2l6ZSgpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkRXh0ZW5zaW9ucyRvcGVyYXRvciRzaXplb2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrRXh0 ZW5zaW9uczo6bGF5b3V0OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9yJHNpemVvZiAoKTsKKyB9Cisg CistOjpzdGQ6OnNpemVfdCBFeHRlbnNpb25zOjpsYXlvdXQ6OmFsaWduKCkgbm9leGNlcHQgewor LSAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJG9wZXJhdG9y JGFsaWdub2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrRXh0ZW5zaW9uczo6bGF5b3V0OjphbGlnbiAo KSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0 ZW5zaW9ucyRvcGVyYXRvciRhbGlnbm9mICgpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9z dHJlZWN4eDo6RXh0ZW5zaW9ucz4gZXh0ZW5zaW9uc19sb2FkKDo6cnVzdDo6U3RyIHBhdGgsIDo6 cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFw cGluZz4gY29uc3QgJmJhc2VfcGtncykgeworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpF eHRlbnNpb25zPgorK2V4dGVuc2lvbnNfbG9hZCAoOjpydXN0OjpTdHIgcGF0aCwgOjpydXN0OjpT dHIgYmFzZWFyY2gsCisrICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4 eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJmJhc2VfcGtncykKKyt7CisgICA6OnJ1c3Q6Ok1heWJl VW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPj4gcmV0dXJuJDsK Ky0gIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRleHRlbnNpb25zX2xvYWQocGF0aCwgYmFzZWFyY2gsIGJhc2VfcGtncywgJnJldHVybiQu dmFsdWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6 cnVzdDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3Zl KHJldHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkZXh0ZW5zaW9uc19sb2FkIChwYXRoLCBiYXNl YXJjaCwgYmFzZV9wa2dzLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Cisg fQorIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBFeHRlbnNpb25zOjpnZXRfcmVwb3Mo KSBjb25zdCBub2V4Y2VwdCB7CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+CisrRXh0ZW5z aW9uczo6Z2V0X3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0CisreworICAgOjpydXN0OjpNYXliZVVu aW5pdDw6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4+IHJldHVybiQ7CistICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZXRfcmVwb3MoKnRoaXMsICZyZXR1cm4kLnZh bHVlKTsKKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJl ZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdldF9yZXBvcyAoKnRoaXMsICZyZXR1cm4k LnZhbHVlKTsKKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7CisgfQorIAor LTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBFeHRlbnNpb25zOjpnZXRfb3NfZXh0ZW5zaW9u X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PgorK0V4dGVuc2lvbnM6OmdldF9vc19leHRlbnNpb25fcGFja2FnZXMgKCkgY29uc3Qgbm9leGNl cHQKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n Pj4gcmV0dXJuJDsKKy0gIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJGdl dF9vc19leHRlbnNpb25fcGFja2FnZXMoKnRoaXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIHJldHVy biA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRFeHRlbnNpb25zJGdldF9vc19leHRlbnNpb25fcGFja2FnZXMgKCp0aGlzLCAmcmV0dXJu JC52YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAK Ky06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gRXh0ZW5zaW9uczo6Z2V0X2RldmVsb3BtZW50 X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQgeworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PgorK0V4dGVuc2lvbnM6OmdldF9kZXZlbG9wbWVudF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2Vw dAorK3sKKyAgIDo6cnVzdDo6TWF5YmVVbmluaXQ8OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ PiByZXR1cm4kOworLSAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4dGVuc2lvbnMkZ2V0 X2RldmVsb3BtZW50X3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICByZXR1cm4g OjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkRXh0ZW5zaW9ucyRnZXRfZGV2ZWxvcG1lbnRfcGFja2FnZXMgKCp0aGlzLCAmcmV0dXJuJC52 YWx1ZSk7CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy1i b29sIEV4dGVuc2lvbnM6OnN0YXRlX2NoZWNrc3VtX2NoYW5nZWQoOjpydXN0OjpTdHIgY2hrc3Vt LCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdCB7CisrYm9vbAorK0V4dGVuc2lvbnM6OnN0 YXRlX2NoZWNrc3VtX2NoYW5nZWQgKDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpydXN0OjpTdHIgb3V0 cHV0X2RpcikgY29uc3QKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PGJvb2w+IHJldHVybiQ7 CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdl MSQxOTQkRXh0ZW5zaW9ucyRzdGF0ZV9jaGVja3N1bV9jaGFuZ2VkKCp0aGlzLCBjaGtzdW0sIG91 dHB1dF9kaXIsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7CistICAgIHRo cm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsKKy0gIH0KKy0g IHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRFeHRlbnNpb25zJHN0YXRl X2NoZWNrc3VtX2NoYW5nZWQgKAorKyAgICAgICp0aGlzLCBjaGtzdW0sIG91dHB1dF9kaXIsICZy ZXR1cm4kLnZhbHVlKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cg OjpydXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAg cmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgCistdm9pZCBFeHRlbnNp b25zOjp1cGRhdGVfc3RhdGVfY2hlY2tzdW0oOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0 ciBvdXRwdXRfZGlyKSBjb25zdCB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyR1cGRhdGVfc3RhdGVfY2hlY2tz dW0oKnRoaXMsIGNoa3N1bSwgb3V0cHV0X2Rpcik7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAg ICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9 Cisrdm9pZAorK0V4dGVuc2lvbnM6OnVwZGF0ZV9zdGF0ZV9jaGVja3N1bSAoOjpydXN0OjpTdHIg Y2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBjb25zdAorK3sKKysgIDo6cnVzdDo6cmVw cjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JEV4 dGVuc2lvbnMkdXBkYXRlX3N0YXRlX2NoZWNrc3VtICgqdGhpcywgY2hrc3VtLCBvdXRwdXRfZGly KTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBs PDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAKKy12b2lkIEV4 dGVuc2lvbnM6OnNlcmlhbGl6ZV90b19kaXIoOjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Qg eworLSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRn ZTEkMTk0JEV4dGVuc2lvbnMkc2VyaWFsaXplX3RvX2RpcigqdGhpcywgb3V0cHV0X2Rpcik7Cist ICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJv cj46OmVycm9yKGVycm9yJCk7CistICB9Cisrdm9pZAorK0V4dGVuc2lvbnM6OnNlcmlhbGl6ZV90 b19kaXIgKDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0CisreworKyAgOjpydXN0OjpyZXBy OjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0 ZW5zaW9ucyRzZXJpYWxpemVfdG9fZGlyICgqdGhpcywgb3V0cHV0X2Rpcik7CisrICBpZiAoZXJy b3IkLnB0cikKKysgICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9y Pjo6ZXJyb3IgKGVycm9yJCk7CisrICAgIH0KKyB9CisgCistOjpydXN0OjpCb3g8OjpycG1vc3Ry ZWVjeHg6OlRyZWVmaWxlPiBFeHRlbnNpb25zOjpnZW5lcmF0ZV90cmVlZmlsZSg6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGUgY29uc3QgJnNyYykgY29uc3QgeworKzo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpUcmVlZmlsZT4KKytFeHRlbnNpb25zOjpnZW5lcmF0ZV90cmVlZmlsZSAoOjpycG1v c3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZzcmMpIGNvbnN0CisreworICAgOjpydXN0OjpNYXli ZVVuaW5pdDw6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+PiByZXR1cm4kOwor LSAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkID0gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEk MTk0JEV4dGVuc2lvbnMkZ2VuZXJhdGVfdHJlZWZpbGUoKnRoaXMsIHNyYywgJnJldHVybiQudmFs dWUpOworLSAgaWYgKGVycm9yJC5wdHIpIHsKKy0gICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVz dDo6RXJyb3I+OjplcnJvcihlcnJvciQpOworLSAgfQorLSAgcmV0dXJuIDo6c3RkOjptb3ZlKHJl dHVybiQudmFsdWUpOworKyAgOjpydXN0OjpyZXByOjpQdHJMZW4gZXJyb3IkCisrICAgICAgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkRXh0ZW5zaW9ucyRnZW5lcmF0ZV90cmVlZmlsZSAo KnRoaXMsIHNyYywgJnJldHVybiQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsK KysgICAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQp OworKyAgICB9CisrICByZXR1cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAK Ky06OnN0ZDo6c2l6ZV90IExvY2tmaWxlQ29uZmlnOjpsYXlvdXQ6OnNpemUoKSBub2V4Y2VwdCB7 CistICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9w ZXJhdG9yJHNpemVvZigpOworKzo6c3RkOjpzaXplX3QKKytMb2NrZmlsZUNvbmZpZzo6bGF5b3V0 OjpzaXplICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRMb2NrZmlsZUNvbmZpZyRvcGVyYXRvciRzaXplb2YgKCk7CisgfQorIAorLTo6c3RkOjpz aXplX3QgTG9ja2ZpbGVDb25maWc6OmxheW91dDo6YWxpZ24oKSBub2V4Y2VwdCB7CistICByZXR1 cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExvY2tmaWxlQ29uZmlnJG9wZXJhdG9yJGFs aWdub2YoKTsKKys6OnN0ZDo6c2l6ZV90CisrTG9ja2ZpbGVDb25maWc6OmxheW91dDo6YWxpZ24g KCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JExv Y2tmaWxlQ29uZmlnJG9wZXJhdG9yJGFsaWdub2YgKCk7CisgfQorIAorLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4gbG9ja2ZpbGVfcmVhZCg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcykgeworKzo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4KKytsb2NrZmlsZV9yZWFkICg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcykKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0 PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4+IHJldHVybiQ7Cist ICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkbG9ja2ZpbGVfcmVhZChmaWxlbmFtZXMsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJv ciQucHRyKSB7CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3Io ZXJyb3IkKTsKKy0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKy19 CistCistdm9pZCBsb2NrZmlsZV93cml0ZSg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpycG1vc3Ry ZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcGFja2FnZXMsIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2Jq ZWN0QXJyYXkgJnJwbW1kX3JlcG9zKSB7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkbG9ja2ZpbGVfd3JpdGUoZmlsZW5hbWUsIHBh Y2thZ2VzLCBycG1tZF9yZXBvcyk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6 OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CisrICA6OnJ1 c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2Ux JDE5NCRsb2NrZmlsZV9yZWFkIChmaWxlbmFtZXMsICZyZXR1cm4kLnZhbHVlKTsKKysgIGlmIChl cnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpydXN0OjppbXBsPDo6cnVzdDo6RXJy b3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1 cm4kLnZhbHVlKTsKKyt9CisrCisrdm9pZAorK2xvY2tmaWxlX3dyaXRlICg6OnJ1c3Q6OlN0ciBm aWxlbmFtZSwgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcGFja2FnZXMsCisrICAg ICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnJwbW1kX3JlcG9z KQorK3sKKysgIDo6cnVzdDo6cmVwcjo6UHRyTGVuIGVycm9yJAorKyAgICAgID0gcnBtb3N0cmVl Y3h4JGN4eGJyaWRnZTEkMTk0JGxvY2tmaWxlX3dyaXRlIChmaWxlbmFtZSwgcGFja2FnZXMsIHJw bW1kX3JlcG9zKTsKKysgIGlmIChlcnJvciQucHRyKQorKyAgICB7CisrICAgICAgdGhyb3cgOjpy dXN0OjppbXBsPDo6cnVzdDo6RXJyb3I+OjplcnJvciAoZXJyb3IkKTsKKysgICAgfQorIH0KKyAK Ky06OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gTG9ja2ZpbGVDb25m aWc6OmdldF9sb2NrZWRfcGFja2FnZXMoKSBjb25zdCB7CisrOjpydXN0OjpWZWM8OjpycG1vc3Ry ZWVjeHg6OkxvY2tlZFBhY2thZ2U+CisrTG9ja2ZpbGVDb25maWc6OmdldF9sb2NrZWRfcGFja2Fn ZXMgKCkgY29uc3QKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPj4gcmV0dXJuJDsKKy0gIDo6cnVzdDo6cmVwcjo6UHRy TGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRn ZXRfbG9ja2VkX3BhY2thZ2VzKCp0aGlzLCAmcmV0dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3Ik LnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVy cm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6 OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQKKysgICAgICA9IHJwbW9zdHJlZWN4eCRjeHhicmlk Z2UxJDE5NCRMb2NrZmlsZUNvbmZpZyRnZXRfbG9ja2VkX3BhY2thZ2VzICgqdGhpcywgJnJldHVy biQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGU+IG9yaWdpbl90b190cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6 R0tleUZpbGUgY29uc3QgJmtmKSB7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlPgorK29yaWdpbl90b190cmVlZmlsZSAoOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0 ICZrZikKKyt7CisgICA6OnJ1c3Q6Ok1heWJlVW5pbml0PDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUcmVlZmlsZT4+IHJldHVybiQ7CistICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQg PSBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3RvX3RyZWVmaWxlKGtmLCAmcmV0 dXJuJC52YWx1ZSk7CistICBpZiAoZXJyb3IkLnB0cikgeworLSAgICB0aHJvdyA6OnJ1c3Q6Omlt cGw8OjpydXN0OjpFcnJvcj46OmVycm9yKGVycm9yJCk7CistICB9CistICByZXR1cm4gOjpzdGQ6 Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICA6OnJ1c3Q6OnJlcHI6OlB0ckxlbiBlcnJvciQgPSBy cG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQxOTQkb3JpZ2luX3RvX3RyZWVmaWxlIChrZiwgJnJldHVy biQudmFsdWUpOworKyAgaWYgKGVycm9yJC5wdHIpCisrICAgIHsKKysgICAgICB0aHJvdyA6OnJ1 c3Q6OmltcGw8OjpydXN0OjpFcnJvcj46OmVycm9yIChlcnJvciQpOworKyAgICB9CisrICByZXR1 cm4gOjpzdGQ6Om1vdmUgKHJldHVybiQudmFsdWUpOworIH0KKyAKKy06OnJwbW9zdHJlZWN4eDo6 R0tleUZpbGUgKnRyZWVmaWxlX3RvX29yaWdpbig6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnRmKSB7CisrOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlICoKKyt0cmVlZmlsZV90b19vcmln aW4gKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSBjb25zdCAmdGYpCisreworICAgOjpydXN0OjpN YXliZVVuaW5pdDw6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgKj4gcmV0dXJuJDsKKy0gIDo6cnVz dDo6cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVl ZmlsZV90b19vcmlnaW4odGYsICZyZXR1cm4kLnZhbHVlKTsKKy0gIGlmIChlcnJvciQucHRyKSB7 CistICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IoZXJyb3IkKTsK Ky0gIH0KKy0gIHJldHVybiA6OnN0ZDo6bW92ZShyZXR1cm4kLnZhbHVlKTsKKysgIDo6cnVzdDo6 cmVwcjo6UHRyTGVuIGVycm9yJCA9IHJwbW9zdHJlZWN4eCRjeHhicmlkZ2UxJDE5NCR0cmVlZmls ZV90b19vcmlnaW4gKHRmLCAmcmV0dXJuJC52YWx1ZSk7CisrICBpZiAoZXJyb3IkLnB0cikKKysg ICAgeworKyAgICAgIHRocm93IDo6cnVzdDo6aW1wbDw6OnJ1c3Q6OkVycm9yPjo6ZXJyb3IgKGVy cm9yJCk7CisrICAgIH0KKysgIHJldHVybiA6OnN0ZDo6bW92ZSAocmV0dXJuJC52YWx1ZSk7Cisg fQorIAorLXZvaWQgb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJpcCg6OnJwbW9zdHJlZWN4eDo6R0tl eUZpbGUgY29uc3QgJmtmKSBub2V4Y2VwdCB7CistICBycG1vc3RyZWVjeHgkY3h4YnJpZGdlMSQx OTQkb3JpZ2luX3ZhbGlkYXRlX3JvdW5kdHJpcChrZik7Cisrdm9pZAorK29yaWdpbl92YWxpZGF0 ZV9yb3VuZHRyaXAgKDo6cnBtb3N0cmVlY3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIG5vZXhjZXB0 CisreworKyAgcnBtb3N0cmVlY3h4JGN4eGJyaWRnZTEkMTk0JG9yaWdpbl92YWxpZGF0ZV9yb3Vu ZHRyaXAgKGtmKTsKKyB9CisgCistOjpydXN0OjpTdHJpbmcgY2FjaGVfYnJhbmNoX3RvX25ldnJh KDo6cnVzdDo6U3RyIG5ldnJhKSBub2V4Y2VwdCB7CisrOjpydXN0OjpTdHJpbmcKKytjYWNoZV9i cmFuY2hfdG9fbmV2cmEgKDo6cnVzdDo6U3RyIG5ldnJhKSBub2V4Y2VwdAorK3sKKyAgIDo6cnVz dDo6TWF5YmVVbmluaXQ8OjpydXN0OjpTdHJpbmc+IHJldHVybiQ7CistICBycG1vc3RyZWVjeHgk Y3h4YnJpZGdlMSQxOTQkY2FjaGVfYnJhbmNoX3RvX25ldnJhKG5ldnJhLCAmcmV0dXJuJC52YWx1 ZSk7CistICByZXR1cm4gOjpzdGQ6Om1vdmUocmV0dXJuJC52YWx1ZSk7CisrICBycG1vc3RyZWVj eHgkY3h4YnJpZGdlMSQxOTQkY2FjaGVfYnJhbmNoX3RvX25ldnJhIChuZXZyYSwgJnJldHVybiQu dmFsdWUpOworKyAgcmV0dXJuIDo6c3RkOjptb3ZlIChyZXR1cm4kLnZhbHVlKTsKKyB9CisgfSAv LyBuYW1lc3BhY2UgcnBtb3N0cmVlY3h4CisgCistZXh0ZXJuICJDIiB7CistOjpycG1vc3RyZWVj eHg6OkJ1YmJsZXdyYXAgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGFs bG9jKCkgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxl d3JhcCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICopIG5vZXhjZXB0OworLXZv aWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAkZHJvcCg6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4gKnB0cikgbm9leGNlcHQ7CistCistOjpycG1v c3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGUgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRDb250YWluZXJJbWFnZVN0YXRlJGFsbG9jKCkgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRkZWFsbG9jKDo6cnBtb3N0cmVl Y3h4OjpDb250YWluZXJJbWFnZVN0YXRlICopIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkZHJvcCg6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT4gKnB0cikgbm9leGNlcHQ7CistCistOjpy cG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRl bXBFdGNHdWFyZCRhbGxvYygpIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFRlbXBFdGNHdWFyZCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQg Kikgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1 YXJkJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD4gKnB0cikg bm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwICpjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkYWxsb2MoKSBub2V4 Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0 UHJlcCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAqKSBub2V4 Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0 UHJlcCRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJl cD4gKnB0cikgbm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3Mg KmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGFsbG9jKCkgbm9l eGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFn cyRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzICopIG5vZXhjZXB0Owor LXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MkZHJvcCg6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gKnB0cikgbm9leGNl cHQ7CistCistOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyICpjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkUnBtSW1wb3J0ZXIkYWxsb2MoKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlciRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlciAqKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRS cG1JbXBvcnRlciRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj4g KnB0cikgbm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKmN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGFsbG9jKCkgbm9leGNlcHQ7Cistdm9pZCBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkZWFsbG9jKDo6cnBtb3N0cmVl Y3h4OjpIaXN0b3J5Q3R4ICopIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JEhpc3RvcnlDdHgkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9y eUN0eD4gKnB0cikgbm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICpj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5kbGUkYWxsb2MoKSBub2V4Y2VwdDsK Ky12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZSRkZWFsbG9jKDo6 cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZSAqKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRUb2tpb0hhbmRsZSRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVl Y3h4OjpUb2tpb0hhbmRsZT4gKnB0cikgbm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6OlRv a2lvRW50ZXJHdWFyZCAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFy ZCRhbGxvYygpIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRv a2lvRW50ZXJHdWFyZCRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKikg bm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1 YXJkJGRyb3AoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD4gKnB0 cikgbm9leGNlcHQ7CistCistOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICpjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkYWxsb2MoKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRn ZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSAqKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVl ZmlsZSRkcm9wKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gKnB0cikgbm9l eGNlcHQ7CistCistdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlk ZVJlcGxhY2VtZW50JG5ldyg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGRyb3AoOjpydXN0OjpWZWM8OjpycG1v c3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIpIG5vZXhjZXB0OworLTo6c3RkOjpz aXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVu dCRsZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+IGNv bnN0ICpwdHIpIG5vZXhjZXB0OworLTo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRy cG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRjYXBhY2l0eSg6OnJ1c3Q6OlZlYzw6OnJw bW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7Cist OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQgY29uc3QgKmN4eGJyaWRnZTEkcnVz dF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkZGF0YSg6OnJ1c3Q6OlZlYzw6 OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gY29uc3QgKnB0cikgbm9leGNlcHQ7 Cistdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2Vt ZW50JHJlc2VydmVfdG90YWwoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVw bGFjZW1lbnQ+ICpwdHIsIDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7Cistdm9pZCBj eHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHNldF9s ZW4oOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIs IDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1bmNhdGUoOjpydXN0OjpWZWM8Ojpy cG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVu KSBub2V4Y2VwdDsKKy0KKy12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmckbmV3KDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5n PiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0 cmVlY3h4JFN0cmluZ01hcHBpbmckZHJvcCg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3Ry aW5nTWFwcGluZz4gKnB0cikgbm9leGNlcHQ7CistOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGxlbig6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikgbm9leGNlcHQ7CistOjpzdGQ6OnNp emVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGNhcGFj aXR5KDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAqcHRy KSBub2V4Y2VwdDsKKy06OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZyBjb25zdCAqY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRkYXRhKDo6cnVzdDo6VmVj PDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKKy12 b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckcmVzZXJ2 ZV90b3RhbCg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwg OjpzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKKy12b2lkIGN4eGJyaWRnZTEkcnVzdF92 ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckc2V0X2xlbig6OnJ1c3Q6OlZlYzw6OnJwbW9z dHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwgOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0 OworLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyR0 cnVuY2F0ZSg6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gKnB0ciwg OjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OworLQorLTo6cnBtb3N0cmVlY3h4OjpQYXNzd2RE QiAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGFsbG9jKCkgbm9leGNlcHQ7 Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZGVhbGxvYyg6OnJw bW9zdHJlZWN4eDo6UGFzc3dkREIgKikgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkUGFzc3dkREIkZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFz c3dkREI+ICpwdHIpIG5vZXhjZXB0OworLQorLTo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVz ICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRhbGxvYygpIG5vZXhj ZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMkZGVh bGxvYyg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcyAqKSBub2V4Y2VwdDsKKy12b2lkIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzJGRyb3AoOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+ICpwdHIpIG5vZXhjZXB0OworLQorLTo6cnBt b3N0cmVlY3h4OjpFeHRlbnNpb25zICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5z aW9ucyRhbGxvYygpIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4 JEV4dGVuc2lvbnMkZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyAqKSBub2V4Y2Vw dDsKKy12b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRyb3AoOjpy dXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkV4dGVuc2lvbnM+ICpwdHIpIG5vZXhjZXB0OworLQor LTo6cnBtb3N0cmVlY3h4OjpMb2NrZmlsZUNvbmZpZyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JExvY2tmaWxlQ29uZmlnJGFsbG9jKCkgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6TG9j a2ZpbGVDb25maWcgKikgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkTG9ja2ZpbGVDb25maWckZHJvcCg6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2Zp bGVDb25maWc+ICpwdHIpIG5vZXhjZXB0OworLQorLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRy cG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRuZXcoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRkcm9wKDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyKSBub2V4Y2VwdDsKKy06OnN0ZDo6c2l6ZV90 IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkbGVuKDo6cnVz dDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiBjb25zdCAqcHRyKSBub2V4Y2Vw dDsKKy06OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tl ZFBhY2thZ2UkY2FwYWNpdHkoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2th Z2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OworLTo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdl IGNvbnN0ICpjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGRh dGEoOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIp IG5vZXhjZXB0OworLXZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2Vk UGFja2FnZSRyZXNlcnZlX3RvdGFsKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQ YWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OworLXZvaWQgY3h4 YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRzZXRfbGVuKDo6cnVz dDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90 IGxlbikgbm9leGNlcHQ7Cistdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRM b2NrZWRQYWNrYWdlJHRydW5jYXRlKDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQ YWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7CistCistc3RhdGljX2Fz c2VydCg6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8Ojpy cG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojp0eXBlPjo6dmFsdWUsICJkZWZpbml0aW9u IG9mIGA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbmAgaXMgcmVxdWlyZWQiKTsKKy1z dGF0aWNfYXNzZXJ0KHNpemVvZig6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xp ZW50Q29ubmVjdGlvbj4pID09IHNpemVvZih2b2lkICopLCAiIik7Cistc3RhdGljX2Fzc2VydChh bGlnbm9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9u PikgPT0gYWxpZ25vZih2b2lkICopLCAiIik7Cistdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIk cnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24kbnVsbCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gKnB0cikgbm9leGNlcHQgeworLSAgOjpuZXcg KHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+ KCk7CistfQorLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGllbnRD b25uZWN0aW9uJHJhdyg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbj4gKnB0ciwgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENv bm5lY3Rpb24+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQgeworLSAgOjpuZXcgKHB0cikgOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+KHJhdyk7CistfQor LTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPjo6ZWxl bWVudF90eXBlIGNvbnN0ICpjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVu dENvbm5lY3Rpb24kZ2V0KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRD b25uZWN0aW9uPiBjb25zdCAmcHRyKSBub2V4Y2VwdCB7CistICByZXR1cm4gcHRyLmdldCgpOwor LX0KKy06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46 OnBvaW50ZXIgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGllbnRDb25uZWN0 aW9uJHJlbGVhc2UoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5l Y3Rpb24+ICZwdHIpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBwdHIucmVsZWFzZSgpOworLX0KKy12 b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkQ2xpZW50Q29ubmVjdGlvbiRk cm9wKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAq cHRyKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6Omlz X2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPjo6dmFsdWU+e30ocHRy KTsKKy19CistCistc3RhdGljX2Fzc2VydCg6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8Ojpz dGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+Ojp0eXBlPjo6dmFsdWUs ICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZmAgaXMgcmVxdWlyZWQiKTsK Ky1zdGF0aWNfYXNzZXJ0KHNpemVvZig6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UlBNRGlmZj4pID09IHNpemVvZih2b2lkICopLCAiIik7Cistc3RhdGljX2Fzc2VydChhbGlnbm9m KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPikgPT0gYWxpZ25vZih2 b2lkICopLCAiIik7Cistdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQ TURpZmYkbnVsbCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKnB0 cikgbm9leGNlcHQgeworLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3Ry ZWVjeHg6OlJQTURpZmY+KCk7CistfQorLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9z dHJlZWN4eCRSUE1EaWZmJHJhdyg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBN RGlmZj4gKnB0ciwgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+Ojpw b2ludGVyIHJhdykgbm9leGNlcHQgeworLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+KHJhdyk7CistfQorLTo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6ZWxlbWVudF90eXBlIGNvbnN0ICpjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkZ2V0KDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpSUE1EaWZmPiBjb25zdCAmcHRyKSBub2V4Y2VwdCB7CistICByZXR1cm4gcHRy LmdldCgpOworLX0KKy06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46 OnBvaW50ZXIgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1EaWZmJHJlbGVh c2UoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICZwdHIpIG5vZXhj ZXB0IHsKKy0gIHJldHVybiBwdHIucmVsZWFzZSgpOworLX0KKy12b2lkIGN4eGJyaWRnZTEkdW5p cXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRkcm9wKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBt b3N0cmVlY3h4OjpSUE1EaWZmPiAqcHRyKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6OmRlbGV0ZXJf aWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6 dmFsdWU+e30ocHRyKTsKKy19CistCistc3RhdGljX2Fzc2VydCg6OnJ1c3Q6OmRldGFpbDo6aXNf Y29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6 dHlwZT46OnZhbHVlLCAiZGVmaW5pdGlvbiBvZiBgOjpycG1vc3RyZWVjeHg6OlByb2dyZXNzYCBp cyByZXF1aXJlZCIpOworLXN0YXRpY19hc3NlcnQoc2l6ZW9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4pID09IHNpemVvZih2b2lkICopLCAiIik7Cistc3RhdGlj X2Fzc2VydChhbGlnbm9mKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVz cz4pID09IGFsaWdub2Yodm9pZCAqKSwgIiIpOworLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRy JHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRudWxsKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpQcm9ncmVzcz4gKnB0cikgbm9leGNlcHQgeworLSAgOjpuZXcgKHB0cikgOjpzdGQ6OnVu aXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPigpOworLX0KKy12b2lkIGN4eGJyaWRn ZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUHJvZ3Jlc3MkcmF3KDo6c3RkOjp1bmlxdWVfcHRy PDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKnB0ciwgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlByb2dyZXNzPjo6cG9pbnRlciByYXcpIG5vZXhjZXB0IHsKKy0gIDo6bmV3IChw dHIpIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4ocmF3KTsKKy19 CistOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6ZWxlbWVudF90 eXBlIGNvbnN0ICpjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJGdl dCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+IGNvbnN0ICZwdHIp IG5vZXhjZXB0IHsKKy0gIHJldHVybiBwdHIuZ2V0KCk7CistfQorLTo6c3RkOjp1bmlxdWVfcHRy PDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz46OnBvaW50ZXIgY3h4YnJpZGdlMSR1bmlxdWVfcHRy JHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRyZWxlYXNlKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0 cmVlY3h4OjpQcm9ncmVzcz4gJnB0cikgbm9leGNlcHQgeworLSAgcmV0dXJuIHB0ci5yZWxlYXNl KCk7CistfQorLXZvaWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVz cyRkcm9wKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKnB0cikg bm9leGNlcHQgeworLSAgOjpydXN0OjpkZWxldGVyX2lmPDo6cnVzdDo6ZGV0YWlsOjppc19jb21w bGV0ZTw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojp2YWx1ZT57fShwdHIpOworLX0KKy0KKy1z dGF0aWNfYXNzZXJ0KDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6cmVtb3ZlX2V4 dGVudDw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojp0eXBlPjo6dmFsdWUsICJkZWZpbml0aW9uIG9m IGA6OnJwbW9zdHJlZWN4eDo6UnBtVHNgIGlzIHJlcXVpcmVkIik7Cistc3RhdGljX2Fzc2VydChz aXplb2YoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPikgPT0gc2l6ZW9m KHZvaWQgKiksICIiKTsKKy1zdGF0aWNfYXNzZXJ0KGFsaWdub2YoOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OlJwbVRzPikgPT0gYWxpZ25vZih2b2lkICopLCAiIik7Cistdm9pZCBj eHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJG51bGwoOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAqcHRyKSBub2V4Y2VwdCB7CistICA6Om5ldyAo cHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+KCk7CistfQorLXZv aWQgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRScG1UcyRyYXcoOjpzdGQ6OnVu aXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAqcHRyLCA6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UnBtVHM+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQgeworLSAgOjpuZXcg KHB0cikgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPihyYXcpOworLX0K Ky06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+OjplbGVtZW50X3R5cGUg Y29uc3QgKmN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkZ2V0KDo6c3Rk Ojp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gY29uc3QgJnB0cikgbm9leGNlcHQg eworLSAgcmV0dXJuIHB0ci5nZXQoKTsKKy19CistOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3Ry ZWVjeHg6OlJwbVRzPjo6cG9pbnRlciBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4 JFJwbVRzJHJlbGVhc2UoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAm cHRyKSBub2V4Y2VwdCB7CistICByZXR1cm4gcHRyLnJlbGVhc2UoKTsKKy19Cistdm9pZCBjeHhi cmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJGRyb3AoOjpzdGQ6OnVuaXF1ZV9w dHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAqcHRyKSBub2V4Y2VwdCB7CistICA6OnJ1c3Q6OmRl bGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpScG1U cz46OnZhbHVlPnt9KHB0cik7CistfQorLQorLXN0YXRpY19hc3NlcnQoOjpydXN0OjpkZXRhaWw6 OmlzX2NvbXBsZXRlPDo6c3RkOjpyZW1vdmVfZXh0ZW50PDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YT46OnR5cGU+Ojp2YWx1ZSwgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpQYWNr YWdlTWV0YWAgaXMgcmVxdWlyZWQiKTsKKy1zdGF0aWNfYXNzZXJ0KHNpemVvZig6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+KSA9PSBzaXplb2Yodm9pZCAqKSwg IiIpOworLXN0YXRpY19hc3NlcnQoYWxpZ25vZig6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJl ZWN4eDo6UGFja2FnZU1ldGE+KSA9PSBhbGlnbm9mKHZvaWQgKiksICIiKTsKKy12b2lkIGN4eGJy aWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkbnVsbCg6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICpwdHIpIG5vZXhjZXB0IHsKKy0g IDo6bmV3IChwdHIpIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0 YT4oKTsKKy19Cistdm9pZCBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2th Z2VNZXRhJHJhdyg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ ICpwdHIsIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnBv aW50ZXIgcmF3KSBub2V4Y2VwdCB7CistICA6Om5ldyAocHRyKSA6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+KHJhdyk7CistfQorLTo6c3RkOjp1bmlxdWVfcHRy PDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OmVsZW1lbnRfdHlwZSBjb25zdCAqY3h4YnJp ZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRnZXQoOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiBjb25zdCAmcHRyKSBub2V4Y2VwdCB7 CistICByZXR1cm4gcHRyLmdldCgpOworLX0KKy06OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJl ZWN4eDo6UGFja2FnZU1ldGE+Ojpwb2ludGVyIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3Ry ZWVjeHgkUGFja2FnZU1ldGEkcmVsZWFzZSg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6UGFja2FnZU1ldGE+ICZwdHIpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBwdHIucmVsZWFzZSgp OworLX0KKy12b2lkIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1l dGEkZHJvcCg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICpw dHIpIG5vZXhjZXB0IHsKKy0gIDo6cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNf Y29tcGxldGU8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6dmFsdWU+e30ocHRyKTsKKy19 CisrZXh0ZXJuICJDIgorK3sKKysgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICpjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRhbGxvYyAoKSBub2V4Y2VwdDsKKysgIHZv aWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAkZGVhbGxvYyAoOjpycG1v c3RyZWVjeHg6OkJ1YmJsZXdyYXAgKikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkYm94 JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBt b3N0cmVlY3h4OjpCdWJibGV3cmFwPiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIDo6cnBtb3N0cmVl Y3h4OjpDb250YWluZXJJbWFnZVN0YXRlICoKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRDb250YWluZXJJbWFnZVN0YXRlJGFsbG9jICgpIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRkZWFsbG9jICgKKysgICAg ICA6OnJwbW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZSAqKSBub2V4Y2VwdDsKKysgIHZv aWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkZHJvcCAo CisrICAgICAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+ ICpwdHIpIG5vZXhjZXB0OworKworKyAgOjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAqY3h4 YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRhbGxvYyAoKSBub2V4Y2VwdDsK KysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRkZWFsbG9j ICg6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkICopIG5vZXhjZXB0OworKyAgdm9pZCBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkJGRyb3AgKAorKyAgICAgIDo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+ICpwdHIpIG5vZXhjZXB0OworKwor KyAgOjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwICoKKysgIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJlcCRhbGxvYyAoKSBub2V4Y2VwdDsK KysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVw JGRlYWxsb2MgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcCAq KSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0 ZW1TY3JpcHRQcmVwJGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpG aWxlc3lzdGVtU2NyaXB0UHJlcD4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXJGbGFncyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9y dGVyRmxhZ3MkYWxsb2MgKCkgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRlYWxsb2MgKAorKyAgICAgIDo6cnBtb3N0cmVlY3h4 OjpScG1JbXBvcnRlckZsYWdzICopIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRkcm9wICgKKysgICAgICA6OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6 OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRS cG1JbXBvcnRlciRhbGxvYyAoKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JFJwbUltcG9ydGVyJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRl ciAqKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUlt cG9ydGVyJGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBv cnRlcj4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAq Y3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgkYWxsb2MgKCkgbm9leGNlcHQ7 CisrICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGRlYWxsb2Mg KDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICopIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkcm9wICgKKysgICAgICA6OnJ1c3Q6OkJv eDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJw bW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tp b0hhbmRsZSRhbGxvYyAoKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFRva2lvSGFuZGxlJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRsZSAq KSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFu ZGxlJGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hhbmRs ZT4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJk ICpjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkJGFsbG9jICgpIG5v ZXhjZXB0OworKyAgdm9pZAorKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50 ZXJHdWFyZCRkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRlckd1YXJkICopIG5vZXhj ZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJk JGRyb3AgKAorKyAgICAgIDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3Vh cmQ+ICpwdHIpIG5vZXhjZXB0OworKworKyAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICpjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkYWxsb2MgKCkgbm9leGNlcHQ7CisrICB2 b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRkZWFsbG9jICg6OnJwbW9z dHJlZWN4eDo6VHJlZWZpbGUgKikgbm9leGNlcHQ7CisrICB2b2lkCisrICBjeHhicmlkZ2UxJGJv eCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkZHJvcCAoOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlRyZWVmaWxlPiAqcHRyKSBub2V4Y2VwdDsKKysKKysgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3Zl YyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRuZXcgKAorKyAgICAgIDo6cnVzdDo6 VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBjb25zdCAqcHRyKSBub2V4 Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVS ZXBsYWNlbWVudCRkcm9wICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3Zl cnJpZGVSZXBsYWNlbWVudD4gKnB0cikgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkbGVuICgKKysg ICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gY29u c3QgKnB0cikgbm9leGNlcHQ7CisrICA6OnN0ZDo6c2l6ZV90IGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkY2FwYWNpdHkgKAorKyAgICAgIDo6cnVz dDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBjb25zdCAqcHRyKSBu b2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50IGNvbnN0ICoK KysgIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQk ZGF0YSAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFj ZW1lbnQ+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHJlc2VydmVfdG90YWwgKAorKyAgICAg IDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAqcHRyLCA6 OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JHNldF9sZW4gKAorKyAgICAgIDo6 cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAqcHRyLCA6OnN0 ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1bmNhdGUgKAorKyAgICAgIDo6cnVzdDo6 VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiAqcHRyLCA6OnN0ZDo6c2l6 ZV90IGxlbikgbm9leGNlcHQ7CisrCisrICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0 cmVlY3h4JFN0cmluZ01hcHBpbmckbmV3ICgKKysgICAgICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJl ZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckZHJvcCAoCisrICAgICAg OjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+ICpwdHIpIG5vZXhjZXB0 OworKyAgOjpzdGQ6OnNpemVfdCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJp bmdNYXBwaW5nJGxlbiAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmlu Z01hcHBpbmc+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OworKyAgOjpzdGQ6OnNpemVfdCBjeHhicmlk Z2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGNhcGFjaXR5ICgKKysgICAg ICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikg bm9leGNlcHQ7CisrICA6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZyBjb25zdCAqY3h4YnJp ZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRkYXRhICgKKysgICAgICA6 OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgKnB0cikgbm9l eGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01h cHBpbmckcmVzZXJ2ZV90b3RhbCAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6 OlN0cmluZ01hcHBpbmc+ICpwdHIsIDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQ7Cisr ICB2b2lkIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckc2V0 X2xlbiAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+ ICpwdHIsIDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdDsKKysgIHZvaWQgY3h4YnJpZGdlMSRy dXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyR0cnVuY2F0ZSAoCisrICAgICAgOjpy dXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+ICpwdHIsIDo6c3RkOjpzaXpl X3QgbGVuKSBub2V4Y2VwdDsKKysKKysgIDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQiAqY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERCJGFsbG9jICgpIG5vZXhjZXB0OworKyAgdm9p ZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZGVhbGxvYyAoOjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZERCICopIG5vZXhjZXB0OworKyAgdm9pZAorKyAgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JFBhc3N3ZERCJGRyb3AgKDo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2REQj4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50 cmllcyAqY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMkYWxsb2MgKCkg bm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RFbnRy aWVzJGRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzICopIG5vZXhjZXB0Owor KyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRkcm9wICgK KysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz4gKnB0cikg bm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9ucyAqY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMkYWxsb2MgKCkgbm9leGNlcHQ7CisrICB2b2lkIGN4 eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRlYWxsb2MgKDo6cnBtb3N0cmVl Y3h4OjpFeHRlbnNpb25zICopIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkRXh0ZW5zaW9ucyRkcm9wICgKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6RXh0ZW5zaW9ucz4gKnB0cikgbm9leGNlcHQ7CisrCisrICA6OnJwbW9zdHJlZWN4eDo6 TG9ja2ZpbGVDb25maWcgKmN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2NrZmlsZUNvbmZp ZyRhbGxvYyAoKSBub2V4Y2VwdDsKKysgIHZvaWQKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJl ZWN4eCRMb2NrZmlsZUNvbmZpZyRkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25m aWcgKikgbm9leGNlcHQ7CisrICB2b2lkIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRMb2Nr ZmlsZUNvbmZpZyRkcm9wICgKKysgICAgICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6TG9j a2ZpbGVDb25maWc+ICpwdHIpIG5vZXhjZXB0OworKworKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJG5ldyAoCisrICAgICAgOjpydXN0OjpWZWM8 OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0ICpwdHIpIG5vZXhjZXB0OworKyAg dm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGRyb3Ag KAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRy KSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXplX3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3Ry ZWVjeHgkTG9ja2VkUGFja2FnZSRsZW4gKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVl Y3h4OjpMb2NrZWRQYWNrYWdlPiBjb25zdCAqcHRyKSBub2V4Y2VwdDsKKysgIDo6c3RkOjpzaXpl X3QgY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRjYXBhY2l0 eSAoCisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNv bnN0ICpwdHIpIG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2UgY29u c3QgKmN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkZGF0YSAo CisrICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGNvbnN0 ICpwdHIpIG5vZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4 eCRMb2NrZWRQYWNrYWdlJHJlc2VydmVfdG90YWwgKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBt b3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5v ZXhjZXB0OworKyAgdm9pZCBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQ YWNrYWdlJHNldF9sZW4gKAorKyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2Nr ZWRQYWNrYWdlPiAqcHRyLCA6OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7CisrICB2b2lkIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkdHJ1bmNhdGUgKAor KyAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPiAqcHRyLCA6 OnN0ZDo6c2l6ZV90IGxlbikgbm9leGNlcHQ7CisrCisrICBzdGF0aWNfYXNzZXJ0ICg6OnJ1c3Q6 OmRldGFpbDo6aXNfY29tcGxldGU8CisrICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6OnJlbW92 ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojp0eXBlPjo6dmFsdWUs CisrICAgICAgICAgICAgICAgICAiZGVmaW5pdGlvbiBvZiBgOjpycG1vc3RyZWVjeHg6OkNsaWVu dENvbm5lY3Rpb25gIGlzIHJlcXVpcmVkIik7CisrICBzdGF0aWNfYXNzZXJ0IChzaXplb2YgKDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPikgPT0gc2l6 ZW9mICh2b2lkICopLAorKyAgICAgICAgICAgICAgICAgIiIpOworKyAgc3RhdGljX2Fzc2VydCAo YWxpZ25vZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rp b24+KSA9PSBhbGlnbm9mICh2b2lkICopLAorKyAgICAgICAgICAgICAgICAgIiIpOworKyAgdm9p ZAorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGllbnRDb25uZWN0aW9u JG51bGwgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRD b25uZWN0aW9uPiAqcHRyKSBub2V4Y2VwdAorKyAgeworKyAgICA6Om5ldyAocHRyKTo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGllbnRDb25uZWN0aW9uPiAoKTsKKysgIH0KKysg IHZvaWQKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkQ2xpZW50Q29ubmVj dGlvbiRyYXcgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpDbGll bnRDb25uZWN0aW9uPiAqcHRyLAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVl Y3h4OjpDbGllbnRDb25uZWN0aW9uPjo6cG9pbnRlciByYXcpIG5vZXhjZXB0CisrICB7CisrICAg IDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5l Y3Rpb24+IChyYXcpOworKyAgfQorKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6 OkNsaWVudENvbm5lY3Rpb24+OjplbGVtZW50X3R5cGUgY29uc3QgKgorKyAgY3h4YnJpZGdlMSR1 bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRDbGllbnRDb25uZWN0aW9uJGdldCAoCisrICAgICAgOjpz dGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+IGNvbnN0ICZw dHIpIG5vZXhjZXB0CisrICB7CisrICAgIHJldHVybiBwdHIuZ2V0ICgpOworKyAgfQorKyAgOjpz dGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVudENvbm5lY3Rpb24+Ojpwb2ludGVy CisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JENsaWVudENvbm5lY3Rpb24k cmVsZWFzZSAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OkNsaWVu dENvbm5lY3Rpb24+ICZwdHIpIG5vZXhjZXB0CisrICB7CisrICAgIHJldHVybiBwdHIucmVsZWFz ZSAoKTsKKysgIH0KKysgIHZvaWQKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVj eHgkQ2xpZW50Q29ubmVjdGlvbiRkcm9wICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJw bW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj4gKnB0cikgbm9leGNlcHQKKysgIHsKKysgICAg OjpydXN0OjpkZWxldGVyX2lmPDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnJwbW9zdHJl ZWN4eDo6Q2xpZW50Q29ubmVjdGlvbj46OnZhbHVlPnt9KHB0cik7CisrICB9CisrCisrICBzdGF0 aWNfYXNzZXJ0ICgKKysgICAgICA6OnJ1c3Q6OmRldGFpbDo6aXNfY29tcGxldGU8OjpzdGQ6OnJl bW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+Ojp0eXBlPjo6dmFsdWUsCisrICAg ICAgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmYCBpcyByZXF1aXJlZCIp OworKyAgc3RhdGljX2Fzc2VydCAoc2l6ZW9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJl ZWN4eDo6UlBNRGlmZj4pID09IHNpemVvZiAodm9pZCAqKSwgIiIpOworKyAgc3RhdGljX2Fzc2Vy dCAoYWxpZ25vZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+KSA9 PSBhbGlnbm9mICh2b2lkICopLCAiIik7CisrICB2b2lkCisrICBjeHhicmlkZ2UxJHVuaXF1ZV9w dHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkbnVsbCAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8 OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICpwdHIpIG5vZXhjZXB0CisrICB7CisrICAgIDo6bmV3 IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ICgpOworKyAg fQorKyAgdm9pZAorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1EaWZm JHJhdyAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ ICpwdHIsCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJQTURpZmY+ Ojpwb2ludGVyIHJhdykgbm9leGNlcHQKKysgIHsKKysgICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5p cXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gKHJhdyk7CisrICB9CisrICA6OnN0ZDo6 dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46OmVsZW1lbnRfdHlwZSBjb25zdCAq CisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJQTURpZmYkZ2V0ICgKKysg ICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gY29uc3QgJnB0 cikgbm9leGNlcHQKKysgIHsKKysgICAgcmV0dXJuIHB0ci5nZXQgKCk7CisrICB9CisrICA6OnN0 ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj46OnBvaW50ZXIKKysgIGN4eGJy aWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUlBNRGlmZiRyZWxlYXNlICgKKysgICAgICA6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZj4gJnB0cikgbm9leGNlcHQK KysgIHsKKysgICAgcmV0dXJuIHB0ci5yZWxlYXNlICgpOworKyAgfQorKyAgdm9pZAorKyAgY3h4 YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRSUE1EaWZmJGRyb3AgKAorKyAgICAgIDo6 c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPiAqcHRyKSBub2V4Y2VwdAor KyAgeworKyAgICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRl PDo6cnBtb3N0cmVlY3h4OjpSUE1EaWZmPjo6dmFsdWU+e30ocHRyKTsKKysgIH0KKysKKysgIHN0 YXRpY19hc3NlcnQgKAorKyAgICAgIDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnN0ZDo6 cmVtb3ZlX2V4dGVudDw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+Ojp0eXBlPjo6dmFsdWUsCisr ICAgICAgImRlZmluaXRpb24gb2YgYDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzc2AgaXMgcmVxdWly ZWQiKTsKKysgIHN0YXRpY19hc3NlcnQgKHNpemVvZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlByb2dyZXNzPikgPT0gc2l6ZW9mICh2b2lkICopLCAiIik7CisrICBzdGF0aWNf YXNzZXJ0IChhbGlnbm9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jl c3M+KSA9PSBhbGlnbm9mICh2b2lkICopLCAiIik7CisrICB2b2lkCisrICBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFByb2dyZXNzJG51bGwgKAorKyAgICAgIDo6c3RkOjp1bmlx dWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz4gKnB0cikgbm9leGNlcHQKKysgIHsKKysg ICAgOjpuZXcgKHB0cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+ ICgpOworKyAgfQorKyAgdm9pZAorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4 eCRQcm9ncmVzcyRyYXcgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4 OjpQcm9ncmVzcz4gKnB0ciwKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4 eDo6UHJvZ3Jlc3M+Ojpwb2ludGVyIHJhdykgbm9leGNlcHQKKysgIHsKKysgICAgOjpuZXcgKHB0 cik6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jlc3M+IChyYXcpOworKyAg fQorKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6ZWxlbWVu dF90eXBlIGNvbnN0ICoKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUHJv Z3Jlc3MkZ2V0ICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJv Z3Jlc3M+IGNvbnN0ICZwdHIpIG5vZXhjZXB0CisrICB7CisrICAgIHJldHVybiBwdHIuZ2V0ICgp OworKyAgfQorKyAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dyZXNzPjo6 cG9pbnRlcgorKyAgY3h4YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQcm9ncmVzcyRy ZWxlYXNlICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UHJvZ3Jl c3M+ICZwdHIpIG5vZXhjZXB0CisrICB7CisrICAgIHJldHVybiBwdHIucmVsZWFzZSAoKTsKKysg IH0KKysgIHZvaWQKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUHJvZ3Jl c3MkZHJvcCAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlByb2dy ZXNzPiAqcHRyKSBub2V4Y2VwdAorKyAgeworKyAgICA6OnJ1c3Q6OmRlbGV0ZXJfaWY8OjpydXN0 OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzcz46OnZhbHVlPnt9 KHB0cik7CisrICB9CisrCisrICBzdGF0aWNfYXNzZXJ0ICgKKysgICAgICA6OnJ1c3Q6OmRldGFp bDo6aXNfY29tcGxldGU8OjpzdGQ6OnJlbW92ZV9leHRlbnQ8OjpycG1vc3RyZWVjeHg6OlJwbVRz Pjo6dHlwZT46OnZhbHVlLAorKyAgICAgICJkZWZpbml0aW9uIG9mIGA6OnJwbW9zdHJlZWN4eDo6 UnBtVHNgIGlzIHJlcXVpcmVkIik7CisrICBzdGF0aWNfYXNzZXJ0IChzaXplb2YgKDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4pID09IHNpemVvZiAodm9pZCAqKSwgIiIp OworKyAgc3RhdGljX2Fzc2VydCAoYWxpZ25vZiAoOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3Ry ZWVjeHg6OlJwbVRzPikgPT0gYWxpZ25vZiAodm9pZCAqKSwgIiIpOworKyAgdm9pZAorKyAgY3h4 YnJpZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRScG1UcyRudWxsICgKKysgICAgICA6OnN0 ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UnBtVHM+ICpwdHIpIG5vZXhjZXB0CisrICB7 CisrICAgIDo6bmV3IChwdHIpOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRz PiAoKTsKKysgIH0KKysgIHZvaWQKKysgIGN4eGJyaWRnZTEkdW5pcXVlX3B0ciRycG1vc3RyZWVj eHgkUnBtVHMkcmF3ICgKKysgICAgICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UnBtVHM+ICpwdHIsCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJw bVRzPjo6cG9pbnRlciByYXcpIG5vZXhjZXB0CisrICB7CisrICAgIDo6bmV3IChwdHIpOjpzdGQ6 OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAocmF3KTsKKysgIH0KKysgIDo6c3Rk Ojp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OmVsZW1lbnRfdHlwZSBjb25zdCAq CisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJGdldCAoCisrICAg ICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiBjb25zdCAmcHRyKSBu b2V4Y2VwdAorKyAgeworKyAgICByZXR1cm4gcHRyLmdldCAoKTsKKysgIH0KKysgIDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz46OnBvaW50ZXIKKysgIGN4eGJyaWRnZTEk dW5pcXVlX3B0ciRycG1vc3RyZWVjeHgkUnBtVHMkcmVsZWFzZSAoCisrICAgICAgOjpzdGQ6OnVu aXF1ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlJwbVRzPiAmcHRyKSBub2V4Y2VwdAorKyAgeworKyAg ICByZXR1cm4gcHRyLnJlbGVhc2UgKCk7CisrICB9CisrICB2b2lkCisrICBjeHhicmlkZ2UxJHVu aXF1ZV9wdHIkcnBtb3N0cmVlY3h4JFJwbVRzJGRyb3AgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpScG1Ucz4gKnB0cikgbm9leGNlcHQKKysgIHsKKysgICAgOjpy dXN0OjpkZWxldGVyX2lmPDo6cnVzdDo6ZGV0YWlsOjppc19jb21wbGV0ZTw6OnJwbW9zdHJlZWN4 eDo6UnBtVHM+Ojp2YWx1ZT57fShwdHIpOworKyAgfQorKworKyAgc3RhdGljX2Fzc2VydCAoCisr ICAgICAgOjpydXN0OjpkZXRhaWw6OmlzX2NvbXBsZXRlPDo6c3RkOjpyZW1vdmVfZXh0ZW50PDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnR5cGU+Ojp2YWx1ZSwKKysgICAgICAiZGVmaW5p dGlvbiBvZiBgOjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhYCBpcyByZXF1aXJlZCIpOworKyAg c3RhdGljX2Fzc2VydCAoc2l6ZW9mICg6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UGFja2FnZU1ldGE+KSA9PSBzaXplb2YgKHZvaWQgKiksICIiKTsKKysgIHN0YXRpY19hc3NlcnQg KGFsaWdub2YgKDo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4p ID09IGFsaWdub2YgKHZvaWQgKiksICIiKTsKKysgIHZvaWQKKysgIGN4eGJyaWRnZTEkdW5pcXVl X3B0ciRycG1vc3RyZWVjeHgkUGFja2FnZU1ldGEkbnVsbCAoCisrICAgICAgOjpzdGQ6OnVuaXF1 ZV9wdHI8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAqcHRyKSBub2V4Y2VwdAorKyAgewor KyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YT4gKCk7CisrICB9CisrICB2b2lkCisrICBjeHhicmlkZ2UxJHVuaXF1ZV9wdHIkcnBtb3N0 cmVlY3h4JFBhY2thZ2VNZXRhJHJhdyAoCisrICAgICAgOjpzdGQ6OnVuaXF1ZV9wdHI8OjpycG1v c3RyZWVjeHg6OlBhY2thZ2VNZXRhPiAqcHRyLAorKyAgICAgIDo6c3RkOjp1bmlxdWVfcHRyPDo6 cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT46OnBvaW50ZXIgcmF3KSBub2V4Y2VwdAorKyAgewor KyAgICA6Om5ldyAocHRyKTo6c3RkOjp1bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdl TWV0YT4gKHJhdyk7CisrICB9CisrICA6OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6 UGFja2FnZU1ldGE+OjplbGVtZW50X3R5cGUgY29uc3QgKgorKyAgY3h4YnJpZGdlMSR1bmlxdWVf cHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRnZXQgKAorKyAgICAgIDo6c3RkOjp1bmlxdWVf cHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gY29uc3QgJnB0cikgbm9leGNlcHQKKysg IHsKKysgICAgcmV0dXJuIHB0ci5nZXQgKCk7CisrICB9CisrICA6OnN0ZDo6dW5pcXVlX3B0cjw6 OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+Ojpwb2ludGVyCisrICBjeHhicmlkZ2UxJHVuaXF1 ZV9wdHIkcnBtb3N0cmVlY3h4JFBhY2thZ2VNZXRhJHJlbGVhc2UgKAorKyAgICAgIDo6c3RkOjp1 bmlxdWVfcHRyPDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YT4gJnB0cikgbm9leGNlcHQKKysg IHsKKysgICAgcmV0dXJuIHB0ci5yZWxlYXNlICgpOworKyAgfQorKyAgdm9pZAorKyAgY3h4YnJp ZGdlMSR1bmlxdWVfcHRyJHJwbW9zdHJlZWN4eCRQYWNrYWdlTWV0YSRkcm9wICgKKysgICAgICA6 OnN0ZDo6dW5pcXVlX3B0cjw6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE+ICpwdHIpIG5vZXhj ZXB0CisrICB7CisrICAgIDo6cnVzdDo6ZGVsZXRlcl9pZjw6OnJ1c3Q6OmRldGFpbDo6aXNfY29t cGxldGU8OjpycG1vc3RyZWVjeHg6OlBhY2thZ2VNZXRhPjo6dmFsdWU+e30ocHRyKTsKKysgIH0K KyB9IC8vIGV4dGVybiAiQyIKKyAKKy1uYW1lc3BhY2UgcnVzdCB7CistaW5saW5lIG5hbWVzcGFj ZSBjeHhicmlkZ2UxIHsKKytuYW1lc3BhY2UgcnVzdAorK3sKKytpbmxpbmUgbmFtZXNwYWNlIGN4 eGJyaWRnZTEKKyt7CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAq Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4 Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAk YWxsb2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcCAqCisrQm94PDo6cnBtb3N0cmVl Y3h4OjpCdWJibGV3cmFwPjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQKKyt7CisrICBy ZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAkYWxsb2MgKCk7Cisg fQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXA+Ojph bGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwICpwdHIpIG5vZXhj ZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJibGV3cmFwJGRlYWxsb2Mo cHRyKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPjo6YWxsb2NhdGlv bjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXAgKnB0cikgbm9leGNlcHQKKyt7 CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkQnViYmxld3JhcCRkZWFsbG9jIChwdHIp OworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFw Pjo6ZHJvcCgpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRCdWJi bGV3cmFwJGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3Jh cD46OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk QnViYmxld3JhcCRkcm9wICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJlZWN4 eDo6Q29udGFpbmVySW1hZ2VTdGF0ZSAqQm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFn ZVN0YXRlPjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUkYWxsb2MoKTsKKys6OnJw bW9zdHJlZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZSAqCisrQm94PDo6cnBtb3N0cmVlY3h4OjpD b250YWluZXJJbWFnZVN0YXRlPjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQKKyt7Cisr ICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3RhdGUk YWxsb2MgKCk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OkNv bnRhaW5lckltYWdlU3RhdGU+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpD b250YWluZXJJbWFnZVN0YXRlICpwdHIpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJw bW9zdHJlZWN4eCRDb250YWluZXJJbWFnZVN0YXRlJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94 PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPjo6YWxsb2NhdGlvbjo6ZGVhbGxv YyAoCisrICAgIDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlICpwdHIpIG5vZXhj ZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdlU3Rh dGUkZGVhbGxvYyAocHRyKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJl ZWN4eDo6Q29udGFpbmVySW1hZ2VTdGF0ZT46OmRyb3AoKSBub2V4Y2VwdCB7CistICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkQ29udGFpbmVySW1hZ2VTdGF0ZSRkcm9wKHRoaXMpOworK3Zv aWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRhaW5lckltYWdlU3RhdGU+Ojpkcm9wICgpIG5v ZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JENvbnRhaW5lckltYWdl U3RhdGUkZHJvcCAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+CistOjpycG1vc3RyZWVjeHg6OlRl bXBFdGNHdWFyZCAqQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+OjphbGxvY2F0aW9u OjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkVGVtcEV0Y0d1YXJkJGFsbG9jKCk7CisrOjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZCAq CisrQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+OjphbGxvY2F0aW9uOjphbGxvYyAo KSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVGVt cEV0Y0d1YXJkJGFsbG9jICgpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0 cmVlY3h4OjpUZW1wRXRjR3VhcmQ+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4 OjpUZW1wRXRjR3VhcmQgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0 cmVlY3h4JFRlbXBFdGNHdWFyZCRkZWFsbG9jKHB0cik7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJl ZWN4eDo6VGVtcEV0Y0d1YXJkPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6 OlRlbXBFdGNHdWFyZCAqcHRyKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRUZW1wRXRjR3VhcmQkZGVhbGxvYyAocHRyKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12 b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1YXJkPjo6ZHJvcCgpIG5vZXhjZXB0IHsK Ky0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUZW1wRXRjR3VhcmQkZHJvcCh0aGlzKTsK Kyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpUZW1wRXRjR3VhcmQ+Ojpkcm9wICgpIG5vZXhj ZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRlbXBFdGNHdWFyZCRkcm9w ICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNj cmlwdFByZXAgKkJveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+OjphbGxv Y2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1v c3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkYWxsb2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6 RmlsZXN5c3RlbVNjcmlwdFByZXAgKgorK0JveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNj cmlwdFByZXA+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAkYWxsb2MgKCk7 CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OkZpbGVzeXN0ZW1T Y3JpcHRQcmVwPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3Rl bVNjcmlwdFByZXAgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94PDo6cnBt b3N0cmVlY3h4OjpGaWxlc3lzdGVtU2NyaXB0UHJlcD46OmFsbG9jYXRpb246OmRlYWxsb2MgKAor KyAgICA6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXAgKnB0cikgbm9leGNlcHQK Kyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAk ZGVhbGxvYyAocHRyKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4 eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3JpcHRQcmVwJGRyb3AodGhpcyk7Cisrdm9p ZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+Ojpkcm9wICgpIG5v ZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEZpbGVzeXN0ZW1TY3Jp cHRQcmVwJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlckZsYWdzICpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+Ojph bGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRy cG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRhbGxvYygpOworKzo6cnBtb3N0cmVlY3h4OjpS cG1JbXBvcnRlckZsYWdzICoKKytCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3M+ OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2Ux JGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFncyRhbGxvYyAoKTsKKyB9CisgdGVtcGxh dGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz46OmFsbG9j YXRpb246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxhZ3MgKnB0cikgbm9l eGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3Mk ZGVhbGxvYyhwdHIpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVyRmxh Z3M+OjphbGxvY2F0aW9uOjpkZWFsbG9jICgKKysgICAgOjpycG1vc3RyZWVjeHg6OlJwbUltcG9y dGVyRmxhZ3MgKnB0cikgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkUnBtSW1wb3J0ZXJGbGFncyRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZv aWQgQm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPjo6ZHJvcCgpIG5vZXhjZXB0 IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRScG1JbXBvcnRlckZsYWdzJGRyb3Ao dGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncz46OmRy b3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1w b3J0ZXJGbGFncyRkcm9wICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJlZWN4 eDo6UnBtSW1wb3J0ZXIgKkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+OjphbGxvY2F0 aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkUnBtSW1wb3J0ZXIkYWxsb2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXIg KgorK0JveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXI+OjphbGxvY2F0aW9uOjphbGxvYyAo KSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBt SW1wb3J0ZXIkYWxsb2MgKCk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3Ry ZWVjeHg6OlJwbUltcG9ydGVyPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6 UnBtSW1wb3J0ZXIgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVl Y3h4JFJwbUltcG9ydGVyJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4 OjpScG1JbXBvcnRlcj46OmFsbG9jYXRpb246OmRlYWxsb2MgKDo6cnBtb3N0cmVlY3h4OjpScG1J bXBvcnRlciAqcHRyKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRScG1JbXBvcnRlciRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94 PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj46OmRyb3AoKSBub2V4Y2VwdCB7CistICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkZHJvcCh0aGlzKTsKKyt2b2lkCisr Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlcj46OmRyb3AgKCkgbm9leGNlcHQKKyt7Cisr ICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIkZHJvcCAodGhpcyk7Cisg fQorIHRlbXBsYXRlIDw+CistOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKkJveDw6OnJwbW9z dHJlZWN4eDo6SGlzdG9yeUN0eD46OmFsbG9jYXRpb246OmFsbG9jKCkgbm9leGNlcHQgeworLSAg cmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGFsbG9jKCk7Cisr OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHggKgorK0JveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9y eUN0eD46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJy aWRnZTEkYm94JHJwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4JGFsbG9jICgpOworIH0KKyB0ZW1wbGF0 ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4Pjo6YWxsb2NhdGlvbjo6 ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eCAqcHRyKSBub2V4Y2VwdCB7CistICBj eHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkZWFsbG9jKHB0cik7Cisrdm9p ZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD46OmFsbG9jYXRpb246OmRlYWxsb2Mg KDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4ICpwdHIpIG5vZXhjZXB0CisreworKyAgY3h4YnJp ZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgkZGVhbGxvYyAocHRyKTsKKyB9CisgdGVt cGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD46OmRyb3AoKSBu b2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkSGlzdG9yeUN0eCRkcm9w KHRoaXMpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6Okhpc3RvcnlDdHg+Ojpkcm9wICgp IG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEhpc3RvcnlDdHgk ZHJvcCAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+CistOjpycG1vc3RyZWVjeHg6OlRva2lvSGFu ZGxlICpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPjo6YWxsb2NhdGlvbjo6YWxsb2Mo KSBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lv SGFuZGxlJGFsbG9jKCk7CisrOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlICoKKytCb3g8Ojpy cG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQK Kyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGFs bG9jICgpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUb2tp b0hhbmRsZT46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxl ICpwdHIpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUb2tpb0hh bmRsZSRkZWFsbG9jKHB0cik7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5k bGU+OjphbGxvY2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6VG9raW9IYW5kbGUgKnB0 cikgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVG9raW9IYW5k bGUkZGVhbGxvYyAocHRyKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJl ZWN4eDo6VG9raW9IYW5kbGU+Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9z dHJlZWN4eDo6VG9raW9IYW5kbGU+Ojpkcm9wICgpIG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdl MSRib3gkcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0 ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKkJveDw6OnJwbW9zdHJlZWN4 eDo6VG9raW9FbnRlckd1YXJkPjo6YWxsb2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7CistICBy ZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRhbGxvYygp OworKzo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQgKgorK0JveDw6OnJwbW9zdHJlZWN4 eDo6VG9raW9FbnRlckd1YXJkPjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9leGNlcHQKKyt7Cisr ICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRhbGxv YyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6VG9raW9F bnRlckd1YXJkPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6VG9raW9FbnRl ckd1YXJkICpwdHIpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRU b2tpb0VudGVyR3VhcmQkZGVhbGxvYyhwdHIpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6 OlRva2lvRW50ZXJHdWFyZD46OmFsbG9jYXRpb246OmRlYWxsb2MgKAorKyAgICA6OnJwbW9zdHJl ZWN4eDo6VG9raW9FbnRlckd1YXJkICpwdHIpIG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRi b3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJHdWFyZCRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1w bGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+Ojpkcm9w KCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRva2lvRW50ZXJH dWFyZCRkcm9wKHRoaXMpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJH dWFyZD46OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkVG9raW9FbnRlckd1YXJkJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAqQm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT46OmFsbG9j YXRpb246OmFsbG9jKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9z dHJlZWN4eCRUcmVlZmlsZSRhbGxvYygpOworKzo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAqCisr Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT46OmFsbG9jYXRpb246OmFsbG9jICgpIG5vZXhj ZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmlsZSRh bGxvYyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGU+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAqcHRy KSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkVHJlZWZpbGUkZGVh bGxvYyhwdHIpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPjo6YWxsb2Nh dGlvbjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICpwdHIpIG5vZXhjZXB0Cisr eworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFRyZWVmaWxlJGRlYWxsb2MgKHB0cik7 CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPjo6 ZHJvcCgpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmls ZSRkcm9wKHRoaXMpOworK3ZvaWQKKytCb3g8OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPjo6ZHJv cCAoKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRUcmVlZmls ZSRkcm9wICh0aGlzKTsKKyB9CistdGVtcGxhdGUgPD4KKy1WZWM8OjpycG1vc3RyZWVjeHg6Ok92 ZXJyaWRlUmVwbGFjZW1lbnQ+OjpWZWMoKSBub2V4Y2VwdCB7CistICBjeHhicmlkZ2UxJHJ1c3Rf dmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JG5ldyh0aGlzKTsKKyt0ZW1wbGF0 ZSA8PiBWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpWZWMgKCkgbm9l eGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJl cGxhY2VtZW50JG5ldyAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBWZWM8OjpycG1v c3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgcmV0 dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQk ZHJvcCh0aGlzKTsKKyt2b2lkCisrVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2Vt ZW50Pjo6ZHJvcCAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGRyb3AgKHRoaXMpOworIH0KKyB0ZW1w bGF0ZSA8PgorLTo6c3RkOjpzaXplX3QgVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxh Y2VtZW50Pjo6c2l6ZSgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGxlbih0aGlzKTsKKys6OnN0 ZDo6c2l6ZV90CisrVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6c2l6 ZSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJw bW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGxlbiAodGhpcyk7CisgfQorIHRlbXBsYXRl IDw+CistOjpzdGQ6OnNpemVfdCBWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1l bnQ+OjpjYXBhY2l0eSgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGNhcGFjaXR5KHRoaXMpOwor Kzo6c3RkOjpzaXplX3QKKytWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+ OjpjYXBhY2l0eSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50JGNhcGFjaXR5ICh0aGlzKTsK KyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudCBj b25zdCAqVmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6ZGF0YSgpIGNv bnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4 eCRPdmVycmlkZVJlcGxhY2VtZW50JGRhdGEodGhpcyk7CisrOjpycG1vc3RyZWVjeHg6Ok92ZXJy aWRlUmVwbGFjZW1lbnQgY29uc3QgKgorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudD46OmRhdGEgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdl MSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudCRkYXRhICh0aGlzKTsK KyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBs YWNlbWVudD46OnJlc2VydmVfdG90YWwoOjpzdGQ6OnNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdCB7 CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBs YWNlbWVudCRyZXNlcnZlX3RvdGFsKHRoaXMsIG5ld19jYXApOworK3ZvaWQKKytWZWM8OjpycG1v c3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+OjpyZXNlcnZlX3RvdGFsICg6OnN0ZDo6c2l6 ZV90IG5ld19jYXApIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JE92ZXJyaWRlUmVwbGFjZW1lbnQkcmVzZXJ2ZV90b3RhbCAodGhpcywgbmV3 X2NhcCk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBWZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJy aWRlUmVwbGFjZW1lbnQ+OjpzZXRfbGVuKDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdCB7Cist ICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNl bWVudCRzZXRfbGVuKHRoaXMsIGxlbik7Cisrdm9pZAorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6T3Zl cnJpZGVSZXBsYWNlbWVudD46OnNldF9sZW4gKDo6c3RkOjpzaXplX3QgbGVuKSBub2V4Y2VwdAor K3sKKysgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRPdmVycmlkZVJl cGxhY2VtZW50JHNldF9sZW4gKHRoaXMsIGxlbik7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBW ZWM8OjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQ+Ojp0cnVuY2F0ZSg6OnN0ZDo6 c2l6ZV90IGxlbikgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JE92ZXJyaWRlUmVwbGFjZW1lbnQkdHJ1bmNhdGUodGhpcywgbGVuKTsKKyt2b2lkCisrVmVjPDo6 cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50Pjo6dHJ1bmNhdGUgKDo6c3RkOjpzaXpl X3QgbGVuKQorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRP dmVycmlkZVJlcGxhY2VtZW50JHRydW5jYXRlICh0aGlzLCBsZW4pOworIH0KKy10ZW1wbGF0ZSA8 PgorLVZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OlZlYygpIG5vZXhjZXB0IHsK Ky0gIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbmV3KHRo aXMpOworK3RlbXBsYXRlIDw+IFZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OlZl YyAoKSBub2V4Y2VwdAorK3sKKysgIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmckbmV3ICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIFZlYzw6OnJw bW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OmRyb3AoKSBub2V4Y2VwdCB7CistICByZXR1cm4g Y3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyRkcm9wKHRoaXMp OworK3ZvaWQKKytWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+Ojpkcm9wICgpIG5v ZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmckZHJvcCAodGhpcyk7CisgfQorIHRlbXBsYXRlIDw+CistOjpzdGQ6OnNpemVf dCBWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpzaXplKCkgY29uc3Qgbm9leGNl cHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01h cHBpbmckbGVuKHRoaXMpOworKzo6c3RkOjpzaXplX3QKKytWZWM8OjpycG1vc3RyZWVjeHg6OlN0 cmluZ01hcHBpbmc+OjpzaXplICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJy aWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckbGVuICh0aGlzKTsKKyB9 CisgdGVtcGxhdGUgPD4KKy06OnN0ZDo6c2l6ZV90IFZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5n TWFwcGluZz46OmNhcGFjaXR5KCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckY2FwYWNpdHkodGhpcyk7Cisr OjpzdGQ6OnNpemVfdAorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OmNhcGFj aXR5ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckY2FwYWNpdHkgKHRoaXMpOworIH0KKyB0ZW1wbGF0 ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nIGNvbnN0ICpWZWM8OjpycG1vc3Ry ZWVjeHg6OlN0cmluZ01hcHBpbmc+OjpkYXRhKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJu IGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckZGF0YSh0aGlz KTsKKys6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZyBjb25zdCAqCisrVmVjPDo6cnBtb3N0 cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6ZGF0YSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJl dHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJGRhdGEg KHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJp bmdNYXBwaW5nPjo6cmVzZXJ2ZV90b3RhbCg6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0 IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBw aW5nJHJlc2VydmVfdG90YWwodGhpcywgbmV3X2NhcCk7Cisrdm9pZAorK1ZlYzw6OnJwbW9zdHJl ZWN4eDo6U3RyaW5nTWFwcGluZz46OnJlc2VydmVfdG90YWwgKDo6c3RkOjpzaXplX3QgbmV3X2Nh cCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVj eHgkU3RyaW5nTWFwcGluZyRyZXNlcnZlX3RvdGFsICh0aGlzLCBuZXdfY2FwKTsKKyB9CisgdGVt cGxhdGUgPD4KKy12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OnNldF9s ZW4oOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1 c3RfdmVjJHJwbW9zdHJlZWN4eCRTdHJpbmdNYXBwaW5nJHNldF9sZW4odGhpcywgbGVuKTsKKyt2 b2lkCisrVmVjPDo6cnBtb3N0cmVlY3h4OjpTdHJpbmdNYXBwaW5nPjo6c2V0X2xlbiAoOjpzdGQ6 OnNpemVfdCBsZW4pIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JFN0cmluZ01hcHBpbmckc2V0X2xlbiAodGhpcywgbGVuKTsKKyB9CisgdGVt cGxhdGUgPD4KKy12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz46OnRydW5j YXRlKDo6c3RkOjpzaXplX3QgbGVuKSB7CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRy cG1vc3RyZWVjeHgkU3RyaW5nTWFwcGluZyR0cnVuY2F0ZSh0aGlzLCBsZW4pOworK3ZvaWQKKytW ZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+Ojp0cnVuY2F0ZSAoOjpzdGQ6OnNpemVf dCBsZW4pCisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JFN0 cmluZ01hcHBpbmckdHJ1bmNhdGUgKHRoaXMsIGxlbik7CisgfQorIHRlbXBsYXRlIDw+CistOjpy cG1vc3RyZWVjeHg6OlBhc3N3ZERCICpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPjo6YWxs b2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JFBhc3N3ZERCJGFsbG9jKCk7CisrOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCICoK KytCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCPjo6YWxsb2NhdGlvbjo6YWxsb2MgKCkgbm9l eGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3ZERC JGFsbG9jICgpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpQ YXNzd2REQj46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3RyZWVjeHg6OlBhc3N3ZERCICpw dHIpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2REQiRk ZWFsbG9jKHB0cik7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+OjphbGxv Y2F0aW9uOjpkZWFsbG9jICg6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREIgKnB0cikgbm9leGNlcHQK Kyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkREIkZGVhbGxvYyAocHRy KTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+ Ojpkcm9wKCkgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3 ZERCJGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkREI+Ojpk cm9wICgpIG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JFBhc3N3 ZERCJGRyb3AgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpQYXNz d2RFbnRyaWVzICpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+OjphbGxvY2F0aW9u OjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkUGFzc3dkRW50cmllcyRhbGxvYygpOworKzo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVz ICoKKytCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+OjphbGxvY2F0aW9uOjphbGxv YyAoKSBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgk UGFzc3dkRW50cmllcyRhbGxvYyAoKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIEJveDw6OnJw bW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz46OmFsbG9jYXRpb246OmRlYWxsb2MoOjpycG1vc3Ry ZWVjeHg6OlBhc3N3ZEVudHJpZXMgKnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gk cnBtb3N0cmVlY3h4JFBhc3N3ZEVudHJpZXMkZGVhbGxvYyhwdHIpOworK3ZvaWQKKytCb3g8Ojpy cG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXM+OjphbGxvY2F0aW9uOjpkZWFsbG9jICgKKysgICAg OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJpZXMgKnB0cikgbm9leGNlcHQKKyt7CisrICBjeHhi cmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcyRkZWFsbG9jIChwdHIpOworIH0K KyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2RFbnRyaWVzPjo6 ZHJvcCgpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4eCRQYXNzd2RF bnRyaWVzJGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50 cmllcz46OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVj eHgkUGFzc3dkRW50cmllcyRkcm9wICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnJwbW9z dHJlZWN4eDo6RXh0ZW5zaW9ucyAqQm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPjo6YWxs b2NhdGlvbjo6YWxsb2MoKSBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBt b3N0cmVlY3h4JEV4dGVuc2lvbnMkYWxsb2MoKTsKKys6OnJwbW9zdHJlZWN4eDo6RXh0ZW5zaW9u cyAqCisrQm94PDo6cnBtb3N0cmVlY3h4OjpFeHRlbnNpb25zPjo6YWxsb2NhdGlvbjo6YWxsb2Mg KCkgbm9leGNlcHQKKyt7CisrICByZXR1cm4gY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JEV4 dGVuc2lvbnMkYWxsb2MgKCk7CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3Ry ZWVjeHg6OkV4dGVuc2lvbnM+OjphbGxvY2F0aW9uOjpkZWFsbG9jKDo6cnBtb3N0cmVlY3h4OjpF eHRlbnNpb25zICpwdHIpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkYm94JHJwbW9zdHJlZWN4 eCRFeHRlbnNpb25zJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpF eHRlbnNpb25zPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyAoOjpycG1vc3RyZWVjeHg6OkV4dGVuc2lv bnMgKnB0cikgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkRXh0 ZW5zaW9ucyRkZWFsbG9jIChwdHIpOworIH0KKyB0ZW1wbGF0ZSA8PgorLXZvaWQgQm94PDo6cnBt b3N0cmVlY3h4OjpFeHRlbnNpb25zPjo6ZHJvcCgpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEk Ym94JHJwbW9zdHJlZWN4eCRFeHRlbnNpb25zJGRyb3AodGhpcyk7Cisrdm9pZAorK0JveDw6OnJw bW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz46OmRyb3AgKCkgbm9leGNlcHQKKyt7CisrICBjeHhicmlk Z2UxJGJveCRycG1vc3RyZWVjeHgkRXh0ZW5zaW9ucyRkcm9wICh0aGlzKTsKKyB9CisgdGVtcGxh dGUgPD4KKy06OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgKkJveDw6OnJwbW9zdHJlZWN4 eDo6TG9ja2ZpbGVDb25maWc+OjphbGxvY2F0aW9uOjphbGxvYygpIG5vZXhjZXB0IHsKKy0gIHJl dHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckYWxsb2MoKTsK Kys6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcgKgorK0JveDw6OnJwbW9zdHJlZWN4eDo6 TG9ja2ZpbGVDb25maWc+OjphbGxvY2F0aW9uOjphbGxvYyAoKSBub2V4Y2VwdAorK3sKKysgIHJl dHVybiBjeHhicmlkZ2UxJGJveCRycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWckYWxsb2MgKCk7 CisgfQorIHRlbXBsYXRlIDw+Cistdm9pZCBCb3g8OjpycG1vc3RyZWVjeHg6OkxvY2tmaWxlQ29u ZmlnPjo6YWxsb2NhdGlvbjo6ZGVhbGxvYyg6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWcg KnB0cikgbm9leGNlcHQgeworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExvY2tmaWxl Q29uZmlnJGRlYWxsb2MocHRyKTsKKyt2b2lkCisrQm94PDo6cnBtb3N0cmVlY3h4OjpMb2NrZmls ZUNvbmZpZz46OmFsbG9jYXRpb246OmRlYWxsb2MgKAorKyAgICA6OnJwbW9zdHJlZWN4eDo6TG9j a2ZpbGVDb25maWcgKnB0cikgbm9leGNlcHQKKyt7CisrICBjeHhicmlkZ2UxJGJveCRycG1vc3Ry ZWVjeHgkTG9ja2ZpbGVDb25maWckZGVhbGxvYyAocHRyKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12 b2lkIEJveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+Ojpkcm9wKCkgbm9leGNlcHQg eworLSAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29uZmlnJGRyb3AodGhp cyk7Cisrdm9pZAorK0JveDw6OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+Ojpkcm9wICgp IG5vZXhjZXB0CisreworKyAgY3h4YnJpZGdlMSRib3gkcnBtb3N0cmVlY3h4JExvY2tmaWxlQ29u ZmlnJGRyb3AgKHRoaXMpOworIH0KKy10ZW1wbGF0ZSA8PgorLVZlYzw6OnJwbW9zdHJlZWN4eDo6 TG9ja2VkUGFja2FnZT46OlZlYygpIG5vZXhjZXB0IHsKKy0gIGN4eGJyaWRnZTEkcnVzdF92ZWMk cnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkbmV3KHRoaXMpOworK3RlbXBsYXRlIDw+IFZlYzw6 OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OlZlYyAoKSBub2V4Y2VwdAorK3sKKysgIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkbmV3ICh0aGlzKTsK KyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIFZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2Fn ZT46OmRyb3AoKSBub2V4Y2VwdCB7CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1v c3RyZWVjeHgkTG9ja2VkUGFja2FnZSRkcm9wKHRoaXMpOworK3ZvaWQKKytWZWM8OjpycG1vc3Ry ZWVjeHg6OkxvY2tlZFBhY2thZ2U+Ojpkcm9wICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkZHJvcCAodGhpcyk7 CisgfQorIHRlbXBsYXRlIDw+CistOjpzdGQ6OnNpemVfdCBWZWM8OjpycG1vc3RyZWVjeHg6Okxv Y2tlZFBhY2thZ2U+OjpzaXplKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRn ZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkbGVuKHRoaXMpOworKzo6c3Rk OjpzaXplX3QKKytWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+OjpzaXplICgpIGNv bnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVl Y3h4JExvY2tlZFBhY2thZ2UkbGVuICh0aGlzKTsKKyB9CisgdGVtcGxhdGUgPD4KKy06OnN0ZDo6 c2l6ZV90IFZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OmNhcGFjaXR5KCkgY29u c3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4 JExvY2tlZFBhY2thZ2UkY2FwYWNpdHkodGhpcyk7CisrOjpzdGQ6OnNpemVfdAorK1ZlYzw6OnJw bW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OmNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2th Z2UkY2FwYWNpdHkgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8PgorLTo6cnBtb3N0cmVlY3h4OjpM b2NrZWRQYWNrYWdlIGNvbnN0ICpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+Ojpk YXRhKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBt b3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkZGF0YSh0aGlzKTsKKys6OnJwbW9zdHJlZWN4eDo6TG9j a2VkUGFja2FnZSBjb25zdCAqCisrVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6 ZGF0YSAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVj JHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJGRhdGEgKHRoaXMpOworIH0KKyB0ZW1wbGF0ZSA8 PgorLXZvaWQgVmVjPDo6cnBtb3N0cmVlY3h4OjpMb2NrZWRQYWNrYWdlPjo6cmVzZXJ2ZV90b3Rh bCg6OnN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2Ux JHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlJHJlc2VydmVfdG90YWwodGhpcywg bmV3X2NhcCk7Cisrdm9pZAorK1ZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnJl c2VydmVfdG90YWwgKDo6c3RkOjpzaXplX3QgbmV3X2NhcCkgbm9leGNlcHQKKyt7CisrICByZXR1 cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZSRyZXNlcnZl X3RvdGFsICh0aGlzLCBuZXdfY2FwKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIFZlYzw6OnJw bW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnNldF9sZW4oOjpzdGQ6OnNpemVfdCBsZW4pIG5v ZXhjZXB0IHsKKy0gIHJldHVybiBjeHhicmlkZ2UxJHJ1c3RfdmVjJHJwbW9zdHJlZWN4eCRMb2Nr ZWRQYWNrYWdlJHNldF9sZW4odGhpcywgbGVuKTsKKyt2b2lkCisrVmVjPDo6cnBtb3N0cmVlY3h4 OjpMb2NrZWRQYWNrYWdlPjo6c2V0X2xlbiAoOjpzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIGN4eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2th Z2Ukc2V0X2xlbiAodGhpcywgbGVuKTsKKyB9CisgdGVtcGxhdGUgPD4KKy12b2lkIFZlYzw6OnJw bW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT46OnRydW5jYXRlKDo6c3RkOjpzaXplX3QgbGVuKSB7 CistICByZXR1cm4gY3h4YnJpZGdlMSRydXN0X3ZlYyRycG1vc3RyZWVjeHgkTG9ja2VkUGFja2Fn ZSR0cnVuY2F0ZSh0aGlzLCBsZW4pOworK3ZvaWQKKytWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tl ZFBhY2thZ2U+Ojp0cnVuY2F0ZSAoOjpzdGQ6OnNpemVfdCBsZW4pCisreworKyAgcmV0dXJuIGN4 eGJyaWRnZTEkcnVzdF92ZWMkcnBtb3N0cmVlY3h4JExvY2tlZFBhY2thZ2UkdHJ1bmNhdGUgKHRo aXMsIGxlbik7CisgfQorIH0gLy8gbmFtZXNwYWNlIGN4eGJyaWRnZTEKKyB9IC8vIG5hbWVzcGFj ZSBydXN0CitkaWZmIC0tZ2l0IGEvcnBtb3N0cmVlLWN4eHJzLmggYi9ycG1vc3RyZWUtY3h4cnMu aAoraW5kZXggOWFkMWM3MmVlYS4uMWM3MGZmZDkzNSAxMDA2NDQKKy0tLSBhL3JwbW9zdHJlZS1j eHhycy5oCisrKysgYi9ycG1vc3RyZWUtY3h4cnMuaAorQEAgLTEsMTYgKzEsMTUgQEAKKyAjcHJh Z21hIG9uY2UKKy0jaW5jbHVkZSAic3JjL2xpYnByaXYvcnBtb3N0cmVlLWN4eHJzLXByZWx1ZGUu aCIKKysjaW5jbHVkZSAicnBtb3N0cmVlLWNsaWVudGxpYi5oIgorICNpbmNsdWRlICJycG1vc3Ry ZWUtY29udGFpbmVyLmhwcCIKKyAjaW5jbHVkZSAicnBtb3N0cmVlLWN4eHJzdXRpbC5ocHAiCist I2luY2x1ZGUgInJwbW9zdHJlZS11dGlsLmgiCistI2luY2x1ZGUgInJwbW9zdHJlZW1haW4uaCIK Ky0jaW5jbHVkZSAicnBtb3N0cmVlLWNsaWVudGxpYi5oIgorICNpbmNsdWRlICJycG1vc3RyZWUt ZGlmZi5ocHAiCisgI2luY2x1ZGUgInJwbW9zdHJlZS1saWJidWlsdGluLmgiCistI2luY2x1ZGUg InJwbW9zdHJlZS11dGlsLmgiCisgI2luY2x1ZGUgInJwbW9zdHJlZS1vdXRwdXQuaCIKKy0jaW5j bHVkZSAicnBtb3N0cmVlLXJwbS11dGlsLmgiCisgI2luY2x1ZGUgInJwbW9zdHJlZS1wYWNrYWdl LXZhcmlhbnRzLmgiCisrI2luY2x1ZGUgInJwbW9zdHJlZS1ycG0tdXRpbC5oIgorKyNpbmNsdWRl ICJycG1vc3RyZWUtdXRpbC5oIgorKyNpbmNsdWRlICJycG1vc3RyZWVtYWluLmgiCisrI2luY2x1 ZGUgInNyYy9saWJwcml2L3JwbW9zdHJlZS1jeHhycy1wcmVsdWRlLmgiCisgI2luY2x1ZGUgPGFs Z29yaXRobT4KKyAjaW5jbHVkZSA8YXJyYXk+CisgI2luY2x1ZGUgPGNhc3NlcnQ+CitAQCAtMzYs OTQgKzM1LDk4IEBACisgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZG9sbGFy LWluLWlkZW50aWZpZXItZXh0ZW5zaW9uIgorICNlbmRpZiAvLyBfX2NsYW5nX18KKyAKKy1uYW1l c3BhY2UgcnVzdCB7CistaW5saW5lIG5hbWVzcGFjZSBjeHhicmlkZ2UxIHsKKytuYW1lc3BhY2Ug cnVzdAorK3sKKytpbmxpbmUgbmFtZXNwYWNlIGN4eGJyaWRnZTEKKyt7CisgLy8gI2luY2x1ZGUg InJ1c3QvY3h4LmgiCisgCisgI2lmbmRlZiBDWFhCUklER0UxX1BBTklDCisgI2RlZmluZSBDWFhC UklER0UxX1BBTklDCistdGVtcGxhdGUgPHR5cGVuYW1lIEV4Y2VwdGlvbj4KKy12b2lkIHBhbmlj IFtbbm9yZXR1cm5dXSAoY29uc3QgY2hhciAqbXNnKTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhj ZXB0aW9uPiB2b2lkIHBhbmljIFtbbm9yZXR1cm5dXSAoY29uc3QgY2hhciAqbXNnKTsKKyAjZW5k aWYgLy8gQ1hYQlJJREdFMV9QQU5JQworIAorIHN0cnVjdCB1bnNhZmVfYml0Y29weV90OworIAor LW5hbWVzcGFjZSB7CistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgaW1wbDsKKytuYW1l c3BhY2UKKyt7CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIGltcGw7CisgfSAvLyBuYW1l c3BhY2UKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy06OnN0ZDo6c2l6ZV90IHNpemVfb2Yo KTsKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy06OnN0ZDo6c2l6ZV90IGFsaWduX29mKCk7Cisr dGVtcGxhdGUgPHR5cGVuYW1lIFQ+OjpzdGQ6OnNpemVfdCBzaXplX29mICgpOworK3RlbXBsYXRl IDx0eXBlbmFtZSBUPjo6c3RkOjpzaXplX3QgYWxpZ25fb2YgKCk7CisgCisgI2lmbmRlZiBDWFhC UklER0UxX1JVU1RfU1RSSU5HCisgI2RlZmluZSBDWFhCUklER0UxX1JVU1RfU1RSSU5HCistY2xh c3MgU3RyaW5nIGZpbmFsIHsKKytjbGFzcyBTdHJpbmcgZmluYWwKKyt7CisgcHVibGljOgorLSAg U3RyaW5nKCkgbm9leGNlcHQ7CistICBTdHJpbmcoY29uc3QgU3RyaW5nICYpIG5vZXhjZXB0Owor LSAgU3RyaW5nKFN0cmluZyAmJikgbm9leGNlcHQ7CistICB+U3RyaW5nKCkgbm9leGNlcHQ7Cist CistICBTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJik7CistICBTdHJpbmcoY29uc3QgY2hhciAq KTsKKy0gIFN0cmluZyhjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KTsKKy0gIFN0cmluZyhjb25z dCBjaGFyMTZfdCAqKTsKKy0gIFN0cmluZyhjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCk7 CisrICBTdHJpbmcgKCkgbm9leGNlcHQ7CisrICBTdHJpbmcgKGNvbnN0IFN0cmluZyAmKSBub2V4 Y2VwdDsKKysgIFN0cmluZyAoU3RyaW5nICYmKSBub2V4Y2VwdDsKKysgIH5TdHJpbmcgKCkgbm9l eGNlcHQ7CisrCisrICBTdHJpbmcgKGNvbnN0IHN0ZDo6c3RyaW5nICYpOworKyAgU3RyaW5nIChj b25zdCBjaGFyICopOworKyAgU3RyaW5nIChjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KTsKKysg IFN0cmluZyAoY29uc3QgY2hhcjE2X3QgKik7CisrICBTdHJpbmcgKGNvbnN0IGNoYXIxNl90ICos IHN0ZDo6c2l6ZV90KTsKKyAjaWZkZWYgX19jcHBfY2hhcjhfdAorLSAgU3RyaW5nKGNvbnN0IGNo YXI4X3QgKnMpOworLSAgU3RyaW5nKGNvbnN0IGNoYXI4X3QgKnMsIHN0ZDo6c2l6ZV90IGxlbik7 CisrICBTdHJpbmcgKGNvbnN0IGNoYXI4X3QgKnMpOworKyAgU3RyaW5nIChjb25zdCBjaGFyOF90 ICpzLCBzdGQ6OnNpemVfdCBsZW4pOworICNlbmRpZgorIAorLSAgc3RhdGljIFN0cmluZyBsb3Nz eShjb25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsKKy0gIHN0YXRpYyBTdHJpbmcgbG9zc3ko Y29uc3QgY2hhciAqKSBub2V4Y2VwdDsKKy0gIHN0YXRpYyBTdHJpbmcgbG9zc3koY29uc3QgY2hh ciAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CistICBzdGF0aWMgU3RyaW5nIGxvc3N5KGNvbnN0 IGNoYXIxNl90ICopIG5vZXhjZXB0OworLSAgc3RhdGljIFN0cmluZyBsb3NzeShjb25zdCBjaGFy MTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CisrICBzdGF0aWMgU3RyaW5nIGxvc3N5IChj b25zdCBzdGQ6OnN0cmluZyAmKSBub2V4Y2VwdDsKKysgIHN0YXRpYyBTdHJpbmcgbG9zc3kgKGNv bnN0IGNoYXIgKikgbm9leGNlcHQ7CisrICBzdGF0aWMgU3RyaW5nIGxvc3N5IChjb25zdCBjaGFy ICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKysgIHN0YXRpYyBTdHJpbmcgbG9zc3kgKGNvbnN0 IGNoYXIxNl90ICopIG5vZXhjZXB0OworKyAgc3RhdGljIFN0cmluZyBsb3NzeSAoY29uc3QgY2hh cjE2X3QgKiwgc3RkOjpzaXplX3QpIG5vZXhjZXB0OworIAorLSAgU3RyaW5nICZvcGVyYXRvcj0o Y29uc3QgU3RyaW5nICYpICYgbm9leGNlcHQ7CistICBTdHJpbmcgJm9wZXJhdG9yPShTdHJpbmcg JiYpICYgbm9leGNlcHQ7CisrICBTdHJpbmcgJm9wZXJhdG9yPSAoY29uc3QgU3RyaW5nICYpICYg bm9leGNlcHQ7CisrICBTdHJpbmcgJm9wZXJhdG9yPSAoU3RyaW5nICYmKSAmIG5vZXhjZXB0Owor IAorLSAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdDsKKysgIGV4cGxpY2l0 IG9wZXJhdG9yIHN0ZDo6c3RyaW5nICgpIGNvbnN0OworIAorLSAgY29uc3QgY2hhciAqZGF0YSgp IGNvbnN0IG5vZXhjZXB0OworLSAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0Owor LSAgc3RkOjpzaXplX3QgbGVuZ3RoKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGVtcHR5KCkg Y29uc3Qgbm9leGNlcHQ7CisrICBjb25zdCBjaGFyICpkYXRhICgpIGNvbnN0IG5vZXhjZXB0Owor KyAgc3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHN0ZDo6c2l6ZV90IGxl bmd0aCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQ7 CisgCistICBjb25zdCBjaGFyICpjX3N0cigpIG5vZXhjZXB0OworKyAgY29uc3QgY2hhciAqY19z dHIgKCkgbm9leGNlcHQ7CisgCistICBzdGQ6OnNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IG5vZXhj ZXB0OworLSAgdm9pZCByZXNlcnZlKHNpemVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKKysgIHN0ZDo6 c2l6ZV90IGNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCByZXNlcnZlIChzaXpl X3QgbmV3X2NhcCkgbm9leGNlcHQ7CisgCisgICB1c2luZyBpdGVyYXRvciA9IGNoYXIgKjsKKy0g IGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQ7CistICBpdGVyYXRvciBlbmQoKSBub2V4Y2VwdDsK KysgIGl0ZXJhdG9yIGJlZ2luICgpIG5vZXhjZXB0OworKyAgaXRlcmF0b3IgZW5kICgpIG5vZXhj ZXB0OworIAorICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBjb25zdCBjaGFyICo7CistICBjb25z dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3IgZW5k KCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCBub2V4 Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0 X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgZW5k ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgY2JlZ2luICgpIGNvbnN0IG5v ZXhjZXB0OworKyAgY29uc3RfaXRlcmF0b3IgY2VuZCAoKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0g IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29s IG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVy YXRvcjwoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcjw9 KGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+KGNvbnN0 IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+PShjb25zdCBTdHJp bmcgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IFN0cmluZyAm KSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgU3RyaW5nICYpIGNv bnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IFN0cmluZyAmKSBjb25zdCBu b2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I8PSAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhj ZXB0OworKyAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IFN0cmluZyAmKSBjb25zdCBub2V4Y2VwdDsK KysgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgU3RyaW5nICYpIGNvbnN0IG5vZXhjZXB0OworIAor LSAgdm9pZCBzd2FwKFN0cmluZyAmKSBub2V4Y2VwdDsKKysgIHZvaWQgc3dhcCAoU3RyaW5nICYp IG5vZXhjZXB0OworIAorLSAgU3RyaW5nKHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFN0cmluZyAm KSBub2V4Y2VwdDsKKysgIFN0cmluZyAodW5zYWZlX2JpdGNvcHlfdCwgY29uc3QgU3RyaW5nICYp IG5vZXhjZXB0OworIAorIHByaXZhdGU6CisgICBzdHJ1Y3QgbG9zc3lfdDsKKy0gIFN0cmluZyhs b3NzeV90LCBjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKy0gIFN0cmluZyhs b3NzeV90LCBjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQ7CistICBmcmll bmQgdm9pZCBzd2FwKFN0cmluZyAmbGhzLCBTdHJpbmcgJnJocykgbm9leGNlcHQgeyBsaHMuc3dh cChyaHMpOyB9CisrICBTdHJpbmcgKGxvc3N5X3QsIGNvbnN0IGNoYXIgKiwgc3RkOjpzaXplX3Qp IG5vZXhjZXB0OworKyAgU3RyaW5nIChsb3NzeV90LCBjb25zdCBjaGFyMTZfdCAqLCBzdGQ6OnNp emVfdCkgbm9leGNlcHQ7CisrICBmcmllbmQgdm9pZAorKyAgc3dhcCAoU3RyaW5nICZsaHMsIFN0 cmluZyAmcmhzKSBub2V4Y2VwdAorKyAgeworKyAgICBsaHMuc3dhcCAocmhzKTsKKysgIH0KKyAK KyAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDM+IHJlcHI7CisgfTsKK0BAIC0xMzEsNDgg KzEzNCw0OSBAQCBjbGFzcyBTdHJpbmcgZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9S VVNUX1NUUgorICNkZWZpbmUgQ1hYQlJJREdFMV9SVVNUX1NUUgorLWNsYXNzIFN0ciBmaW5hbCB7 CisrY2xhc3MgU3RyIGZpbmFsCisreworIHB1YmxpYzoKKy0gIFN0cigpIG5vZXhjZXB0OworLSAg U3RyKGNvbnN0IFN0cmluZyAmKSBub2V4Y2VwdDsKKy0gIFN0cihjb25zdCBzdGQ6OnN0cmluZyAm KTsKKy0gIFN0cihjb25zdCBjaGFyICopOworLSAgU3RyKGNvbnN0IGNoYXIgKiwgc3RkOjpzaXpl X3QpOworKyAgU3RyICgpIG5vZXhjZXB0OworKyAgU3RyIChjb25zdCBTdHJpbmcgJikgbm9leGNl cHQ7CisrICBTdHIgKGNvbnN0IHN0ZDo6c3RyaW5nICYpOworKyAgU3RyIChjb25zdCBjaGFyICop OworKyAgU3RyIChjb25zdCBjaGFyICosIHN0ZDo6c2l6ZV90KTsKKyAKKy0gIFN0ciAmb3BlcmF0 b3I9KGNvbnN0IFN0ciAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFN0ciAmb3BlcmF0b3I9 IChjb25zdCBTdHIgJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgCistICBleHBsaWNpdCBvcGVy YXRvciBzdGQ6OnN0cmluZygpIGNvbnN0OworKyAgZXhwbGljaXQgb3BlcmF0b3Igc3RkOjpzdHJp bmcgKCkgY29uc3Q7CisgI2lmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wKKy0gIGV4cGxpY2l0IG9w ZXJhdG9yIHN0ZDo6c3RyaW5nX3ZpZXcoKSBjb25zdDsKKysgIGV4cGxpY2l0IG9wZXJhdG9yIHN0 ZDo6c3RyaW5nX3ZpZXcgKCkgY29uc3Q7CisgI2VuZGlmCisgCistICBjb25zdCBjaGFyICpkYXRh KCkgY29uc3Qgbm9leGNlcHQ7CistICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3Qgbm9leGNlcHQ7 CistICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZW1wdHko KSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0IGNoYXIgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7 CisrICBzdGQ6OnNpemVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OworKyAgc3RkOjpzaXplX3Qg bGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBlbXB0eSAoKSBjb25zdCBub2V4Y2Vw dDsKKyAKKy0gIFN0cihjb25zdCBTdHIgJikgbm9leGNlcHQgPSBkZWZhdWx0OworLSAgflN0cigp IG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFN0ciAoY29uc3QgU3RyICYpIG5vZXhjZXB0ID0gZGVm YXVsdDsKKysgIH5TdHIgKCkgbm9leGNlcHQgPSBkZWZhdWx0OworIAorICAgdXNpbmcgaXRlcmF0 b3IgPSBjb25zdCBjaGFyICo7CisgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IGNvbnN0IGNoYXIg KjsKKy0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9p dGVyYXRvciBlbmQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGNvbnN0X2l0ZXJhdG9yIGNiZWdpbigp IGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0 OworKyAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9p dGVyYXRvciBlbmQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBjYmVnaW4g KCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBjZW5kICgpIGNvbnN0IG5vZXhj ZXB0OworIAorLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0ciAmKSBjb25zdCBub2V4Y2VwdDsK Ky0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29s IG9wZXJhdG9yPChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9y PD0oY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcj4oY29uc3Qg U3RyICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFN0ciAmKSBj b25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgU3RyICYpIGNvbnN0IG5v ZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7 CisrICBib29sIG9wZXJhdG9yPCAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9v bCBvcGVyYXRvcjw9IChjb25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJh dG9yPiAoY29uc3QgU3RyICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj49IChj b25zdCBTdHIgJikgY29uc3Qgbm9leGNlcHQ7CisgCistICB2b2lkIHN3YXAoU3RyICYpIG5vZXhj ZXB0OworKyAgdm9pZCBzd2FwIChTdHIgJikgbm9leGNlcHQ7CisgCisgcHJpdmF0ZToKKyAgIGNs YXNzIHVuaW5pdDsKKy0gIFN0cih1bmluaXQpIG5vZXhjZXB0OworKyAgU3RyICh1bmluaXQpIG5v ZXhjZXB0OworICAgZnJpZW5kIGltcGw8U3RyPjsKKyAKKyAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50 cHRyX3QsIDI+IHJlcHI7CitAQCAtMTgxLDcyICsxODUsNzIgQEAgY2xhc3MgU3RyIGZpbmFsIHsK KyAKKyAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9TTElDRQorICNkZWZpbmUgQ1hYQlJJREdFMV9S VVNUX1NMSUNFCistbmFtZXNwYWNlIGRldGFpbCB7CistdGVtcGxhdGUgPGJvb2w+Cistc3RydWN0 IGNvcHlfYXNzaWduYWJsZV9pZiB7fTsKKy0KKy10ZW1wbGF0ZSA8PgorLXN0cnVjdCBjb3B5X2Fz c2lnbmFibGVfaWY8ZmFsc2U+IHsKKy0gIGNvcHlfYXNzaWduYWJsZV9pZigpIG5vZXhjZXB0ID0g ZGVmYXVsdDsKKy0gIGNvcHlfYXNzaWduYWJsZV9pZihjb25zdCBjb3B5X2Fzc2lnbmFibGVfaWYg Jikgbm9leGNlcHQgPSBkZWZhdWx0OworLSAgY29weV9hc3NpZ25hYmxlX2lmICZvcGVyYXRvcj0o Y29uc3QgY29weV9hc3NpZ25hYmxlX2lmICYpICYgbm9leGNlcHQgPSBkZWxldGU7CistICBjb3B5 X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPShjb3B5X2Fzc2lnbmFibGVfaWYgJiYpICYgbm9leGNl cHQgPSBkZWZhdWx0OworK25hbWVzcGFjZSBkZXRhaWwKKyt7CisrdGVtcGxhdGUgPGJvb2w+IHN0 cnVjdCBjb3B5X2Fzc2lnbmFibGVfaWYKKyt7CisrfTsKKysKKyt0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg Y29weV9hc3NpZ25hYmxlX2lmPGZhbHNlPgorK3sKKysgIGNvcHlfYXNzaWduYWJsZV9pZiAoKSBu b2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBjb3B5X2Fzc2lnbmFibGVfaWYgKGNvbnN0IGNvcHlfYXNz aWduYWJsZV9pZiAmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBjb3B5X2Fzc2lnbmFibGVfaWYg Jm9wZXJhdG9yPSAoY29uc3QgY29weV9hc3NpZ25hYmxlX2lmICYpICYgbm9leGNlcHQgPSBkZWxl dGU7CisrICBjb3B5X2Fzc2lnbmFibGVfaWYgJm9wZXJhdG9yPSAoY29weV9hc3NpZ25hYmxlX2lm ICYmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyB9OworIH0gLy8gbmFtZXNwYWNlIGRldGFpbAor IAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWNsYXNzIFNsaWNlIGZpbmFsCistICAgIDogcHJp dmF0ZSBkZXRhaWw6OmNvcHlfYXNzaWduYWJsZV9pZjxzdGQ6OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4g eworK2NsYXNzIFNsaWNlIGZpbmFsIDogcHJpdmF0ZSBkZXRhaWw6OmNvcHlfYXNzaWduYWJsZV9p ZjxzdGQ6OmlzX2NvbnN0PFQ+Ojp2YWx1ZT4KKyt7CisgcHVibGljOgorICAgdXNpbmcgdmFsdWVf dHlwZSA9IFQ7CisgCistICBTbGljZSgpIG5vZXhjZXB0OworLSAgU2xpY2UoVCAqLCBzdGQ6OnNp emVfdCBjb3VudCkgbm9leGNlcHQ7CisrICBTbGljZSAoKSBub2V4Y2VwdDsKKysgIFNsaWNlIChU ICosIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2VwdDsKKyAKKy0gIHRlbXBsYXRlIDx0eXBlbmFt ZSBDPgorLSAgZXhwbGljaXQgU2xpY2UoQyAmYykgOiBTbGljZShjLmRhdGEoKSwgYy5zaXplKCkp IHt9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4gZXhwbGljaXQgU2xpY2UgKEMgJmMpIDogU2xp Y2UgKGMuZGF0YSAoKSwgYy5zaXplICgpKSB7fQorIAorLSAgU2xpY2UgJm9wZXJhdG9yPShjb25z dCBTbGljZTxUPiAmKSAmIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0gIFNsaWNlICZvcGVyYXRvcj0o U2xpY2U8VD4gJiYpICYgbm9leGNlcHQgPSBkZWZhdWx0OworKyAgU2xpY2UgJm9wZXJhdG9yPSAo Y29uc3QgU2xpY2U8VD4gJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisrICBTbGljZSAmb3BlcmF0 b3I9IChTbGljZTxUPiAmJikgJiBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgCistICBUICpkYXRhKCkg Y29uc3Qgbm9leGNlcHQ7CistICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3Qgbm9leGNlcHQ7Cist ICBzdGQ6OnNpemVfdCBsZW5ndGgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZW1wdHkoKSBj b25zdCBub2V4Y2VwdDsKKysgIFQgKmRhdGEgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBzdGQ6OnNp emVfdCBzaXplICgpIGNvbnN0IG5vZXhjZXB0OworKyAgc3RkOjpzaXplX3QgbGVuZ3RoICgpIGNv bnN0IG5vZXhjZXB0OworKyAgYm9vbCBlbXB0eSAoKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIFQg Jm9wZXJhdG9yW10oc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQ7CistICBUICZhdChzdGQ6 OnNpemVfdCBuKSBjb25zdDsKKy0gIFQgJmZyb250KCkgY29uc3Qgbm9leGNlcHQ7CistICBUICZi YWNrKCkgY29uc3Qgbm9leGNlcHQ7CisrICBUICZvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBj b25zdCBub2V4Y2VwdDsKKysgIFQgJmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdDsKKysgIFQgJmZy b250ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgVCAmYmFjayAoKSBjb25zdCBub2V4Y2VwdDsKKyAK Ky0gIFNsaWNlKGNvbnN0IFNsaWNlPFQ+ICYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKy0gIH5TbGlj ZSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKysgIFNsaWNlIChjb25zdCBTbGljZTxUPiAmKSBub2V4 Y2VwdCA9IGRlZmF1bHQ7CisrICB+U2xpY2UgKCkgbm9leGNlcHQgPSBkZWZhdWx0OworIAorICAg Y2xhc3MgaXRlcmF0b3I7CistICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IG5vZXhjZXB0OworLSAg aXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQ7CisrICBpdGVyYXRvciBiZWdpbiAoKSBjb25z dCBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIGVuZCAoKSBjb25zdCBub2V4Y2VwdDsKKyAKKy0gIHZv aWQgc3dhcChTbGljZSAmKSBub2V4Y2VwdDsKKysgIHZvaWQgc3dhcCAoU2xpY2UgJikgbm9leGNl cHQ7CisgCisgcHJpdmF0ZToKKyAgIGNsYXNzIHVuaW5pdDsKKy0gIFNsaWNlKHVuaW5pdCkgbm9l eGNlcHQ7CisrICBTbGljZSAodW5pbml0KSBub2V4Y2VwdDsKKyAgIGZyaWVuZCBpbXBsPFNsaWNl PjsKKy0gIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCh2b2lkICosIGNvbnN0IHZvaWQgKiwgc3RkOjpz aXplX3QpIG5vZXhjZXB0OworLSAgZnJpZW5kIHZvaWQgKnNsaWNlUHRyKGNvbnN0IHZvaWQgKikg bm9leGNlcHQ7CistICBmcmllbmQgc3RkOjpzaXplX3Qgc2xpY2VMZW4oY29uc3Qgdm9pZCAqKSBu b2V4Y2VwdDsKKysgIGZyaWVuZCB2b2lkIHNsaWNlSW5pdCAodm9pZCAqLCBjb25zdCB2b2lkICos IHN0ZDo6c2l6ZV90KSBub2V4Y2VwdDsKKysgIGZyaWVuZCB2b2lkICpzbGljZVB0ciAoY29uc3Qg dm9pZCAqKSBub2V4Y2VwdDsKKysgIGZyaWVuZCBzdGQ6OnNpemVfdCBzbGljZUxlbiAoY29uc3Qg dm9pZCAqKSBub2V4Y2VwdDsKKyAKKyAgIHN0ZDo6YXJyYXk8c3RkOjp1aW50cHRyX3QsIDI+IHJl cHI7CisgfTsKKyAKKyAjaWZkZWYgX19jcHBfZGVkdWN0aW9uX2d1aWRlcworIHRlbXBsYXRlIDx0 eXBlbmFtZSBDPgorLWV4cGxpY2l0IFNsaWNlKEMgJmMpCistICAgIC0+IFNsaWNlPHN0ZDo6cmVt b3ZlX3JlZmVyZW5jZV90PGRlY2x0eXBlKCpzdGQ6OmRlY2x2YWw8Qz4oKS5kYXRhKCkpPj47Cisr ZXhwbGljaXQgU2xpY2UgKEMgJmMpIC0+IFNsaWNlPHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90PGRl Y2x0eXBlICgqc3RkOjpkZWNsdmFsPEM+ICgpLmRhdGEgKCkpPj47CisgI2VuZGlmIC8vIF9fY3Bw X2RlZHVjdGlvbl9ndWlkZXMKKyAKKy10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1jbGFzcyBTbGlj ZTxUPjo6aXRlcmF0b3IgZmluYWwgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBTbGlj ZTxUPjo6aXRlcmF0b3IgZmluYWwKKyt7CisgcHVibGljOgorICNpZiBfX2NwbHVzcGx1cyA+PSAy MDIwMDJMCisgICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6Y29udGlndW91c19pdGVy YXRvcl90YWc7CitAQCAtMjU4LDMwICsyNjIsMzIgQEAgY2xhc3MgU2xpY2U8VD46Oml0ZXJhdG9y IGZpbmFsIHsKKyAgIHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPFQ+ Ojp0eXBlOworICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgc3RkOjphZGRfbHZhbHVlX3Jl ZmVyZW5jZTxUPjo6dHlwZTsKKyAKKy0gIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCBub2V4 Y2VwdDsKKysgIHJlZmVyZW5jZSBvcGVyYXRvciogKCkgY29uc3Qgbm9leGNlcHQ7CisgICBwb2lu dGVyIG9wZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdDsKKy0gIHJlZmVyZW5jZSBvcGVyYXRvcltd KGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7CistCistICBpdGVyYXRvciAmb3BlcmF0 b3IrKygpIG5vZXhjZXB0OworLSAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIG5vZXhjZXB0Owor LSAgaXRlcmF0b3IgJm9wZXJhdG9yLS0oKSBub2V4Y2VwdDsKKy0gIGl0ZXJhdG9yIG9wZXJhdG9y LS0oaW50KSBub2V4Y2VwdDsKKy0KKy0gIGl0ZXJhdG9yICZvcGVyYXRvcis9KGRpZmZlcmVuY2Vf dHlwZSkgbm9leGNlcHQ7CistICBpdGVyYXRvciAmb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUp IG5vZXhjZXB0OworLSAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSkgY29uc3Qg bm9leGNlcHQ7CistICBmcmllbmQgaW5saW5lIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNl X3R5cGUgbGhzLCBpdGVyYXRvciByaHMpIG5vZXhjZXB0IHsKKysgIHJlZmVyZW5jZSBvcGVyYXRv cltdIChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OworKworKyAgaXRlcmF0b3IgJm9w ZXJhdG9yKysgKCkgbm9leGNlcHQ7CisrICBpdGVyYXRvciBvcGVyYXRvcisrIChpbnQpIG5vZXhj ZXB0OworKyAgaXRlcmF0b3IgJm9wZXJhdG9yLS0gKCkgbm9leGNlcHQ7CisrICBpdGVyYXRvciBv cGVyYXRvci0tIChpbnQpIG5vZXhjZXB0OworKworKyAgaXRlcmF0b3IgJm9wZXJhdG9yKz0gKGRp ZmZlcmVuY2VfdHlwZSkgbm9leGNlcHQ7CisrICBpdGVyYXRvciAmb3BlcmF0b3ItPSAoZGlmZmVy ZW5jZV90eXBlKSBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIG9wZXJhdG9yKyAoZGlmZmVyZW5jZV90 eXBlKSBjb25zdCBub2V4Y2VwdDsKKysgIGZyaWVuZCBpbmxpbmUgaXRlcmF0b3IKKysgIG9wZXJh dG9yKyAoZGlmZmVyZW5jZV90eXBlIGxocywgaXRlcmF0b3IgcmhzKSBub2V4Y2VwdAorKyAgewor ICAgICByZXR1cm4gcmhzICsgbGhzOworICAgfQorLSAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZl cmVuY2VfdHlwZSkgY29uc3Qgbm9leGNlcHQ7CistICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3It KGNvbnN0IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworKyAgaXRlcmF0b3Igb3BlcmF0b3It IChkaWZmZXJlbmNlX3R5cGUpIGNvbnN0IG5vZXhjZXB0OworKyAgZGlmZmVyZW5jZV90eXBlIG9w ZXJhdG9yLSAoY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CisgCistICBib29sIG9w ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJh dG9yIT0oY29uc3QgaXRlcmF0b3IgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9y PChjb25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I8PShj b25zdCBpdGVyYXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3I+KGNvbnN0 IGl0ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGl0 ZXJhdG9yICYpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBpdGVy YXRvciAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgaXRlcmF0 b3IgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPCAoY29uc3QgaXRlcmF0b3Ig JikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IGl0ZXJhdG9yICYp IGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IGl0ZXJhdG9yICYpIGNv bnN0IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj49IChjb25zdCBpdGVyYXRvciAmKSBjb25z dCBub2V4Y2VwdDsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIGNsYXNzIFNsaWNlOworQEAgLTI5 MCw2ODMgKzI5Niw4MTAgQEAgY2xhc3MgU2xpY2U8VD46Oml0ZXJhdG9yIGZpbmFsIHsKKyB9Owor IAorICNpZiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMCistc3RhdGljX2Fzc2VydChzdGQ6OnJhbmdl czo6Y29udGlndW91c19yYW5nZTxydXN0OjpTbGljZTxjb25zdCB1aW50OF90Pj4pOworLXN0YXRp Y19hc3NlcnQoc3RkOjpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4 X3Q+OjppdGVyYXRvcj4pOworK3N0YXRpY19hc3NlcnQgKHN0ZDo6cmFuZ2VzOjpjb250aWd1b3Vz X3JhbmdlPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+Pik7Cisrc3RhdGljX2Fzc2VydCAoc3Rk Ojpjb250aWd1b3VzX2l0ZXJhdG9yPHJ1c3Q6OlNsaWNlPGNvbnN0IHVpbnQ4X3Q+OjppdGVyYXRv cj4pOworICNlbmRpZgorIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVNsaWNlPFQ+OjpTbGlj ZSgpIG5vZXhjZXB0IHsKKy0gIHNsaWNlSW5pdCh0aGlzLCByZWludGVycHJldF9jYXN0PHZvaWQg Kj4oYWxpZ25fb2Y8VD4oKSksIDApOworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBTbGljZTxUPjo6 U2xpY2UgKCkgbm9leGNlcHQKKyt7CisrICBzbGljZUluaXQgKHRoaXMsIHJlaW50ZXJwcmV0X2Nh c3Q8dm9pZCAqPiAoYWxpZ25fb2Y8VD4gKCkpLCAwKTsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CistU2xpY2U8VD46OlNsaWNlKFQgKnMsIHN0ZDo6c2l6ZV90IGNvdW50KSBub2V4Y2Vw dCB7CistICBhc3NlcnQocyAhPSBudWxscHRyIHx8IGNvdW50ID09IDApOworLSAgc2xpY2VJbml0 KHRoaXMsCistICAgICAgICAgICAgcyA9PSBudWxscHRyICYmIGNvdW50ID09IDAKKy0gICAgICAg ICAgICAgICAgPyByZWludGVycHJldF9jYXN0PHZvaWQgKj4oYWxpZ25fb2Y8VD4oKSkKKy0gICAg ICAgICAgICAgICAgOiBjb25zdF9jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0 eXBlICo+KHMpLAorLSAgICAgICAgICAgIGNvdW50KTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g U2xpY2U8VD46OlNsaWNlIChUICpzLCBzdGQ6OnNpemVfdCBjb3VudCkgbm9leGNlcHQKKyt7Cisr ICBhc3NlcnQgKHMgIT0gbnVsbHB0ciB8fCBjb3VudCA9PSAwKTsKKysgIHNsaWNlSW5pdCAodGhp cywKKysgICAgICAgICAgICAgcyA9PSBudWxscHRyICYmIGNvdW50ID09IDAgPyByZWludGVycHJl dF9jYXN0PHZvaWQgKj4gKGFsaWduX29mPFQ+ICgpKQorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IGNvbnN0X2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8 VD46OnR5cGUgKj4gKHMpLAorKyAgICAgICAgICAgICBjb3VudCk7CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLVQgKlNsaWNlPFQ+OjpkYXRhKCkgY29uc3Qgbm9leGNlcHQgeworLSAg cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihzbGljZVB0cih0aGlzKSk7CisrVCAqCisrU2xp Y2U8VD46OmRhdGEgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gcmVpbnRlcnByZXRf Y2FzdDxUICo+IChzbGljZVB0ciAodGhpcykpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKy1zdGQ6OnNpemVfdCBTbGljZTxUPjo6c2l6ZSgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJl dHVybiBzbGljZUxlbih0aGlzKTsKKytzdGQ6OnNpemVfdAorK1NsaWNlPFQ+OjpzaXplICgpIGNv bnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHNsaWNlTGVuICh0aGlzKTsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Cistc3RkOjpzaXplX3QgU2xpY2U8VD46Omxlbmd0aCgpIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIHJldHVybiB0aGlzLT5zaXplKCk7Cisrc3RkOjpzaXplX3QKKytTbGlj ZTxUPjo6bGVuZ3RoICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgcmV0dXJuIHRoaXMtPnNpemUg KCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLWJvb2wgU2xpY2U8VD46OmVtcHR5 KCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOworK2Jvb2wK KytTbGljZTxUPjo6ZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gdGhpcy0+ c2l6ZSAoKSA9PSAwOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZTbGljZTxU Pjo6b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdCB7CistICBhc3NlcnQo biA8IHRoaXMtPnNpemUoKSk7CistICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4oc2xp Y2VQdHIodGhpcykpICsgc2l6ZV9vZjxUPigpICogbjsKKy0gIHJldHVybiAqcmVpbnRlcnByZXRf Y2FzdDxUICo+KHB0cik7CisrVCAmCisrU2xpY2U8VD46Om9wZXJhdG9yW10gKHN0ZDo6c2l6ZV90 IG4pIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNzZXJ0IChuIDwgdGhpcy0+c2l6ZSAoKSk7Cisr ICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4gKHNsaWNlUHRyICh0aGlzKSkgKyBzaXpl X29mPFQ+ICgpICogbjsKKysgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUICo+IChwdHIpOwor IH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZTbGljZTxUPjo6YXQoc3RkOjpzaXpl X3QgbikgY29uc3QgeworLSAgaWYgKG4gPj0gdGhpcy0+c2l6ZSgpKSB7CistICAgIHBhbmljPHN0 ZDo6b3V0X29mX3JhbmdlPigicnVzdDo6U2xpY2UgaW5kZXggb3V0IG9mIHJhbmdlIik7CistICB9 CisrVCAmCisrU2xpY2U8VD46OmF0IChzdGQ6OnNpemVfdCBuKSBjb25zdAorK3sKKysgIGlmIChu ID49IHRoaXMtPnNpemUgKCkpCisrICAgIHsKKysgICAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5n ZT4gKCJydXN0OjpTbGljZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKysgICAgfQorICAgcmV0dXJu ICgqdGhpcylbbl07CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgJlNsaWNlPFQ+ Ojpmcm9udCgpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7Cisr VCAmCisrU2xpY2U8VD46OmZyb250ICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNzZXJ0ICgh dGhpcy0+ZW1wdHkgKCkpOworICAgcmV0dXJuICgqdGhpcylbMF07CisgfQorIAorIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgorLVQgJlNsaWNlPFQ+OjpiYWNrKCkgY29uc3Qgbm9leGNlcHQgeworLSAg YXNzZXJ0KCF0aGlzLT5lbXB0eSgpKTsKKy0gIHJldHVybiAoKnRoaXMpW3RoaXMtPnNpemUoKSAt IDFdOworK1QgJgorK1NsaWNlPFQ+OjpiYWNrICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNz ZXJ0ICghdGhpcy0+ZW1wdHkgKCkpOworKyAgcmV0dXJuICgqdGhpcylbdGhpcy0+c2l6ZSAoKSAt IDFdOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyB0eXBlbmFtZSBTbGljZTxUPjo6 aXRlcmF0b3I6OnJlZmVyZW5jZQorLVNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29u c3Qgbm9leGNlcHQgeworLSAgcmV0dXJuICpzdGF0aWNfY2FzdDxUICo+KHRoaXMtPnBvcyk7Cisr U2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvciogKCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICBy ZXR1cm4gKnN0YXRpY19jYXN0PFQgKj4gKHRoaXMtPnBvcyk7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6cG9pbnRlcgorLVNsaWNl PFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiBz dGF0aWNfY2FzdDxUICo+KHRoaXMtPnBvcyk7CisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRv ci0+KCkgY29uc3Qgbm9leGNlcHQKKyt7CisrICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAodGhp cy0+cG9zKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8 VD46Oml0ZXJhdG9yOjpyZWZlcmVuY2UgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcltdKAor LSAgICB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBuKSBjb25z dCBub2V4Y2VwdCB7CistICBhdXRvIHB0ciA9IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9z KSArIHRoaXMtPnN0cmlkZSAqIG47CistICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihw dHIpOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6cmVmZXJlbmNlCisrU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvcltdICh0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I6OmRpZmZl cmVuY2VfdHlwZSBuKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGF1dG8gcHRyID0gc3RhdGljX2Nh c3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAqIG47CisrICByZXR1cm4gKnJl aW50ZXJwcmV0X2Nhc3Q8VCAqPiAocHRyKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yKysoKSBub2V4Y2VwdCB7CistICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KHRo aXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7CisrdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICYK KytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yKysgKCkgbm9leGNlcHQKKyt7CisrICB0aGlz LT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlOwor ICAgcmV0dXJuICp0aGlzOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFt ZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisrKGludCkg bm9leGNlcHQgeworLSAgYXV0byByZXQgPSBpdGVyYXRvcigqdGhpcyk7CistICB0aGlzLT5wb3Mg PSBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykgKyB0aGlzLT5zdHJpZGU7CisrdHlwZW5h bWUgU2xpY2U8VD46Oml0ZXJhdG9yCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcisrIChp bnQpIG5vZXhjZXB0CisreworKyAgYXV0byByZXQgPSBpdGVyYXRvciAoKnRoaXMpOworKyAgdGhp cy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZTsK KyAgIHJldHVybiByZXQ7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1l IFNsaWNlPFQ+OjppdGVyYXRvciAmU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0tKCkgbm9l eGNlcHQgeworLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0g dGhpcy0+c3RyaWRlOworK3R5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciAmCisrU2xpY2U8VD46 Oml0ZXJhdG9yOjpvcGVyYXRvci0tICgpIG5vZXhjZXB0CisreworKyAgdGhpcy0+cG9zID0gc3Rh dGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZTsKKyAgIHJldHVybiAq dGhpczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46 Oml0ZXJhdG9yIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItLShpbnQpIG5vZXhjZXB0IHsK Ky0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOworLSAgdGhpcy0+cG9zID0gc3RhdGljX2Nh c3Q8Y2hhciAqPih0aGlzLT5wb3MpIC0gdGhpcy0+c3RyaWRlOworK3R5cGVuYW1lIFNsaWNlPFQ+ OjppdGVyYXRvcgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItLSAoaW50KSBub2V4Y2Vw dAorK3sKKysgIGF1dG8gcmV0ID0gaXRlcmF0b3IgKCp0aGlzKTsKKysgIHRoaXMtPnBvcyA9IHN0 YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGU7CisgICByZXR1cm4g cmV0OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBTbGljZTxUPjo6 aXRlcmF0b3IgJlNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IrPSgKKy0gICAgdHlwZW5hbWUg U2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikgbm9leGNlcHQgeworLSAgdGhp cy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICog bjsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgJgorK1NsaWNlPFQ+OjppdGVyYXRvcjo6 b3BlcmF0b3IrPSAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUg bikgbm9leGNlcHQKKyt7CisrICB0aGlzLT5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+ICh0aGlz LT5wb3MpICsgdGhpcy0+c3RyaWRlICogbjsKKyAgIHJldHVybiAqdGhpczsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yICZTbGljZTxU Pjo6aXRlcmF0b3I6Om9wZXJhdG9yLT0oCistICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRv cjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0IHsKKy0gIHRoaXMtPnBvcyA9IHN0YXRpY19j YXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZSAqIG47CisrdHlwZW5hbWUgU2xp Y2U8VD46Oml0ZXJhdG9yICYKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yLT0gKHR5cGVu YW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIG5vZXhjZXB0Cisrewor KyAgdGhpcy0+cG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSAtIHRoaXMtPnN0 cmlkZSAqIG47CisgICByZXR1cm4gKnRoaXM7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgorLXR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvciBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yKygKKy0gICAgdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUg bikgY29uc3Qgbm9leGNlcHQgeworLSAgYXV0byByZXQgPSBpdGVyYXRvcigqdGhpcyk7CistICBy ZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPih0aGlzLT5wb3MpICsgdGhpcy0+c3RyaWRlICog bjsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yKyAodHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgbikg Y29uc3Qgbm9leGNlcHQKKyt7CisrICBhdXRvIHJldCA9IGl0ZXJhdG9yICgqdGhpcyk7CisrICBy ZXQucG9zID0gc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9zKSArIHRoaXMtPnN0cmlkZSAq IG47CisgICByZXR1cm4gcmV0OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBl bmFtZSBTbGljZTxUPjo6aXRlcmF0b3IgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0oCist ICAgIHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIGF1dG8gcmV0ID0gaXRlcmF0b3IoKnRoaXMpOworLSAgcmV0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4odGhpcy0+cG9zKSAtIHRoaXMtPnN0cmlkZSAqIG47CisrdHlw ZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yCisrU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvci0g KHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IG5v ZXhjZXB0CisreworKyAgYXV0byByZXQgPSBpdGVyYXRvciAoKnRoaXMpOworKyAgcmV0LnBvcyA9 IHN0YXRpY19jYXN0PGNoYXIgKj4gKHRoaXMtPnBvcykgLSB0aGlzLT5zdHJpZGUgKiBuOworICAg cmV0dXJuIHJldDsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgdHlwZW5hbWUgU2xp Y2U8VD46Oml0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUKKy1TbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yLShjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGF1dG8g ZGlmZiA9IHN0ZDo6ZGlzdGFuY2Uoc3RhdGljX2Nhc3Q8Y2hhciAqPihvdGhlci5wb3MpLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjaGFyICo+KHRoaXMtPnBvcykp OworLSAgcmV0dXJuIGRpZmYgLyBzdGF0aWNfY2FzdDx0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0 b3I6OmRpZmZlcmVuY2VfdHlwZT4oCistICAgICAgICAgICAgICAgICAgICB0aGlzLT5zdHJpZGUp OworK1NsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3ItIChjb25zdCBpdGVyYXRvciAmb3RoZXIp IGNvbnN0IG5vZXhjZXB0CisreworKyAgYXV0byBkaWZmID0gc3RkOjpkaXN0YW5jZSAoc3RhdGlj X2Nhc3Q8Y2hhciAqPiAob3RoZXIucG9zKSwgc3RhdGljX2Nhc3Q8Y2hhciAqPiAodGhpcy0+cG9z KSk7CisrICByZXR1cm4gZGlmZiAvIHN0YXRpY19jYXN0PHR5cGVuYW1lIFNsaWNlPFQ+OjppdGVy YXRvcjo6ZGlmZmVyZW5jZV90eXBlPiAodGhpcy0+c3RyaWRlKTsKKyB9CisgCisgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+CistYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3Qg aXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVy YXRvcjo6b3BlcmF0b3I9PSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAor K3sKKyAgIHJldHVybiB0aGlzLT5wb3MgPT0gb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBp dGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0IHsKKytib29sCisrU2xpY2U8VD46Oml0ZXJh dG9yOjpvcGVyYXRvciE9IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Cisr eworICAgcmV0dXJuIHRoaXMtPnBvcyAhPSBvdGhlci5wb3M7CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcjwoY29uc3QgaXRl cmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVyYXRv cjo6b3BlcmF0b3I8IChjb25zdCBpdGVyYXRvciAmb3RoZXIpIGNvbnN0IG5vZXhjZXB0Cisrewor ICAgcmV0dXJuIHRoaXMtPnBvcyA8IG90aGVyLnBvczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CistYm9vbCBTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJhdG9yPD0oY29uc3QgaXRlcmF0 b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdCB7CisrYm9vbAorK1NsaWNlPFQ+OjppdGVyYXRvcjo6 b3BlcmF0b3I8PSAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAorK3sKKyAg IHJldHVybiB0aGlzLT5wb3MgPD0gb3RoZXIucG9zOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy1ib29sIFNsaWNlPFQ+OjppdGVyYXRvcjo6b3BlcmF0b3I+KGNvbnN0IGl0ZXJhdG9y ICZvdGhlcikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9w ZXJhdG9yPiAoY29uc3QgaXRlcmF0b3IgJm90aGVyKSBjb25zdCBub2V4Y2VwdAorK3sKKyAgIHJl dHVybiB0aGlzLT5wb3MgPiBvdGhlci5wb3M7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBU PgorLWJvb2wgU2xpY2U8VD46Oml0ZXJhdG9yOjpvcGVyYXRvcj49KGNvbnN0IGl0ZXJhdG9yICZv dGhlcikgY29uc3Qgbm9leGNlcHQgeworK2Jvb2wKKytTbGljZTxUPjo6aXRlcmF0b3I6Om9wZXJh dG9yPj0gKGNvbnN0IGl0ZXJhdG9yICZvdGhlcikgY29uc3Qgbm9leGNlcHQKKyt7CisgICByZXR1 cm4gdGhpcy0+cG9zID49IG90aGVyLnBvczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CistdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9yIFNsaWNlPFQ+OjpiZWdpbigpIGNvbnN0IG5v ZXhjZXB0IHsKKyt0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3IKKytTbGljZTxUPjo6YmVnaW4g KCkgY29uc3Qgbm9leGNlcHQKKyt7CisgICBpdGVyYXRvciBpdDsKKy0gIGl0LnBvcyA9IHNsaWNl UHRyKHRoaXMpOworLSAgaXQuc3RyaWRlID0gc2l6ZV9vZjxUPigpOworKyAgaXQucG9zID0gc2xp Y2VQdHIgKHRoaXMpOworKyAgaXQuc3RyaWRlID0gc2l6ZV9vZjxUPiAoKTsKKyAgIHJldHVybiBp dDsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgU2xpY2U8VD46Oml0 ZXJhdG9yIFNsaWNlPFQ+OjplbmQoKSBjb25zdCBub2V4Y2VwdCB7CistICBpdGVyYXRvciBpdCA9 IHRoaXMtPmJlZ2luKCk7CistICBpdC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+KGl0LnBvcykg KyBpdC5zdHJpZGUgKiB0aGlzLT5zaXplKCk7CisrdHlwZW5hbWUgU2xpY2U8VD46Oml0ZXJhdG9y CisrU2xpY2U8VD46OmVuZCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGl0ZXJhdG9yIGl0ID0g dGhpcy0+YmVnaW4gKCk7CisrICBpdC5wb3MgPSBzdGF0aWNfY2FzdDxjaGFyICo+IChpdC5wb3Mp ICsgaXQuc3RyaWRlICogdGhpcy0+c2l6ZSAoKTsKKyAgIHJldHVybiBpdDsKKyB9CisgCisgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9pZCBTbGljZTxUPjo6c3dhcChTbGljZSAmcmhzKSBub2V4 Y2VwdCB7CistICBzdGQ6OnN3YXAoKnRoaXMsIHJocyk7Cisrdm9pZAorK1NsaWNlPFQ+Ojpzd2Fw IChTbGljZSAmcmhzKSBub2V4Y2VwdAorK3sKKysgIHN0ZDo6c3dhcCAoKnRoaXMsIHJocyk7Cisg fQorICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfU0xJQ0UKKyAKKyAjaWZuZGVmIENYWEJSSURH RTFfUlVTVF9CT1gKKyAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9CT1gKKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy1jbGFzcyBCb3ggZmluYWwgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFz cyBCb3ggZmluYWwKKyt7CisgcHVibGljOgorICAgdXNpbmcgZWxlbWVudF90eXBlID0gVDsKKy0g IHVzaW5nIGNvbnN0X3BvaW50ZXIgPQorLSAgICAgIHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8 dHlwZW5hbWUgc3RkOjphZGRfY29uc3Q8VD46OnR5cGU+Ojp0eXBlOworKyAgdXNpbmcgY29uc3Rf cG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8dHlwZW5hbWUgc3RkOjphZGRfY29u c3Q8VD46OnR5cGU+Ojp0eXBlOworICAgdXNpbmcgcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWRk X3BvaW50ZXI8VD46OnR5cGU7CisgCistICBCb3goKSA9IGRlbGV0ZTsKKy0gIEJveChCb3ggJiYp IG5vZXhjZXB0OworLSAgfkJveCgpIG5vZXhjZXB0OworKyAgQm94ICgpID0gZGVsZXRlOworKyAg Qm94IChCb3ggJiYpIG5vZXhjZXB0OworKyAgfkJveCAoKSBub2V4Y2VwdDsKKyAKKy0gIGV4cGxp Y2l0IEJveChjb25zdCBUICYpOworLSAgZXhwbGljaXQgQm94KFQgJiYpOworKyAgZXhwbGljaXQg Qm94IChjb25zdCBUICYpOworKyAgZXhwbGljaXQgQm94IChUICYmKTsKKyAKKy0gIEJveCAmb3Bl cmF0b3I9KEJveCAmJikgJiBub2V4Y2VwdDsKKysgIEJveCAmb3BlcmF0b3I9IChCb3ggJiYpICYg bm9leGNlcHQ7CisgCisgICBjb25zdCBUICpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQ7Cist ICBjb25zdCBUICZvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0IFQgJm9wZXJh dG9yKiAoKSBjb25zdCBub2V4Y2VwdDsKKyAgIFQgKm9wZXJhdG9yLT4oKSBub2V4Y2VwdDsKKy0g IFQgJm9wZXJhdG9yKigpIG5vZXhjZXB0OworKyAgVCAmb3BlcmF0b3IqICgpIG5vZXhjZXB0Owor IAorLSAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4KKy0gIHN0YXRpYyBCb3ggaW5fcGxh Y2UoRmllbGRzICYmLi4uKTsKKysgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBGaWVsZHM+IHN0YXRp YyBCb3ggaW5fcGxhY2UgKEZpZWxkcyAmJi4uLik7CisgCistICB2b2lkIHN3YXAoQm94ICYpIG5v ZXhjZXB0OworKyAgdm9pZCBzd2FwIChCb3ggJikgbm9leGNlcHQ7CisgCistICBzdGF0aWMgQm94 IGZyb21fcmF3KFQgKikgbm9leGNlcHQ7CisrICBzdGF0aWMgQm94IGZyb21fcmF3IChUICopIG5v ZXhjZXB0OworIAorLSAgVCAqaW50b19yYXcoKSBub2V4Y2VwdDsKKysgIFQgKmludG9fcmF3ICgp IG5vZXhjZXB0OworIAorICAgLyogRGVwcmVjYXRlZCAqLyB1c2luZyB2YWx1ZV90eXBlID0gZWxl bWVudF90eXBlOworIAorIHByaXZhdGU6CisgICBjbGFzcyB1bmluaXQ7CisgICBjbGFzcyBhbGxv Y2F0aW9uOworLSAgQm94KHVuaW5pdCkgbm9leGNlcHQ7CistICB2b2lkIGRyb3AoKSBub2V4Y2Vw dDsKKysgIEJveCAodW5pbml0KSBub2V4Y2VwdDsKKysgIHZvaWQgZHJvcCAoKSBub2V4Y2VwdDsK KyAKKy0gIGZyaWVuZCB2b2lkIHN3YXAoQm94ICZsaHMsIEJveCAmcmhzKSBub2V4Y2VwdCB7IGxo cy5zd2FwKHJocyk7IH0KKysgIGZyaWVuZCB2b2lkCisrICBzd2FwIChCb3ggJmxocywgQm94ICZy aHMpIG5vZXhjZXB0CisrICB7CisrICAgIGxocy5zd2FwIChyaHMpOworKyAgfQorIAorICAgVCAq cHRyOworIH07CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgQm94PFQ+Ojp1bmlu aXQge307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEJveDxUPjo6dW5pbml0Cisrewor K307CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY2xhc3MgQm94PFQ+OjphbGxvY2F0aW9u IHsKKy0gIHN0YXRpYyBUICphbGxvYygpIG5vZXhjZXB0OworLSAgc3RhdGljIHZvaWQgZGVhbGxv YyhUICopIG5vZXhjZXB0OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBCb3g8VD46OmFs bG9jYXRpb24KKyt7CisrICBzdGF0aWMgVCAqYWxsb2MgKCkgbm9leGNlcHQ7CisrICBzdGF0aWMg dm9pZCBkZWFsbG9jIChUICopIG5vZXhjZXB0OworIAorIHB1YmxpYzoKKy0gIGFsbG9jYXRpb24o KSBub2V4Y2VwdCA6IHB0cihhbGxvYygpKSB7fQorLSAgfmFsbG9jYXRpb24oKSBub2V4Y2VwdCB7 CistICAgIGlmICh0aGlzLT5wdHIpIHsKKy0gICAgICBkZWFsbG9jKHRoaXMtPnB0cik7CistICAg IH0KKysgIGFsbG9jYXRpb24gKCkgbm9leGNlcHQgOiBwdHIgKGFsbG9jICgpKSB7fQorKyAgfmFs bG9jYXRpb24gKCkgbm9leGNlcHQKKysgIHsKKysgICAgaWYgKHRoaXMtPnB0cikKKysgICAgICB7 CisrICAgICAgICBkZWFsbG9jICh0aGlzLT5wdHIpOworKyAgICAgIH0KKyAgIH0KKyAgIFQgKnB0 cjsKKyB9OworIAorLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLUJveDxUPjo6Qm94KEJveCAmJm90 aGVyKSBub2V4Y2VwdCA6IHB0cihvdGhlci5wdHIpIHsKKy0gIG90aGVyLnB0ciA9IG51bGxwdHI7 CistfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoQm94ICYmb3RoZXIpIG5v ZXhjZXB0IDogcHRyIChvdGhlci5wdHIpIHsgb3RoZXIucHRyID0gbnVsbHB0cjsgfQorIAorLXRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLUJveDxUPjo6Qm94KGNvbnN0IFQgJnZhbCkgeworK3RlbXBs YXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoY29uc3QgVCAmdmFsKQorK3sKKyAgIGFsbG9j YXRpb24gYWxsb2M7CistICA6Om5ldyAoYWxsb2MucHRyKSBUKHZhbCk7CisrICA6Om5ldyAoYWxs b2MucHRyKSBUICh2YWwpOworICAgdGhpcy0+cHRyID0gYWxsb2MucHRyOworICAgYWxsb2MucHRy ID0gbnVsbHB0cjsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+OjpCb3go VCAmJnZhbCkgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAoVCAmJnZhbCkK Kyt7CisgICBhbGxvY2F0aW9uIGFsbG9jOworLSAgOjpuZXcgKGFsbG9jLnB0cikgVChzdGQ6Om1v dmUodmFsKSk7CisrICA6Om5ldyAoYWxsb2MucHRyKSBUIChzdGQ6Om1vdmUgKHZhbCkpOworICAg dGhpcy0+cHRyID0gYWxsb2MucHRyOworICAgYWxsb2MucHRyID0gbnVsbHB0cjsKKyB9CisgCist dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+Ojp+Qm94KCkgbm9leGNlcHQgeworLSAgaWYg KHRoaXMtPnB0cikgeworLSAgICB0aGlzLT5kcm9wKCk7CistICB9CisrdGVtcGxhdGUgPHR5cGVu YW1lIFQ+IEJveDxUPjo6fkJveCAoKSBub2V4Y2VwdAorK3sKKysgIGlmICh0aGlzLT5wdHIpCisr ICAgIHsKKysgICAgICB0aGlzLT5kcm9wICgpOworKyAgICB9CisgfQorIAorIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorLUJveDxUPiAmQm94PFQ+OjpvcGVyYXRvcj0oQm94ICYmb3RoZXIpICYgbm9l eGNlcHQgeworLSAgaWYgKHRoaXMtPnB0cikgeworLSAgICB0aGlzLT5kcm9wKCk7CistICB9Cisr Qm94PFQ+ICYKKytCb3g8VD46Om9wZXJhdG9yPSAoQm94ICYmb3RoZXIpICYgbm9leGNlcHQKKyt7 CisrICBpZiAodGhpcy0+cHRyKQorKyAgICB7CisrICAgICAgdGhpcy0+ZHJvcCAoKTsKKysgICAg fQorICAgdGhpcy0+cHRyID0gb3RoZXIucHRyOworICAgb3RoZXIucHRyID0gbnVsbHB0cjsKKyAg IHJldHVybiAqdGhpczsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY29uc3QgVCAq Qm94PFQ+OjpvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQgeworK2NvbnN0IFQgKgorK0JveDxU Pjo6b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0CisreworICAgcmV0dXJuIHRoaXMtPnB0cjsK KyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY29uc3QgVCAmQm94PFQ+OjpvcGVyYXRv ciooKSBjb25zdCBub2V4Y2VwdCB7CisrY29uc3QgVCAmCisrQm94PFQ+OjpvcGVyYXRvciogKCkg Y29uc3Qgbm9leGNlcHQKKyt7CisgICByZXR1cm4gKnRoaXMtPnB0cjsKKyB9CisgCisgdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CistVCAqQm94PFQ+OjpvcGVyYXRvci0+KCkgbm9leGNlcHQgeworK1Qg KgorK0JveDxUPjo6b3BlcmF0b3ItPigpIG5vZXhjZXB0CisreworICAgcmV0dXJuIHRoaXMtPnB0 cjsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVCAmQm94PFQ+OjpvcGVyYXRvcioo KSBub2V4Y2VwdCB7CisrVCAmCisrQm94PFQ+OjpvcGVyYXRvciogKCkgbm9leGNlcHQKKyt7Cisg ICByZXR1cm4gKnRoaXMtPnB0cjsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgdGVt cGxhdGUgPHR5cGVuYW1lLi4uIEZpZWxkcz4KKy1Cb3g8VD4gQm94PFQ+Ojppbl9wbGFjZShGaWVs ZHMgJiYuLi5maWVsZHMpIHsKKytCb3g8VD4KKytCb3g8VD46OmluX3BsYWNlIChGaWVsZHMgJiYu Li5maWVsZHMpCisreworICAgYWxsb2NhdGlvbiBhbGxvYzsKKyAgIGF1dG8gcHRyID0gYWxsb2Mu cHRyOworLSAgOjpuZXcgKHB0cikgVHtzdGQ6OmZvcndhcmQ8RmllbGRzPihmaWVsZHMpLi4ufTsK KysgIDo6bmV3IChwdHIpIFR7IHN0ZDo6Zm9yd2FyZDxGaWVsZHM+IChmaWVsZHMpLi4uIH07Cisg ICBhbGxvYy5wdHIgPSBudWxscHRyOworLSAgcmV0dXJuIGZyb21fcmF3KHB0cik7CisrICByZXR1 cm4gZnJvbV9yYXcgKHB0cik7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXZvaWQg Qm94PFQ+Ojpzd2FwKEJveCAmcmhzKSBub2V4Y2VwdCB7Cisrdm9pZAorK0JveDxUPjo6c3dhcCAo Qm94ICZyaHMpIG5vZXhjZXB0CisreworICAgdXNpbmcgc3RkOjpzd2FwOworLSAgc3dhcCh0aGlz LT5wdHIsIHJocy5wdHIpOworKyAgc3dhcCAodGhpcy0+cHRyLCByaHMucHRyKTsKKyB9CisgCisg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+IEJveDxUPjo6ZnJvbV9yYXcoVCAqcmF3KSBu b2V4Y2VwdCB7CisrQm94PFQ+CisrQm94PFQ+Ojpmcm9tX3JhdyAoVCAqcmF3KSBub2V4Y2VwdAor K3sKKyAgIEJveCBib3ggPSB1bmluaXR7fTsKKyAgIGJveC5wdHIgPSByYXc7CisgICByZXR1cm4g Ym94OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICpCb3g8VD46OmludG9fcmF3 KCkgbm9leGNlcHQgeworK1QgKgorK0JveDxUPjo6aW50b19yYXcgKCkgbm9leGNlcHQKKyt7Cisg ICBUICpyYXcgPSB0aGlzLT5wdHI7CisgICB0aGlzLT5wdHIgPSBudWxscHRyOworICAgcmV0dXJu IHJhdzsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistQm94PFQ+OjpCb3godW5pbml0 KSBub2V4Y2VwdCB7fQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBCb3g8VD46OkJveCAodW5pbml0 KSBub2V4Y2VwdCB7fQorICNlbmRpZiAvLyBDWFhCUklER0UxX1JVU1RfQk9YCisgCisgI2lmbmRl ZiBDWFhCUklER0UxX1JVU1RfQklUQ09QWV9UCisgI2RlZmluZSBDWFhCUklER0UxX1JVU1RfQklU Q09QWV9UCistc3RydWN0IHVuc2FmZV9iaXRjb3B5X3QgZmluYWwgeworLSAgZXhwbGljaXQgdW5z YWZlX2JpdGNvcHlfdCgpID0gZGVmYXVsdDsKKytzdHJ1Y3QgdW5zYWZlX2JpdGNvcHlfdCBmaW5h bAorK3sKKysgIGV4cGxpY2l0IHVuc2FmZV9iaXRjb3B5X3QgKCkgPSBkZWZhdWx0OworIH07Cisg I2VuZGlmIC8vIENYWEJSSURHRTFfUlVTVF9CSVRDT1BZX1QKKyAKKyAjaWZuZGVmIENYWEJSSURH RTFfUlVTVF9WRUMKKyAjZGVmaW5lIENYWEJSSURHRTFfUlVTVF9WRUMKKy10ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy1jbGFzcyBWZWMgZmluYWwgeworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFz cyBWZWMgZmluYWwKKyt7CisgcHVibGljOgorICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7CisgCist ICBWZWMoKSBub2V4Y2VwdDsKKy0gIFZlYyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4pOworLSAg VmVjKGNvbnN0IFZlYyAmKTsKKy0gIFZlYyhWZWMgJiYpIG5vZXhjZXB0OworLSAgflZlYygpIG5v ZXhjZXB0OworLQorLSAgVmVjICZvcGVyYXRvcj0oVmVjICYmKSAmIG5vZXhjZXB0OworLSAgVmVj ICZvcGVyYXRvcj0oY29uc3QgVmVjICYpICY7CistCistICBzdGQ6OnNpemVfdCBzaXplKCkgY29u c3Qgbm9leGNlcHQ7CistICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdCBU ICpkYXRhKCkgY29uc3Qgbm9leGNlcHQ7CistICBUICpkYXRhKCkgbm9leGNlcHQ7CistICBzdGQ6 OnNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IG5vZXhjZXB0OworLQorLSAgY29uc3QgVCAmb3BlcmF0 b3JbXShzdGQ6OnNpemVfdCBuKSBjb25zdCBub2V4Y2VwdDsKKy0gIGNvbnN0IFQgJmF0KHN0ZDo6 c2l6ZV90IG4pIGNvbnN0OworLSAgY29uc3QgVCAmZnJvbnQoKSBjb25zdCBub2V4Y2VwdDsKKy0g IGNvbnN0IFQgJmJhY2soKSBjb25zdCBub2V4Y2VwdDsKKy0KKy0gIFQgJm9wZXJhdG9yW10oc3Rk OjpzaXplX3Qgbikgbm9leGNlcHQ7CistICBUICZhdChzdGQ6OnNpemVfdCBuKTsKKy0gIFQgJmZy b250KCkgbm9leGNlcHQ7CistICBUICZiYWNrKCkgbm9leGNlcHQ7CistCistICB2b2lkIHJlc2Vy dmUoc3RkOjpzaXplX3QgbmV3X2NhcCk7CistICB2b2lkIHB1c2hfYmFjayhjb25zdCBUICZ2YWx1 ZSk7CistICB2b2lkIHB1c2hfYmFjayhUICYmdmFsdWUpOworLSAgdGVtcGxhdGUgPHR5cGVuYW1l Li4uIEFyZ3M+CistICB2b2lkIGVtcGxhY2VfYmFjayhBcmdzICYmLi4uYXJncyk7CistICB2b2lk IHRydW5jYXRlKHN0ZDo6c2l6ZV90IGxlbik7CistICB2b2lkIGNsZWFyKCk7CisrICBWZWMgKCkg bm9leGNlcHQ7CisrICBWZWMgKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPik7CisrICBWZWMgKGNv bnN0IFZlYyAmKTsKKysgIFZlYyAoVmVjICYmKSBub2V4Y2VwdDsKKysgIH5WZWMgKCkgbm9leGNl cHQ7CisrCisrICBWZWMgJm9wZXJhdG9yPSAoVmVjICYmKSAmIG5vZXhjZXB0OworKyAgVmVjICZv cGVyYXRvcj0gKGNvbnN0IFZlYyAmKSAmOworKworKyAgc3RkOjpzaXplX3Qgc2l6ZSAoKSBjb25z dCBub2V4Y2VwdDsKKysgIGJvb2wgZW1wdHkgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdCBU ICpkYXRhICgpIGNvbnN0IG5vZXhjZXB0OworKyAgVCAqZGF0YSAoKSBub2V4Y2VwdDsKKysgIHN0 ZDo6c2l6ZV90IGNhcGFjaXR5ICgpIGNvbnN0IG5vZXhjZXB0OworKworKyAgY29uc3QgVCAmb3Bl cmF0b3JbXSAoc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQ7CisrICBjb25zdCBUICZhdCAo c3RkOjpzaXplX3QgbikgY29uc3Q7CisrICBjb25zdCBUICZmcm9udCAoKSBjb25zdCBub2V4Y2Vw dDsKKysgIGNvbnN0IFQgJmJhY2sgKCkgY29uc3Qgbm9leGNlcHQ7CisrCisrICBUICZvcGVyYXRv cltdIChzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdDsKKysgIFQgJmF0IChzdGQ6OnNpemVfdCBuKTsK KysgIFQgJmZyb250ICgpIG5vZXhjZXB0OworKyAgVCAmYmFjayAoKSBub2V4Y2VwdDsKKysKKysg IHZvaWQgcmVzZXJ2ZSAoc3RkOjpzaXplX3QgbmV3X2NhcCk7CisrICB2b2lkIHB1c2hfYmFjayAo Y29uc3QgVCAmdmFsdWUpOworKyAgdm9pZCBwdXNoX2JhY2sgKFQgJiZ2YWx1ZSk7CisrICB0ZW1w bGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4gdm9pZCBlbXBsYWNlX2JhY2sgKEFyZ3MgJiYuLi5hcmdz KTsKKysgIHZvaWQgdHJ1bmNhdGUgKHN0ZDo6c2l6ZV90IGxlbik7CisrICB2b2lkIGNsZWFyICgp OworIAorICAgdXNpbmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBTbGljZTxUPjo6aXRlcmF0b3I7Cist ICBpdGVyYXRvciBiZWdpbigpIG5vZXhjZXB0OworLSAgaXRlcmF0b3IgZW5kKCkgbm9leGNlcHQ7 CisrICBpdGVyYXRvciBiZWdpbiAoKSBub2V4Y2VwdDsKKysgIGl0ZXJhdG9yIGVuZCAoKSBub2V4 Y2VwdDsKKyAKKyAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gdHlwZW5hbWUgU2xpY2U8Y29uc3Qg VD46Oml0ZXJhdG9yOworLSAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCBub2V4Y2VwdDsK Ky0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IG5vZXhjZXB0OworLSAgY29uc3RfaXRlcmF0 b3IgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQ7CistICBjb25zdF9pdGVyYXRvciBjZW5kKCkgY29u c3Qgbm9leGNlcHQ7CisrICBjb25zdF9pdGVyYXRvciBiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsK KysgIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJh dG9yIGNiZWdpbiAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGNvbnN0X2l0ZXJhdG9yIGNlbmQgKCkg Y29uc3Qgbm9leGNlcHQ7CisgCistICB2b2lkIHN3YXAoVmVjICYpIG5vZXhjZXB0OworKyAgdm9p ZCBzd2FwIChWZWMgJikgbm9leGNlcHQ7CisgCistICBWZWModW5zYWZlX2JpdGNvcHlfdCwgY29u c3QgVmVjICYpIG5vZXhjZXB0OworKyAgVmVjICh1bnNhZmVfYml0Y29weV90LCBjb25zdCBWZWMg Jikgbm9leGNlcHQ7CisgCisgcHJpdmF0ZToKKy0gIHZvaWQgcmVzZXJ2ZV90b3RhbChzdGQ6OnNp emVfdCBuZXdfY2FwKSBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0X2xlbihzdGQ6OnNpemVfdCBsZW4p IG5vZXhjZXB0OworLSAgdm9pZCBkcm9wKCkgbm9leGNlcHQ7CistCistICBmcmllbmQgdm9pZCBz d2FwKFZlYyAmbGhzLCBWZWMgJnJocykgbm9leGNlcHQgeyBsaHMuc3dhcChyaHMpOyB9CisrICB2 b2lkIHJlc2VydmVfdG90YWwgKHN0ZDo6c2l6ZV90IG5ld19jYXApIG5vZXhjZXB0OworKyAgdm9p ZCBzZXRfbGVuIChzdGQ6OnNpemVfdCBsZW4pIG5vZXhjZXB0OworKyAgdm9pZCBkcm9wICgpIG5v ZXhjZXB0OworKworKyAgZnJpZW5kIHZvaWQKKysgIHN3YXAgKFZlYyAmbGhzLCBWZWMgJnJocykg bm9leGNlcHQKKysgIHsKKysgICAgbGhzLnN3YXAgKHJocyk7CisrICB9CisgCisgICBzdGQ6OmFy cmF5PHN0ZDo6dWludHB0cl90LCAzPiByZXByOworIH07CisgCistdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CistVmVjPFQ+OjpWZWMoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXQpIDogVmVje30g eworLSAgdGhpcy0+cmVzZXJ2ZV90b3RhbChpbml0LnNpemUoKSk7CistICBzdGQ6Om1vdmUoaW5p dC5iZWdpbigpLCBpbml0LmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoKnRoaXMpKTsKKyt0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gVmVjPFQ+OjpWZWMgKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBp bml0KSA6IFZlY3t9CisreworKyAgdGhpcy0+cmVzZXJ2ZV90b3RhbCAoaW5pdC5zaXplICgpKTsK KysgIHN0ZDo6bW92ZSAoaW5pdC5iZWdpbiAoKSwgaW5pdC5lbmQgKCksIHN0ZDo6YmFja19pbnNl cnRlciAoKnRoaXMpKTsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVmVjPFQ+OjpW ZWMoY29uc3QgVmVjICZvdGhlcikgOiBWZWMoKSB7CistICB0aGlzLT5yZXNlcnZlX3RvdGFsKG90 aGVyLnNpemUoKSk7CistICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIHN0 ZDo6YmFja19pbnNlcnRlcigqdGhpcykpOworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBWZWM8VD46 OlZlYyAoY29uc3QgVmVjICZvdGhlcikgOiBWZWMgKCkKKyt7CisrICB0aGlzLT5yZXNlcnZlX3Rv dGFsIChvdGhlci5zaXplICgpKTsKKysgIHN0ZDo6Y29weSAob3RoZXIuYmVnaW4gKCksIG90aGVy LmVuZCAoKSwgc3RkOjpiYWNrX2luc2VydGVyICgqdGhpcykpOworIH0KKyAKKy10ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1WZWM8VD46OlZlYyhWZWMgJiZvdGhlcikgbm9leGNlcHQgOiByZXByKG90 aGVyLnJlcHIpIHsKKy0gIG5ldyAoJm90aGVyKSBWZWMoKTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4gVmVjPFQ+OjpWZWMgKFZlYyAmJm90aGVyKSBub2V4Y2VwdCA6IHJlcHIgKG90aGVyLnJlcHIp CisreworKyAgbmV3ICgmb3RoZXIpIFZlYyAoKTsKKyB9CisgCistdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CistVmVjPFQ+Ojp+VmVjKCkgbm9leGNlcHQgeworLSAgdGhpcy0+ZHJvcCgpOworLX0KKyt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVmVjPFQ+Ojp+VmVjICgpIG5vZXhjZXB0IHsgdGhpcy0+ZHJv cCAoKTsgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVZlYzxUPiAmVmVjPFQ+OjpvcGVy YXRvcj0oVmVjICYmb3RoZXIpICYgbm9leGNlcHQgeworLSAgdGhpcy0+ZHJvcCgpOworK1ZlYzxU PiAmCisrVmVjPFQ+OjpvcGVyYXRvcj0gKFZlYyAmJm90aGVyKSAmIG5vZXhjZXB0CisreworKyAg dGhpcy0+ZHJvcCAoKTsKKyAgIHRoaXMtPnJlcHIgPSBvdGhlci5yZXByOworLSAgbmV3ICgmb3Ro ZXIpIFZlYygpOworKyAgbmV3ICgmb3RoZXIpIFZlYyAoKTsKKyAgIHJldHVybiAqdGhpczsKKyB9 CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistVmVjPFQ+ICZWZWM8VD46Om9wZXJhdG9yPShj b25zdCBWZWMgJm90aGVyKSAmIHsKKy0gIGlmICh0aGlzICE9ICZvdGhlcikgeworLSAgICB0aGlz LT5kcm9wKCk7CistICAgIG5ldyAodGhpcykgVmVjKG90aGVyKTsKKy0gIH0KKytWZWM8VD4gJgor K1ZlYzxUPjo6b3BlcmF0b3I9IChjb25zdCBWZWMgJm90aGVyKSAmCisreworKyAgaWYgKHRoaXMg IT0gJm90aGVyKQorKyAgICB7CisrICAgICAgdGhpcy0+ZHJvcCAoKTsKKysgICAgICBuZXcgKHRo aXMpIFZlYyAob3RoZXIpOworKyAgICB9CisgICByZXR1cm4gKnRoaXM7CisgfQorIAorIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLWJvb2wgVmVjPFQ+OjplbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsK Ky0gIHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsKKytib29sCisrVmVjPFQ+OjplbXB0eSAoKSBj b25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiB0aGlzLT5zaXplICgpID09IDA7CisgfQorIAor IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVQgKlZlYzxUPjo6ZGF0YSgpIG5vZXhjZXB0IHsKKy0g IHJldHVybiBjb25zdF9jYXN0PFQgKj4oY29uc3RfY2FzdDxjb25zdCBWZWM8VD4gKj4odGhpcykt PmRhdGEoKSk7CisrVCAqCisrVmVjPFQ+OjpkYXRhICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJu IGNvbnN0X2Nhc3Q8VCAqPiAoY29uc3RfY2FzdDxjb25zdCBWZWM8VD4gKj4gKHRoaXMpLT5kYXRh ICgpKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY29uc3QgVCAmVmVjPFQ+Ojpv cGVyYXRvcltdKHN0ZDo6c2l6ZV90IG4pIGNvbnN0IG5vZXhjZXB0IHsKKy0gIGFzc2VydChuIDwg dGhpcy0+c2l6ZSgpKTsKKy0gIGF1dG8gZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh ciAqPih0aGlzLT5kYXRhKCkpOworLSAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IFQg Kj4oZGF0YSArIG4gKiBzaXplX29mPFQ+KCkpOworK2NvbnN0IFQgJgorK1ZlYzxUPjo6b3BlcmF0 b3JbXSAoc3RkOjpzaXplX3QgbikgY29uc3Qgbm9leGNlcHQKKyt7CisrICBhc3NlcnQgKG4gPCB0 aGlzLT5zaXplICgpKTsKKysgIGF1dG8gZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh ciAqPiAodGhpcy0+ZGF0YSAoKSk7CisrICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg VCAqPiAoZGF0YSArIG4gKiBzaXplX29mPFQ+ICgpKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CistY29uc3QgVCAmVmVjPFQ+OjphdChzdGQ6OnNpemVfdCBuKSBjb25zdCB7CistICBp ZiAobiA+PSB0aGlzLT5zaXplKCkpIHsKKy0gICAgcGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJy dXN0OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7CistICB9CisrY29uc3QgVCAmCisrVmVjPFQ+ OjphdCAoc3RkOjpzaXplX3QgbikgY29uc3QKKyt7CisrICBpZiAobiA+PSB0aGlzLT5zaXplICgp KQorKyAgICB7CisrICAgICAgcGFuaWM8c3RkOjpvdXRfb2ZfcmFuZ2U+ICgicnVzdDo6VmVjIGlu ZGV4IG91dCBvZiByYW5nZSIpOworKyAgICB9CisgICByZXR1cm4gKCp0aGlzKVtuXTsKKyB9Cisg CisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistY29uc3QgVCAmVmVjPFQ+Ojpmcm9udCgpIGNvbnN0 IG5vZXhjZXB0IHsKKy0gIGFzc2VydCghdGhpcy0+ZW1wdHkoKSk7CisrY29uc3QgVCAmCisrVmVj PFQ+Ojpmcm9udCAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIGFzc2VydCAoIXRoaXMtPmVtcHR5 ICgpKTsKKyAgIHJldHVybiAoKnRoaXMpWzBdOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKy1jb25zdCBUICZWZWM8VD46OmJhY2soKSBjb25zdCBub2V4Y2VwdCB7CistICBhc3NlcnQo IXRoaXMtPmVtcHR5KCkpOworLSAgcmV0dXJuICgqdGhpcylbdGhpcy0+c2l6ZSgpIC0gMV07Cisr Y29uc3QgVCAmCisrVmVjPFQ+OjpiYWNrICgpIGNvbnN0IG5vZXhjZXB0CisreworKyAgYXNzZXJ0 ICghdGhpcy0+ZW1wdHkgKCkpOworKyAgcmV0dXJuICgqdGhpcylbdGhpcy0+c2l6ZSAoKSAtIDFd OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1UICZWZWM8VD46Om9wZXJhdG9yW10o c3RkOjpzaXplX3Qgbikgbm9leGNlcHQgeworLSAgYXNzZXJ0KG4gPCB0aGlzLT5zaXplKCkpOwor LSAgYXV0byBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyICo+KHRoaXMtPmRhdGEoKSk7Cist ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCAqPihkYXRhICsgbiAqIHNpemVfb2Y8VD4oKSk7 CisrVCAmCisrVmVjPFQ+OjpvcGVyYXRvcltdIChzdGQ6OnNpemVfdCBuKSBub2V4Y2VwdAorK3sK KysgIGFzc2VydCAobiA8IHRoaXMtPnNpemUgKCkpOworKyAgYXV0byBkYXRhID0gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyICo+ICh0aGlzLT5kYXRhICgpKTsKKysgIHJldHVybiAqcmVpbnRlcnByZXRf Y2FzdDxUICo+IChkYXRhICsgbiAqIHNpemVfb2Y8VD4gKCkpOworIH0KKyAKKyB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KKy1UICZWZWM8VD46OmF0KHN0ZDo6c2l6ZV90IG4pIHsKKy0gIGlmIChuID49 IHRoaXMtPnNpemUoKSkgeworLSAgICBwYW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4oInJ1c3Q6OlZl YyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKy0gIH0KKytUICYKKytWZWM8VD46OmF0IChzdGQ6OnNp emVfdCBuKQorK3sKKysgIGlmIChuID49IHRoaXMtPnNpemUgKCkpCisrICAgIHsKKysgICAgICBw YW5pYzxzdGQ6Om91dF9vZl9yYW5nZT4gKCJydXN0OjpWZWMgaW5kZXggb3V0IG9mIHJhbmdlIik7 CisrICAgIH0KKyAgIHJldHVybiAoKnRoaXMpW25dOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy1UICZWZWM8VD46OmZyb250KCkgbm9leGNlcHQgeworLSAgYXNzZXJ0KCF0aGlzLT5l bXB0eSgpKTsKKytUICYKKytWZWM8VD46OmZyb250ICgpIG5vZXhjZXB0CisreworKyAgYXNzZXJ0 ICghdGhpcy0+ZW1wdHkgKCkpOworICAgcmV0dXJuICgqdGhpcylbMF07CisgfQorIAorIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgorLVQgJlZlYzxUPjo6YmFjaygpIG5vZXhjZXB0IHsKKy0gIGFzc2Vy dCghdGhpcy0+ZW1wdHkoKSk7CistICByZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXplKCkgLSAxXTsK KytUICYKKytWZWM8VD46OmJhY2sgKCkgbm9leGNlcHQKKyt7CisrICBhc3NlcnQgKCF0aGlzLT5l bXB0eSAoKSk7CisrICByZXR1cm4gKCp0aGlzKVt0aGlzLT5zaXplICgpIC0gMV07CisgfQorIAor IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXZvaWQgVmVjPFQ+OjpyZXNlcnZlKHN0ZDo6c2l6ZV90 IG5ld19jYXApIHsKKy0gIHRoaXMtPnJlc2VydmVfdG90YWwobmV3X2NhcCk7Cisrdm9pZAorK1Zl YzxUPjo6cmVzZXJ2ZSAoc3RkOjpzaXplX3QgbmV3X2NhcCkKKyt7CisrICB0aGlzLT5yZXNlcnZl X3RvdGFsIChuZXdfY2FwKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cistdm9pZCBW ZWM8VD46OnB1c2hfYmFjayhjb25zdCBUICZ2YWx1ZSkgeworLSAgdGhpcy0+ZW1wbGFjZV9iYWNr KHZhbHVlKTsKKyt2b2lkCisrVmVjPFQ+OjpwdXNoX2JhY2sgKGNvbnN0IFQgJnZhbHVlKQorK3sK KysgIHRoaXMtPmVtcGxhY2VfYmFjayAodmFsdWUpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KKy12b2lkIFZlYzxUPjo6cHVzaF9iYWNrKFQgJiZ2YWx1ZSkgeworLSAgdGhpcy0+ZW1w bGFjZV9iYWNrKHN0ZDo6bW92ZSh2YWx1ZSkpOworK3ZvaWQKKytWZWM8VD46OnB1c2hfYmFjayAo VCAmJnZhbHVlKQorK3sKKysgIHRoaXMtPmVtcGxhY2VfYmFjayAoc3RkOjptb3ZlICh2YWx1ZSkp OworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g QXJncz4KKy12b2lkIFZlYzxUPjo6ZW1wbGFjZV9iYWNrKEFyZ3MgJiYuLi5hcmdzKSB7CistICBh dXRvIHNpemUgPSB0aGlzLT5zaXplKCk7CistICB0aGlzLT5yZXNlcnZlX3RvdGFsKHNpemUgKyAx KTsKKy0gIDo6bmV3IChyZWludGVycHJldF9jYXN0PFQgKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy ICo+KHRoaXMtPmRhdGEoKSkgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl ICogc2l6ZV9vZjxUPigpKSkKKy0gICAgICBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7 CistICB0aGlzLT5zZXRfbGVuKHNpemUgKyAxKTsKKyt2b2lkCisrVmVjPFQ+OjplbXBsYWNlX2Jh Y2sgKEFyZ3MgJiYuLi5hcmdzKQorK3sKKysgIGF1dG8gc2l6ZSA9IHRoaXMtPnNpemUgKCk7Cisr ICB0aGlzLT5yZXNlcnZlX3RvdGFsIChzaXplICsgMSk7CisrICA6Om5ldyAocmVpbnRlcnByZXRf Y2FzdDxUICo+IChyZWludGVycHJldF9jYXN0PGNoYXIgKj4gKHRoaXMtPmRhdGEgKCkpICsgc2l6 ZSAqIHNpemVfb2Y8VD4gKCkpKQorKyAgICAgIFQgKHN0ZDo6Zm9yd2FyZDxBcmdzPiAoYXJncyku Li4pOworKyAgdGhpcy0+c2V0X2xlbiAoc2l6ZSArIDEpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KKy12b2lkIFZlYzxUPjo6Y2xlYXIoKSB7CistICB0aGlzLT50cnVuY2F0ZSgwKTsK Kyt2b2lkCisrVmVjPFQ+OjpjbGVhciAoKQorK3sKKysgIHRoaXMtPnRydW5jYXRlICgwKTsKKyB9 CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CistdHlwZW5hbWUgVmVjPFQ+OjppdGVyYXRvciBW ZWM8VD46OmJlZ2luKCkgbm9leGNlcHQgeworLSAgcmV0dXJuIFNsaWNlPFQ+KHRoaXMtPmRhdGEo KSwgdGhpcy0+c2l6ZSgpKS5iZWdpbigpOworK3R5cGVuYW1lIFZlYzxUPjo6aXRlcmF0b3IKKytW ZWM8VD46OmJlZ2luICgpIG5vZXhjZXB0CisreworKyAgcmV0dXJuIFNsaWNlPFQ+ICh0aGlzLT5k YXRhICgpLCB0aGlzLT5zaXplICgpKS5iZWdpbiAoKTsKKyB9CisgCisgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CistdHlwZW5hbWUgVmVjPFQ+OjppdGVyYXRvciBWZWM8VD46OmVuZCgpIG5vZXhjZXB0 IHsKKy0gIHJldHVybiBTbGljZTxUPih0aGlzLT5kYXRhKCksIHRoaXMtPnNpemUoKSkuZW5kKCk7 CisrdHlwZW5hbWUgVmVjPFQ+OjppdGVyYXRvcgorK1ZlYzxUPjo6ZW5kICgpIG5vZXhjZXB0Cisr eworKyAgcmV0dXJuIFNsaWNlPFQ+ICh0aGlzLT5kYXRhICgpLCB0aGlzLT5zaXplICgpKS5lbmQg KCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFZlYzxUPjo6Y29u c3RfaXRlcmF0b3IgVmVjPFQ+OjpiZWdpbigpIGNvbnN0IG5vZXhjZXB0IHsKKy0gIHJldHVybiB0 aGlzLT5jYmVnaW4oKTsKKyt0eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yCisrVmVjPFQ+ OjpiZWdpbiAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiB0aGlzLT5jYmVnaW4gKCk7 CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFZlYzxUPjo6Y29uc3Rf aXRlcmF0b3IgVmVjPFQ+OjplbmQoKSBjb25zdCBub2V4Y2VwdCB7CistICByZXR1cm4gdGhpcy0+ Y2VuZCgpOworK3R5cGVuYW1lIFZlYzxUPjo6Y29uc3RfaXRlcmF0b3IKKytWZWM8VD46OmVuZCAo KSBjb25zdCBub2V4Y2VwdAorK3sKKysgIHJldHVybiB0aGlzLT5jZW5kICgpOworIH0KKyAKKyB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy10eXBlbmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yIFZl YzxUPjo6Y2JlZ2luKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+ KHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5iZWdpbigpOworK3R5cGVuYW1lIFZlYzxUPjo6 Y29uc3RfaXRlcmF0b3IKKytWZWM8VD46OmNiZWdpbiAoKSBjb25zdCBub2V4Y2VwdAorK3sKKysg IHJldHVybiBTbGljZTxjb25zdCBUPiAodGhpcy0+ZGF0YSAoKSwgdGhpcy0+c2l6ZSAoKSkuYmVn aW4gKCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXR5cGVuYW1lIFZlYzxUPjo6 Y29uc3RfaXRlcmF0b3IgVmVjPFQ+OjpjZW5kKCkgY29uc3Qgbm9leGNlcHQgeworLSAgcmV0dXJu IFNsaWNlPGNvbnN0IFQ+KHRoaXMtPmRhdGEoKSwgdGhpcy0+c2l6ZSgpKS5lbmQoKTsKKyt0eXBl bmFtZSBWZWM8VD46OmNvbnN0X2l0ZXJhdG9yCisrVmVjPFQ+OjpjZW5kICgpIGNvbnN0IG5vZXhj ZXB0CisreworKyAgcmV0dXJuIFNsaWNlPGNvbnN0IFQ+ICh0aGlzLT5kYXRhICgpLCB0aGlzLT5z aXplICgpKS5lbmQgKCk7CisgfQorIAorIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXZvaWQgVmVj PFQ+Ojpzd2FwKFZlYyAmcmhzKSBub2V4Y2VwdCB7Cisrdm9pZAorK1ZlYzxUPjo6c3dhcCAoVmVj ICZyaHMpIG5vZXhjZXB0CisreworICAgdXNpbmcgc3RkOjpzd2FwOworLSAgc3dhcCh0aGlzLT5y ZXByLCByaHMucmVwcik7CisrICBzd2FwICh0aGlzLT5yZXByLCByaHMucmVwcik7CisgfQorIAor LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLVZlYzxUPjo6VmVjKHVuc2FmZV9iaXRjb3B5X3QsIGNv bnN0IFZlYyAmYml0cykgbm9leGNlcHQgOiByZXByKGJpdHMucmVwcikge30KKyt0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4gVmVjPFQ+OjpWZWMgKHVuc2FmZV9iaXRjb3B5X3QsIGNvbnN0IFZlYyAmYml0 cykgbm9leGNlcHQgOiByZXByIChiaXRzLnJlcHIpIHt9CisgI2VuZGlmIC8vIENYWEJSSURHRTFf UlVTVF9WRUMKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfUlVTVF9PUEFRVUUKKyAjZGVmaW5lIENY WEJSSURHRTFfUlVTVF9PUEFRVUUKKy1jbGFzcyBPcGFxdWUgeworK2NsYXNzIE9wYXF1ZQorK3sK KyBwdWJsaWM6CistICBPcGFxdWUoKSA9IGRlbGV0ZTsKKy0gIE9wYXF1ZShjb25zdCBPcGFxdWUg JikgPSBkZWxldGU7CistICB+T3BhcXVlKCkgPSBkZWxldGU7CisrICBPcGFxdWUgKCkgPSBkZWxl dGU7CisrICBPcGFxdWUgKGNvbnN0IE9wYXF1ZSAmKSA9IGRlbGV0ZTsKKysgIH5PcGFxdWUgKCkg PSBkZWxldGU7CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9SVVNUX09QQVFVRQorIAorICNp Zm5kZWYgQ1hYQlJJREdFMV9JU19DT01QTEVURQorICNkZWZpbmUgQ1hYQlJJREdFMV9JU19DT01Q TEVURQorLW5hbWVzcGFjZSBkZXRhaWwgeworLW5hbWVzcGFjZSB7CistdGVtcGxhdGUgPHR5cGVu YW1lIFQsIHR5cGVuYW1lID0gc3RkOjpzaXplX3Q+Cistc3RydWN0IGlzX2NvbXBsZXRlIDogc3Rk OjpmYWxzZV90eXBlIHt9OworLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLXN0cnVjdCBpc19jb21w bGV0ZTxULCBkZWNsdHlwZShzaXplb2YoVCkpPiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OworK25hbWVz cGFjZSBkZXRhaWwKKyt7CisrbmFtZXNwYWNlCisreworK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0 eXBlbmFtZSA9IHN0ZDo6c2l6ZV90PiBzdHJ1Y3QgaXNfY29tcGxldGUgOiBzdGQ6OmZhbHNlX3R5 cGUKKyt7CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGlzX2NvbXBsZXRlPFQs IGRlY2x0eXBlIChzaXplb2YgKFQpKT4gOiBzdGQ6OnRydWVfdHlwZQorK3sKKyt9OworIH0gLy8g bmFtZXNwYWNlCisgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCisgI2VuZGlmIC8vIENYWEJSSURHRTFf SVNfQ09NUExFVEUKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfTEFZT1VUCisgI2RlZmluZSBDWFhC UklER0UxX0xBWU9VVAorLWNsYXNzIGxheW91dCB7CisrY2xhc3MgbGF5b3V0CisreworKyAgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IGZyaWVuZCBzdGQ6OnNpemVfdCBzaXplX29mICgpOworKyAgdGVt cGxhdGUgPHR5cGVuYW1lIFQ+IGZyaWVuZCBzdGQ6OnNpemVfdCBhbGlnbl9vZiAoKTsKKyAgIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgZnJpZW5kIHN0ZDo6c2l6ZV90IHNpemVfb2YoKTsKKy0g IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgZnJpZW5kIHN0ZDo6c2l6ZV90IGFsaWduX29mKCk7 CistICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy0gIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJs ZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3Q+Ojp0eXBlCistICBkb19zaXplX29mKCkgewor LSAgICByZXR1cm4gVDo6bGF5b3V0OjpzaXplKCk7CisrICBzdGF0aWMgdHlwZW5hbWUgc3RkOjpl bmFibGVfaWY8c3RkOjppc19iYXNlX29mPE9wYXF1ZSwgVD46OnZhbHVlLCBzdGQ6OnNpemVfdD46 OnR5cGUKKysgIGRvX3NpemVfb2YgKCkKKysgIHsKKysgICAgcmV0dXJuIFQ6OmxheW91dDo6c2l6 ZSAoKTsKKyAgIH0KKyAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgc3RhdGljIHR5cGVuYW1l IHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3Q+Ojp0eXBlCistICBkb19z aXplX29mKCkgeworLSAgICByZXR1cm4gc2l6ZW9mKFQpOworKyAgc3RhdGljIHR5cGVuYW1lIHN0 ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsIHN0ZDo6c2l6 ZV90Pjo6dHlwZQorKyAgZG9fc2l6ZV9vZiAoKQorKyAgeworKyAgICByZXR1cm4gc2l6ZW9mIChU KTsKKyAgIH0KKyAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgc3RhdGljCistICAgICAgdHlw ZW5hbWUgc3RkOjplbmFibGVfaWY8ZGV0YWlsOjppc19jb21wbGV0ZTxUPjo6dmFsdWUsIHN0ZDo6 c2l6ZV90Pjo6dHlwZQorLSAgICAgIHNpemVfb2YoKSB7CistICAgIHJldHVybiBkb19zaXplX29m PFQ+KCk7CisrICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ZGV0YWlsOjppc19jb21w bGV0ZTxUPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQorKyAgc2l6ZV9vZiAoKQorKyAgewor KyAgICByZXR1cm4gZG9fc2l6ZV9vZjxUPiAoKTsKKyAgIH0KKyAgIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgorLSAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxP cGFxdWUsIFQ+Ojp2YWx1ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6 OnNpemVfdD46OnR5cGUKKy0gIGRvX2FsaWduX29mKCkgeworLSAgICByZXR1cm4gVDo6bGF5b3V0 OjphbGlnbigpOworKyAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFz ZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCisrICBkb19hbGlnbl9v ZiAoKQorKyAgeworKyAgICByZXR1cm4gVDo6bGF5b3V0OjphbGlnbiAoKTsKKyAgIH0KKyAgIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgorLSAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFz dGQ6OmlzX2Jhc2Vfb2Y8T3BhcXVlLCBUPjo6dmFsdWUsCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RkOjpzaXplX3Q+Ojp0eXBlCistICBkb19hbGlnbl9vZigpIHsKKy0gICAg cmV0dXJuIGFsaWdub2YoVCk7CisrICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0 ZDo6aXNfYmFzZV9vZjxPcGFxdWUsIFQ+Ojp2YWx1ZSwgc3RkOjpzaXplX3Q+Ojp0eXBlCisrICBk b19hbGlnbl9vZiAoKQorKyAgeworKyAgICByZXR1cm4gYWxpZ25vZiAoVCk7CisgICB9CisgICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy0gIHN0YXRpYworLSAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5h YmxlX2lmPGRldGFpbDo6aXNfY29tcGxldGU8VD46OnZhbHVlLCBzdGQ6OnNpemVfdD46OnR5cGUK Ky0gICAgICBhbGlnbl9vZigpIHsKKy0gICAgcmV0dXJuIGRvX2FsaWduX29mPFQ+KCk7CisrICBz dGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ZGV0YWlsOjppc19jb21wbGV0ZTxUPjo6dmFs dWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZQorKyAgYWxpZ25fb2YgKCkKKysgIHsKKysgICAgcmV0dXJu IGRvX2FsaWduX29mPFQ+ICgpOworICAgfQorIH07CisgCisgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Cistc3RkOjpzaXplX3Qgc2l6ZV9vZigpIHsKKy0gIHJldHVybiBsYXlvdXQ6OnNpemVfb2Y8VD4o KTsKKytzdGQ6OnNpemVfdAorK3NpemVfb2YgKCkKKyt7CisrICByZXR1cm4gbGF5b3V0OjpzaXpl X29mPFQ+ICgpOworIH0KKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1zdGQ6OnNpemVfdCBh bGlnbl9vZigpIHsKKy0gIHJldHVybiBsYXlvdXQ6OmFsaWduX29mPFQ+KCk7Cisrc3RkOjpzaXpl X3QKKythbGlnbl9vZiAoKQorK3sKKysgIHJldHVybiBsYXlvdXQ6OmFsaWduX29mPFQ+ICgpOwor IH0KKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9MQVlPVVQKKyB9IC8vIG5hbWVzcGFjZSBjeHhicmlk Z2UxCitAQCAtOTc4LDUxICsxMTExLDUzIEBAIHN0ZDo6c2l6ZV90IGFsaWduX29mKCkgeworICNk ZWZpbmUgQ1hYX0RFRkFVTFRfVkFMVUUodmFsdWUpCisgI2VuZGlmCisgCistbmFtZXNwYWNlIHJw bW9zdHJlZWN4eCB7CistICBzdHJ1Y3QgU3RyaW5nTWFwcGluZzsKKy0gIGVudW0gY2xhc3MgU3lz dGVtSG9zdFR5cGUgOiA6OnN0ZDo6dWludDhfdDsKKy0gIGVudW0gY2xhc3MgQnViYmxld3JhcE11 dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdDsKKy0gIHN0cnVjdCBCdWJibGV3cmFwOworLSAgc3Ry dWN0IENvbnRhaW5lckltYWdlU3RhdGU7CistICBzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmY7 CistICBzdHJ1Y3QgUHJ1bmVkQ29udGFpbmVySW5mbzsKKy0gIGVudW0gY2xhc3MgUmVmc3BlY1R5 cGUgOiA6OnN0ZDo6dWludDhfdDsKKy0gIHN0cnVjdCBUZW1wRXRjR3VhcmQ7CistICBzdHJ1Y3Qg RmlsZXN5c3RlbVNjcmlwdFByZXA7CistICBzdHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRhOwor LSAgc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2U7CistICBlbnVtIGNsYXNzIFBhcnNl ZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90OworLSAgc3RydWN0IFBhcnNlZFJldmlzaW9u OworLSAgc3RydWN0IFJwbUltcG9ydGVyRmxhZ3M7CistICBzdHJ1Y3QgUnBtSW1wb3J0ZXI7Cist ICBzdHJ1Y3QgSGlzdG9yeUVudHJ5OworLSAgc3RydWN0IEhpc3RvcnlDdHg7CistICBzdHJ1Y3Qg VG9raW9IYW5kbGU7CistICBzdHJ1Y3QgVG9raW9FbnRlckd1YXJkOworLSAgZW51bSBjbGFzcyBS ZXBvTWV0YWRhdGFUYXJnZXQgOiA6OnN0ZDo6dWludDhfdDsKKy0gIGVudW0gY2xhc3MgQWR2aXNv cmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4X3Q7CistICBzdHJ1Y3QgUmVmc3BlYzsK Ky0gIGVudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhfdDsK Ky0gIHN0cnVjdCBPdmVycmlkZVJlcGxhY2VtZW50OworLSAgZW51bSBjbGFzcyBPcHRVc3JMb2Nh bCA6IDo6c3RkOjp1aW50OF90OworLSAgc3RydWN0IFRyZWVmaWxlOworLSAgc3RydWN0IFJlcG9Q YWNrYWdlOworLSAgc3RydWN0IExpdmVBcHBseVN0YXRlOworLSAgc3RydWN0IFBhc3N3ZERCOwor LSAgc3RydWN0IFBhc3N3ZEVudHJpZXM7CistICBzdHJ1Y3QgRXh0ZW5zaW9uczsKKy0gIHN0cnVj dCBMb2NrZWRQYWNrYWdlOworLSAgc3RydWN0IExvY2tmaWxlQ29uZmlnOworLSAgdXNpbmcgQ3h4 R09iamVjdEFycmF5ID0gOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheTsKKy0gIHVzaW5n IENsaWVudENvbm5lY3Rpb24gPSA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29ubmVjdGlvbjsKKy0g IHVzaW5nIFJQTURpZmYgPSA6OnJwbW9zdHJlZWN4eDo6UlBNRGlmZjsKKy0gIHVzaW5nIFJwbU9z dHJlZURpZmZQcmludEZvcm1hdCA9IDo6cnBtb3N0cmVlY3h4OjpScG1Pc3RyZWVEaWZmUHJpbnRG b3JtYXQ7CistICB1c2luZyBQcm9ncmVzcyA9IDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVzczsKKy0g IHVzaW5nIFJwbVRzID0gOjpycG1vc3RyZWVjeHg6OlJwbVRzOworLSAgdXNpbmcgUGFja2FnZU1l dGEgPSA6OnJwbW9zdHJlZWN4eDo6UGFja2FnZU1ldGE7CistfQorLQorLW5hbWVzcGFjZSBycG1v c3RyZWVjeHggeworK25hbWVzcGFjZSBycG1vc3RyZWVjeHgKKyt7Cisrc3RydWN0IFN0cmluZ01h cHBpbmc7CisrZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1aW50OF90OworK2Vu dW0gY2xhc3MgQnViYmxld3JhcE11dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdDsKKytzdHJ1Y3Qg QnViYmxld3JhcDsKKytzdHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZTsKKytzdHJ1Y3QgRXhwb3J0 ZWRNYW5pZmVzdERpZmY7Cisrc3RydWN0IFBydW5lZENvbnRhaW5lckluZm87CisrZW51bSBjbGFz cyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90OworK3N0cnVjdCBUZW1wRXRjR3VhcmQ7Cisr c3RydWN0IEZpbGVzeXN0ZW1TY3JpcHRQcmVwOworK3N0cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1l dGE7Cisrc3RydWN0IE92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2U7CisrZW51bSBjbGFzcyBQYXJz ZWRSZXZpc2lvbktpbmQgOiA6OnN0ZDo6dWludDhfdDsKKytzdHJ1Y3QgUGFyc2VkUmV2aXNpb247 Cisrc3RydWN0IFJwbUltcG9ydGVyRmxhZ3M7Cisrc3RydWN0IFJwbUltcG9ydGVyOworK3N0cnVj dCBIaXN0b3J5RW50cnk7Cisrc3RydWN0IEhpc3RvcnlDdHg7Cisrc3RydWN0IFRva2lvSGFuZGxl OworK3N0cnVjdCBUb2tpb0VudGVyR3VhcmQ7CisrZW51bSBjbGFzcyBSZXBvTWV0YWRhdGFUYXJn ZXQgOiA6OnN0ZDo6dWludDhfdDsKKytlbnVtIGNsYXNzIEFkdmlzb3JpZXNNZXRhZGF0YVRhcmdl dCA6IDo6c3RkOjp1aW50OF90OworK3N0cnVjdCBSZWZzcGVjOworK2VudW0gY2xhc3MgT3ZlcnJp ZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhfdDsKKytzdHJ1Y3QgT3ZlcnJpZGVSZXBs YWNlbWVudDsKKytlbnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpzdGQ6OnVpbnQ4X3Q7Cisrc3Ry dWN0IFRyZWVmaWxlOworK3N0cnVjdCBSZXBvUGFja2FnZTsKKytzdHJ1Y3QgTGl2ZUFwcGx5U3Rh dGU7Cisrc3RydWN0IFBhc3N3ZERCOworK3N0cnVjdCBQYXNzd2RFbnRyaWVzOworK3N0cnVjdCBF eHRlbnNpb25zOworK3N0cnVjdCBMb2NrZWRQYWNrYWdlOworK3N0cnVjdCBMb2NrZmlsZUNvbmZp ZzsKKyt1c2luZyBDeHhHT2JqZWN0QXJyYXkgPSA6OnJwbW9zdHJlZWN4eDo6Q3h4R09iamVjdEFy cmF5OworK3VzaW5nIENsaWVudENvbm5lY3Rpb24gPSA6OnJwbW9zdHJlZWN4eDo6Q2xpZW50Q29u bmVjdGlvbjsKKyt1c2luZyBSUE1EaWZmID0gOjpycG1vc3RyZWVjeHg6OlJQTURpZmY7CisrdXNp bmcgUnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0ID0gOjpycG1vc3RyZWVjeHg6OlJwbU9zdHJlZURp ZmZQcmludEZvcm1hdDsKKyt1c2luZyBQcm9ncmVzcyA9IDo6cnBtb3N0cmVlY3h4OjpQcm9ncmVz czsKKyt1c2luZyBScG1UcyA9IDo6cnBtb3N0cmVlY3h4OjpScG1UczsKKyt1c2luZyBQYWNrYWdl TWV0YSA9IDo6cnBtb3N0cmVlY3h4OjpQYWNrYWdlTWV0YTsKKyt9CisrCisrbmFtZXNwYWNlIHJw bW9zdHJlZWN4eAorK3sKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRT dHJpbmdNYXBwaW5nCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkU3Ry aW5nTWFwcGluZworIC8vIEN1cnJlbnRseSBjeHgtcnMgZG9lc24ndCBzdXBwb3J0IG1hcHBpbmdz OyBsaWtlIHByb2JhYmx5IG1vc3QgcHJvamVjdHMsCitAQCAtMTAzMCw3ICsxMTY1LDggQEAgbmFt ZXNwYWNlIHJwbW9zdHJlZWN4eCB7CisgLy8gb3VyIGRhdGEgc2l6ZXMgYXJlbid0IGxhcmdlLCB3 ZSBzZXJpYWxpemUgdGhpcyBhcyBhIHZlY3RvciBvZiBzdHJpbmdzIHBhaXJzLgorIC8vIEluIHRo ZSBmdXR1cmUgaXQncyBhbHNvIGxpa2VseSB0aGF0IGN4eC1ycyB3aWxsIHN1cHBvcnQgYSBDKysg c3RyaW5nX3ZpZXcKKyAvLyBzbyB3ZSBjb3VsZCBhdm9pZCBkdXBsaWNhdGluZyBpbiB0aGF0IGRp cmVjdGlvbi4KKy1zdHJ1Y3QgU3RyaW5nTWFwcGluZyBmaW5hbCB7Cisrc3RydWN0IFN0cmluZ01h cHBpbmcgZmluYWwKKyt7CisgICA6OnJ1c3Q6OlN0cmluZyBrOworICAgOjpydXN0OjpTdHJpbmcg djsKKyAKK0BAIC0xMDQxLDcgKzExNzcsOCBAQCBzdHJ1Y3QgU3RyaW5nTWFwcGluZyBmaW5hbCB7 CisgI2lmbmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFN5c3RlbUhvc3RUeXBlCisg I2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFN5c3RlbUhvc3RUeXBlCisgLy8g Q2xhc3NpZnkgdGhlIHJ1bm5pbmcgc3lzdGVtLgorLWVudW0gY2xhc3MgU3lzdGVtSG9zdFR5cGUg OiA6OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBTeXN0ZW1Ib3N0VHlwZSA6IDo6c3RkOjp1 aW50OF90CisreworICAgT3N0cmVlQ29udGFpbmVyID0gMCwKKyAgIE9zdHJlZUhvc3QgPSAxLAor ICAgVW5rbm93biA9IDIsCitAQCAtMTA1MCw3ICsxMTg3LDggQEAgZW51bSBjbGFzcyBTeXN0ZW1I b3N0VHlwZSA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfRU5VTV9y cG1vc3RyZWVjeHgkQnViYmxld3JhcE11dGFiaWxpdHkKKyAjZGVmaW5lIENYWEJSSURHRTFfRU5V TV9ycG1vc3RyZWVjeHgkQnViYmxld3JhcE11dGFiaWxpdHkKKy1lbnVtIGNsYXNzIEJ1YmJsZXdy YXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3QgeworK2VudW0gY2xhc3MgQnViYmxld3JhcE11 dGFiaWxpdHkgOiA6OnN0ZDo6dWludDhfdAorK3sKKyAgIEltbXV0YWJsZSA9IDAsCisgICBSb0Zp bGVzID0gMSwKKyAgIE11dGF0ZUZyZWVseSA9IDIsCitAQCAtMTA1OSw0OSArMTE5Nyw1MiBAQCBl bnVtIGNsYXNzIEJ1YmJsZXdyYXBNdXRhYmlsaXR5IDogOjpzdGQ6OnVpbnQ4X3QgeworIAorICNp Zm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAKKyAjZGVmaW5l IENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRCdWJibGV3cmFwCistc3RydWN0IEJ1YmJs ZXdyYXAgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgeworLSAgOjpzdGQ6OmludDMyX3Qg Z2V0X3Jvb3Rmc19mZCgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBhcHBlbmRfYndyYXBfYXJn KDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CistICB2b2lkIGFwcGVuZF9jaGlsZF9hcmcoOjpy dXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0ZW52KDo6cnVzdDo6U3RyIGssIDo6 cnVzdDo6U3RyIHYpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX2ZkKDo6c3RkOjppbnQzMl90IHNv dXJjZV9mZCwgOjpzdGQ6OmludDMyX3QgdGFyZ2V0X2ZkKSBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0 X2luaGVyaXRfc3RkaW4oKSBub2V4Y2VwdDsKKy0gIHZvaWQgdGFrZV9zdGRpbl9mZCg6OnN0ZDo6 aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX3N0ZG91dF9mZCg6OnN0 ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX3N0ZGVycl9mZCg6 OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworLSAgdm9pZCB0YWtlX3N0ZG91dF9h bmRfc3RkZXJyX2ZkKDo6c3RkOjppbnQzMl90IHNvdXJjZV9mZCkgbm9leGNlcHQ7CistICB2b2lk IGJpbmRfcmVhZCg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0Owor LSAgdm9pZCBiaW5kX3JlYWR3cml0ZSg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3Qp IG5vZXhjZXB0OworLSAgdm9pZCBzZXR1cF9jb21wYXRfdmFyKCk7CistICB2b2lkIHJ1big6OnJw bW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7CistICB+QnViYmxl d3JhcCgpID0gZGVsZXRlOworK3N0cnVjdCBCdWJibGV3cmFwIGZpbmFsIDogcHVibGljIDo6cnVz dDo6T3BhcXVlCisreworKyAgOjpzdGQ6OmludDMyX3QgZ2V0X3Jvb3Rmc19mZCAoKSBjb25zdCBu b2V4Y2VwdDsKKysgIHZvaWQgYXBwZW5kX2J3cmFwX2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4 Y2VwdDsKKysgIHZvaWQgYXBwZW5kX2NoaWxkX2FyZyAoOjpydXN0OjpTdHIgYXJnKSBub2V4Y2Vw dDsKKysgIHZvaWQgc2V0ZW52ICg6OnJ1c3Q6OlN0ciBrLCA6OnJ1c3Q6OlN0ciB2KSBub2V4Y2Vw dDsKKysgIHZvaWQgdGFrZV9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2ZkLCA6OnN0ZDo6aW50 MzJfdCB0YXJnZXRfZmQpIG5vZXhjZXB0OworKyAgdm9pZCBzZXRfaW5oZXJpdF9zdGRpbiAoKSBu b2V4Y2VwdDsKKysgIHZvaWQgdGFrZV9zdGRpbl9mZCAoOjpzdGQ6OmludDMyX3Qgc291cmNlX2Zk KSBub2V4Y2VwdDsKKysgIHZvaWQgdGFrZV9zdGRvdXRfZmQgKDo6c3RkOjppbnQzMl90IHNvdXJj ZV9mZCkgbm9leGNlcHQ7CisrICB2b2lkIHRha2Vfc3RkZXJyX2ZkICg6OnN0ZDo6aW50MzJfdCBz b3VyY2VfZmQpIG5vZXhjZXB0OworKyAgdm9pZCB0YWtlX3N0ZG91dF9hbmRfc3RkZXJyX2ZkICg6 OnN0ZDo6aW50MzJfdCBzb3VyY2VfZmQpIG5vZXhjZXB0OworKyAgdm9pZCBiaW5kX3JlYWQgKDo6 cnVzdDo6U3RyIHNyYywgOjpydXN0OjpTdHIgZGVzdCkgbm9leGNlcHQ7CisrICB2b2lkIGJpbmRf cmVhZHdyaXRlICg6OnJ1c3Q6OlN0ciBzcmMsIDo6cnVzdDo6U3RyIGRlc3QpIG5vZXhjZXB0Owor KyAgdm9pZCBzZXR1cF9jb21wYXRfdmFyICgpOworKyAgdm9pZCBydW4gKDo6cnBtb3N0cmVlY3h4 OjpHQ2FuY2VsbGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKKysgIH5CdWJibGV3cmFwICgpID0g ZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1 Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0Owor LSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxh eW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0Owor KyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsK KyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEJ1YmJsZXdyYXAKKyAK KyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRFeHBvcnRlZE1hbmlmZXN0 RGlmZgorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4cG9ydGVkTWFu aWZlc3REaWZmCistc3RydWN0IEV4cG9ydGVkTWFuaWZlc3REaWZmIGZpbmFsIHsKKytzdHJ1Y3Qg RXhwb3J0ZWRNYW5pZmVzdERpZmYgZmluYWwKKyt7CisgICAvLyBDaGVjayBpZiB0aGUgc3RydWN0 IGlzIGluaXRpYWxpemVkCistICBib29sIGluaXRpYWxpemVkIENYWF9ERUZBVUxUX1ZBTFVFKGZh bHNlKTsKKysgIGJvb2wgaW5pdGlhbGl6ZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKGZhbHNlKTsKKyAg IC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQorLSAg OjpzdGQ6OnVpbnQ2NF90IHRvdGFsIENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAgOjpzdGQ6OnVp bnQ2NF90IHRvdGFsIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRoZSBzaXplIG9mIHRo ZSB0b3RhbCBudW1iZXIgb2YgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQorLSAgOjpzdGQ6 OnVpbnQ2NF90IHRvdGFsX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6OnN0ZDo6dWlu dDY0X3QgdG90YWxfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBUaGUgdG90YWwg bnVtYmVyIG9mIHJlbW92ZWQgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQorLSAgOjpzdGQ6 OnVpbnQ2NF90IG5fcmVtb3ZlZCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6c3RkOjp1aW50 NjRfdCBuX3JlbW92ZWQgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8gVGhlIHNpemUgb2Yg dG90YWwgbnVtYmVyIG9mIHJlbW92ZWQgcGFja2FnZXMgaW4gdGhlIG5leHQgdXBncmFkZQorLSAg OjpzdGQ6OnVpbnQ2NF90IHJlbW92ZWRfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6 c3RkOjp1aW50NjRfdCByZW1vdmVkX3NpemUgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAgLy8g VGhlIHRvdGFsIG51bWJlciBvZiBhZGRlZCBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCist ICA6OnN0ZDo6dWludDY0X3Qgbl9hZGRlZCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6c3Rk Ojp1aW50NjRfdCBuX2FkZGVkIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRoZSBzaXpl IG9mIHRvdGFsIG51bWJlciBvZiBhZGRlZCBwYWNrYWdlcyBpbiB0aGUgbmV4dCB1cGdyYWRlCist ICA6OnN0ZDo6dWludDY0X3QgYWRkZWRfc2l6ZSBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6 c3RkOjp1aW50NjRfdCBhZGRlZF9zaXplIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRo ZSB2ZXJzaW9uIG9mIHRoZSBuZXh0IHVwZ3JhZGUKKyAgIDo6cnVzdDo6U3RyaW5nIHZlcnNpb247 CisgCitAQCAtMTExMSwxMCArMTI1MiwxMSBAQCBzdHJ1Y3QgRXhwb3J0ZWRNYW5pZmVzdERpZmYg ZmluYWwgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JENvbnRh aW5lckltYWdlU3RhdGUKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRD b250YWluZXJJbWFnZVN0YXRlCistLy8gYENvbnRhaW5lckltYWdlU3RhdGVgIGlzIGN1cnJlbnRs eSBpZGVudGljYWwgdG8gb3N0cmVlLXJzLWV4dCdzIGBMYXllcmVkSW1hZ2VTdGF0ZWAgc3RydWN0 LCBiZWNhdXNlCistLy8gY3h4LnJzIGN1cnJlbnRseSByZXF1aXJlcyB0eXBlcyB1c2VkIGFzIGV4 dGVybiBSdXN0IHR5cGVzIHRvIGJlIGRlZmluZWQgYnkgdGhlIHNhbWUgY3JhdGUKKysvLyBgQ29u dGFpbmVySW1hZ2VTdGF0ZWAgaXMgY3VycmVudGx5IGlkZW50aWNhbCB0byBvc3RyZWUtcnMtZXh0 J3MgYExheWVyZWRJbWFnZVN0YXRlYCBzdHJ1Y3QsCisrLy8gYmVjYXVzZSBjeHgucnMgY3VycmVu dGx5IHJlcXVpcmVzIHR5cGVzIHVzZWQgYXMgZXh0ZXJuIFJ1c3QgdHlwZXMgdG8gYmUgZGVmaW5l ZCBieSB0aGUgc2FtZSBjcmF0ZQorIC8vIHRoYXQgY29udGFpbnMgdGhlIGJyaWRnZSB1c2luZyB0 aGVtLCBzbyB3ZSByZWRlZmluZSBhbiBgQ29udGFpbmVySW1wb3J0YCBzdHJ1Y3QgaGVyZS4KKy1z dHJ1Y3QgQ29udGFpbmVySW1hZ2VTdGF0ZSBmaW5hbCB7Cisrc3RydWN0IENvbnRhaW5lckltYWdl U3RhdGUgZmluYWwKKyt7CisgICA6OnJ1c3Q6OlN0cmluZyBiYXNlX2NvbW1pdDsKKyAgIDo6cnVz dDo6U3RyaW5nIG1lcmdlX2NvbW1pdDsKKyAgIDo6cnVzdDo6U3RyaW5nIGltYWdlX2RpZ2VzdDsK K0BAIC0xMTI4LDE5ICsxMjcwLDIxIEBAIHN0cnVjdCBDb250YWluZXJJbWFnZVN0YXRlIGZpbmFs IHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQcnVuZWRDb250 YWluZXJJbmZvCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUHJ1bmVk Q29udGFpbmVySW5mbworLXN0cnVjdCBQcnVuZWRDb250YWluZXJJbmZvIGZpbmFsIHsKKy0gIDo6 c3RkOjp1aW50MzJfdCBpbWFnZXMgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CistICA6OnN0ZDo6dWlu dDMyX3QgbGF5ZXJzIENYWF9ERUZBVUxUX1ZBTFVFKDApOworK3N0cnVjdCBQcnVuZWRDb250YWlu ZXJJbmZvIGZpbmFsCisreworKyAgOjpzdGQ6OnVpbnQzMl90IGltYWdlcyBDWFhfREVGQVVMVF9W QUxVRSAoMCk7CisrICA6OnN0ZDo6dWludDMyX3QgbGF5ZXJzIENYWF9ERUZBVUxUX1ZBTFVFICgw KTsKKyAKKy0gIGJvb2wgb3BlcmF0b3I9PShQcnVuZWRDb250YWluZXJJbmZvIGNvbnN0ICYpIGNv bnN0IG5vZXhjZXB0OworLSAgYm9vbCBvcGVyYXRvciE9KFBydW5lZENvbnRhaW5lckluZm8gY29u c3QgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKFBydW5lZENvbnRhaW5l ckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yIT0gKFBydW5l ZENvbnRhaW5lckluZm8gY29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CisgICB1c2luZyBJc1JlbG9j YXRhYmxlID0gOjpzdGQ6OnRydWVfdHlwZTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkUHJ1bmVkQ29udGFpbmVySW5mbworIAorICNpZm5kZWYgQ1hYQlJJ REdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZWZzcGVjVHlwZQorICNkZWZpbmUgQ1hYQlJJREdFMV9F TlVNX3JwbW9zdHJlZWN4eCRSZWZzcGVjVHlwZQorLWVudW0gY2xhc3MgUmVmc3BlY1R5cGUgOiA6 OnN0ZDo6dWludDhfdCB7CisrZW51bSBjbGFzcyBSZWZzcGVjVHlwZSA6IDo6c3RkOjp1aW50OF90 CisreworICAgT3N0cmVlID0gMCwKKyAgIENoZWNrc3VtID0gMSwKKyAgIENvbnRhaW5lciA9IDIs CitAQCAtMTE0OSw0MCArMTI5Myw0NSBAQCBlbnVtIGNsYXNzIFJlZnNwZWNUeXBlIDogOjpzdGQ6 OnVpbnQ4X3QgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRl bXBFdGNHdWFyZAorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFRlbXBF dGNHdWFyZAorLXN0cnVjdCBUZW1wRXRjR3VhcmQgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFx dWUgeworLSAgdm9pZCB1bmRvKCkgY29uc3Q7CistICB+VGVtcEV0Y0d1YXJkKCkgPSBkZWxldGU7 Cisrc3RydWN0IFRlbXBFdGNHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sK KysgIHZvaWQgdW5kbyAoKSBjb25zdDsKKysgIH5UZW1wRXRjR3VhcmQgKCkgPSBkZWxldGU7Cisg CisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQg eworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7 CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAv LyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVGVtcEV0Y0d1YXJkCisgCisgI2lmbmRl ZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRmlsZXN5c3RlbVNjcmlwdFByZXAKKyAj ZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRGaWxlc3lzdGVtU2NyaXB0UHJl cAorLXN0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9w YXF1ZSB7CistICB2b2lkIHVuZG8oKTsKKy0gIH5GaWxlc3lzdGVtU2NyaXB0UHJlcCgpID0gZGVs ZXRlOworK3N0cnVjdCBGaWxlc3lzdGVtU2NyaXB0UHJlcCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6 Ok9wYXF1ZQorK3sKKysgIHZvaWQgdW5kbyAoKTsKKysgIH5GaWxlc3lzdGVtU2NyaXB0UHJlcCAo KSA9IGRlbGV0ZTsKKyAKKyBwcml2YXRlOgorICAgZnJpZW5kIDo6cnVzdDo6bGF5b3V0OworLSAg c3RydWN0IGxheW91dCB7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2Vw dDsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24oKSBub2V4Y2VwdDsKKysgIHN0cnVj dCBsYXlvdXQKKysgIHsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSAoKSBub2V4Y2Vw dDsKKysgICAgc3RhdGljIDo6c3RkOjpzaXplX3QgYWxpZ24gKCkgbm9leGNlcHQ7CisgICB9Owor IH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRGaWxlc3lzdGVt U2NyaXB0UHJlcAorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JERl cGxveW1lbnRMYXllcmVkTWV0YQorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JERlcGxveW1lbnRMYXllcmVkTWV0YQorLXN0cnVjdCBEZXBsb3ltZW50TGF5ZXJlZE1ldGEg ZmluYWwgeworLSAgYm9vbCBpc19sYXllcmVkIENYWF9ERUZBVUxUX1ZBTFVFKGZhbHNlKTsKKytz dHJ1Y3QgRGVwbG95bWVudExheWVyZWRNZXRhIGZpbmFsCisreworKyAgYm9vbCBpc19sYXllcmVk IENYWF9ERUZBVUxUX1ZBTFVFIChmYWxzZSk7CisgICA6OnJ1c3Q6OlN0cmluZyBiYXNlX2NvbW1p dDsKKy0gIDo6c3RkOjp1aW50MzJfdCBjbGllbnRsYXllcl92ZXJzaW9uIENYWF9ERUZBVUxUX1ZB TFVFKDApOworKyAgOjpzdGQ6OnVpbnQzMl90IGNsaWVudGxheWVyX3ZlcnNpb24gQ1hYX0RFRkFV TFRfVkFMVUUgKDApOworIAorICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5 cGU7CisgfTsKK0BAIC0xMTkwLDcgKzEzMzksOCBAQCBzdHJ1Y3QgRGVwbG95bWVudExheWVyZWRN ZXRhIGZpbmFsIHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRP dmVycmlkZVJlcGxhY2VtZW50U291cmNlCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1v c3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZQorLXN0cnVjdCBPdmVycmlkZVJlcGxh Y2VtZW50U291cmNlIGZpbmFsIHsKKytzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBm aW5hbAorK3sKKyAgIDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50VHlwZSBraW5k OworICAgOjpydXN0OjpTdHJpbmcgbmFtZTsKKyAKK0BAIC0xMjAwLDcgKzEzNTAsOCBAQCBzdHJ1 Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJjZSBmaW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklE R0UxX0VOVU1fcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9uS2luZAorICNkZWZpbmUgQ1hYQlJJ REdFMV9FTlVNX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbktpbmQKKy1lbnVtIGNsYXNzIFBh cnNlZFJldmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNzIFBhcnNlZFJl dmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90CisreworICAgVmVyc2lvbiA9IDAsCisgICBDaGVj a3N1bSA9IDEsCisgfTsKK0BAIC0xMjA4LDcgKzEzNTksOCBAQCBlbnVtIGNsYXNzIFBhcnNlZFJl dmlzaW9uS2luZCA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RS VUNUX3JwbW9zdHJlZWN4eCRQYXJzZWRSZXZpc2lvbgorICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJV Q1RfcnBtb3N0cmVlY3h4JFBhcnNlZFJldmlzaW9uCistc3RydWN0IFBhcnNlZFJldmlzaW9uIGZp bmFsIHsKKytzdHJ1Y3QgUGFyc2VkUmV2aXNpb24gZmluYWwKKyt7CisgICA6OnJwbW9zdHJlZWN4 eDo6UGFyc2VkUmV2aXNpb25LaW5kIGtpbmQ7CisgICA6OnJ1c3Q6OlN0cmluZyB2YWx1ZTsKKyAK K0BAIC0xMjE4LDQ0ICsxMzcwLDUwIEBAIHN0cnVjdCBQYXJzZWRSZXZpc2lvbiBmaW5hbCB7Cisg CisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXJGbGFn cworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxh Z3MKKy1zdHJ1Y3QgUnBtSW1wb3J0ZXJGbGFncyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1 ZSB7CistICBib29sIGlzX2ltYV9lbmFibGVkKCkgY29uc3Qgbm9leGNlcHQ7CistICB+UnBtSW1w b3J0ZXJGbGFncygpID0gZGVsZXRlOworK3N0cnVjdCBScG1JbXBvcnRlckZsYWdzIGZpbmFsIDog cHVibGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgYm9vbCBpc19pbWFfZW5hYmxlZCAoKSBjb25z dCBub2V4Y2VwdDsKKysgIH5ScG1JbXBvcnRlckZsYWdzICgpID0gZGVsZXRlOworIAorIHByaXZh dGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAg c3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgeworKyAgICBz dGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6 OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyRmxhZ3MKKyAKKyAjaWZuZGVmIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRScG1JbXBvcnRlcgorICNkZWZpbmUgQ1hYQlJJ REdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJwbUltcG9ydGVyCistc3RydWN0IFJwbUltcG9ydGVy IGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIDo6cnVzdDo6U3RyaW5nIGhhbmRs ZV90cmFuc2xhdGVfcGF0aG5hbWUoOjpydXN0OjpTdHIgcGF0aCkgbm9leGNlcHQ7CistICA6OnJ1 c3Q6OlN0cmluZyBvc3RyZWVfYnJhbmNoKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0 cmluZyBwa2dfbmFtZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBkb2NfZmlsZXNfYXJlX2Zp bHRlcmVkKCkgY29uc3Qgbm9leGNlcHQ7CistICB2b2lkIGRvY19maWxlc19pbnNlcnQoOjpydXN0 OjpTdHIgcGF0aCkgbm9leGNlcHQ7CistICBib29sIGRvY19maWxlc19jb250YWlucyg6OnJ1c3Q6 OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgcnBtZmlfb3ZlcnJpZGVzX2luc2Vy dCg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnN0ZDo6dWludDY0X3QgaW5kZXgpIG5vZXhjZXB0OworLSAg Ym9vbCBycG1maV9vdmVycmlkZXNfY29udGFpbnMoOjpydXN0OjpTdHIgcGF0aCkgY29uc3Qgbm9l eGNlcHQ7CistICA6OnN0ZDo6dWludDY0X3QgcnBtZmlfb3ZlcnJpZGVzX2dldCg6OnJ1c3Q6OlN0 ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgaXNfaW1hX2VuYWJsZWQoKSBjb25zdCBu b2V4Y2VwdDsKKy0gIHZvaWQgdHdlYWtfaW1wb3J0ZWRfZmlsZV9pbmZvKDo6cnBtb3N0cmVlY3h4 OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5mbykgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGlz X2ZpbGVfZmlsdGVyZWQoOjpydXN0OjpTdHIgcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5m byBjb25zdCAmZmlsZV9pbmZvKSBjb25zdDsKKy0gIHZvaWQgdHJhbnNsYXRlX3RvX3RtcGZpbGVz X2VudHJ5KDo6cnVzdDo6U3RyIGFic19wYXRoLCA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNv bnN0ICZmaWxlX2luZm8sIDo6cnVzdDo6U3RyIHVzZXJuYW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5h bWUpOworLSAgYm9vbCBoYXNfdG1wZmlsZXNfZW50cmllcygpIGNvbnN0IG5vZXhjZXB0OworLSAg OjpydXN0OjpTdHJpbmcgc2VyaWFsaXplX3RtcGZpbGVzX2NvbnRlbnQoKSBjb25zdCBub2V4Y2Vw dDsKKy0gIH5ScG1JbXBvcnRlcigpID0gZGVsZXRlOworK3N0cnVjdCBScG1JbXBvcnRlciBmaW5h bCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIDo6cnVzdDo6U3RyaW5nIGhhbmRsZV90 cmFuc2xhdGVfcGF0aG5hbWUgKDo6cnVzdDo6U3RyIHBhdGgpIG5vZXhjZXB0OworKyAgOjpydXN0 OjpTdHJpbmcgb3N0cmVlX2JyYW5jaCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3Ry aW5nIHBrZ19uYW1lICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBkb2NfZmlsZXNfYXJlX2Zp bHRlcmVkICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBkb2NfZmlsZXNfaW5zZXJ0ICg6OnJ1 c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKysgIGJvb2wgZG9jX2ZpbGVzX2NvbnRhaW5zICg6OnJ1 c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgcnBtZmlfb3ZlcnJpZGVzX2lu c2VydCAoOjpydXN0OjpTdHIgcGF0aCwgOjpzdGQ6OnVpbnQ2NF90IGluZGV4KSBub2V4Y2VwdDsK KysgIGJvb2wgcnBtZmlfb3ZlcnJpZGVzX2NvbnRhaW5zICg6OnJ1c3Q6OlN0ciBwYXRoKSBjb25z dCBub2V4Y2VwdDsKKysgIDo6c3RkOjp1aW50NjRfdCBycG1maV9vdmVycmlkZXNfZ2V0ICg6OnJ1 c3Q6OlN0ciBwYXRoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgaXNfaW1hX2VuYWJsZWQgKCkg Y29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHR3ZWFrX2ltcG9ydGVkX2ZpbGVfaW5mbyAoOjpycG1v c3RyZWVjeHg6OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdCBub2V4Y2VwdDsKKysg IGJvb2wgaXNfZmlsZV9maWx0ZXJlZCAoOjpydXN0OjpTdHIgcGF0aCwgOjpycG1vc3RyZWVjeHg6 OkdGaWxlSW5mbyBjb25zdCAmZmlsZV9pbmZvKSBjb25zdDsKKysgIHZvaWQgdHJhbnNsYXRlX3Rv X3RtcGZpbGVzX2VudHJ5ICg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0ZpbGVJbmZvIGNvbnN0ICZmaWxl X2luZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIg dXNlcm5hbWUsIDo6cnVzdDo6U3RyIGdyb3VwbmFtZSk7CisrICBib29sIGhhc190bXBmaWxlc19l bnRyaWVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgc2VyaWFsaXplX3Rt cGZpbGVzX2NvbnRlbnQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB+UnBtSW1wb3J0ZXIgKCkgPSBk ZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVj dCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7Cist ICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5 b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7Cisr ICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9Owor ICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUnBtSW1wb3J0ZXIKK0BA IC0xMjY0LDczICsxNDIyLDgxIEBAIHN0cnVjdCBScG1JbXBvcnRlciBmaW5hbCA6IHB1YmxpYyA6 OnJ1c3Q6Ok9wYXF1ZSB7CisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk SGlzdG9yeUVudHJ5CisgLy8gQSBoaXN0b3J5IGVudHJ5IGluIHRoZSBqb3VybmFsLiBJdCBtYXkg cmVwcmVzZW50IG11bHRpcGxlIGNvbnNlY3V0aXZlIGJvb3RzCisgLy8gaW50byB0aGUgc2FtZSBk ZXBsb3ltZW50LiBUaGlzIHN0cnVjdCBpcyBleHBvc2VkIGRpcmVjdGx5IHZpYSBGRkkgdG8gQy4K Ky1zdHJ1Y3QgSGlzdG9yeUVudHJ5IGZpbmFsIHsKKytzdHJ1Y3QgSGlzdG9yeUVudHJ5IGZpbmFs CisreworICAgLy8gVGhlIGRlcGxveW1lbnQgcm9vdCB0aW1lc3RhbXAuCistICA6OnN0ZDo6dWlu dDY0X3QgZGVwbG95X3RpbWVzdGFtcCBDWFhfREVGQVVMVF9WQUxVRSgwKTsKKysgIDo6c3RkOjp1 aW50NjRfdCBkZXBsb3lfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRo ZSBjb21tYW5kLWxpbmUgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIGRlcGxveW1lbnQsIGlm IGFueS4KKyAgIDo6cnVzdDo6U3RyaW5nIGRlcGxveV9jbWRsaW5lOworICAgLy8gVGhlIG51bWJl ciBvZiBjb25zZWN1dGl2ZSB0aW1lcyB0aGUgZGVwbG95bWVudCB3YXMgYm9vdGVkLgorLSAgOjpz dGQ6OnVpbnQ2NF90IGJvb3RfY291bnQgQ1hYX0RFRkFVTFRfVkFMVUUoMCk7CisrICA6OnN0ZDo6 dWludDY0X3QgYm9vdF9jb3VudCBDWFhfREVGQVVMVF9WQUxVRSAoMCk7CisgICAvLyBUaGUgZmly c3QgdGltZSB0aGUgZGVwbG95bWVudCB3YXMgYm9vdGVkIGlmIG11bHRpcGxlIGNvbnNlY3V0aXZl IHRpbWVzLgorLSAgOjpzdGQ6OnVpbnQ2NF90IGZpcnN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZB VUxUX1ZBTFVFKDApOworKyAgOjpzdGQ6OnVpbnQ2NF90IGZpcnN0X2Jvb3RfdGltZXN0YW1wIENY WF9ERUZBVUxUX1ZBTFVFICgwKTsKKyAgIC8vIFRoZSBsYXN0IHRpbWUgdGhlIGRlcGxveW1lbnQg d2FzIGJvb3RlZCBpZiBtdWx0aXBsZSBjb25zZWN1dGl2ZSB0aW1lcy4KKy0gIDo6c3RkOjp1aW50 NjRfdCBsYXN0X2Jvb3RfdGltZXN0YW1wIENYWF9ERUZBVUxUX1ZBTFVFKDApOworKyAgOjpzdGQ6 OnVpbnQ2NF90IGxhc3RfYm9vdF90aW1lc3RhbXAgQ1hYX0RFRkFVTFRfVkFMVUUgKDApOworICAg Ly8gYHRydWVgIGlmIHRoZXJlIGFyZSBubyBtb3JlIGVudHJpZXMuCistICBib29sIGVvZiBDWFhf REVGQVVMVF9WQUxVRShmYWxzZSk7CisrICBib29sIGVvZiBDWFhfREVGQVVMVF9WQUxVRSAoZmFs c2UpOworIAorLSAgYm9vbCBvcGVyYXRvcj09KEhpc3RvcnlFbnRyeSBjb25zdCAmKSBjb25zdCBu b2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3IhPShIaXN0b3J5RW50cnkgY29uc3QgJikgY29uc3Qg bm9leGNlcHQ7CisrICBib29sIG9wZXJhdG9yPT0gKEhpc3RvcnlFbnRyeSBjb25zdCAmKSBjb25z dCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3IhPSAoSGlzdG9yeUVudHJ5IGNvbnN0ICYpIGNv bnN0IG5vZXhjZXB0OworICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7 CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEhpc3RvcnlF bnRyeQorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEhpc3RvcnlD dHgKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRIaXN0b3J5Q3R4Cist c3RydWN0IEhpc3RvcnlDdHggZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUgeworLSAgOjpy cG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSBuZXh0X2VudHJ5KCk7CistICB+SGlzdG9yeUN0eCgp ID0gZGVsZXRlOworK3N0cnVjdCBIaXN0b3J5Q3R4IGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3Bh cXVlCisreworKyAgOjpycG1vc3RyZWVjeHg6Okhpc3RvcnlFbnRyeSBuZXh0X2VudHJ5ICgpOwor KyAgfkhpc3RvcnlDdHggKCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1 c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9l eGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90 IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5v ZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3Ry ZWVjeHgkSGlzdG9yeUN0eAorIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JFRva2lvSGFuZGxlCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk VG9raW9IYW5kbGUKKy1zdHJ1Y3QgVG9raW9IYW5kbGUgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpP cGFxdWUgeworLSAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvRW50ZXJHdWFyZD4g ZW50ZXIoKSBjb25zdCBub2V4Y2VwdDsKKy0gIH5Ub2tpb0hhbmRsZSgpID0gZGVsZXRlOworK3N0 cnVjdCBUb2tpb0hhbmRsZSBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIDo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0VudGVyR3VhcmQ+IGVudGVyICgpIGNvbnN0 IG5vZXhjZXB0OworKyAgflRva2lvSGFuZGxlICgpID0gZGVsZXRlOworIAorIHByaXZhdGU6Cisg ICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGlj IDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgeworKyAgICBzdGF0aWMg OjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVf dCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFRva2lvSGFuZGxlCisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCisgI2RlZmluZSBDWFhCUklER0UxX1NU UlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCistc3RydWN0IFRva2lvRW50ZXJHdWFy ZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZSB7CistICB+VG9raW9FbnRlckd1YXJkKCkg PSBkZWxldGU7Cisrc3RydWN0IFRva2lvRW50ZXJHdWFyZCBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6 Ok9wYXF1ZQorK3sKKysgIH5Ub2tpb0VudGVyR3VhcmQgKCkgPSBkZWxldGU7CisgCisgcHJpdmF0 ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAgICBz dGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6 c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAgIHN0 YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6 c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVG9raW9FbnRlckd1YXJkCisgCisgI2lmbmRlZiBDWFhC UklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JFJlcG9NZXRhZGF0YVRhcmdldAorICNkZWZpbmUgQ1hY QlJJREdFMV9FTlVNX3JwbW9zdHJlZWN4eCRSZXBvTWV0YWRhdGFUYXJnZXQKKy1lbnVtIGNsYXNz IFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNzIFJlcG9N ZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90CisreworICAgSW5saW5lID0gMCwKKyAgIERl dGFjaGVkID0gMSwKKyAgIERpc2FibGVkID0gMiwKK0BAIC0xMzM5LDcgKzE1MDUsOCBAQCBlbnVt IGNsYXNzIFJlcG9NZXRhZGF0YVRhcmdldCA6IDo6c3RkOjp1aW50OF90IHsKKyAKKyAjaWZuZGVm IENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0Cisg I2RlZmluZSBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JEFkdmlzb3JpZXNNZXRhZGF0YVRh cmdldAorLWVudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4 X3QgeworK2VudW0gY2xhc3MgQWR2aXNvcmllc01ldGFkYXRhVGFyZ2V0IDogOjpzdGQ6OnVpbnQ4 X3QKKyt7CisgICBJbmxpbmUgPSAwLAorICAgRGV0YWNoZWQgPSAxLAorICAgRGlzYWJsZWQgPSAy LAorQEAgLTEzNDgsMzkgKzE1MTUsNDMgQEAgZW51bSBjbGFzcyBBZHZpc29yaWVzTWV0YWRhdGFU YXJnZXQgOiA6OnN0ZDo6dWludDhfdCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkUmVmc3BlYworICNkZWZpbmUgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVl Y3h4JFJlZnNwZWMKKy1zdHJ1Y3QgUmVmc3BlYyBmaW5hbCB7Cisrc3RydWN0IFJlZnNwZWMgZmlu YWwKKyt7CisgICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5cGUga2luZDsKKyAgIDo6cnVzdDo6 U3RyaW5nIHJlZnNwZWM7CisgCistICBib29sIG9wZXJhdG9yPT0oUmVmc3BlYyBjb25zdCAmKSBj b25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgb3BlcmF0b3IhPShSZWZzcGVjIGNvbnN0ICYpIGNvbnN0 IG5vZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvcj09IChSZWZzcGVjIGNvbnN0ICYpIGNvbnN0IG5v ZXhjZXB0OworKyAgYm9vbCBvcGVyYXRvciE9IChSZWZzcGVjIGNvbnN0ICYpIGNvbnN0IG5vZXhj ZXB0OworICAgdXNpbmcgSXNSZWxvY2F0YWJsZSA9IDo6c3RkOjp0cnVlX3R5cGU7CisgfTsKKyAj ZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFJlZnNwZWMKKyAKKyAjaWZu ZGVmIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUK KyAjZGVmaW5lIENYWEJSSURHRTFfRU5VTV9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVu dFR5cGUKKy1lbnVtIGNsYXNzIE92ZXJyaWRlUmVwbGFjZW1lbnRUeXBlIDogOjpzdGQ6OnVpbnQ4 X3QgeworK2VudW0gY2xhc3MgT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUgOiA6OnN0ZDo6dWludDhf dAorK3sKKyAgIFJlcG8gPSAwLAorIH07CisgI2VuZGlmIC8vIENYWEJSSURHRTFfRU5VTV9ycG1v c3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudFR5cGUKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFf U1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50CisgI2RlZmluZSBDWFhCUklE R0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkT3ZlcnJpZGVSZXBsYWNlbWVudAorLXN0cnVjdCBPdmVy cmlkZVJlcGxhY2VtZW50IGZpbmFsIHsKKytzdHJ1Y3QgT3ZlcnJpZGVSZXBsYWNlbWVudCBmaW5h bAorK3sKKyAgIDo6cnVzdDo6U3RyaW5nIGZyb207CisgICA6OnJwbW9zdHJlZWN4eDo6T3ZlcnJp ZGVSZXBsYWNlbWVudFR5cGUgZnJvbV9raW5kOworICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IHBhY2thZ2VzOworIAorLSAgYm9vbCBvcGVyYXRvcj09KE92ZXJyaWRlUmVwbGFjZW1lbnQg Y29uc3QgJikgY29uc3Qgbm9leGNlcHQ7CistICBib29sIG9wZXJhdG9yIT0oT3ZlcnJpZGVSZXBs YWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0b3I9PSAoT3Zl cnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgb3BlcmF0 b3IhPSAoT3ZlcnJpZGVSZXBsYWNlbWVudCBjb25zdCAmKSBjb25zdCBub2V4Y2VwdDsKKyAgIHVz aW5nIElzUmVsb2NhdGFibGUgPSA6OnN0ZDo6dHJ1ZV90eXBlOworIH07CisgI2VuZGlmIC8vIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRPdmVycmlkZVJlcGxhY2VtZW50CisgCisgI2lm bmRlZiBDWFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE9wdFVzckxvY2FsCisgI2RlZmluZSBD WFhCUklER0UxX0VOVU1fcnBtb3N0cmVlY3h4JE9wdFVzckxvY2FsCistZW51bSBjbGFzcyBPcHRV c3JMb2NhbCA6IDo6c3RkOjp1aW50OF90IHsKKytlbnVtIGNsYXNzIE9wdFVzckxvY2FsIDogOjpz dGQ6OnVpbnQ4X3QKKyt7CisgICBWYXIgPSAwLAorICAgUm9vdCA9IDEsCisgICBTdGF0ZU92ZXJs YXkgPSAyLAorQEAgLTEzODksMTI1ICsxNTYwLDEzMSBAQCBlbnVtIGNsYXNzIE9wdFVzckxvY2Fs IDogOjpzdGQ6OnVpbnQ4X3QgeworIAorICNpZm5kZWYgQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0 cmVlY3h4JFRyZWVmaWxlCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgk VHJlZWZpbGUKKy1zdHJ1Y3QgVHJlZWZpbGUgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUg eworLSAgOjpydXN0OjpTdHIgZ2V0X3dvcmtkaXIoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6c3Rk OjppbnQzMl90IGdldF9wYXNzd2RfZmQoKSBub2V4Y2VwdDsKKy0gIDo6c3RkOjppbnQzMl90IGdl dF9ncm91cF9mZCgpIG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X2pzb25fc3RyaW5n KCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X29z dHJlZV9sYXllcnMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBnZXRfb3N0cmVlX292ZXJyaWRlX2xheWVycygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9hbGxfb3N0cmVlX2xheWVycygpIGNvbnN0IG5v ZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9yZXBvcygpIGNvbnN0 IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlcygp IGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgcmVxdWlyZV9hdXRvbWF0aWNfdmVy c2lvbl9wcmVmaXgoKSBjb25zdDsKKy0gIGJvb2wgYWRkX3BhY2thZ2VzKDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7CistICBib29sIGhh c19wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJp bmc+IGdldF9sb2NhbF9wYWNrYWdlcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBhZGRfbG9j YWxfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFs bG93X2V4aXN0aW5nKTsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfbG9jYWxf ZmlsZW92ZXJyaWRlX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIGFkZF9sb2Nh bF9maWxlb3ZlcnJpZGVfcGFja2FnZXMoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2th Z2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKKy0gIGJvb2wgcmVtb3ZlX3BhY2thZ2VzKDo6cnVz dDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcywgYm9vbCBhbGxvd19ub2VudCk7CistICA6 OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudD4gZ2V0X3BhY2th Z2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgaGFzX3BhY2th Z2VzX292ZXJyaWRlX3JlcGxhY2UoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgYWRkX3BhY2th Z2VzX292ZXJyaWRlX3JlcGxhY2UoOjpycG1vc3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnQg cmVwbGFjZW1lbnQpIG5vZXhjZXB0OworLSAgYm9vbCByZW1vdmVfcGFja2FnZV9vdmVycmlkZV9y ZXBsYWNlKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworLSAgOjpydXN0OjpWZWM8Ojpy dXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsKCkgY29uc3Qg bm9leGNlcHQ7CistICB2b2lkIGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xvY2FsKDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcyk7CistICBib29sIHJlbW92ZV9wYWNr YWdlX292ZXJyaWRlX3JlcGxhY2VfbG9jYWwoOjpydXN0OjpTdHIgcGFja2FnZSkgbm9leGNlcHQ7 CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzX292ZXJyaWRlX3Jl bW92ZSgpIGNvbnN0IG5vZXhjZXB0OworLSAgdm9pZCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVt b3ZlKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBwYWNrYWdlcyk7CistICBib29sIHJlbW92 ZV9wYWNrYWdlX292ZXJyaWRlX3JlbW92ZSg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBub2V4Y2VwdDsK Ky0gIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZV9uYW1lKDo6cnVzdDo6U3RyIG5h bWUpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCByZW1vdmVfYWxsX292ZXJyaWRlcygpIG5vZXhj ZXB0OworLSAgYm9vbCByZW1vdmVfYWxsX3BhY2thZ2VzKCkgbm9leGNlcHQ7CistICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V4Y2x1ZGVfcGFja2FnZXMoKSBjb25zdCBub2V4Y2Vw dDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9wbGF0Zm9ybV9tb2R1bGUoKSBjb25zdCBub2V4Y2Vw dDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5zdGFsbF9sYW5ncygpIGNv bnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFj cm8oKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRf bG9ja2ZpbGVfcmVwb3MoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyIGdldF9yZWYo KSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X2NsaXdyYXAoKSBjb25zdCBub2V4Y2VwdDsK Ky0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfY2xpd3JhcF9iaW5hcmllcygpIGNv bnN0IG5vZXhjZXB0OworLSAgdm9pZCBzZXRfY2xpd3JhcChib29sIGVuYWJsZWQpIG5vZXhjZXB0 OworLSAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9jb250YWluZXJfY21kKCkgY29u c3Qgbm9leGNlcHQ7CistICBib29sIGdldF9yZWFkb25seV9leGVjdXRhYmxlcygpIGNvbnN0IG5v ZXhjZXB0OworLSAgYm9vbCBnZXRfZG9jdW1lbnRhdGlvbigpIGNvbnN0IG5vZXhjZXB0OworLSAg Ym9vbCBnZXRfcmVjb21tZW5kcygpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfc2VsaW51 eCgpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfc3lzdXNlcnNfaXNfZm9yY2VkKCkgY29u c3Qgbm9leGNlcHQ7CistICA6OnN0ZDo6dWludDMyX3QgZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lv bigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X2dwZ19rZXkoKSBjb25z dCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9hdXRvbWF0aWNfdmVyc2lvbl9zdWZm aXgoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgZ2V0X2NvbnRhaW5lcigpIGNvbnN0IG5vZXhj ZXB0OworLSAgYm9vbCBnZXRfbWFjaGluZWlkX2NvbXBhdCgpIGNvbnN0IG5vZXhjZXB0OworLSAg OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9ldGNfZ3JvdXBfbWVtYmVycygpIGNvbnN0 IG5vZXhjZXB0OworLSAgYm9vbCBnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzKCkgY29uc3Qg bm9leGNlcHQ7CistICBib29sIHVzZV9rZXJuZWxfaW5zdGFsbCgpIGNvbnN0IG5vZXhjZXB0Owor LSAgYm9vbCBnZXRfaW1hKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRf cmVsZWFzZXZlcigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpycG1vc3RyZWVjeHg6OlJlcG9NZXRh ZGF0YVRhcmdldCBnZXRfcmVwb19tZXRhZGF0YV90YXJnZXQoKSBjb25zdCBub2V4Y2VwdDsKKy0g IDo6cnBtb3N0cmVlY3h4OjpBZHZpc29yaWVzTWV0YWRhdGFUYXJnZXQgZ2V0X2Fkdmlzb3JpZXNf bWV0YWRhdGFfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHJwbWRiX2JhY2tlbmRf aXNfdGFyZ2V0KCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHNob3VsZF9ub3JtYWxpemVfcnBt ZGIoKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnBtb3N0cmVlY3h4OjpPcHRVc3JMb2NhbCBnZXRf b3B0X3VzcmxvY2FsKCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0 cmluZz4gZ2V0X2ZpbGVzX3JlbW92ZV9yZWdleCg6OnJ1c3Q6OlN0ciBwYWNrYWdlKSBjb25zdCBu b2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9jaGVja3N1bSg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlUmVwbyBjb25zdCAmcmVwbykgY29uc3Q7CistICA6OnJ1c3Q6OlN0cmluZyBnZXRfb3N0 cmVlX3JlZigpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpydXN0OjpTbGljZTw6OnJwbW9zdHJlZWN4 eDo6UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9yZXBvX3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7 CistICB2b2lkIGNsZWFyX3JlcG9fcGFja2FnZXMoKSBub2V4Y2VwdDsKKy0gIHZvaWQgcHJldHR5 cHJpbnRfanNvbl9zdGRvdXQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgcHJpbnRfZGVwcmVj YXRpb25fd2FybmluZ3MoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgcHJpbnRfZXhwZXJpbWVu dGFsX25vdGljZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgc2FuaXR5Y2hlY2tfZXh0ZXJu YWxzKCkgY29uc3Q7CistICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJG bGFncz4gaW1wb3J0ZXJfZmxhZ3MoOjpydXN0OjpTdHIgcGtnX25hbWUpIGNvbnN0IG5vZXhjZXB0 OworLSAgOjpydXN0OjpTdHJpbmcgd3JpdGVfcmVwb3ZhcnMoOjpzdGQ6OmludDMyX3Qgd29ya2Rp cl9kZmRfcmF3KSBjb25zdDsKKy0gIHZvaWQgc2V0X3JlbGVhc2V2ZXIoOjpydXN0OjpTdHIgcmVs ZWFzZXZlcik7CistICB2b2lkIHNldF9yZWNvbW1lbmRzKGJvb2wgdmFsKTsKKy0gIHZvaWQgZW5h YmxlX3JlcG8oOjpydXN0OjpTdHIgcmVwbyk7CistICB2b2lkIGRpc2FibGVfcmVwbyg6OnJ1c3Q6 OlN0ciByZXBvKTsKKy0gIHZvaWQgdmFsaWRhdGVfZm9yX2NvbnRhaW5lcigpIGNvbnN0OworLSAg OjpycG1vc3RyZWVjeHg6OlJlZnNwZWMgZ2V0X2Jhc2VfcmVmc3BlYygpIGNvbnN0IG5vZXhjZXB0 OworLSAgdm9pZCByZWJhc2UoOjpydXN0OjpTdHIgbmV3X3JlZnNwZWMsIDo6cnVzdDo6U3RyIGN1 c3RvbV9vcmlnaW5fdXJsLCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBu b2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX3VybCgpIGNvbnN0 IG5vZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X29yaWdpbl9jdXN0b21fZGVzY3JpcHRp b24oKSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGdldF9vdmVycmlkZV9jb21t aXQoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0X292ZXJyaWRlX2NvbW1pdCg6OnJ1c3Q6 OlN0ciBjaGVja3N1bSkgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Z2V0X2luaXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgaGFzX2lu aXRyYW1mc19ldGNfZmlsZXMoKSBjb25zdCBub2V4Y2VwdDsKKy0gIGJvb2wgaW5pdHJhbWZzX2V0 Y19maWxlc190cmFjayg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMpIG5vZXhjZXB0 OworLSAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2soOjpydXN0OjpWZWM8OjpydXN0 OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsKKy0gIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc191 bnRyYWNrX2FsbCgpIG5vZXhjZXB0OworLSAgYm9vbCBnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUo KSBjb25zdCBub2V4Y2VwdDsKKy0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfaW5p dHJhbWZzX2FyZ3MoKSBjb25zdCBub2V4Y2VwdDsKKy0gIHZvaWQgc2V0X2luaXRyYW1mc19yZWdl bmVyYXRlKGJvb2wgZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIG5v ZXhjZXB0OworLSAgOjpydXN0OjpTdHJpbmcgZ2V0X3VuY29uZmlndXJlZF9zdGF0ZSgpIGNvbnN0 IG5vZXhjZXB0OworLSAgYm9vbCBtYXlfcmVxdWlyZV9sb2NhbF9hc3NlbWJseSgpIGNvbnN0IG5v ZXhjZXB0OworLSAgYm9vbCBoYXNfYW55X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICBi b29sIG1lcmdlX3RyZWVmaWxlKDo6cnVzdDo6U3RyIHRyZWVmaWxlKTsKKy0gIGJvb2wgZ2V0X25v X2luaXRyYW1mcygpIGNvbnN0IG5vZXhjZXB0OworLSAgflRyZWVmaWxlKCkgPSBkZWxldGU7Cisr c3RydWN0IFRyZWVmaWxlIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisreworKyAgOjpy dXN0OjpTdHIgZ2V0X3dvcmtkaXIgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnN0ZDo6aW50MzJf dCBnZXRfcGFzc3dkX2ZkICgpIG5vZXhjZXB0OworKyAgOjpzdGQ6OmludDMyX3QgZ2V0X2dyb3Vw X2ZkICgpIG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgZ2V0X2pzb25fc3RyaW5nICgpIGNv bnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc3RyZWVf bGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9vc3RyZWVfb3ZlcnJpZGVfbGF5ZXJzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9hbGxfb3N0cmVlX2xheWVycyAoKSBjb25zdCBub2V4 Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVwb3MgKCkgY29uc3Qg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2VzICgp IGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcgcmVxdWlyZV9hdXRvbWF0aWNfdmVy c2lvbl9wcmVmaXggKCkgY29uc3Q7CisrICBib29sIGFkZF9wYWNrYWdlcyAoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X2V4aXN0aW5nKTsKKysgIGJvb2wg aGFzX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9sb2NhbF9wYWNrYWdlcyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgYWRk X2xvY2FsX3BhY2thZ2VzICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gcGFja2FnZXMsIGJv b2wgYWxsb3dfZXhpc3RpbmcpOworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9s b2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGFk ZF9sb2NhbF9maWxlb3ZlcnJpZGVfcGFja2FnZXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5n PiBwYWNrYWdlcywgYm9vbCBhbGxvd19leGlzdGluZyk7CisrICBib29sIHJlbW92ZV9wYWNrYWdl cyAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzLCBib29sIGFsbG93X25vZW50 KTsKKysgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVlY3h4OjpPdmVycmlkZVJlcGxhY2VtZW50PiBn ZXRfcGFja2FnZXNfb3ZlcnJpZGVfcmVwbGFjZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wg aGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlcGxhY2UgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29s IGFkZF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlICg6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVS ZXBsYWNlbWVudCByZXBsYWNlbWVudCkgbm9leGNlcHQ7CisrICBib29sIHJlbW92ZV9wYWNrYWdl X292ZXJyaWRlX3JlcGxhY2UgKDo6cnVzdDo6U3RyIHBhY2thZ2UpIG5vZXhjZXB0OworKyAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9wYWNrYWdlc19vdmVycmlkZV9yZXBsYWNlX2xv Y2FsICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBhZGRfcGFja2FnZXNfb3ZlcnJpZGVfcmVw bGFjZV9sb2NhbCAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2VzKTsKKysgIGJv b2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVwbGFjZV9sb2NhbCAoOjpydXN0OjpTdHIgcGFj a2FnZSkgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2th Z2VzX292ZXJyaWRlX3JlbW92ZSAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgYWRkX3BhY2th Z2VzX292ZXJyaWRlX3JlbW92ZSAoOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IHBhY2thZ2Vz KTsKKysgIGJvb2wgcmVtb3ZlX3BhY2thZ2Vfb3ZlcnJpZGVfcmVtb3ZlICg6OnJ1c3Q6OlN0ciBw YWNrYWdlKSBub2V4Y2VwdDsKKysgIGJvb2wgaGFzX3BhY2thZ2VzX292ZXJyaWRlX3JlbW92ZV9u YW1lICg6OnJ1c3Q6OlN0ciBuYW1lKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgcmVtb3ZlX2Fs bF9vdmVycmlkZXMgKCkgbm9leGNlcHQ7CisrICBib29sIHJlbW92ZV9hbGxfcGFja2FnZXMgKCkg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2V4Y2x1ZGVfcGFj a2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfcGxhdGZvcm1f bW9kdWxlICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+ IGdldF9pbnN0YWxsX2xhbmdzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTdHJpbmcg Zm9ybWF0X2luc3RhbGxfbGFuZ3NfbWFjcm8gKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2xvY2tmaWxlX3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0 OworKyAgOjpydXN0OjpTdHIgZ2V0X3JlZiAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZ2V0 X2NsaXdyYXAgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmlu Zz4gZ2V0X2NsaXdyYXBfYmluYXJpZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHNldF9j bGl3cmFwIChib29sIGVuYWJsZWQpIG5vZXhjZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpT dHJpbmc+IGdldF9jb250YWluZXJfY21kICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBnZXRf cmVhZG9ubHlfZXhlY3V0YWJsZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGdldF9kb2N1 bWVudGF0aW9uICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBnZXRfcmVjb21tZW5kcyAoKSBj b25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZ2V0X3NlbGludXggKCkgY29uc3Qgbm9leGNlcHQ7Cisr ICBib29sIGdldF9zeXN1c2Vyc19pc19mb3JjZWQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnN0 ZDo6dWludDMyX3QgZ2V0X3NlbGludXhfbGFiZWxfdmVyc2lvbiAoKSBjb25zdCBub2V4Y2VwdDsK KysgIDo6cnVzdDo6U3RyaW5nIGdldF9ncGdfa2V5ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpy dXN0OjpTdHJpbmcgZ2V0X2F1dG9tYXRpY192ZXJzaW9uX3N1ZmZpeCAoKSBjb25zdCBub2V4Y2Vw dDsKKysgIGJvb2wgZ2V0X2NvbnRhaW5lciAoKSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgZ2V0 X21hY2hpbmVpZF9jb21wYXQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gZ2V0X2V0Y19ncm91cF9tZW1iZXJzICgpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCBnZXRfYm9vdF9sb2NhdGlvbl9pc19tb2R1bGVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAg Ym9vbCB1c2Vfa2VybmVsX2luc3RhbGwgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGdldF9p bWEgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfcmVsZWFzZXZlciAo KSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnBtb3N0cmVlY3h4OjpSZXBvTWV0YWRhdGFUYXJnZXQg Z2V0X3JlcG9fbWV0YWRhdGFfdGFyZ2V0ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpycG1vc3Ry ZWVjeHg6OkFkdmlzb3JpZXNNZXRhZGF0YVRhcmdldCBnZXRfYWR2aXNvcmllc19tZXRhZGF0YV90 YXJnZXQgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIHJwbWRiX2JhY2tlbmRfaXNfdGFyZ2V0 ICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBzaG91bGRfbm9ybWFsaXplX3JwbWRiICgpIGNv bnN0IG5vZXhjZXB0OworKyAgOjpycG1vc3RyZWVjeHg6Ok9wdFVzckxvY2FsIGdldF9vcHRfdXNy bG9jYWwgKCkgY29uc3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4g Z2V0X2ZpbGVzX3JlbW92ZV9yZWdleCAoOjpydXN0OjpTdHIgcGFja2FnZSkgY29uc3Qgbm9leGNl cHQ7CisrICA6OnJ1c3Q6OlN0cmluZyBnZXRfY2hlY2tzdW0gKDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZyZXBvKSBjb25zdDsKKysgIDo6cnVzdDo6U3RyaW5nIGdldF9vc3RyZWVf cmVmICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpydXN0OjpTbGljZTw6OnJwbW9zdHJlZWN4eDo6 UmVwb1BhY2thZ2UgY29uc3Q+IGdldF9yZXBvX3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0Owor KyAgdm9pZCBjbGVhcl9yZXBvX3BhY2thZ2VzICgpIG5vZXhjZXB0OworKyAgdm9pZCBwcmV0dHlw cmludF9qc29uX3N0ZG91dCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIHZvaWQgcHJpbnRfZGVwcmVj YXRpb25fd2FybmluZ3MgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB2b2lkIHByaW50X2V4cGVyaW1l bnRhbF9ub3RpY2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBzYW5pdHljaGVja19leHRl cm5hbHMgKCkgY29uc3Q7CisrICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0 ZXJGbGFncz4KKysgIGltcG9ydGVyX2ZsYWdzICg6OnJ1c3Q6OlN0ciBwa2dfbmFtZSkgY29uc3Qg bm9leGNlcHQ7CisrICA6OnJ1c3Q6OlN0cmluZyB3cml0ZV9yZXBvdmFycyAoOjpzdGQ6OmludDMy X3Qgd29ya2Rpcl9kZmRfcmF3KSBjb25zdDsKKysgIHZvaWQgc2V0X3JlbGVhc2V2ZXIgKDo6cnVz dDo6U3RyIHJlbGVhc2V2ZXIpOworKyAgdm9pZCBzZXRfcmVjb21tZW5kcyAoYm9vbCB2YWwpOwor KyAgdm9pZCBlbmFibGVfcmVwbyAoOjpydXN0OjpTdHIgcmVwbyk7CisrICB2b2lkIGRpc2FibGVf cmVwbyAoOjpydXN0OjpTdHIgcmVwbyk7CisrICB2b2lkIHZhbGlkYXRlX2Zvcl9jb250YWluZXIg KCkgY29uc3Q7CisrICA6OnJwbW9zdHJlZWN4eDo6UmVmc3BlYyBnZXRfYmFzZV9yZWZzcGVjICgp IGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCByZWJhc2UgKDo6cnVzdDo6U3RyIG5ld19yZWZzcGVj LCA6OnJ1c3Q6OlN0ciBjdXN0b21fb3JpZ2luX3VybCwKKysgICAgICAgICAgICAgICA6OnJ1c3Q6 OlN0ciBjdXN0b21fb3JpZ2luX2Rlc2NyaXB0aW9uKSBub2V4Y2VwdDsKKysgIDo6cnVzdDo6U3Ry aW5nIGdldF9vcmlnaW5fY3VzdG9tX3VybCAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6 U3RyaW5nIGdldF9vcmlnaW5fY3VzdG9tX2Rlc2NyaXB0aW9uICgpIGNvbnN0IG5vZXhjZXB0Owor KyAgOjpydXN0OjpTdHJpbmcgZ2V0X292ZXJyaWRlX2NvbW1pdCAoKSBjb25zdCBub2V4Y2VwdDsK KysgIHZvaWQgc2V0X292ZXJyaWRlX2NvbW1pdCAoOjpydXN0OjpTdHIgY2hlY2tzdW0pIG5vZXhj ZXB0OworKyAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9pbml0cmFtZnNfZXRjX2Zp bGVzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBoYXNfaW5pdHJhbWZzX2V0Y19maWxlcyAo KSBjb25zdCBub2V4Y2VwdDsKKysgIGJvb2wgaW5pdHJhbWZzX2V0Y19maWxlc190cmFjayAoOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGZpbGVzKSBub2V4Y2VwdDsKKysgIGJvb2wgaW5pdHJh bWZzX2V0Y19maWxlc191bnRyYWNrICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZmlsZXMp IG5vZXhjZXB0OworKyAgYm9vbCBpbml0cmFtZnNfZXRjX2ZpbGVzX3VudHJhY2tfYWxsICgpIG5v ZXhjZXB0OworKyAgYm9vbCBnZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKCkgY29uc3Qgbm9leGNl cHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2luaXRyYW1mc19hcmdzICgp IGNvbnN0IG5vZXhjZXB0OworKyAgdm9pZCBzZXRfaW5pdHJhbWZzX3JlZ2VuZXJhdGUgKGJvb2wg ZW5hYmxlZCwgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpIG5vZXhjZXB0OworKyAg OjpydXN0OjpTdHJpbmcgZ2V0X3VuY29uZmlndXJlZF9zdGF0ZSAoKSBjb25zdCBub2V4Y2VwdDsK KysgIGJvb2wgbWF5X3JlcXVpcmVfbG9jYWxfYXNzZW1ibHkgKCkgY29uc3Qgbm9leGNlcHQ7Cisr ICBib29sIGhhc19hbnlfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIG1lcmdl X3RyZWVmaWxlICg6OnJ1c3Q6OlN0ciB0cmVlZmlsZSk7CisrICBib29sIGdldF9ub19pbml0cmFt ZnMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB+VHJlZWZpbGUgKCkgPSBkZWxldGU7CisgCisgcHJp dmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQgeworLSAg ICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7CisrICAg IHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRpYyA6OnN0 ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAvLyBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkVHJlZWZpbGUKKyAKKyAjaWZuZGVmIENYWEJSSURH RTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRSZXBvUGFja2FnZQorICNkZWZpbmUgQ1hYQlJJREdFMV9T VFJVQ1RfcnBtb3N0cmVlY3h4JFJlcG9QYWNrYWdlCistc3RydWN0IFJlcG9QYWNrYWdlIGZpbmFs IDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIDo6cnVzdDo6U3RyIGdldF9yZXBvKCkgY29u c3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3BhY2thZ2Vz KCkgY29uc3Qgbm9leGNlcHQ7CistICB+UmVwb1BhY2thZ2UoKSA9IGRlbGV0ZTsKKytzdHJ1Y3Qg UmVwb1BhY2thZ2UgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7CisrICA6OnJ1c3Q6 OlN0ciBnZXRfcmVwbyAoKSBjb25zdCBub2V4Y2VwdDsKKysgIDo6cnVzdDo6VmVjPDo6cnVzdDo6 U3RyaW5nPiBnZXRfcGFja2FnZXMgKCkgY29uc3Qgbm9leGNlcHQ7CisrICB+UmVwb1BhY2thZ2Ug KCkgPSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0g IHN0cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNl cHQ7CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1 Y3QgbGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNl cHQ7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsK KyB9OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUmVwb1BhY2th Z2UKK0BAIC0xNTE3LDcgKzE2OTQsOCBAQCBzdHJ1Y3QgUmVwb1BhY2thZ2UgZmluYWwgOiBwdWJs aWMgOjpydXN0OjpPcGFxdWUgeworIC8vIEEgY29weSBvZiBMaXZlRnNTdGF0ZSB0aGF0IGlzIGJy aWRnZWQgdG8gQysrOyB0aGUgbWFpbgorIC8vIGNoYW5nZSBoZXJlIGlzIHdlIGNhbid0IHVzZSBP cHRpb248PiB5ZXQsIHNvIGVtcHR5IHZhbHVlcworIC8vIGFyZSByZXByZXNlbnRlZCBieSB0aGUg ZW1wdHkgc3RyaW5nLgorLXN0cnVjdCBMaXZlQXBwbHlTdGF0ZSBmaW5hbCB7Cisrc3RydWN0IExp dmVBcHBseVN0YXRlIGZpbmFsCisreworICAgOjpydXN0OjpTdHJpbmcgaW5wcm9ncmVzczsKKyAg IDo6cnVzdDo6U3RyaW5nIGNvbW1pdDsKKyAKK0BAIC0xNTI3LDY0ICsxNzA1LDcyIEBAIHN0cnVj dCBMaXZlQXBwbHlTdGF0ZSBmaW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9y cG1vc3RyZWVjeHgkUGFzc3dkREIKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJl ZWN4eCRQYXNzd2REQgorLXN0cnVjdCBQYXNzd2REQiBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9w YXF1ZSB7CistICA6OnJ1c3Q6OlN0cmluZyBsb29rdXBfdXNlcig6OnN0ZDo6dWludDMyX3QgdWlk KSBjb25zdDsKKy0gIDo6cnVzdDo6U3RyaW5nIGxvb2t1cF9ncm91cCg6OnN0ZDo6dWludDMyX3Qg Z2lkKSBjb25zdDsKKy0gIH5QYXNzd2REQigpID0gZGVsZXRlOworK3N0cnVjdCBQYXNzd2REQiBm aW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9wYXF1ZQorK3sKKysgIDo6cnVzdDo6U3RyaW5nIGxvb2t1 cF91c2VyICg6OnN0ZDo6dWludDMyX3QgdWlkKSBjb25zdDsKKysgIDo6cnVzdDo6U3RyaW5nIGxv b2t1cF9ncm91cCAoOjpzdGQ6OnVpbnQzMl90IGdpZCkgY29uc3Q7CisrICB+UGFzc3dkREIgKCkg PSBkZWxldGU7CisgCisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0 cnVjdCBsYXlvdXQgeworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7 CistICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3Qg bGF5b3V0CisrICB7CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7 CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9 OworICNlbmRpZiAvLyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkREIKKyAK KyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRQYXNzd2RFbnRyaWVzCisg I2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkUGFzc3dkRW50cmllcworLXN0 cnVjdCBQYXNzd2RFbnRyaWVzIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0gIHZv aWQgYWRkX2dyb3VwX2NvbnRlbnQoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBw YXRoKTsKKy0gIHZvaWQgYWRkX3Bhc3N3ZF9jb250ZW50KDo6c3RkOjppbnQzMl90IHJvb3Rmcywg OjpydXN0OjpTdHIgcGF0aCk7CistICBib29sIGNvbnRhaW5zX2dyb3VwKDo6cnVzdDo6U3RyIHVz ZXIpIGNvbnN0IG5vZXhjZXB0OworLSAgYm9vbCBjb250YWluc191c2VyKDo6cnVzdDo6U3RyIHVz ZXIpIGNvbnN0IG5vZXhjZXB0OworLSAgOjpzdGQ6OnVpbnQzMl90IGxvb2t1cF91c2VyX2lkKDo6 cnVzdDo6U3RyIHVzZXIpIGNvbnN0OworLSAgOjpzdGQ6OnVpbnQzMl90IGxvb2t1cF9ncm91cF9p ZCg6OnJ1c3Q6OlN0ciBncm91cCkgY29uc3Q7CistICB+UGFzc3dkRW50cmllcygpID0gZGVsZXRl OworK3N0cnVjdCBQYXNzd2RFbnRyaWVzIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisr eworKyAgdm9pZCBhZGRfZ3JvdXBfY29udGVudCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1 c3Q6OlN0ciBwYXRoKTsKKysgIHZvaWQgYWRkX3Bhc3N3ZF9jb250ZW50ICg6OnN0ZDo6aW50MzJf dCByb290ZnMsIDo6cnVzdDo6U3RyIHBhdGgpOworKyAgYm9vbCBjb250YWluc19ncm91cCAoOjpy dXN0OjpTdHIgdXNlcikgY29uc3Qgbm9leGNlcHQ7CisrICBib29sIGNvbnRhaW5zX3VzZXIgKDo6 cnVzdDo6U3RyIHVzZXIpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpzdGQ6OnVpbnQzMl90IGxvb2t1 cF91c2VyX2lkICg6OnJ1c3Q6OlN0ciB1c2VyKSBjb25zdDsKKysgIDo6c3RkOjp1aW50MzJfdCBs b29rdXBfZ3JvdXBfaWQgKDo6cnVzdDo6U3RyIGdyb3VwKSBjb25zdDsKKysgIH5QYXNzd2RFbnRy aWVzICgpID0gZGVsZXRlOworIAorIHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7 CistICBzdHJ1Y3QgbGF5b3V0IHsKKy0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5v ZXhjZXB0OworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAg c3RydWN0IGxheW91dAorKyAgeworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5v ZXhjZXB0OworKyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAg IH07CisgfTsKKyAjZW5kaWYgLy8gQ1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JFBhc3N3 ZEVudHJpZXMKKyAKKyAjaWZuZGVmIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRFeHRl bnNpb25zCisgI2RlZmluZSBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkRXh0ZW5zaW9u cworLXN0cnVjdCBFeHRlbnNpb25zIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlIHsKKy0g IDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfcmVwb3MoKSBjb25zdCBub2V4Y2VwdDsK Ky0gIDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBnZXRfb3NfZXh0ZW5zaW9uX3BhY2thZ2Vz KCkgY29uc3Qgbm9leGNlcHQ7CistICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2Rl dmVsb3BtZW50X3BhY2thZ2VzKCkgY29uc3Qgbm9leGNlcHQ7CistICBib29sIHN0YXRlX2NoZWNr c3VtX2NoYW5nZWQoOjpydXN0OjpTdHIgY2hrc3VtLCA6OnJ1c3Q6OlN0ciBvdXRwdXRfZGlyKSBj b25zdDsKKy0gIHZvaWQgdXBkYXRlX3N0YXRlX2NoZWNrc3VtKDo6cnVzdDo6U3RyIGNoa3N1bSwg OjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7CistICB2b2lkIHNlcmlhbGl6ZV90b19kaXIo OjpydXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7CistICA6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGU+IGdlbmVyYXRlX3RyZWVmaWxlKDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZSBjb25zdCAmc3JjKSBjb25zdDsKKy0gIH5FeHRlbnNpb25zKCkgPSBkZWxldGU7Cisrc3RydWN0 IEV4dGVuc2lvbnMgZmluYWwgOiBwdWJsaWMgOjpydXN0OjpPcGFxdWUKKyt7CisrICA6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9zICgpIGNvbnN0IG5vZXhjZXB0OworKyAgOjpy dXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9vc19leHRlbnNpb25fcGFja2FnZXMgKCkgY29u c3Qgbm9leGNlcHQ7CisrICA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2RldmVsb3Bt ZW50X3BhY2thZ2VzICgpIGNvbnN0IG5vZXhjZXB0OworKyAgYm9vbCBzdGF0ZV9jaGVja3N1bV9j aGFuZ2VkICg6OnJ1c3Q6OlN0ciBjaGtzdW0sIDo6cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0 OworKyAgdm9pZCB1cGRhdGVfc3RhdGVfY2hlY2tzdW0gKDo6cnVzdDo6U3RyIGNoa3N1bSwgOjpy dXN0OjpTdHIgb3V0cHV0X2RpcikgY29uc3Q7CisrICB2b2lkIHNlcmlhbGl6ZV90b19kaXIgKDo6 cnVzdDo6U3RyIG91dHB1dF9kaXIpIGNvbnN0OworKyAgOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlPgorKyAgZ2VuZXJhdGVfdHJlZWZpbGUgKDo6cnBtb3N0cmVlY3h4OjpUcmVl ZmlsZSBjb25zdCAmc3JjKSBjb25zdDsKKysgIH5FeHRlbnNpb25zICgpID0gZGVsZXRlOworIAor IHByaXZhdGU6CisgICBmcmllbmQgOjpydXN0OjpsYXlvdXQ7CistICBzdHJ1Y3QgbGF5b3V0IHsK Ky0gICAgc3RhdGljIDo6c3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0OworLSAgICBzdGF0aWMg OjpzdGQ6OnNpemVfdCBhbGlnbigpIG5vZXhjZXB0OworKyAgc3RydWN0IGxheW91dAorKyAgewor KyAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplICgpIG5vZXhjZXB0OworKyAgICBzdGF0aWMg OjpzdGQ6OnNpemVfdCBhbGlnbiAoKSBub2V4Y2VwdDsKKyAgIH07CisgfTsKKyAjZW5kaWYgLy8g Q1hYQlJJREdFMV9TVFJVQ1RfcnBtb3N0cmVlY3h4JEV4dGVuc2lvbnMKKyAKKyAjaWZuZGVmIENY WEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZWRQYWNrYWdlCisgI2RlZmluZSBDWFhC UklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2VkUGFja2FnZQorLXN0cnVjdCBMb2NrZWRQ YWNrYWdlIGZpbmFsIHsKKytzdHJ1Y3QgTG9ja2VkUGFja2FnZSBmaW5hbAorK3sKKyAgIDo6cnVz dDo6U3RyaW5nIG5hbWU7CisgICA6OnJ1c3Q6OlN0cmluZyBldnI7CisgICA6OnJ1c3Q6OlN0cmlu ZyBhcmNoOworQEAgLTE1OTYsMjkyICsxNzgyLDM2NyBAQCBzdHJ1Y3QgTG9ja2VkUGFja2FnZSBm aW5hbCB7CisgCisgI2lmbmRlZiBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2Zp bGVDb25maWcKKyAjZGVmaW5lIENYWEJSSURHRTFfU1RSVUNUX3JwbW9zdHJlZWN4eCRMb2NrZmls ZUNvbmZpZworLXN0cnVjdCBMb2NrZmlsZUNvbmZpZyBmaW5hbCA6IHB1YmxpYyA6OnJ1c3Q6Ok9w YXF1ZSB7CistICA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6TG9ja2VkUGFja2FnZT4gZ2V0 X2xvY2tlZF9wYWNrYWdlcygpIGNvbnN0OworLSAgfkxvY2tmaWxlQ29uZmlnKCkgPSBkZWxldGU7 Cisrc3RydWN0IExvY2tmaWxlQ29uZmlnIGZpbmFsIDogcHVibGljIDo6cnVzdDo6T3BhcXVlCisr eworKyAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OkxvY2tlZFBhY2thZ2U+IGdldF9sb2Nr ZWRfcGFja2FnZXMgKCkgY29uc3Q7CisrICB+TG9ja2ZpbGVDb25maWcgKCkgPSBkZWxldGU7Cisg CisgcHJpdmF0ZToKKyAgIGZyaWVuZCA6OnJ1c3Q6OmxheW91dDsKKy0gIHN0cnVjdCBsYXlvdXQg eworLSAgICBzdGF0aWMgOjpzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNlcHQ7CistICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduKCkgbm9leGNlcHQ7CisrICBzdHJ1Y3QgbGF5b3V0CisrICB7 CisrICAgIHN0YXRpYyA6OnN0ZDo6c2l6ZV90IHNpemUgKCkgbm9leGNlcHQ7CisrICAgIHN0YXRp YyA6OnN0ZDo6c2l6ZV90IGFsaWduICgpIG5vZXhjZXB0OworICAgfTsKKyB9OworICNlbmRpZiAv LyBDWFhCUklER0UxX1NUUlVDVF9ycG1vc3RyZWVjeHgkTG9ja2ZpbGVDb25maWcKKyAKKy1zdGF0 aWNfYXNzZXJ0KDo6c3RkOjppc19lbnVtPFJwbU9zdHJlZURpZmZQcmludEZvcm1hdD46OnZhbHVl LCAiZXhwZWN0ZWQgZW51bSIpOworLXN0YXRpY19hc3NlcnQoc2l6ZW9mKFJwbU9zdHJlZURpZmZQ cmludEZvcm1hdCkgPT0gc2l6ZW9mKDo6c3RkOjp1aW50OF90KSwgImluY29ycmVjdCBzaXplIik7 Cistc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4oUnBtT3N0cmVlRGlm ZlByaW50Rm9ybWF0OjpSUE1PU1RSRUVfRElGRl9QUklOVF9GT1JNQVRfU1VNTUFSWSkgPT0gMCwg ImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOworLXN0YXRpY19h c3NlcnQoc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+KFJwbU9zdHJlZURpZmZQcmludEZvcm1h dDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfQUxJR05FRCkgPT0gMSwgImRpc2Fn cmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdlXSIpOworLXN0YXRpY19hc3NlcnQo c3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+KFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBN T1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZVTExfTVVMVElMSU5FKSA9PSAyLCAiZGlzYWdyZWVz IHdpdGggdGhlIHZhbHVlIGluICNbY3h4OjpicmlkZ2VdIik7Cisrc3RhdGljX2Fzc2VydCAoOjpz dGQ6OmlzX2VudW08UnBtT3N0cmVlRGlmZlByaW50Rm9ybWF0Pjo6dmFsdWUsICJleHBlY3RlZCBl bnVtIik7Cisrc3RhdGljX2Fzc2VydCAoc2l6ZW9mIChScG1Pc3RyZWVEaWZmUHJpbnRGb3JtYXQp ID09IHNpemVvZiAoOjpzdGQ6OnVpbnQ4X3QpLCAiaW5jb3JyZWN0IHNpemUiKTsKKytzdGF0aWNf YXNzZXJ0ICgKKysgICAgc3RhdGljX2Nhc3Q8OjpzdGQ6OnVpbnQ4X3Q+IChScG1Pc3RyZWVEaWZm UHJpbnRGb3JtYXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZPUk1BVF9TVU1NQVJZKQorKyAgICAg ICAgPT0gMCwKKysgICAgImRpc2FncmVlcyB3aXRoIHRoZSB2YWx1ZSBpbiAjW2N4eDo6YnJpZGdl XSIpOworK3N0YXRpY19hc3NlcnQgKAorKyAgICBzdGF0aWNfY2FzdDw6OnN0ZDo6dWludDhfdD4g KFJwbU9zdHJlZURpZmZQcmludEZvcm1hdDo6UlBNT1NUUkVFX0RJRkZfUFJJTlRfRk9STUFUX0ZV TExfQUxJR05FRCkKKysgICAgICAgID09IDEsCisrICAgICJkaXNhZ3JlZXMgd2l0aCB0aGUgdmFs dWUgaW4gI1tjeHg6OmJyaWRnZV0iKTsKKytzdGF0aWNfYXNzZXJ0IChzdGF0aWNfY2FzdDw6OnN0 ZDo6dWludDhfdD4gKAorKyAgICAgICAgICAgICAgICAgICBScG1Pc3RyZWVEaWZmUHJpbnRGb3Jt YXQ6OlJQTU9TVFJFRV9ESUZGX1BSSU5UX0ZPUk1BVF9GVUxMX01VTFRJTElORSkKKysgICAgICAg ICAgICAgICAgICAgPT0gMiwKKysgICAgICAgICAgICAgICAiZGlzYWdyZWVzIHdpdGggdGhlIHZh bHVlIGluICNbY3h4OjpicmlkZ2VdIik7CisrCisrYm9vbCBpc19iYXJlX3NwbGl0X3hhdHRycyAo KTsKKyAKKy1ib29sIGlzX2JhcmVfc3BsaXRfeGF0dHJzKCk7CisrYm9vbCBpc19odHRwX2FyZyAo OjpydXN0OjpTdHIgYXJnKSBub2V4Y2VwdDsKKyAKKy1ib29sIGlzX2h0dHBfYXJnKDo6cnVzdDo6 U3RyIGFyZykgbm9leGNlcHQ7CisrYm9vbCBpc19vc3RyZWVfY29udGFpbmVyICgpOworIAorLWJv b2wgaXNfb3N0cmVlX2NvbnRhaW5lcigpOworKzo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlw ZSBnZXRfc3lzdGVtX2hvc3RfdHlwZSAoKTsKKyAKKy06OnJwbW9zdHJlZWN4eDo6U3lzdGVtSG9z dFR5cGUgZ2V0X3N5c3RlbV9ob3N0X3R5cGUoKTsKKyt2b2lkIHJlcXVpcmVfc3lzdGVtX2hvc3Rf dHlwZSAoOjpycG1vc3RyZWVjeHg6OlN5c3RlbUhvc3RUeXBlIHQpOworIAorLXZvaWQgcmVxdWly ZV9zeXN0ZW1faG9zdF90eXBlKDo6cnBtb3N0cmVlY3h4OjpTeXN0ZW1Ib3N0VHlwZSB0KTsKKyti b29sIGlzX3JwbV9hcmcgKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7CisgCistYm9vbCBpc19y cG1fYXJnKDo6cnVzdDo6U3RyIGFyZykgbm9leGNlcHQ7Cisrdm9pZCBjbGllbnRfc3RhcnRfZGFl bW9uICgpOworIAorLXZvaWQgY2xpZW50X3N0YXJ0X2RhZW1vbigpOworKzo6cnVzdDo6VmVjPDo6 c3RkOjppbnQzMl90PiBjbGllbnRfaGFuZGxlX2ZkX2FyZ3VtZW50ICg6OnJ1c3Q6OlN0ciBhcmcs IDo6cnVzdDo6U3RyIGFyY2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcmVwbGFjZSk7CisgCistOjpydXN0OjpWZWM8Ojpz dGQ6OmludDMyX3Q+IGNsaWVudF9oYW5kbGVfZmRfYXJndW1lbnQoOjpydXN0OjpTdHIgYXJnLCA6 OnJ1c3Q6OlN0ciBhcmNoLCBib29sIGlzX3JlcGxhY2UpOworKzo6cnVzdDo6U3RyaW5nIGNsaWVu dF9yZW5kZXJfZG93bmxvYWRfcHJvZ3Jlc3MgKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudCBjb25z dCAmcHJvZ3Jlc3MpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6U3RyaW5nIGNsaWVudF9yZW5kZXJf ZG93bmxvYWRfcHJvZ3Jlc3MoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZwcm9ncmVz cykgbm9leGNlcHQ7CisrYm9vbCBydW5uaW5nX2luX2NvbnRhaW5lciAoKSBub2V4Y2VwdDsKKyAK Ky1ib29sIHJ1bm5pbmdfaW5fY29udGFpbmVyKCkgbm9leGNlcHQ7CisrYm9vbCBjb25maXJtICgp OworIAorLWJvb2wgY29uZmlybSgpOworK3ZvaWQgY29uZmlybV9vcl9hYm9ydCAoKTsKKyAKKy12 b2lkIGNvbmZpcm1fb3JfYWJvcnQoKTsKKyt2b2lkIGJ1YmJsZXdyYXBfc2VsZnRlc3QgKCk7Cisg Cistdm9pZCBidWJibGV3cmFwX3NlbGZ0ZXN0KCk7CisrOjpydXN0OjpWZWM8OjpzdGQ6OnVpbnQ4 X3Q+IGJ1YmJsZXdyYXBfcnVuX3N5bmMgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVj PDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYXB0dXJlX3N0ZG91dCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkJ1 YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpOworIAorLTo6cnVzdDo6VmVjPDo6c3RkOjp1 aW50OF90PiBidWJibGV3cmFwX3J1bl9zeW5jKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6 cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAmYXJncywgYm9vbCBjYXB0dXJlX3N0ZG91 dCwgOjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpOworKzo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwPiBidWJibGV3cmFwX25ldyAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzX2ZkKTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 QnViYmxld3JhcD4gYnViYmxld3JhcF9uZXcoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2ZkKTsKKys6 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4KKytidWJibGV3cmFwX25ld193 aXRoX211dGFiaWxpdHkgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19mZCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBt dXRhYmlsaXR5KTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6QnViYmxld3JhcD4g YnViYmxld3JhcF9uZXdfd2l0aF9tdXRhYmlsaXR5KDo6c3RkOjppbnQzMl90IHJvb3Rmc19mZCwg OjpycG1vc3RyZWVjeHg6OkJ1YmJsZXdyYXBNdXRhYmlsaXR5IG11dGFiaWxpdHkpOworKzo6cnBt b3N0cmVlY3h4OjpCdWJibGV3cmFwTXV0YWJpbGl0eSBtdXRhYmlsaXR5X2Zvcl91bmlmaWVkX2Nv cmUgKGJvb2wgdW5pZmllZF9jb3JlKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6QnVi Ymxld3JhcE11dGFiaWxpdHkgbXV0YWJpbGl0eV9mb3JfdW5pZmllZF9jb3JlKGJvb2wgdW5pZmll ZF9jb3JlKSBub2V4Y2VwdDsKKyt2b2lkIHVzcm92ZXJsYXlfZW50cnlwb2ludCAoOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKTsKKyAKKy12b2lkIHVzcm92ZXJsYXlfZW50 cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFyZ3MpOworK3ZvaWQg YXBwbHlsaXZlX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBjb25zdCAm YXJncyk7CisgCistdm9pZCBhcHBseWxpdmVfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6 OlN0cmluZz4gY29uc3QgJmFyZ3MpOworK3ZvaWQgYXBwbHlsaXZlX2ZpbmlzaCAoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpOworIAorLXZvaWQgYXBwbHlsaXZl X2ZpbmlzaCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCk7Cisr dm9pZCBjb21wb3NldXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5kX3J1biAoOjpzdGQ6OmludDMyX3Qg cm9vdGZzX2RmZCk7CisgCistdm9pZCBjb21wb3NldXRpbF9sZWdhY3lfcHJlcF9kZXZfYW5kX3J1 big6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKTsKKyt2b2lkIHByaW50X29zdHJlZV90eG5fc3Rh dHMgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvVHJhbnNhY3Rpb25TdGF0cyAmc3RhdHMpIG5v ZXhjZXB0OworIAorLXZvaWQgcHJpbnRfb3N0cmVlX3R4bl9zdGF0cyg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlUmVwb1RyYW5zYWN0aW9uU3RhdHMgJnN0YXRzKSBub2V4Y2VwdDsKKyt2b2lkIHdyaXRl X2NvbW1pdF9pZCAoOjpydXN0OjpTdHIgdGFyZ2V0X3BhdGgsIDo6cnVzdDo6U3RyIHJldmlzaW9u KTsKKyAKKy12b2lkIHdyaXRlX2NvbW1pdF9pZCg6OnJ1c3Q6OlN0ciB0YXJnZXRfcGF0aCwgOjpy dXN0OjpTdHIgcmV2aXNpb24pOworK3ZvaWQgY2xpd3JhcF93cml0ZV93cmFwcGVycyAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzKTsKKyAKKy12b2lkIGNsaXdyYXBfd3JpdGVfd3JhcHBlcnMoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzKTsKKyt2b2lkIGNsaXdyYXBfd3JpdGVfc29tZV93cmFwcGVycyAoOjpz dGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmFy Z3MpOworIAorLXZvaWQgY2xpd3JhcF93cml0ZV9zb21lX3dyYXBwZXJzKDo6c3RkOjppbnQzMl90 IHJvb3RmcywgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZhcmdzKTsKKys6OnJ1 c3Q6OlN0cmluZyBjbGl3cmFwX2Rlc3RkaXIgKCkgbm9leGNlcHQ7CisgCistOjpydXN0OjpTdHJp bmcgY2xpd3JhcF9kZXN0ZGlyKCkgbm9leGNlcHQ7Cisrdm9pZCBjb250YWluZXJfZW5jYXBzdWxh dGUgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsKKyAKKy12b2lkIGNvbnRhaW5l cl9lbmNhcHN1bGF0ZSg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7Cisrdm9pZCBk ZXBsb3lfZnJvbV9zZWxmX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBh cmdzKTsKKyAKKy12b2lkIGRlcGxveV9mcm9tX3NlbGZfZW50cnlwb2ludCg6OnJ1c3Q6OlZlYzw6 OnJ1c3Q6OlN0cmluZz4gYXJncyk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OkNvbnRh aW5lckltYWdlU3RhdGU+CisrcHVsbF9jb250YWluZXIgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVS ZXBvIGNvbnN0ICZyZXBvLAorKyAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNl bGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpydXN0OjpTdHIgaW1ncmVmLAorKyAgICAgICAg ICAgICAgICA6OnJ1c3Q6OlN0ciBkaWdlc3Rfb3ZlcnJpZGUpOworIAorLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPiBwdWxsX2NvbnRhaW5lcig6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxs YWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZiwgOjpydXN0OjpTdHIg ZGlnZXN0X292ZXJyaWRlKTsKKys6OnJwbW9zdHJlZWN4eDo6UHJ1bmVkQ29udGFpbmVySW5mbyBj b250YWluZXJfcHJ1bmUgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNy b290KTsKKyAKKy06OnJwbW9zdHJlZWN4eDo6UHJ1bmVkQ29udGFpbmVySW5mbyBjb250YWluZXJf cHJ1bmUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QpOworKzo6 cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpDb250YWluZXJJbWFnZVN0YXRlPgorK3F1ZXJ5X2Nv bnRhaW5lcl9pbWFnZV9jb21taXQgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJ1c3Q6OlN0ciBjKTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6Q29u dGFpbmVySW1hZ2VTdGF0ZT4gcXVlcnlfY29udGFpbmVyX2ltYWdlX2NvbW1pdCg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgYyk7Cisrdm9pZCBwdXJn ZV9yZWZzcGVjICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0 OjpTdHIgcmVmc3BlYyk7CisgCistdm9pZCBwdXJnZV9yZWZzcGVjKDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciByZWZzcGVjKTsKKytib29sIGNoZWNr X2NvbnRhaW5lcl91cGRhdGUgKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBv LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxs YWJsZSBjb25zdCAmY2FuY2VsbGFibGUsIDo6cnVzdDo6U3RyIGltZ3JlZik7CisgCistYm9vbCBj aGVja19jb250YWluZXJfdXBkYXRlKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZy ZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSwgOjpy dXN0OjpTdHIgaW1ncmVmKTsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VGVtcEV0Y0d1 YXJkPiBwcmVwYXJlX3RlbXBldGNfZ3VhcmQgKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7CisgCist OjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRlbXBFdGNHdWFyZD4gcHJlcGFyZV90ZW1wZXRj X2d1YXJkKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVj eHg6OkZpbGVzeXN0ZW1TY3JpcHRQcmVwPgorK3ByZXBhcmVfZmlsZXN5c3RlbV9zY3JpcHRfcHJl cCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4 eDo6RmlsZXN5c3RlbVNjcmlwdFByZXA+IHByZXBhcmVfZmlsZXN5c3RlbV9zY3JpcHRfcHJlcCg6 OnN0ZDo6aW50MzJfdCByb290ZnMpOworK3ZvaWQgcnVuX2RlcG1vZCAoOjpzdGQ6OmludDMyX3Qg cm9vdGZzX2RmZCwgOjpydXN0OjpTdHIga3ZlciwgYm9vbCB1bmlmaWVkX2NvcmUpOworIAorLXZv aWQgcnVuX2RlcG1vZCg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJ1c3Q6OlN0ciBrdmVy LCBib29sIHVuaWZpZWRfY29yZSk7Cisrdm9pZCBydW5fc3lzdXNlcnMgKDo6c3RkOjppbnQzMl90 IHJvb3Rmc19kZmQsIGJvb2wgZm9yY2UpOworIAorLXZvaWQgcnVuX3N5c3VzZXJzKDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgZm9yY2UpOworK3ZvaWQgbG9nX3RyZWVmaWxlICg6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKSBub2V4Y2VwdDsKKyAKKy12b2lkIGxvZ190 cmVlZmlsZSg6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKSBub2V4Y2VwdDsKKyti b29sIGlzX2NvbnRhaW5lcl9pbWFnZV9yZWZlcmVuY2UgKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5v ZXhjZXB0OworIAorLWJvb2wgaXNfY29udGFpbmVyX2ltYWdlX3JlZmVyZW5jZSg6OnJ1c3Q6OlN0 ciByZWZzcGVjKSBub2V4Y2VwdDsKKytib29sIGlzX2NvbnRhaW5lcl9pbWFnZV9kaWdlc3RfcmVm ZXJlbmNlICg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKKyAKKy1ib29sIGlzX2NvbnRh aW5lcl9pbWFnZV9kaWdlc3RfcmVmZXJlbmNlKDo6cnVzdDo6U3RyIHJlZnNwZWMpIG5vZXhjZXB0 OworKzo6cnBtb3N0cmVlY3h4OjpSZWZzcGVjVHlwZSByZWZzcGVjX2NsYXNzaWZ5ICg6OnJ1c3Q6 OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6UmVmc3BlY1R5cGUg cmVmc3BlY19jbGFzc2lmeSg6OnJ1c3Q6OlN0ciByZWZzcGVjKSBub2V4Y2VwdDsKKyt2b2lkIHZl cmlmeV9rZXJuZWxfaG1hYyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlN0ciBtb2Rk aXIpOworIAorLXZvaWQgdmVyaWZ5X2tlcm5lbF9obWFjKDo6c3RkOjppbnQzMl90IHJvb3Rmcywg OjpydXN0OjpTdHIgbW9kZGlyKTsKKys6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gc3RhZ2Vf Y29udGFpbmVyX3JwbXMgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBycG1zKTsKKyAKKy06 OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gc3RhZ2VfY29udGFpbmVyX3JwbXMoOjpydXN0OjpW ZWM8OjpydXN0OjpTdHJpbmc+IHJwbXMpOworKzo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBz dGFnZV9jb250YWluZXJfcnBtX3Jhd19mZHMgKDo6cnVzdDo6VmVjPDo6c3RkOjppbnQzMl90PiBm ZHMpOworIAorLTo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBzdGFnZV9jb250YWluZXJfcnBt X3Jhd19mZHMoOjpydXN0OjpWZWM8OjpzdGQ6OmludDMyX3Q+IGZkcyk7CisrYm9vbCBjb21taXRf aGFzX21hdGNoaW5nX3NlcG9saWN5ICg6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNv bW1pdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVTZVBvbGljeSBjb25zdCAmcG9saWN5KTsKKyAKKy1ib29sIGNvbW1pdF9oYXNfbWF0 Y2hpbmdfc2Vwb2xpY3koOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0ICZjb21taXQsIDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVTZVBvbGljeSBjb25zdCAmcG9saWN5KTsKKys6OnJwbW9zdHJl ZWN4eDo6R1ZhcmlhbnQgKmdldF9oZWFkZXJfdmFyaWFudCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6cnVzdDo6U3RyIGNhY2hlYnJhbmNoKTsKKyAKKy06OnJwbW9zdHJlZWN4eDo6 R1ZhcmlhbnQgKmdldF9oZWFkZXJfdmFyaWFudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBj b25zdCAmcmVwbywgOjpydXN0OjpTdHIgY2FjaGVicmFuY2gpOworK3ZvaWQgY29tcG9zZV9idWls ZF9jaHVua2VkX29jaV9lbnRyeXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJn cyk7CisgCistdm9pZCBjb21wb3NlX2J1aWxkX2NodW5rZWRfb2NpX2VudHJ5cG9pbnQoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpOworK3ZvaWQgY29tcG9zZV9pbWFnZSAoOjpydXN0 OjpWZWM8OjpydXN0OjpTdHJpbmc+IGFyZ3MpOworIAorLXZvaWQgY29tcG9zZV9pbWFnZSg6OnJ1 c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7Cisrdm9pZCBjb21wb3NlX3Jvb3Rmc19lbnRy eXBvaW50ICg6OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gYXJncyk7CisgCistdm9pZCBjb21w b3NlX3Jvb3Rmc19lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6cnVzdDo6U3RyaW5nPiBhcmdzKTsK Kyt2b2lkIGNvbmZpZ3VyZV9idWlsZF9yZXBvX2Zyb21fdGFyZ2V0ICg6OnJwbW9zdHJlZWN4eDo6 T3N0cmVlUmVwbyBjb25zdCAmYnVpbGRfcmVwbywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmdGFyZ2V0X3Jl cG8pOworIAorLXZvaWQgY29uZmlndXJlX2J1aWxkX3JlcG9fZnJvbV90YXJnZXQoOjpycG1vc3Ry ZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJmJ1aWxkX3JlcG8sIDo6cnBtb3N0cmVlY3h4OjpPc3Ry ZWVSZXBvIGNvbnN0ICZ0YXJnZXRfcmVwbyk7Cisrdm9pZCBjb21wb3NlX3ByZXBhcmVfcm9vdGZz ICg6OnN0ZDo6aW50MzJfdCBzcmNfcm9vdGZzX2RmZCwgOjpzdGQ6OmludDMyX3QgZGVzdF9yb290 ZnNfZGZkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlICZ0cmVlZmlsZSk7CisgCistdm9pZCBjb21wb3NlX3ByZXBhcmVfcm9vdGZzKDo6c3Rk OjppbnQzMl90IHNyY19yb290ZnNfZGZkLCA6OnN0ZDo6aW50MzJfdCBkZXN0X3Jvb3Rmc19kZmQs IDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUpOworK3ZvaWQgY29tcG9zZXBvc3Rf bnNzd2l0Y2hfYWx0ZmlsZXMgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQpOworIAorLXZvaWQg Y29tcG9zZXBvc3RfbnNzd2l0Y2hfYWx0ZmlsZXMoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCk7 Cisrdm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpTdHIgbmV4dF92ZXJzaW9uLCBib29sIHVuaWZpZWRfY29yZSk7CisgCist dm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIDo6cnBt b3N0cmVlY3h4OjpUcmVlZmlsZSAmdHJlZWZpbGUsIDo6cnVzdDo6U3RyIG5leHRfdmVyc2lvbiwg Ym9vbCB1bmlmaWVkX2NvcmUpOworK3ZvaWQgY29tcG9zZV9wb3N0cHJvY2Vzc19maW5hbF9wcmUg KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSk7CisgCist dm9pZCBjb21wb3NlX3Bvc3Rwcm9jZXNzX2ZpbmFsX3ByZSg6OnN0ZDo6aW50MzJfdCByb290ZnNf ZGZkLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRyZWVmaWxlKTsKKyt2b2lkIGNv bXBvc2VfcG9zdHByb2Nlc3NfZmluYWwgKDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29u c3QgJnRyZWVmaWxlKTsKKyAKKy12b2lkIGNvbXBvc2VfcG9zdHByb2Nlc3NfZmluYWwoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVl ZmlsZSk7Cisrdm9pZCBjb252ZXJ0X3Zhcl90b190bXBmaWxlc19kICg6OnN0ZDo6aW50MzJfdCBy b290ZnNfZGZkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVj eHg6OkdDYW5jZWxsYWJsZSBjb25zdCAmY2FuY2VsbGFibGUpOworIAorLXZvaWQgY29udmVydF92 YXJfdG9fdG1wZmlsZXNfZCg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkLCA6OnJwbW9zdHJlZWN4 eDo6R0NhbmNlbGxhYmxlIGNvbnN0ICZjYW5jZWxsYWJsZSk7Cisrdm9pZCByb290ZnNfcHJlcGFy ZV9saW5rcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVm aWxlIGNvbnN0ICZ0cmVlZmlsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNr aXBfdXNybG9jYWwpOworIAorLXZvaWQgcm9vdGZzX3ByZXBhcmVfbGlua3MoOjpzdGQ6OmludDMy X3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNvbnN0ICZ0cmVlZmlsZSwg Ym9vbCBza2lwX3VzcmxvY2FsKTsKKyt2b2lkIHdvcmthcm91bmRfc2VsaW51eF9jcm9zc19sYWJl bGluZyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFi bGUpOworIAorLXZvaWQgd29ya2Fyb3VuZF9zZWxpbnV4X2Nyb3NzX2xhYmVsaW5nKDo6c3RkOjpp bnQzMl90IHJvb3Rmc19kZmQsIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2VsbGFibGUgJmNhbmNlbGxh YmxlKTsKKyt2b2lkIHBvc3Rwcm9jZXNzX2NsZWFudXBfcnBtZGIgKDo6c3RkOjppbnQzMl90IHJv b3Rmc19kZmQpOworIAorLXZvaWQgcG9zdHByb2Nlc3NfY2xlYW51cF9ycG1kYig6OnN0ZDo6aW50 MzJfdCByb290ZnNfZGZkKTsKKyt2b2lkIHJld3JpdGVfcnBtZGJfZm9yX3RhcmdldCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwgYm9vbCBub3JtYWxpemUpOworIAorLXZvaWQgcmV3cml0ZV9y cG1kYl9mb3JfdGFyZ2V0KDo6c3RkOjppbnQzMl90IHJvb3Rmc19kZmQsIGJvb2wgbm9ybWFsaXpl KTsKKys6OnN0ZDo6dWludDY0X3QgZGlyZWN0b3J5X3NpemUgKDo6c3RkOjppbnQzMl90IGRmZCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHQ2FuY2Vs bGFibGUgY29uc3QgJmNhbmNlbGxhYmxlKTsKKyAKKy06OnN0ZDo6dWludDY0X3QgZGlyZWN0b3J5 X3NpemUoOjpzdGQ6OmludDMyX3QgZGZkLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNv bnN0ICZjYW5jZWxsYWJsZSk7CisrOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1lbnQgKmRl cGxveW1lbnRfZm9yX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6 cnVzdDo6U3RyIGRlcGxveV9pZCk7CisgCistOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxveW1l bnQgKmRlcGxveW1lbnRfZm9yX2lkKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290ICZzeXNy b290LCA6OnJ1c3Q6OlN0ciBkZXBsb3lfaWQpOworKzo6cnVzdDo6U3RyaW5nIGRlcGxveW1lbnRf Y2hlY2tzdW1fZm9yX2lkICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpydXN0OjpTdHIg ZGVwbG95X2lkKTsKKyAKKy06OnJ1c3Q6OlN0cmluZyBkZXBsb3ltZW50X2NoZWNrc3VtX2Zvcl9p ZCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIgZGVw bG95X2lkKTsKKys6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqZGVwbG95bWVudF9n ZXRfYmFzZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgJnN5c3Jvb3QsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6 U3RyIG9wdF9kZXBsb3lfaWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIG9wdF9vc19uYW1lKTsKKyAKKy06OnJwbW9z dHJlZWN4eDo6T3N0cmVlRGVwbG95bWVudCAqZGVwbG95bWVudF9nZXRfYmFzZSg6OnJwbW9zdHJl ZWN4eDo6T3N0cmVlU3lzcm9vdCAmc3lzcm9vdCwgOjpydXN0OjpTdHIgb3B0X2RlcGxveV9pZCwg OjpydXN0OjpTdHIgb3B0X29zX25hbWUpOworK2Jvb2wgZGVwbG95bWVudF9hZGRfbWFuaWZlc3Rf ZGlmZiAoOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBjb25zdCAmZGljdCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpFeHBvcnRlZE1hbmlm ZXN0RGlmZiBjb25zdCAmZGlmZikgbm9leGNlcHQ7CisgCistYm9vbCBkZXBsb3ltZW50X2FkZF9t YW5pZmVzdF9kaWZmKDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRpY3QsIDo6 cnBtb3N0cmVlY3h4OjpFeHBvcnRlZE1hbmlmZXN0RGlmZiBjb25zdCAmZGlmZikgbm9leGNlcHQ7 Cisrdm9pZCBkYWVtb25fc2FuaXR5Y2hlY2tfZW52aXJvbm1lbnQgKDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KTsKKyAKKy12b2lkIGRhZW1vbl9zYW5pdHljaGVj a19lbnZpcm9ubWVudCg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9v dCk7CisrOjpydXN0OjpTdHJpbmcgZGVwbG95bWVudF9nZW5lcmF0ZV9pZCAoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpIG5vZXhjZXB0OworIAorLTo6 cnVzdDo6U3RyaW5nIGRlcGxveW1lbnRfZ2VuZXJhdGVfaWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQpIG5vZXhjZXB0OworK3ZvaWQgZGVwbG95bWVu dF9wb3B1bGF0ZV92YXJpYW50ICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlU3lzcm9vdCBjb25zdCAm c3lzcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVj eHg6Ok9zdHJlZURlcGxveW1lbnQgY29uc3QgJmRlcGxveW1lbnQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERpY3QgY29uc3QgJmRp Y3QpOworIAorLXZvaWQgZGVwbG95bWVudF9wb3B1bGF0ZV92YXJpYW50KDo6cnBtb3N0cmVlY3h4 OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVw bG95bWVudCBjb25zdCAmZGVwbG95bWVudCwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50RGljdCBj b25zdCAmZGljdCk7Cisrdm9pZCBnZW5lcmF0ZV9iYXNlbGF5ZXJfcmVmcyAoOjpycG1vc3RyZWVj eHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6OkdDYW5jZWxsYWJsZSBjb25z dCAmY2FuY2VsbGFibGUpOworIAorLXZvaWQgZ2VuZXJhdGVfYmFzZWxheWVyX3JlZnMoOjpycG1v c3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpP c3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlIGNvbnN0 ICZjYW5jZWxsYWJsZSk7Cisrdm9pZCB2YXJpYW50X2FkZF9yZW1vdGVfc3RhdHVzICg6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIgcmVmc3BlYywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGJhc2VfY2hlY2tzdW0s CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1Zhcmlh bnREaWN0IGNvbnN0ICZkaWN0KTsKKyAKKy12b2lkIHZhcmlhbnRfYWRkX3JlbW90ZV9zdGF0dXMo OjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sIDo6cnVzdDo6U3RyIHJlZnNw ZWMsIDo6cnVzdDo6U3RyIGJhc2VfY2hlY2tzdW0sIDo6cnBtb3N0cmVlY3h4OjpHVmFyaWFudERp Y3QgY29uc3QgJmRpY3QpOworKzo6cnBtb3N0cmVlY3h4OjpEZXBsb3ltZW50TGF5ZXJlZE1ldGEK KytkZXBsb3ltZW50X2xheWVyZWRtZXRhX2Zyb21fY29tbWl0ICg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCk7Cisg CistOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YSBkZXBsb3ltZW50X2xheWVy ZWRtZXRhX2Zyb21fY29tbWl0KDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0 ICZkZXBsb3ltZW50LCA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJmNvbW1pdCk7Cisr OjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXllcmVkTWV0YQorK2RlcGxveW1lbnRfbGF5ZXJl ZG1ldGFfbG9hZCAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVJlcG8gY29uc3QgJnJlcG8sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlRGVwbG95bWVu dCBjb25zdCAmZGVwbG95bWVudCk7CisgCistOjpycG1vc3RyZWVjeHg6OkRlcGxveW1lbnRMYXll cmVkTWV0YSBkZXBsb3ltZW50X2xheWVyZWRtZXRhX2xvYWQoOjpycG1vc3RyZWVjeHg6Ok9zdHJl ZVJlcG8gY29uc3QgJnJlcG8sIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0 ICZkZXBsb3ltZW50KTsKKys6OnJwbW9zdHJlZWN4eDo6T3ZlcnJpZGVSZXBsYWNlbWVudFNvdXJj ZSBwYXJzZV9vdmVycmlkZV9zb3VyY2UgKDo6cnVzdDo6U3RyIHNvdXJjZSk7CisgCistOjpycG1v c3RyZWVjeHg6Ok92ZXJyaWRlUmVwbGFjZW1lbnRTb3VyY2UgcGFyc2Vfb3ZlcnJpZGVfc291cmNl KDo6cnVzdDo6U3RyIHNvdXJjZSk7CisrOjpycG1vc3RyZWVjeHg6OlBhcnNlZFJldmlzaW9uIHBh cnNlX3JldmlzaW9uICg6OnJ1c3Q6OlN0ciBzb3VyY2UpOworIAorLTo6cnBtb3N0cmVlY3h4OjpQ YXJzZWRSZXZpc2lvbiBwYXJzZV9yZXZpc2lvbig6OnJ1c3Q6OlN0ciBzb3VyY2UpOworKzo6cnVz dDo6U3RyaW5nIGdlbmVyYXRlX29iamVjdF9wYXRoICg6OnJ1c3Q6OlN0ciBiYXNlLCA6OnJ1c3Q6 OlN0ciBuZXh0X3NlZ21lbnQpOworIAorLTo6cnVzdDo6U3RyaW5nIGdlbmVyYXRlX29iamVjdF9w YXRoKDo6cnVzdDo6U3RyIGJhc2UsIDo6cnVzdDo6U3RyIG5leHRfc2VnbWVudCk7Cisrdm9pZCBm YWlscG9pbnQgKDo6cnVzdDo6U3RyIHApOworIAorLXZvaWQgZmFpbHBvaW50KDo6cnVzdDo6U3Ry IHApOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPiBycG1f aW1wb3J0ZXJfZmxhZ3NfbmV3X2VtcHR5ICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6Qm94PDo6 cnBtb3N0cmVlY3h4OjpScG1JbXBvcnRlckZsYWdzPiBycG1faW1wb3J0ZXJfZmxhZ3NfbmV3X2Vt cHR5KCkgbm9leGNlcHQ7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlJwbUltcG9ydGVy PgorK3JwbV9pbXBvcnRlcl9uZXcgKDo6cnVzdDo6U3RyIHBrZ19uYW1lLCA6OnJ1c3Q6OlN0ciBv c3RyZWVfYnJhbmNoLAorKyAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpScG1JbXBv cnRlckZsYWdzIGNvbnN0ICZmbGFncyk7CisgCistOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OlJwbUltcG9ydGVyPiBycG1faW1wb3J0ZXJfbmV3KDo6cnVzdDo6U3RyIHBrZ19uYW1lLCA6OnJ1 c3Q6OlN0ciBvc3RyZWVfYnJhbmNoLCA6OnJwbW9zdHJlZWN4eDo6UnBtSW1wb3J0ZXJGbGFncyBj b25zdCAmZmxhZ3MpOworKzo6cnVzdDo6U3RyaW5nIHRtcGZpbGVzX3RyYW5zbGF0ZSAoOjpydXN0 OjpTdHIgYWJzX3BhdGgsIDo6cnBtb3N0cmVlY3h4OjpHRmlsZUluZm8gY29uc3QgJmZpbGVfaW5m bywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIHVzZXJu YW1lLCA6OnJ1c3Q6OlN0ciBncm91cG5hbWUpOworIAorLTo6cnVzdDo6U3RyaW5nIHRtcGZpbGVz X3RyYW5zbGF0ZSg6OnJ1c3Q6OlN0ciBhYnNfcGF0aCwgOjpycG1vc3RyZWVjeHg6OkdGaWxlSW5m byBjb25zdCAmZmlsZV9pbmZvLCA6OnJ1c3Q6OlN0ciB1c2VybmFtZSwgOjpydXN0OjpTdHIgZ3Jv dXBuYW1lKTsKKyt2b2lkIGFwcGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8gKDo6c3RkOjppbnQzMl90 IGZkKTsKKyAKKy12b2lkIGFwcGVuZF9kcmFjdXRfcmFuZG9tX2NwaW8oOjpzdGQ6OmludDMyX3Qg ZmQpOworKzo6c3RkOjppbnQzMl90IGluaXRyYW1mc19vdmVybGF5X2dlbmVyYXRlICg6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9zdHJlZWN4eDo6R0NhbmNlbGxhYmxlICZjYW5j ZWxsYWJsZSk7CisgCistOjpzdGQ6OmludDMyX3QgaW5pdHJhbWZzX292ZXJsYXlfZ2VuZXJhdGUo OjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlcywgOjpycG1vc3RyZWVjeHg6 OkdDYW5jZWxsYWJsZSAmY2FuY2VsbGFibGUpOworK3ZvaWQgam91cm5hbF9wcmludF9zdGFnaW5n X2ZhaWx1cmUgKCkgbm9leGNlcHQ7CisgCistdm9pZCBqb3VybmFsX3ByaW50X3N0YWdpbmdfZmFp bHVyZSgpIG5vZXhjZXB0OworK3ZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl90YXNrICg6OnJ1 c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OworIAorLXZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl90 YXNrKDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Cisrdm9pZCBjb25zb2xlX3Byb2dyZXNzX2Jl Z2luX25faXRlbXMgKDo6cnVzdDo6U3RyIG1zZywgOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0 OworIAorLXZvaWQgY29uc29sZV9wcm9ncmVzc19iZWdpbl9uX2l0ZW1zKDo6cnVzdDo6U3RyIG1z ZywgOjpzdGQ6OnVpbnQ2NF90IG4pIG5vZXhjZXB0OworK3ZvaWQgY29uc29sZV9wcm9ncmVzc19i ZWdpbl9wZXJjZW50ICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OworIAorLXZvaWQgY29uc29s ZV9wcm9ncmVzc19iZWdpbl9wZXJjZW50KDo6cnVzdDo6U3RyIG1zZykgbm9leGNlcHQ7Cisrdm9p ZCBjb25zb2xlX3Byb2dyZXNzX3NldF9tZXNzYWdlICg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0 OworIAorLXZvaWQgY29uc29sZV9wcm9ncmVzc19zZXRfbWVzc2FnZSg6OnJ1c3Q6OlN0ciBtc2cp IG5vZXhjZXB0OworK3ZvaWQgY29uc29sZV9wcm9ncmVzc19zZXRfc3ViX21lc3NhZ2UgKDo6cnVz dDo6U3RyIG1zZykgbm9leGNlcHQ7CisgCistdm9pZCBjb25zb2xlX3Byb2dyZXNzX3NldF9zdWJf bWVzc2FnZSg6OnJ1c3Q6OlN0ciBtc2cpIG5vZXhjZXB0OworK3ZvaWQgY29uc29sZV9wcm9ncmVz c191cGRhdGUgKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdDsKKyAKKy12b2lkIGNvbnNvbGVf cHJvZ3Jlc3NfdXBkYXRlKDo6c3RkOjp1aW50NjRfdCBuKSBub2V4Y2VwdDsKKyt2b2lkIGNvbnNv bGVfcHJvZ3Jlc3NfZW5kICg6OnJ1c3Q6OlN0ciBzdWZmaXgpIG5vZXhjZXB0OworIAorLXZvaWQg Y29uc29sZV9wcm9ncmVzc19lbmQoOjpydXN0OjpTdHIgc3VmZml4KSBub2V4Y2VwdDsKKys6OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6SGlzdG9yeUN0eD4gaGlzdG9yeV9jdHhfbmV3ICgpOwor IAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpIaXN0b3J5Q3R4PiBoaXN0b3J5X2N0eF9u ZXcoKTsKKyt2b2lkIGhpc3RvcnlfcHJ1bmUgKCk7CisgCistdm9pZCBoaXN0b3J5X3BydW5lKCk7 CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRva2lvSGFuZGxlPiB0b2tpb19oYW5kbGVf Z2V0ICgpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUb2tpb0hh bmRsZT4gdG9raW9faGFuZGxlX2dldCgpIG5vZXhjZXB0OworK2Jvb2wgc2NyaXB0X2lzX2lnbm9y ZWQgKDo6cnVzdDo6U3RyIHBrZywgOjpydXN0OjpTdHIgc2NyaXB0LCBib29sIHVzZV9rZXJuZWxf aW5zdGFsbCkgbm9leGNlcHQ7CisgCistYm9vbCBzY3JpcHRfaXNfaWdub3JlZCg6OnJ1c3Q6OlN0 ciBwa2csIDo6cnVzdDo6U3RyIHNjcmlwdCwgYm9vbCB1c2Vfa2VybmVsX2luc3RhbGwpIG5vZXhj ZXB0OworK3ZvaWQgdGVzdHV0aWxzX2VudHJ5cG9pbnQgKDo6cnVzdDo6VmVjPDo6cnVzdDo6U3Ry aW5nPiBhcmd2KTsKKyAKKy12b2lkIHRlc3R1dGlsc19lbnRyeXBvaW50KDo6cnVzdDo6VmVjPDo6 cnVzdDo6U3RyaW5nPiBhcmd2KTsKKys6OnJ1c3Q6OlN0cmluZyBtYXliZV9zaGVsbF9xdW90ZSAo OjpydXN0OjpTdHIgaW5wdXQpIG5vZXhjZXB0OworIAorLTo6cnVzdDo6U3RyaW5nIG1heWJlX3No ZWxsX3F1b3RlKDo6cnVzdDo6U3RyIGlucHV0KSBub2V4Y2VwdDsKKys6OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ldyAoOjpydXN0OjpTdHIgZmlsZW5hbWUs IDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6 VHJlZWZpbGU+IHRyZWVmaWxlX25ldyg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpydXN0OjpTdHIg YmFzZWFyY2gpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZp bGVfbmV3X2VtcHR5ICgpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmls ZT4gdHJlZWZpbGVfbmV3X2VtcHR5KCk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlRy ZWVmaWxlPiB0cmVlZmlsZV9uZXdfZnJvbV9zdHJpbmcgKDo6cnVzdDo6U3RyIGJ1ZiwgYm9vbCBj bGllbnQpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZp bGVfbmV3X2Zyb21fc3RyaW5nKDo6cnVzdDo6U3RyIGJ1ZiwgYm9vbCBjbGllbnQpOworKzo6cnVz dDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gdHJlZWZpbGVfbmV3X2NvbXBvc2UgKDo6 cnVzdDo6U3RyIGZpbGVuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKKyAKKy06OnJ1 c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jb21wb3NlKDo6 cnVzdDo6U3RyIGZpbGVuYW1lLCA6OnJ1c3Q6OlN0ciBiYXNlYXJjaCk7CisrOjpydXN0OjpCb3g8 OjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlPiB0cmVlZmlsZV9uZXdfY2xpZW50ICg6OnJ1c3Q6OlN0 ciBmaWxlbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKKyAKKy06OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnQoOjpydXN0OjpTdHIg ZmlsZW5hbWUsIDo6cnVzdDo6U3RyIGJhc2VhcmNoKTsKKys6OnJ1c3Q6OkJveDw6OnJwbW9zdHJl ZWN4eDo6VHJlZWZpbGU+IHRyZWVmaWxlX25ld19jbGllbnRfZnJvbV9ldGMgKDo6cnVzdDo6U3Ry IGJhc2VhcmNoKTsKKyAKKy06OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGU+IHRy ZWVmaWxlX25ld19jbGllbnRfZnJvbV9ldGMoOjpydXN0OjpTdHIgYmFzZWFyY2gpOworKzo6c3Rk Ojp1aW50MzJfdCB0cmVlZmlsZV9kZWxldGVfY2xpZW50X2V0YyAoKTsKKyAKKy06OnN0ZDo6dWlu dDMyX3QgdHJlZWZpbGVfZGVsZXRlX2NsaWVudF9ldGMoKTsKKysvLyBSZXR1cm4gdGhlIGxpc3Qg b2YgcmVwbyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAorKy8vIChlLmcuIFsi L2V0Yy95dW0ucmVwb3MuZCIsICIvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCJdKS4KKys6OnJ1c3Q6 OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X3JlcG9zX2RpcnMgKCkgbm9leGNlcHQ7CisgCistOjpy dXN0OjpTdHJpbmcgdmFyc3Vic3RpdHV0ZSg6OnJ1c3Q6OlN0ciBzLCA6OnJ1c3Q6OlZlYzw6OnJw bW9zdHJlZWN4eDo6U3RyaW5nTWFwcGluZz4gY29uc3QgJnZhcnMpOworKzo6cnVzdDo6U3RyaW5n IHZhcnN1YnN0aXR1dGUgKDo6cnVzdDo6U3RyIHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOjpydXN0OjpWZWM8OjpycG1vc3RyZWVjeHg6OlN0cmluZ01hcHBpbmc+IGNvbnN0ICZ2 YXJzKTsKKyAKKy06OnJ1c3Q6OlZlYzw6OnJ1c3Q6OlN0cmluZz4gZ2V0X2ZlYXR1cmVzKCkgbm9l eGNlcHQ7CisrOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGdldF9mZWF0dXJlcyAoKSBub2V4 Y2VwdDsKKyAKKy06OnJ1c3Q6OlN0cmluZyBnZXRfcnBtX2Jhc2VhcmNoKCkgbm9leGNlcHQ7Cisr OjpydXN0OjpTdHJpbmcgZ2V0X3JwbV9iYXNlYXJjaCAoKSBub2V4Y2VwdDsKKyAKKy06OnN0ZDo6 aW50MzJfdCBzZWFsZWRfbWVtZmQoOjpydXN0OjpTdHIgZGVzY3JpcHRpb24sIDo6cnVzdDo6U2xp Y2U8OjpzdGQ6OnVpbnQ4X3QgY29uc3Q+IGNvbnRlbnQpOworKzo6c3RkOjppbnQzMl90IHNlYWxl ZF9tZW1mZCAoOjpydXN0OjpTdHIgZGVzY3JpcHRpb24sIDo6cnVzdDo6U2xpY2U8OjpzdGQ6OnVp bnQ4X3QgY29uc3Q+IGNvbnRlbnQpOworIAorLWJvb2wgcnVubmluZ19pbl9zeXN0ZW1kKCkgbm9l eGNlcHQ7CisrYm9vbCBydW5uaW5nX2luX3N5c3RlbWQgKCkgbm9leGNlcHQ7CisgCistOjpycG1v c3RyZWVjeHg6OkdWYXJpYW50ICpjYWxjdWxhdGVfYWR2aXNvcmllc19kaWZmKDo6cnBtb3N0cmVl Y3h4OjpPc3RyZWVSZXBvIGNvbnN0ICZyZXBvLCA6OnJ1c3Q6OlN0ciBjaGVja3N1bV9mcm9tLCA6 OnJ1c3Q6OlN0ciBjaGVja3N1bV90byk7CisrOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50ICpjYWxj dWxhdGVfYWR2aXNvcmllc19kaWZmICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAm cmVwbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDo6cnVzdDo6U3RyIGNoZWNrc3VtX2Zyb20sCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBjaGVja3N1bV90byk7Cisg CistOjpydXN0OjpTdHJpbmcgdHJhbnNsYXRlX3BhdGhfZm9yX29zdHJlZSg6OnJ1c3Q6OlN0ciBw YXRoKSBub2V4Y2VwdDsKKys6OnJ1c3Q6OlN0cmluZyB0cmFuc2xhdGVfcGF0aF9mb3Jfb3N0cmVl ICg6OnJ1c3Q6OlN0ciBwYXRoKSBub2V4Y2VwdDsKKyAKKy06OnJwbW9zdHJlZWN4eDo6TGl2ZUFw cGx5U3RhdGUgZ2V0X2xpdmVfYXBwbHlfc3RhdGUoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jv b3QgY29uc3QgJnN5c3Jvb3QsIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3ltZW50IGNvbnN0 ICZkZXBsb3ltZW50KTsKKys6OnJwbW9zdHJlZWN4eDo6TGl2ZUFwcGx5U3RhdGUKKytnZXRfbGl2 ZV9hcHBseV9zdGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jv b3QsCisrICAgICAgICAgICAgICAgICAgICAgIDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVEZXBsb3lt ZW50IGNvbnN0ICZkZXBsb3ltZW50KTsKKyAKKy1ib29sIGhhc19saXZlX2FwcGx5X3N0YXRlKDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290LCA6OnJwbW9zdHJlZWN4 eDo6T3N0cmVlRGVwbG95bWVudCBjb25zdCAmZGVwbG95bWVudCk7CisrYm9vbCBoYXNfbGl2ZV9h cHBseV9zdGF0ZSAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3Qs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpycG1vc3RyZWVjeHg6Ok9zdHJlZURlcGxv eW1lbnQgY29uc3QgJmRlcGxveW1lbnQpOworIAorLXZvaWQgYXBwbHlsaXZlX3N5bmNfcmVmKDo6 cnBtb3N0cmVlY3h4OjpPc3RyZWVTeXNyb290IGNvbnN0ICZzeXNyb290KTsKKyt2b2lkIGFwcGx5 bGl2ZV9zeW5jX3JlZiAoOjpycG1vc3RyZWVjeHg6Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jv b3QpOworIAorLXZvaWQgdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSg6OnJwbW9zdHJlZWN4eDo6T3N0 cmVlU3lzcm9vdCBjb25zdCAmc3lzcm9vdCwgOjpycG1vc3RyZWVjeHg6OkdWYXJpYW50IGNvbnN0 ICZ0YXJnZXQpOworK3ZvaWQgdHJhbnNhY3Rpb25fYXBwbHlfbGl2ZSAoOjpycG1vc3RyZWVjeHg6 Ok9zdHJlZVN5c3Jvb3QgY29uc3QgJnN5c3Jvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6OnJwbW9zdHJlZWN4eDo6R1ZhcmlhbnQgY29uc3QgJnRhcmdldCk7CisgCistdm9pZCBu b3JtYWxpemVfZXRjX3NoYWRvdyg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKTsKKyt2b2lkIG5v cm1hbGl6ZV9ldGNfc2hhZG93ICg6OnN0ZDo6aW50MzJfdCByb290ZnNfZGZkKTsKKyAKKy1ib29s IHByZXBhcmVfcnBtX2xheWVyaW5nKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpzdGQ6OmludDMy X3QgbWVyZ2VfcGFzc3dkX2Rpcik7CisrYm9vbCBwcmVwYXJlX3JwbV9sYXllcmluZyAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzLCA6OnN0ZDo6aW50MzJfdCBtZXJnZV9wYXNzd2RfZGlyKTsKKyAKKy12 b2lkIGNvbXBsZXRlX3JwbV9sYXllcmluZyg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworK3ZvaWQg Y29tcGxldGVfcnBtX2xheWVyaW5nICg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworIAorLXZvaWQg ZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyg6OnN0ZDo6aW50MzJfdCByb290ZnMpOworK3Zv aWQgZGVkdXBsaWNhdGVfdG1wZmlsZXNfZW50cmllcyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsK KyAKKy12b2lkIHBhc3N3ZF9jbGVhbnVwKDo6c3RkOjppbnQzMl90IHJvb3Rmcyk7Cisrdm9pZCBw YXNzd2RfY2xlYW51cCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKKyAKKy12b2lkIG1pZ3JhdGVf Z3JvdXBfZXhjZXB0X3Jvb3QoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gY29uc3QgJnByZXNlcnZlZF9ncm91cHMpOworK3ZvaWQgbWlncmF0ZV9ncm91 cF9leGNlcHRfcm9vdCAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOjpydXN0OjpWZWM8OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZwcmVzZXJ2 ZWRfZ3JvdXBzKTsKKyAKKy12b2lkIG1pZ3JhdGVfcGFzc3dkX2V4Y2VwdF9yb290KDo6c3RkOjpp bnQzMl90IHJvb3Rmcyk7Cisrdm9pZCBtaWdyYXRlX3Bhc3N3ZF9leGNlcHRfcm9vdCAoOjpzdGQ6 OmludDMyX3Qgcm9vdGZzKTsKKyAKKy12b2lkIHBhc3N3ZF9jb21wb3NlX3ByZXAoOjpzdGQ6Omlu dDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVmaWxlKTsKKyt2b2lk IHBhc3N3ZF9jb21wb3NlX3ByZXAgKDo6c3RkOjppbnQzMl90IHJvb3RmcywgOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlICZ0cmVlZmlsZSk7CisgCistdm9pZCBwYXNzd2RfY29tcG9zZV9wcmVwX3Jl cG8oOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgJnRyZWVm aWxlLCA6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywgOjpydXN0OjpTdHIg cHJldmlvdXNfY2hlY2tzdW0sIGJvb2wgdW5pZmllZF9jb3JlKTsKKyt2b2lkIHBhc3N3ZF9jb21w b3NlX3ByZXBfcmVwbyAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzLCA6OnJwbW9zdHJlZWN4eDo6VHJl ZWZpbGUgJnRyZWVmaWxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJwbW9z dHJlZWN4eDo6T3N0cmVlUmVwbyBjb25zdCAmcmVwbywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOjpydXN0OjpTdHIgcHJldmlvdXNfY2hlY2tzdW0sIGJvb2wgdW5pZmllZF9jb3Jl KTsKKyAKKy1ib29sIGRpcl9jb250YWluc191aWQoOjpzdGQ6OmludDMyX3QgZGlyZmQsIDo6c3Rk Ojp1aW50MzJfdCBpZCk7CisrYm9vbCBkaXJfY29udGFpbnNfdWlkICg6OnN0ZDo6aW50MzJfdCBk aXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKTsKKyAKKy1ib29sIGRpcl9jb250YWluc19naWQoOjpz dGQ6OmludDMyX3QgZGlyZmQsIDo6c3RkOjp1aW50MzJfdCBpZCk7CisrYm9vbCBkaXJfY29udGFp bnNfZ2lkICg6OnN0ZDo6aW50MzJfdCBkaXJmZCwgOjpzdGQ6OnVpbnQzMl90IGlkKTsKKyAKKy12 b2lkIGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzKDo6cnBtb3N0cmVlY3h4OjpPc3RyZWVSZXBv IGNvbnN0ICZmZmlfcmVwbywgOjpzdGQ6OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVj eHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwgOjpydXN0OjpTdHIgcHJldmlvdXNfcmV2KTsKKyt2b2lk IGNoZWNrX3Bhc3N3ZF9ncm91cF9lbnRyaWVzICg6OnJwbW9zdHJlZWN4eDo6T3N0cmVlUmVwbyBj b25zdCAmZmZpX3JlcG8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpzdGQ6 OmludDMyX3Qgcm9vdGZzX2RmZCwgOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlICZ0cmVlZmlsZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnJ1c3Q6OlN0ciBwcmV2aW91c19y ZXYpOworIAorLTo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpQYXNzd2REQj4gcGFzc3dkZGJf b3Blbig6OnN0ZDo6aW50MzJfdCByb290ZnMpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4 OjpQYXNzd2REQj4gcGFzc3dkZGJfb3BlbiAoOjpzdGQ6OmludDMyX3Qgcm9vdGZzKTsKKyAKKy06 OnJ1c3Q6OkJveDw6OnJwbW9zdHJlZWN4eDo6UGFzc3dkRW50cmllcz4gbmV3X3Bhc3N3ZF9lbnRy aWVzKCkgbm9leGNlcHQ7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6OlBhc3N3ZEVudHJp ZXM+IG5ld19wYXNzd2RfZW50cmllcyAoKSBub2V4Y2VwdDsKKyAKKy06OnJ1c3Q6OkJveDw6OnJw bW9zdHJlZWN4eDo6RXh0ZW5zaW9ucz4gZXh0ZW5zaW9uc19sb2FkKDo6cnVzdDo6U3RyIHBhdGgs IDo6cnVzdDo6U3RyIGJhc2VhcmNoLCA6OnJ1c3Q6OlZlYzw6OnJwbW9zdHJlZWN4eDo6U3RyaW5n TWFwcGluZz4gY29uc3QgJmJhc2VfcGtncyk7CisrOjpydXN0OjpCb3g8OjpycG1vc3RyZWVjeHg6 OkV4dGVuc2lvbnM+CisrZXh0ZW5zaW9uc19sb2FkICg6OnJ1c3Q6OlN0ciBwYXRoLCA6OnJ1c3Q6 OlN0ciBiYXNlYXJjaCwKKysgICAgICAgICAgICAgICAgIDo6cnVzdDo6VmVjPDo6cnBtb3N0cmVl Y3h4OjpTdHJpbmdNYXBwaW5nPiBjb25zdCAmYmFzZV9wa2dzKTsKKyAKKy06OnJ1c3Q6OkJveDw6 OnJwbW9zdHJlZWN4eDo6TG9ja2ZpbGVDb25maWc+IGxvY2tmaWxlX3JlYWQoOjpydXN0OjpWZWM8 OjpydXN0OjpTdHJpbmc+IGNvbnN0ICZmaWxlbmFtZXMpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0 cmVlY3h4OjpMb2NrZmlsZUNvbmZpZz4KKytsb2NrZmlsZV9yZWFkICg6OnJ1c3Q6OlZlYzw6OnJ1 c3Q6OlN0cmluZz4gY29uc3QgJmZpbGVuYW1lcyk7CisgCistdm9pZCBsb2NrZmlsZV93cml0ZSg6 OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpycG1vc3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcGFj a2FnZXMsIDo6cnBtb3N0cmVlY3h4OjpDeHhHT2JqZWN0QXJyYXkgJnJwbW1kX3JlcG9zKTsKKyt2 b2lkIGxvY2tmaWxlX3dyaXRlICg6OnJ1c3Q6OlN0ciBmaWxlbmFtZSwgOjpycG1vc3RyZWVjeHg6 OkN4eEdPYmplY3RBcnJheSAmcGFja2FnZXMsCisrICAgICAgICAgICAgICAgICAgICAgOjpycG1v c3RyZWVjeHg6OkN4eEdPYmplY3RBcnJheSAmcnBtbWRfcmVwb3MpOworIAorLTo6cnVzdDo6Qm94 PDo6cnBtb3N0cmVlY3h4OjpUcmVlZmlsZT4gb3JpZ2luX3RvX3RyZWVmaWxlKDo6cnBtb3N0cmVl Y3h4OjpHS2V5RmlsZSBjb25zdCAma2YpOworKzo6cnVzdDo6Qm94PDo6cnBtb3N0cmVlY3h4OjpU cmVlZmlsZT4gb3JpZ2luX3RvX3RyZWVmaWxlICg6OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgY29u c3QgJmtmKTsKKyAKKy06OnJwbW9zdHJlZWN4eDo6R0tleUZpbGUgKnRyZWVmaWxlX3RvX29yaWdp big6OnJwbW9zdHJlZWN4eDo6VHJlZWZpbGUgY29uc3QgJnRmKTsKKys6OnJwbW9zdHJlZWN4eDo6 R0tleUZpbGUgKnRyZWVmaWxlX3RvX29yaWdpbiAoOjpycG1vc3RyZWVjeHg6OlRyZWVmaWxlIGNv bnN0ICZ0Zik7CisgCistdm9pZCBvcmlnaW5fdmFsaWRhdGVfcm91bmR0cmlwKDo6cnBtb3N0cmVl Y3h4OjpHS2V5RmlsZSBjb25zdCAma2YpIG5vZXhjZXB0OworK3ZvaWQgb3JpZ2luX3ZhbGlkYXRl X3JvdW5kdHJpcCAoOjpycG1vc3RyZWVjeHg6OkdLZXlGaWxlIGNvbnN0ICZrZikgbm9leGNlcHQ7 CisgCistOjpydXN0OjpTdHJpbmcgY2FjaGVfYnJhbmNoX3RvX25ldnJhKDo6cnVzdDo6U3RyIG5l dnJhKSBub2V4Y2VwdDsKKys6OnJ1c3Q6OlN0cmluZyBjYWNoZV9icmFuY2hfdG9fbmV2cmEgKDo6 cnVzdDo6U3RyIG5ldnJhKSBub2V4Y2VwdDsKKyB9IC8vIG5hbWVzcGFjZSBycG1vc3RyZWVjeHgK KyAKKyAjaWZkZWYgX19jbGFuZ19fCitkaWZmIC0tZ2l0IGEvcnVzdC9zcmMvY29tcG9zZS5ycyBi L3J1c3Qvc3JjL2NvbXBvc2UucnMKK2luZGV4IDEwODM1NDBlMTcuLjdmMTA4ODFhNTkgMTAwNjQ0 CistLS0gYS9ydXN0L3NyYy9jb21wb3NlLnJzCisrKysgYi9ydXN0L3NyYy9jb21wb3NlLnJzCitA QCAtMzMsNyArMzMsNyBAQCB1c2UgY3JhdGU6OmNtZHV0aWxzOjpDb21tYW5kUnVuRXh0OworIHVz ZSBjcmF0ZTo6Y29udGFpbmVyc19zdG9yYWdlOjpNb3VudDsKKyB1c2UgY3JhdGU6OmN4eHJzdXRp bDo6e0N4eFJlc3VsdCwgRkZJR09iamVjdFdyYXBwZXJ9OworIHVzZSBjcmF0ZTo6aXNvbGF0aW9u OjpzZWxmX2NvbW1hbmQ7CistdXNlIGNyYXRlOjp7UlBNT1NUUkVFX1JQTURCX0xPQ0FUSU9OLCBS UE1PU1RSRUVfU1lTSU1BR0VfUlBNREJ9OworK3VzZSBjcmF0ZTo6e1JFUE9TX0RJUlMsIFJQTU9T VFJFRV9SUE1EQl9MT0NBVElPTiwgUlBNT1NUUkVFX1NZU0lNQUdFX1JQTURCfTsKKyAKKyBjb25z dCBPU1RSRUVfQ09NUE9TRUZTX0RJR0VTVF9WMF9LRVk6ICZzdHIgPSAib3N0cmVlLmNvbXBvc2Vm cy5kaWdlc3QudjAiOworIAorQEAgLTY0MCwyMyArNjQwLDI0IEBAIGZuIG11dGF0ZV9zb3VyY2Vf cm9vdChleGVjX3Jvb3Q6ICZEaXIsIHNvdXJjZV9yb290OiAmVXRmOFBhdGgpIC0+IFJlc3VsdDwo KT4geworICAgICAgICAgcHJpbnRsbiEoIlN5bWxpbmtlZCB7UlBNT1NUUkVFX1JQTURCX0xPQ0FU SU9OfSBpbiBzb3VyY2Ugcm9vdCIpOworICAgICB9CisgCistICAgIGlmICFzb3VyY2Vfcm9vdF9k aXIudHJ5X2V4aXN0cygiZXRjIik/IHsKKy0gICAgICAgIHJldHVybiBPaygoKSk7CistICAgIH0K Ky0gICAgaWYgbGV0IFNvbWUocmVwb3MpID0gc291cmNlX3Jvb3RfZGlyCistICAgICAgICAub3Bl bl9kaXJfb3B0aW9uYWwoImV0Yy95dW0ucmVwb3MuZCIpCistICAgICAgICAuY29udGV4dCgiT3Bl bmluZyB5dW0ucmVwb3MuZCIpPworLSAgICB7CistICAgICAgICBmb3IgZW50IGluIHJlcG9zLmVu dHJpZXNfdXRmOCgpPyB7CistICAgICAgICAgICAgbGV0IGVudCA9IGVudD87CistICAgICAgICAg ICAgaWYgIWVudC5maWxlX3R5cGUoKT8uaXNfZmlsZSgpIHsKKy0gICAgICAgICAgICAgICAgY29u dGludWU7CisrICAgIC8vIFNjYW4gYWxsIHJlcG8gZGlyZWN0b3J5IGxvY2F0aW9ucyBmb3IgLnJl cG8gZmlsZXMgdGhhdCBtYXkgbmVlZAorKyAgICAvLyBHUEcga2V5IHBhdGggcmV3cml0aW5nLgor KyAgICBmb3IgcmVwb3NfZGlyIGluIFJFUE9TX0RJUlMgeworKyAgICAgICAgaWYgbGV0IFNvbWUo cmVwb3MpID0gc291cmNlX3Jvb3RfZGlyCisrICAgICAgICAgICAgLm9wZW5fZGlyX29wdGlvbmFs KHJlcG9zX2RpcikKKysgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IGZvcm1hdCEoIk9wZW5p bmcge3JlcG9zX2Rpcn0iKSk/CisrICAgICAgICB7CisrICAgICAgICAgICAgZm9yIGVudCBpbiBy ZXBvcy5lbnRyaWVzX3V0ZjgoKT8geworKyAgICAgICAgICAgICAgICBsZXQgZW50ID0gZW50PzsK KysgICAgICAgICAgICAgICAgaWYgIWVudC5maWxlX3R5cGUoKT8uaXNfZmlsZSgpIHsKKysgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg ICAgICAgIGxldCBuYW1lOiBVdGY4UGF0aEJ1ZiA9IGVudC5maWxlX25hbWUoKT8uaW50bygpOwor KyAgICAgICAgICAgICAgICBsZXQgU29tZSgicmVwbyIpID0gbmFtZS5leHRlbnNpb24oKSBlbHNl IHsKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICB9Owor KyAgICAgICAgICAgICAgICBtdXRhdGVfb25lX2RuZl9yZXBvKGV4ZWNfcm9vdCwgc291cmNlX3Jv b3QsICZyZXBvcywgJm5hbWUpPzsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgbGV0IG5h bWU6IFV0ZjhQYXRoQnVmID0gZW50LmZpbGVfbmFtZSgpPy5pbnRvKCk7CistICAgICAgICAgICAg bGV0IFNvbWUoInJlcG8iKSA9IG5hbWUuZXh0ZW5zaW9uKCkgZWxzZSB7CistICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworLSAgICAgICAgICAgIH07CistICAgICAgICAgICAgbXV0YXRlX29uZV9k bmZfcmVwbyhleGVjX3Jvb3QsIHNvdXJjZV9yb290LCAmcmVwb3MsICZuYW1lKT87CisgICAgICAg ICB9CisgICAgIH0KKyAKK0BAIC0xNjg0LDYgKzE2ODUsMjkgQEAgbW9kIHRlc3RzIHsKKyAgICAg IiN9OworICAgICAgICAgc2ltaWxhcl9hc3NlcnRzOjphc3NlcnRfZXEhKGV4cGVjdGVkLCBmb3Vu ZF9yZXBvcyk7CisgCisrICAgICAgICAvLyBBbHNvIHRlc3Qgd2l0aCByZXBvcyBpbiB0aGUgbmV3 IC91c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIGxvY2F0aW9uCisrICAgICAgICByb290ZnMuY3JlYXRl X2Rpcl9hbGwoInJlcG9zL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQiKT87CisrICAgICAgICByb290 ZnMuY3JlYXRlX2Rpcl9hbGwoInJlcG9zL3Vzci9zaGFyZS9wa2kvcnBtLWdwZyIpPzsKKysgICAg ICAgIHJvb3Rmcy53cml0ZSgicmVwb3MvdXNyL3NoYXJlL3BraS9ycG0tZ3BnL3JlcG81LmtleSIs ICJyZXBvNSBncGcga2V5Iik/OworKyAgICAgICAgbGV0IGRuZjVfcmVwb19jb250ZW50ID0gaW5k b2M6OmluZG9jISB7IHIjIgorKyAgICAgICAgW3JlcG81XQorKyAgICAgICAgYmFzZXVybD1ibGFo CisrICAgICAgICBncGdrZXk9ZmlsZTovLy91c3Ivc2hhcmUvcGtpL3JwbS1ncGcvcmVwbzUua2V5 CisrICAgICIjfTsKKysgICAgICAgIHJvb3Rmcy53cml0ZSgKKysgICAgICAgICAgICAicmVwb3Mv dXNyL3NoYXJlL2RuZjUvcmVwb3MuZC90ZXN0LWRuZjUucmVwbyIsCisrICAgICAgICAgICAgZG5m NV9yZXBvX2NvbnRlbnQsCisrICAgICAgICApPzsKKysgICAgICAgIG11dGF0ZV9zb3VyY2Vfcm9v dChyb290ZnMsICJyZXBvcyIuaW50bygpKS51bndyYXAoKTsKKysgICAgICAgIGxldCBmb3VuZF9k bmY1X3JlcG9zID0KKysgICAgICAgICAgICByb290ZnMucmVhZF90b19zdHJpbmcoInJlcG9zL3Vz ci9zaGFyZS9kbmY1L3JlcG9zLmQvdGVzdC1kbmY1LnJlcG8iKT87CisrICAgICAgICBsZXQgZXhw ZWN0ZWRfZG5mNSA9IGluZG9jOjppbmRvYyEgeyByIyIKKysgICAgICAgIFtyZXBvNV0KKysgICAg ICAgIGJhc2V1cmw9YmxhaAorKyAgICAgICAgZ3Bna2V5PWZpbGU6Ly8vcmVwb3MvdXNyL3NoYXJl L3BraS9ycG0tZ3BnL3JlcG81LmtleQorKyAgICAiI307CisrICAgICAgICBzaW1pbGFyX2Fzc2Vy dHM6OmFzc2VydF9lcSEoZXhwZWN0ZWRfZG5mNSwgZm91bmRfZG5mNV9yZXBvcyk7CisrCisgICAg ICAgICBPaygoKSkKKyAgICAgfQorIH0KK2RpZmYgLS1naXQgYS9ydXN0L3NyYy9jb21wb3NlcG9z dC5ycyBiL3J1c3Qvc3JjL2NvbXBvc2Vwb3N0LnJzCitpbmRleCBjMWZlYjczNzg5Li4xZDhlZDNh MmQ3IDEwMDY0NAorLS0tIGEvcnVzdC9zcmMvY29tcG9zZXBvc3QucnMKKysrKyBiL3J1c3Qvc3Jj L2NvbXBvc2Vwb3N0LnJzCitAQCAtNTAsNiArNTAsMjMgQEAgcHViKGNyYXRlKSBjb25zdCBSUE1P U1RSRUVfUlBNREJfTE9DQVRJT046ICZzdHIgPSAidXNyL3NoYXJlL3JwbSI7CisgcHViKGNyYXRl KSBjb25zdCBSUE1PU1RSRUVfU1lTSU1BR0VfUlBNREI6ICZzdHIgPSAidXNyL2xpYi9zeXNpbWFn ZS9ycG0iOworIHB1YihjcmF0ZSkgY29uc3QgVFJBRElUSU9OQUxfUlBNREJfTE9DQVRJT046ICZz dHIgPSAidmFyL2xpYi9ycG0iOworIAorKy8vLyBSZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZGly ZWN0b3JpZXMuIFRoZSAvZXRjIHBhdGggaXMgZm9yIHVzZXItYWRkZWQKKysvLy8gY29uZmlndXJh dGlvbjsgdGhlIC91c3IgcGF0aCBpcyBmb3IgZGlzdHJpYnV0aW9uLXByb3ZpZGVkIGNvbmZpZ3Vy YXRpb24KKysvLy8gKGludHJvZHVjZWQgd2l0aCBETkY1IGluIEZlZG9yYSA0NSkuCisrcHViKGNy YXRlKSBjb25zdCBZVU1fUkVQT1NfRDogJnN0ciA9ICJldGMveXVtLnJlcG9zLmQiOworK3B1Yihj cmF0ZSkgY29uc3QgRE5GNV9SRVBPU19EOiAmc3RyID0gInVzci9zaGFyZS9kbmY1L3JlcG9zLmQi OworK3B1YihjcmF0ZSkgY29uc3QgUkVQT1NfRElSUzogJlsmc3RyXSA9ICZbWVVNX1JFUE9TX0Qs IERORjVfUkVQT1NfRF07CisrCisrLy8vIEFic29sdXRlLXBhdGggdmVyc2lvbnMgb2YgdGhlIGFi b3ZlLCBmb3IgdXNlIGluIGNvbnRleHRzIHRoYXQgbmVlZCB0aGVtLgorK3B1YihjcmF0ZSkgY29u c3QgQUJTX1lVTV9SRVBPU19EOiAmc3RyID0gIi9ldGMveXVtLnJlcG9zLmQiOworK3B1YihjcmF0 ZSkgY29uc3QgQUJTX0RORjVfUkVQT1NfRDogJnN0ciA9ICIvdXNyL3NoYXJlL2RuZjUvcmVwb3Mu ZCI7CisrCisrLy8vIFJldHVybiB0aGUgbGlzdCBvZiBhYnNvbHV0ZSByZXBvIGNvbmZpZ3VyYXRp b24gZGlyZWN0b3JpZXMgdG8gc2VhcmNoLAorKy8vLyBleHBvc2VkIHRvIEMrKyB2aWEgY3h4IGJy aWRnZS4KKytwdWIoY3JhdGUpIGZuIGdldF9yZXBvc19kaXJzKCkgLT4gVmVjPFN0cmluZz4gewor KyAgICB2ZWMhW0FCU19ZVU1fUkVQT1NfRC50b19zdHJpbmcoKSwgQUJTX0RORjVfUkVQT1NfRC50 b19zdHJpbmcoKV0KKyt9CisrCisgY29uc3QgU0RfTE9DQUxfRlNfVEFSR0VUX1JFUVVJUkVTOiAm c3RyID0gInVzci9saWIvc3lzdGVtZC9zeXN0ZW0vbG9jYWwtZnMudGFyZ2V0LnJlcXVpcmVzIjsK KyAKKyAjW2NvbnRleHQoIk1vdmluZyB7fSIsIG5hbWUpXQorZGlmZiAtLWdpdCBhL3J1c3Qvc3Jj L2NvdW50bWUvcmVwby5ycyBiL3J1c3Qvc3JjL2NvdW50bWUvcmVwby5ycworaW5kZXggNzQzZDc1 YzYxZS4uOWY5ZmFjOTY4OCAxMDA2NDQKKy0tLSBhL3J1c3Qvc3JjL2NvdW50bWUvcmVwby5ycwor KysrIGIvcnVzdC9zcmMvY291bnRtZS9yZXBvLnJzCitAQCAtMywxNCArMywxMiBAQAorIHVzZSBh bnlob3c6OntDb250ZXh0LCBSZXN1bHR9OworIHVzZSBmbl9lcnJvcl9jb250ZXh0Ojpjb250ZXh0 OworIHVzZSBzdGQ6OmZzOworLXVzZSBzdGQ6OnBhdGg6OlBhdGhCdWY7CisrdXNlIHN0ZDo6cGF0 aDo6e1BhdGgsIFBhdGhCdWZ9OworIAorIHVzZSBpbmk6OkluaTsKKyAKKyB1c2UgY3JhdGU6OnV0 aWxzOworLQorLS8vLyBMb2NhdGlvbiBmb3IgRE5GIHJlcG9zaXRvcmllcyBjb25maWd1cmF0aW9u CistcHViIGNvbnN0IFlVTV9SRVBPU19EOiAmc3RyID0gIi9ldGMveXVtLnJlcG9zLmQiOworK3Vz ZSBjcmF0ZTo6e0FCU19ETkY1X1JFUE9TX0QsIEFCU19ZVU1fUkVQT1NfRH07CisgCisgLy8vIFJl cG9zaXRvcnkgY29uZmlndXJhdGlvbgorIC8vLyBOb3QgZXhoYXVzdGl2ZSBhbmQgb25seSBpbmNs dWRlcyB0aGUgb3B0aW9ucyBuZWVkZWQgZm9yIENvdW50IE1lIHN1cHBvcnQuCitAQCAtMjgsMTIg KzI2LDE3IEBAIGZuIGlzX3RydWUoc3RyaW5nOiAmc3RyKSAtPiBib29sIHsKKyAgICAgc3RyaW5n ID09ICIxIiB8fCBzdHJpbmcgPT0gInllcyIgfHwgc3RyaW5nID09ICJ0cnVlIiB8fCBzdHJpbmcg PT0gIm9uIgorIH0KKyAKKy0vLy8gUmVhZCBhbGwgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGZp bGVzIGZyb20gdGhlIGRlZmF1bHQgbG9jYXRpb24KKy1wdWIgZm4gYWxsKCkgLT4gUmVzdWx0PFZl YzxSZXBvPj4geworLSAgICBsZXQgY29uZmlncyA9IGZzOjpyZWFkX2RpcihZVU1fUkVQT1NfRCkK Ky0gICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiQ291bGQgbm90IGxpc3QgZmlsZXMg aW46IHt9IiwgWVVNX1JFUE9TX0QpKT87CistICAgIGxldCBtdXQgcmVwb3MgPSBWZWM6Om5ldygp OworLSAgICBmb3IgYyBpbiBjb25maWdzIHsKKysvLy8gUmVhZCByZXBvIGNvbmZpZyBmaWxlcyBm cm9tIGEgc2luZ2xlIGRpcmVjdG9yeSwgYXBwZW5kaW5nIHRvIGByZXBvc2AuCisrLy8vIFNpbGVu dGx5IHNraXBzIHRoZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisrZm4gY29sbGVj dF9yZXBvc19mcm9tX2RpcihkaXI6ICZQYXRoLCByZXBvczogJm11dCBWZWM8UmVwbz4pIC0+IFJl c3VsdDwoKT4geworKyAgICBsZXQgZW50cmllcyA9IG1hdGNoIGZzOjpyZWFkX2RpcihkaXIpIHsK KysgICAgICAgIE9rKGVudHJpZXMpID0+IGVudHJpZXMsCisrICAgICAgICBFcnIoZSkgaWYgZS5r aW5kKCkgPT0gc3RkOjppbzo6RXJyb3JLaW5kOjpOb3RGb3VuZCA9PiByZXR1cm4gT2soKCkpLAor KyAgICAgICAgRXJyKGUpID0+IHsKKysgICAgICAgICAgICByZXR1cm4gRXJyKGUpLndpdGhfY29u dGV4dCh8fCBmb3JtYXQhKCJDb3VsZCBub3QgbGlzdCBmaWxlcyBpbjoge30iLCBkaXIuZGlzcGxh eSgpKSkKKysgICAgICAgIH0KKysgICAgfTsKKysgICAgZm9yIGMgaW4gZW50cmllcyB7CisgICAg ICAgICBsZXQgcGF0aCA9IGM/LnBhdGgoKTsKKyAgICAgICAgIG1hdGNoIHBhcnNlX3JlcG9fZmls ZSgmcGF0aCkgeworICAgICAgICAgICAgIEVycihlKSA9PiB7CitAQCAtNDYsNiArNDksMTUgQEAg cHViIGZuIGFsbCgpIC0+IFJlc3VsdDxWZWM8UmVwbz4+IHsKKyAgICAgICAgICAgICBPayhtdXQg cikgPT4gcmVwb3MuYXBwZW5kKCZtdXQgciksCisgICAgICAgICB9CisgICAgIH0KKysgICAgT2so KCkpCisrfQorKworKy8vLyBSZWFkIGFsbCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gZmlsZXMg ZnJvbSBib3RoIHJlcG8gY29uZmlnIGRpcmVjdG9yaWVzCisrcHViIGZuIGFsbCgpIC0+IFJlc3Vs dDxWZWM8UmVwbz4+IHsKKysgICAgbGV0IG11dCByZXBvcyA9IFZlYzo6bmV3KCk7CisrICAgIGZv ciBkaXIgaW4gJltBQlNfWVVNX1JFUE9TX0QsIEFCU19ETkY1X1JFUE9TX0RdIHsKKysgICAgICAg IGNvbGxlY3RfcmVwb3NfZnJvbV9kaXIoUGF0aDo6bmV3KGRpciksICZtdXQgcmVwb3MpPzsKKysg ICAgfQorICAgICBPayhyZXBvcykKKyB9CisgCitkaWZmIC0tZ2l0IGEvcnVzdC9zcmMvbGliLnJz IGIvcnVzdC9zcmMvbGliLnJzCitpbmRleCAzMTM4MzY3N2E4Li4wMzc4MjY5NzYzIDEwMDY0NAor LS0tIGEvcnVzdC9zcmMvbGliLnJzCisrKysgYi9ydXN0L3NyYy9saWIucnMKK0BAIC03MDEsNiAr NzAxLDEzIEBAIHB1YiBtb2QgZmZpIHsKKyAgICAgICAgIGZuIGdldF9wYWNrYWdlcygmc2VsZikg LT4gVmVjPFN0cmluZz47CisgICAgIH0KKyAKKysgICAgLy8gY29tcG9zZXBvc3QucnMKKysgICAg ZXh0ZXJuICJSdXN0IiB7CisrICAgICAgICAvLy8gUmV0dXJuIHRoZSBsaXN0IG9mIHJlcG8gY29u ZmlndXJhdGlvbiBkaXJlY3RvcmllcyB0byBzZWFyY2gKKysgICAgICAgIC8vLyAoZS5nLiBbIi9l dGMveXVtLnJlcG9zLmQiLCAiL3Vzci9zaGFyZS9kbmY1L3JlcG9zLmQiXSkuCisrICAgICAgICBm biBnZXRfcmVwb3NfZGlycygpIC0+IFZlYzxTdHJpbmc+OworKyAgICB9CisrCisgICAgIC8vIHV0 aWxzLnJzCisgICAgIGV4dGVybiAiUnVzdCIgeworICAgICAgICAgZm4gdmFyc3Vic3RpdHV0ZShz OiAmc3RyLCB2YXJzOiAmVmVjPFN0cmluZ01hcHBpbmc+KSAtPiBSZXN1bHQ8U3RyaW5nPjsKK2Rp ZmYgLS1naXQgYS9zcmMvZGFlbW9uL3JwbW9zdHJlZS1zeXNyb290LXVwZ3JhZGVyLmggYi9zcmMv ZGFlbW9uL3JwbW9zdHJlZS1zeXNyb290LXVwZ3JhZGVyLmgKK2luZGV4IGI4ZjYwMjY4ZGUuLmU1 NjQ2MDRlMDUgMTAwNjQ0CistLS0gYS9zcmMvZGFlbW9uL3JwbW9zdHJlZS1zeXNyb290LXVwZ3Jh ZGVyLmgKKysrKyBiL3NyYy9kYWVtb24vcnBtb3N0cmVlLXN5c3Jvb3QtdXBncmFkZXIuaAorQEAg LTY1LDcgKzY1LDcgQEAgdHlwZWRlZiBlbnVtCisgCisgLyogX05PTkUgbWVhbnMgd2UncmUgZG9p bmcgcHVyZSBvc3RyZWUsIG5vIGNsaWVudC1zaWRlIGNvbXB1dGF0aW9uLgorICAqIF9MT0NBTCBp cyBqdXN0IGUuZy4gcnBtLW9zdHJlZSBpbml0cmFtZnMKKy0gKiBfUlBNTURfUkVQT1MgaXMgd2hl cmUgd2UncmUgZG93bmxvYWRpbmcgZGF0YSBmcm9tIC9ldGMveXVtLnJlcG9zLmQKKysgKiBfUlBN TURfUkVQT1MgaXMgd2hlcmUgd2UncmUgZG93bmxvYWRpbmcgZGF0YSBmcm9tIHl1bS5yZXBvcy5k IC8gZG5mNSByZXBvcy5kCisgICovCisgdHlwZWRlZiBlbnVtCisgeworZGlmZiAtLWdpdCBhL3Ny Yy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmN4eCBiL3NyYy9saWJwcml2L3JwbW9zdHJlZS1jb3Jl LmN4eAoraW5kZXggZTk0NGQ5MDkxNi4uNDU1YzJkMGFhOCAxMDA2NDQKKy0tLSBhL3NyYy9saWJw cml2L3JwbW9zdHJlZS1jb3JlLmN4eAorKysrIGIvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUu Y3h4CitAQCAtMTg2LDYgKzE4NiwyNSBAQCBzdGF0ZV9hY3Rpb25fY2hhbmdlZF9jYiAoRG5mU3Rh dGUgKnN0YXRlLCBEbmZTdGF0ZUFjdGlvbiBhY3Rpb24sIGNvbnN0IGdjaGFyICphYworICAgICB9 CisgfQorIAorKy8qIEJ1aWxkIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHJlcG8gY29uZmln dXJhdGlvbiBkaXJlY3RvcmllcywKKysgKiB1c2luZyB0aGUgY2Fub25pY2FsIGxpc3QgZnJvbSBS dXN0LiBJZiBAcm9vdCBpcyBub24tTlVMTCwgZWFjaAorKyAqIHBhdGggaXMgcHJlZml4ZWQgd2l0 aCBpdCAoZm9yIGRlcGxveW1lbnQvc291cmNlIHJvb3QgY29udGV4dHMpLgorKyAqLworK3N0YXRp YyBHU3RydgorK2J1aWxkX3JlcG9zX2RpcnMgKGNvbnN0IGNoYXIgKnJvb3QpCisreworKyAgYXV0 byBkaXJzID0gcnBtb3N0cmVlY3h4OjpnZXRfcmVwb3NfZGlycyAoKTsKKysgIGF1dG8gcmV0ID0g Z19uZXcwIChnY2hhciAqLCBkaXJzLnNpemUgKCkgKyAxKTsKKysgIGZvciAoc2l6ZV90IGkgPSAw OyBpIDwgZGlycy5zaXplICgpOyBpKyspCisrICAgIHsKKysgICAgICBpZiAocm9vdCkKKysgICAg ICAgIHJldFtpXSA9IGdfYnVpbGRfZmlsZW5hbWUgKHJvb3QsIGRpcnNbaV0uY19zdHIgKCksIE5V TEwpOworKyAgICAgIGVsc2UKKysgICAgICAgIHJldFtpXSA9IGdfc3RyZHVwIChkaXJzW2ldLmNf c3RyICgpKTsKKysgICAgfQorKyAgcmV0dXJuIHJldDsKKyt9CisrCisgLyogTG93IGxldmVsIEFQ SSB0byBjcmVhdGUgYSBjb250ZXh0LiAgQXZvaWQgdGhpcyBpbiBwcmVmZXJlbmNlCisgICogdG8g Y3JlYXRpbmcgYSBjbGllbnQgb3IgY29tcG9zZSBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuCisg ICovCitAQCAtMjA2LDcgKzIyNSwxMyBAQCBycG1vc3RyZWVfY29udGV4dF9uZXdfYmFzZSAoT3N0 cmVlUmVwbyAqcmVwbykKKyAgIHNlbGYtPmRuZmN0eCA9IGRuZl9jb250ZXh0X25ldyAoKTsKKyAg IGRuZl9jb250ZXh0X3NldF9odHRwX3Byb3h5IChzZWxmLT5kbmZjdHgsIGdfZ2V0ZW52ICgiaHR0 cF9wcm94eSIpKTsKKyAKKy0gIGRuZl9jb250ZXh0X3NldF9yZXBvX2RpciAoc2VsZi0+ZG5mY3R4 LCAiL2V0Yy95dW0ucmVwb3MuZCIpOworKyAgLyogU2V0IHJlcG8gY29uZmlndXJhdGlvbiBkaXJl Y3RvcmllcyB1c2luZyB0aGUgY2Fub25pY2FsIGxpc3QgZnJvbSBSdXN0LgorKyAgICogVGhlIHJl cG8gbG9hZGVyIGdyYWNlZnVsbHkgc2tpcHMgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorKyAg ICovCisrICB7CisrICAgIGdfYXV0byAoR1N0cnYpIHJlcG9zX2RpcnMgPSBidWlsZF9yZXBvc19k aXJzIChOVUxMKTsKKysgICAgZG5mX2NvbnRleHRfc2V0X3JlcG9zX2RpciAoc2VsZi0+ZG5mY3R4 LCAoY29uc3QgZ2NoYXIgKmNvbnN0ICopcmVwb3NfZGlycyk7CisrICB9CisgICBkbmZfY29udGV4 dF9zZXRfY2FjaGVfZGlyIChzZWxmLT5kbmZjdHgsIFJQTU9TVFJFRV9DT1JFX0NBQ0hFRElSIFJQ TU9TVFJFRV9ESVJfQ0FDSEVfUkVQT01EKTsKKyAgIGRuZl9jb250ZXh0X3NldF9zb2x2X2RpciAo c2VsZi0+ZG5mY3R4LCBSUE1PU1RSRUVfQ09SRV9DQUNIRURJUiBSUE1PU1RSRUVfRElSX0NBQ0hF X1NPTFYpOworICAgZG5mX2NvbnRleHRfc2V0X2xvY2tfZGlyIChzZWxmLT5kbmZjdHgsICIvcnVu L3JwbS1vc3RyZWUvIiBSUE1PU1RSRUVfRElSX0xPQ0spOworQEAgLTM1NywxNiArMzgyLDI2IEBA IHJwbW9zdHJlZV9jb250ZXh0X3NldF9yZXBvc19kaXIgKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYs IGNvbnN0IGNoYXIgKnJlcG9zZGlyKQorICAgZ19kZWJ1ZyAoInNldCBvdmVycmlkZSBmb3IgcmVw b3MgZGlyIik7CisgfQorIAorKy8vIFNhbWUgYXMgYWJvdmUgYnV0IHVzaW5nIHRoZSBtdWx0aS1k aXJlY3RvcnkgdmFyaWFudCB0byBhbGxvdyBzZXR0aW5nCisrLy8gbXVsdGlwbGUgcmVwb3MgZGly cyAoZS5nLiBib3RoIC9ldGMveXVtLnJlcG9zLmQgYW5kIC91c3Ivc2hhcmUvZG5mNS9yZXBvcy5k KS4KKyt2b2lkCisrcnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9zX2RpcnMgKFJwbU9zdHJlZUNv bnRleHQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbnN0ICpyZXBvc2RpcnMpCisreworKyAgZG5mX2Nv bnRleHRfc2V0X3JlcG9zX2RpciAoc2VsZi0+ZG5mY3R4LCByZXBvc2RpcnMpOworKyAgc2VsZi0+ cmVwb3NfZGlyX2NvbmZpZ3VyZWQgPSBUUlVFOworKyAgZ19kZWJ1ZyAoInNldCBvdmVycmlkZSBm b3IgcmVwb3MgZGlycyAobXVsdGkpIik7CisrfQorKworIC8qIFBpY2sgdXAgcmVwb3MgZGlyIGFu ZCBwYXNzd2QgZnJvbSBAY2ZnX2RlcGxveW1lbnQuICovCisgdm9pZAorIHJwbW9zdHJlZV9jb250 ZXh0X2NvbmZpZ3VyZV9mcm9tX2RlcGxveW1lbnQgKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYsIE9z dHJlZVN5c3Jvb3QgKnN5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3N0cmVlRGVwbG95bWVudCAqY2ZnX2RlcGxveW1lbnQpCisgeworICAgZ19h dXRvZnJlZSBjaGFyICpjZmdfZGVwbG95bWVudF9yb290ID0gcnBtb3N0cmVlX2dldF9kZXBsb3lt ZW50X3Jvb3QgKHN5c3Jvb3QsIGNmZ19kZXBsb3ltZW50KTsKKy0gIGdfYXV0b2ZyZWUgY2hhciAq cmVwb3NkaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChjZmdfZGVwbG95bWVudF9yb290LCAiZXRjL3l1 bS5yZXBvcy5kIiwgTlVMTCk7CisgCistICAvKiBwb2ludCBsaWJoaWYgdG8gdGhlIHl1bS5yZXBv cy5kIGFuZCBvcy1yZWxlYXNlIG9mIHRoZSBtZXJnZSBkZXBsb3ltZW50ICovCistICBycG1vc3Ry ZWVfY29udGV4dF9zZXRfcmVwb3NfZGlyIChzZWxmLCByZXBvc2Rpcik7CisrICAvKiBQb2ludCBs aWJkbmYgdG8gcmVwbyBjb25maWcgZGlycyB1bmRlciB0aGUgbWVyZ2UgZGVwbG95bWVudC4gKi8K KysgIGdfYXV0byAoR1N0cnYpIHJlcG9zX2RpcnMgPSBidWlsZF9yZXBvc19kaXJzIChjZmdfZGVw bG95bWVudF9yb290KTsKKysgIHJwbW9zdHJlZV9jb250ZXh0X3NldF9yZXBvc19kaXJzIChzZWxm LCAoY29uc3QgZ2NoYXIgKmNvbnN0ICopcmVwb3NfZGlycyk7CisgCisgICAvKiBwb2ludCB0aGUg Y29yZSB0byB0aGUgcGFzc3dkICYgZ3JvdXAgb2YgdGhlIG1lcmdlIGRlcGxveW1lbnQgKi8KKyAg IGdfYXNzZXJ0ICghc2VsZi0+cGFzc3dkX2Rpcik7CitAQCAtNjk0LDkgKzcyOSw5IEBAIHJwbW9z dHJlZV9jb250ZXh0X3NldHVwIChScG1Pc3RyZWVDb250ZXh0ICpzZWxmLCBjb25zdCBjaGFyICpp bnN0YWxsX3Jvb3QsIGNvbnN0CisgICAgICAgLy8gb3ZlcnJvZGUgdGhlIHJlcG9zIGRpci4KKyAg ICAgICBpZiAoIXNlbGYtPnJlcG9zX2Rpcl9jb25maWd1cmVkKQorICAgICAgICAgeworLSAgICAg ICAgICBnX2F1dG9mcmVlIGNoYXIgKnNvdXJjZV9yZXBvcyA9IGdfYnVpbGRfZmlsZW5hbWUgKHNv dXJjZV9yb290LCAiZXRjL3l1bS5yZXBvcy5kIiwgTlVMTCk7CistICAgICAgICAgIGRuZl9jb250 ZXh0X3NldF9yZXBvX2RpciAoc2VsZi0+ZG5mY3R4LCBzb3VyY2VfcmVwb3MpOworLSAgICAgICAg ICBnX2RlYnVnICgiU2V0IHJlcG9zIGRpciBmcm9tIHNvdXJjZSByb290Iik7CisrICAgICAgICAg IGdfYXV0byAoR1N0cnYpIHJlcG9zX2RpcnMgPSBidWlsZF9yZXBvc19kaXJzIChzb3VyY2Vfcm9v dCk7CisrICAgICAgICAgIGRuZl9jb250ZXh0X3NldF9yZXBvc19kaXIgKHNlbGYtPmRuZmN0eCwg KGNvbnN0IGdjaGFyICpjb25zdCAqKXJlcG9zX2RpcnMpOworKyAgICAgICAgICBnX2RlYnVnICgi U2V0IHJlcG9zIGRpcnMgZnJvbSBzb3VyY2Ugcm9vdCIpOworICAgICAgICAgfQorICAgICB9Cisg CitAQCAtMjM3MCw4ICsyNDA1LDEwIEBAIHJwbW9zdHJlZV9maW5kX2FuZF9kb3dubG9hZF9wYWNr YWdlcyAoY29uc3QgY2hhciAqY29uc3QgKnBhY2thZ2VzLCBjb25zdCBjaGFyICpzCisgICBpZiAo IXJwbW9zdHJlZV9jb250ZXh0X3NldHVwIChjdHgsIE5VTEwsIHNvdXJjZV9yb290LCBjYW5jZWxs YWJsZSwgZXJyb3IpKQorICAgICByZXR1cm4gZ2xueF9wcmVmaXhfZXJyb3IgKGVycm9yLCAiU2V0 dGluZyB1cCBkbmYgY29udGV4dCIpOworIAorLSAgZ19hdXRvZnJlZSBjaGFyICpyZXBvc2RpciA9 IGdfYnVpbGRfZmlsZW5hbWUgKHJlcG9fcm9vdCA/OiBzb3VyY2Vfcm9vdCwgImV0Yy95dW0ucmVw b3MuZCIsIE5VTEwpOworLSAgZG5mX2NvbnRleHRfc2V0X3JlcG9fZGlyIChjdHgtPmRuZmN0eCwg cmVwb3NkaXIpOworKyAgeworKyAgICBnX2F1dG8gKEdTdHJ2KSByZXBvc19kaXJzID0gYnVpbGRf cmVwb3NfZGlycyAocmVwb19yb290ID86IHNvdXJjZV9yb290KTsKKysgICAgZG5mX2NvbnRleHRf c2V0X3JlcG9zX2RpciAoY3R4LT5kbmZjdHgsIChjb25zdCBnY2hhciAqY29uc3QgKilyZXBvc19k aXJzKTsKKysgIH0KKyAKKyAgIGF1dG8gZmxhZ3MgPSAoRG5mQ29udGV4dFNldHVwU2Fja0ZsYWdz KShETkZfQ09OVEVYVF9TRVRVUF9TQUNLX0ZMQUdfU0tJUF9SUE1EQgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRE5GX0NPTlRFWFRfU0VUVVBfU0FDS19GTEFH X1NLSVBfRklMRUxJU1RTKTsKK2RpZmYgLS1naXQgYS9zcmMvbGlicHJpdi9ycG1vc3RyZWUtY29y ZS5oIGIvc3JjL2xpYnByaXYvcnBtb3N0cmVlLWNvcmUuaAoraW5kZXggNzJlY2VjYjVhZC4uZDc0 MzAwY2RhMSAxMDA2NDQKKy0tLSBhL3NyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmgKKysrKyBi L3NyYy9saWJwcml2L3JwbW9zdHJlZS1jb3JlLmgKK0BAIC0xMTQsNiArMTE0LDcgQEAgdm9pZCBy cG1vc3RyZWVfY29udGV4dF9kaXNhYmxlX3NlbGludXggKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYp OworIGNvbnN0IGNoYXIgKnJwbW9zdHJlZV9jb250ZXh0X2dldF9yZWYgKFJwbU9zdHJlZUNvbnRl eHQgKnNlbGYpOworIAorIHZvaWQgcnBtb3N0cmVlX2NvbnRleHRfc2V0X3JlcG9zX2RpciAoUnBt T3N0cmVlQ29udGV4dCAqc2VsZiwgY29uc3QgY2hhciAqcmVwb3NkaXIpOworK3ZvaWQgcnBtb3N0 cmVlX2NvbnRleHRfc2V0X3JlcG9zX2RpcnMgKFJwbU9zdHJlZUNvbnRleHQgKnNlbGYsIGNvbnN0 IGNoYXIgKmNvbnN0ICpyZXBvc2RpcnMpOworIAorIHZvaWQgcnBtb3N0cmVlX2NvbnRleHRfc2V0 X3JlcG9zIChScG1Pc3RyZWVDb250ZXh0ICpzZWxmLCBPc3RyZWVSZXBvICpiYXNlX3JlcG8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9zdHJlZVJlcG8gKnBrZ2NhY2hlX3Jl cG8pOworZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbW1vbi9saWJ0ZXN0cmVwb3Muc2ggYi90ZXN0cy9j b21tb24vbGlidGVzdHJlcG9zLnNoCitpbmRleCA5ZTcwYWFkYzNiLi4yYzNlZjMzNmRkIDEwMDY0 NAorLS0tIGEvdGVzdHMvY29tbW9uL2xpYnRlc3RyZXBvcy5zaAorKysrIGIvdGVzdHMvY29tbW9u L2xpYnRlc3RyZXBvcy5zaAorQEAgLTIwLDcgKzIwLDEzIEBACisgc2V0dXBfcnBtbWRfcmVwb3Mo KSB7CisgICAgIGRlc3Q9JDEKKyAgICAgc2hpZnQKKy0gICAgcmVwb3M9JHtSUE1PU1RSRUVfQ09N UE9TRV9URVNUX1VTRV9SRVBPUzotL2V0Yy95dW0ucmVwb3MuZH0KKysgICAgaWYgWyAtbiAiJHtS UE1PU1RSRUVfQ09NUE9TRV9URVNUX1VTRV9SRVBPUzotfSIgXTsgdGhlbgorKyAgICAgICAgcmVw b3M9JHtSUE1PU1RSRUVfQ09NUE9TRV9URVNUX1VTRV9SRVBPU30KKysgICAgZWxpZiBbIC1kIC91 c3Ivc2hhcmUvZG5mNS9yZXBvcy5kIF07IHRoZW4KKysgICAgICAgIHJlcG9zPS91c3Ivc2hhcmUv ZG5mNS9yZXBvcy5kCisrICAgIGVsc2UKKysgICAgICAgIHJlcG9zPS9ldGMveXVtLnJlcG9zLmQK KysgICAgZmkKKyAgICAgZm9yIHggaW4gJHtyZXBvc30vZmVkb3JheywtdXBkYXRlc30ucmVwbzsg ZG8KKyAgICAgICAgIGJuPSQoYmFzZW5hbWUgJHt4fSkKKyAgICAgICAgIGNwICR4ICR7ZGVzdH0v JHtibn0KK2RpZmYgLS1naXQgYS90ZXN0cy9jb21wb3NlLWltYWdlLnNoIGIvdGVzdHMvY29tcG9z ZS1pbWFnZS5zaAoraW5kZXggNTBhZDI3MTRhZS4uMzQxMjYwNmE4NiAxMDA3NTUKKy0tLSBhL3Rl c3RzL2NvbXBvc2UtaW1hZ2Uuc2gKKysrKyBiL3Rlc3RzL2NvbXBvc2UtaW1hZ2Uuc2gKK0BAIC01 OSw3ICs1OSwxMCBAQCAke3N5c3RlbWRfc3lzdXNlcnN9CisgcmVwb3M6CisgICAtIGZlZG9yYSAg IyBJbnRlbnRpYWxseSB1c2luZyBmcm96ZW4gR0EgcmVwbworIEVPRgorLWNwIC9ldGMveXVtLnJl cG9zLmQvKi5yZXBvIC4KKysjIENvcHkgcmVwbyBmaWxlcyBmcm9tIHdoaWNoZXZlciBsb2NhdGlv biBleGlzdHMKKytmb3IgZCBpbiAvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCAvZXRjL3l1bS5yZXBv cy5kOyBkbworKyAgdGVzdCAtZCAiJGQiICYmIGNwICIkZCIvKi5yZXBvIC4gMj4vZGV2L251bGwg fHwgdHJ1ZQorK2RvbmUKKyBpZiBycG0tb3N0cmVlIGNvbXBvc2UgaW1hZ2UgLS1jYWNoZWRpcj0u Li9jYWNoZS1jb250YWluZXIgLS1sYWJlbD1mb289YmFyIC0tbGFiZWw9YmF6PWJsYWggLS1pbml0 aWFsaXplLW1vZGU9bmV2ZXIgbWluaW1hbC55YW1sIG1pbmltYWwub2NpYXJjaGl2ZSAyPi9kZXYv bnVsbDsgdGhlbgorICAgZmF0YWwgImJ1aWx0IGFuIGltYWdlIGluIC0taW5pdGlhbGl6ZS1tb2Rl PW5ldmVyIgorIGZpCitAQCAtOTAsNyArOTMsMTAgQEAgcGFja2FnZXM6CisgcmVwb3M6CisgICAt IGZlZG9yYSAgIyBJbnRlbnRpYWxseSB1c2luZyBmcm96ZW4gR0EgcmVwbworIEVPRgorLWNwIC9l dGMveXVtLnJlcG9zLmQvKi5yZXBvIC4KKysjIENvcHkgcmVwbyBmaWxlcyBmcm9tIHdoaWNoZXZl ciBsb2NhdGlvbiBleGlzdHMKKytmb3IgZCBpbiAvdXNyL3NoYXJlL2RuZjUvcmVwb3MuZCAvZXRj L3l1bS5yZXBvcy5kOyBkbworKyAgdGVzdCAtZCAiJGQiICYmIGNwICIkZCIvKi5yZXBvIC4gMj4v ZGV2L251bGwgfHwgdHJ1ZQorK2RvbmUKKyAjIFVuZm9ydHVuYXRlbHksIC0taW5pdGlhbGl6ZS1t b2RlPWlmLW5vdC1leGlzdHMgaXMgYnJva2VuIHdpdGggLm9jaWFyY2hpdmUuLi4KKyBycG0tb3N0 cmVlIGNvbXBvc2UgaW1hZ2UgLS1jYWNoZWRpcj0uLi9jYWNoZSAtLXRvdWNoLWlmLWNoYW5nZWQ9 Y2hhbmdlZC5zdGFtcCAtLWluaXRpYWxpemUtbW9kZT1hbHdheXMgbWluaW1hbC55YW1sIG1pbmlt YWwub2NpYXJjaGl2ZQorICMgVE9ETyBhY3R1YWxseSB0ZXN0IHRoaXMgY29udGFpbmVyIGltYWdl CgpkaWZmIC0tZ2l0IGEvcnBtLW9zdHJlZS5zcGVjIGIvcnBtLW9zdHJlZS5zcGVjCmluZGV4IGEz NTlhZTEuLjQyMGY0N2EgMTAwNjQ0Ci0tLSBhL3JwbS1vc3RyZWUuc3BlYworKysgYi9ycG0tb3N0 cmVlLnNwZWMKQEAgLTExLDYgKzExLDE2IEBAIFVSTDogaHR0cHM6Ly9naXRodWIuY29tL2NvcmVv cy9ycG0tb3N0cmVlCiAjIGluIHRoZSB1cHN0cmVhbSBnaXQuICBJdCBhbHNvIGNvbnRhaW5zIHZl bmRvcmVkIFJ1c3Qgc291cmNlcy4KIFNvdXJjZTA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb3Jlb3Mv cnBtLW9zdHJlZS9yZWxlYXNlcy9kb3dubG9hZC92JXt2ZXJzaW9ufS9ycG0tb3N0cmVlLSV7dmVy c2lvbn0udGFyLnh6CiAKKyMgU3VwcG9ydCByZWxvY2F0ZWQgcmVwbyBjb25maWdzIGFuZCBHUEcg a2V5cyAoRmVkb3JhIDQ1KykgLSAjNTYyNAorIyBNYWluIGNvbW1pdCBmcm9tIGh0dHBzOi8vZ2l0 aHViLmNvbS9jb3Jlb3MvcnBtLW9zdHJlZS9wdWxsLzU2MjQKKyMgU2Vjb25kIGNvbW1pdCBpcyBh IHN1YnByb2plY3QgdXBkYXRlIHRoYXQgY2Fubm90IGFwcGx5LCBpbnN0ZWFkCisjIHdlIGhhdmUg dGhlIG5leHQgcGF0Y2gKK1BhdGNoOiAyZDE3N2RmZDY2YWI0NWFlMjc2NjFhMDg5OWYwYzY0ZDQ5 YWE4MTU0LnBhdGNoCisjIGtleXJpbmc6IEFsc28gc2VhcmNoIC91c3Ivc2hhcmUvcGtpL3JwbS1n cGcgZm9yIEdQRyBrZXlzCisjIGh0dHBzOi8vZ2l0aHViLmNvbS9ycG0tc29mdHdhcmUtbWFuYWdl bWVudC9saWJkbmYvY29tbWl0L2E4ZTlmY2M1YzViODBmZTI1ZTcyNWQwMjhlOWY5YjgwOGNiMDI3 M2YKKyMgZWRpdGVkIHRvIGFwcGx5IHRvIHRoZSBycG0tb3N0cmVlJ3MgYnVuZGxlZCBsaWJkbmYg KGp1c3QgYWRkZWQgb25lIGV4dHJhIGxpYmRuZi8pCitQYXRjaDogMDAwMS1rZXlyaW5nLUFsc28t c2VhcmNoLXVzci1zaGFyZS1wa2ktcnBtLWdwZy1mb3ItR1BHLWtlLnBhdGNoCisKICMgU2VlIGh0 dHBzOi8vZ2l0aHViLmNvbS9jb3Jlb3MvZmVkb3JhLWNvcmVvcy10cmFja2VyL2lzc3Vlcy8xNzE2 CiAjIG9zdHJlZSBub3Qgb24gaTY4NiBmb3IgUkhFTCAxMAogIyBodHRwczovL2dpdGh1Yi5jb20v Y29udGFpbmVycy9jb21wb3NlZnMvcHVsbC8yMjkjaXNzdWVjb21tZW50LTE4Mzg3MzU3NjQK