From amarok-devel Mon May 06 21:52:55 2013 From: =?utf-8?q?Mat=C4=9Bj_Laitl?= Date: Mon, 06 May 2013 21:52:55 +0000 To: amarok-devel Subject: [amarok] /: Fix Saved Playlists and Podcasts actions Message-Id: <20130506215255.20B1BA6071 () git ! kde ! org> X-MARC-Message: https://marc.info/?l=amarok-devel&m=136787719928527 R2l0IGNvbW1pdCBkMzk4MmRjNmMyZmEyOTUzYzM3ZDQ4NjRiY2E2MWU3M2FmZjE5YTUyIGJ5IE1h dMSbaiBMYWl0bC4KQ29tbWl0dGVkIG9uIDA2LzA1LzIwMTMgYXQgMjI6NDguClB1c2hlZCBieSBs YWl0bCBpbnRvIGJyYW5jaCAnbWFzdGVyJy4KCkZpeCBTYXZlZCBQbGF5bGlzdHMgYW5kIFBvZGNh c3RzIGFjdGlvbnMKCkFmdGVyIDIgZmFpbGVkIGF0dGVtcHRzIHRvIHNvbHZlIHRoaXMgbm9uLWlu dHJ1c2l2ZWx5LCBJIHJlYWxpemVkIHRoZQpvYnZpb3VzOiB0aGUgYWN0aW9ucyBiZWxvbmcgdG8g dGhlIHZpZXcsIG5vdCB0aGUgbW9kZWwhIChRdCBoYXMgbm8KTW9kZWwvVmlldy9Db250cm9sbGVy LCBpdCBoYXMgTW9kZWwvVmlldytDb250cm9sbGVyKQoKQWZ0ZXIgdGhpcyBpdCB3YXMgImVhc3ki LCBqdXN0IGEgZmFpciBiaXQgb2Ygd29yayB0byBtb3ZlIHJlbGV2YW50CmFjdGlvbnMgdG8gUGxh eWxpc3RCcm93c2VyTW9kZWwgYW5kIGVuc3VyZSB0aGV5IHdvcmsgY29ycmVjdGx5LiBTb21lCnBs YXlsaXN0IChhbmQgcG9kY2FzdCkgYWN0aW9ucyB3ZXJlbid0IHJlYWxseSBhcHByb3ByaWF0ZSBm b3IKUGxheWxpc3RCcm93c2VyTW9kZWwuIE1ldGhvZHMgdG8gZ2V0IGFjdGlvbnMgZnJvbSB0aGVz ZSBuZWVkZWQgdG8gYmUKY2hhbmdlZCwgYmVjYXVzZSB0aGUgb2xkIHdheSBzaW1wbHkgZGlkbid0 IGFsbG93IHJlbGlhYmxlIGFjdGlvbgpleGVjdXRpb24uCgpXaGVuIEkgd2FzIGF0IGl0LCBJIGNs ZWFuZWQgdXAgYSBmYWlyIGJpdCBvZiB0aGluZ3MgaW4gcG9kY2FzdHMgKGFuZApwbGF5bGlzdCBw cm92aWRlcnMpIC0gSSBoYXZlbid0IHNlZW4gc3VjaCBjb2RlIGJsb2F0IGluIGEgd2hpbGUgLQox MDAtbGluZS1sb25nIHVudXNlZCBmdW5jdGlvbiBpc24ndCBhbnl0aGluZyBzdXJwcmlzaW5nIHRo ZXJlLiBJJ20KcG9pbnRpbmcgYXQgeW91LCBCYXJ0LiA6LSkKClRoaXMgcmVncmVzc2lvbiBleGlz dHMgc2luY2UgUmFsZidzIGNsZWFudXBzLCBhbHRob3VnaCBSYWxmIGNlcnRhaW5seQpkaWRuJ3Qg aW50cm9kdWNlIGl0IC0gaGUganVzdCBicm9rZSB0aGUgZGVsaWNhdGUgZXF1aWxpYnJpdW0gb2Yg aGFja3MKdGhhdCBrZXB0IGl0IHdvcmtpbmcuIChhbmQgSSBzdGlsbCB0aGluayBpdCB3YXMgd29y a2luZyBqdXN0IGJ5IGNoYW5jZSkKClRoaXMgZG9lc24ndCBnbyBpbnRvIENoYW5nZUxvZyBhcyBp dCB3YXMgaW50cm9kdWNlZCBwb3N0LTIuNy4gVGhlIGNvZGUKaXMgbm90IHBlcmZlY3QgeWV0ICh3 ZSBoYXZlIGxvc3QgIkNyZWF0ZSBFbXB0eSBQbGF5bGlzdCIgaWYgeW91IGNsaW5rCmludG8gZW1w dHkgc3BhY2UpLCBidXQgdGhlIGJ1ZyB0aGlzIGZpeGVzIGlzIG11Y2ggbW9yZSBjcml0aWNhbC4K CkJVRzogMzE4NzgyCkZJWEVELUlOOiAyLjgKQ0NNQUlMOiBhbWFyb2stZGV2ZWxAa2RlLm9yZwoK TSAgKzEyICAgLTEwMyAgc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9QbGF5bGlzdEJyb3dz ZXJNb2RlbC5jcHAKTSAgKzYgICAgLTE0ICAgc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9Q bGF5bGlzdEJyb3dzZXJNb2RlbC5oCk0gICszNTEgIC02OSAgIHNyYy9icm93c2Vycy9wbGF5bGlz dGJyb3dzZXIvUGxheWxpc3RCcm93c2VyVmlldy5jcHAKTSAgKzM2ICAgLTIxICAgc3JjL2Jyb3dz ZXJzL3BsYXlsaXN0YnJvd3Nlci9QbGF5bGlzdEJyb3dzZXJWaWV3LmgKTSAgKzEzICAgLTY4ICAg c3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9Qb2RjYXN0TW9kZWwuY3BwCk0gICsyICAgIC05 ICAgIHNyYy9icm93c2Vycy9wbGF5bGlzdGJyb3dzZXIvUG9kY2FzdE1vZGVsLmgKTSAgKzEzICAg LTMwICAgc3JjL2NvcmUtaW1wbC9jb2xsZWN0aW9ucy9pcG9kY29sbGVjdGlvbi9JcG9kUGxheWxp c3RQcm92aWRlci5jcHAKTSAgKzQgICAgLTUgICAgc3JjL2NvcmUtaW1wbC9jb2xsZWN0aW9ucy9p cG9kY29sbGVjdGlvbi9JcG9kUGxheWxpc3RQcm92aWRlci5oCk0gICsyICAgIC02MiAgIHNyYy9j b3JlLWltcGwvY29sbGVjdGlvbnMvbWVkaWFkZXZpY2Vjb2xsZWN0aW9uL3BsYXlsaXN0L01lZGlh RGV2aWNlVXNlclBsYXlsaXN0UHJvdmlkZXIuY3BwCk0gICszICAgIC0xOCAgIHNyYy9jb3JlLWlt cGwvY29sbGVjdGlvbnMvbWVkaWFkZXZpY2Vjb2xsZWN0aW9uL3BsYXlsaXN0L01lZGlhRGV2aWNl VXNlclBsYXlsaXN0UHJvdmlkZXIuaApNICArNDggICAtNDYgICBzcmMvY29yZS1pbXBsL2NvbGxl Y3Rpb25zL3Vtc2NvbGxlY3Rpb24vcG9kY2FzdHMvVW1zUG9kY2FzdFByb3ZpZGVyLmNwcApNICAr NCAgICAtNiAgICBzcmMvY29yZS1pbXBsL2NvbGxlY3Rpb25zL3Vtc2NvbGxlY3Rpb24vcG9kY2Fz dHMvVW1zUG9kY2FzdFByb3ZpZGVyLmgKTSAgKzEgICAgLTIxOCAgc3JjL2NvcmUtaW1wbC9wbGF5 bGlzdHMvcHJvdmlkZXJzL3VzZXIvVXNlclBsYXlsaXN0UHJvdmlkZXIuY3BwCk0gICsxNyAgIC02 NCAgIHNyYy9jb3JlLWltcGwvcGxheWxpc3RzL3Byb3ZpZGVycy91c2VyL1VzZXJQbGF5bGlzdFBy b3ZpZGVyLmgKTSAgKzEgICAgLTEgICAgc3JjL2NvcmUtaW1wbC9wbGF5bGlzdHMvdHlwZXMvZmls ZS9QbGF5bGlzdEZpbGUuaApNICArODMgICAtMjgzICBzcmMvY29yZS1pbXBsL3BvZGNhc3RzL3Nx bC9TcWxQb2RjYXN0UHJvdmlkZXIuY3BwCk0gICszICAgIC02ICAgIHNyYy9jb3JlLWltcGwvcG9k Y2FzdHMvc3FsL1NxbFBvZGNhc3RQcm92aWRlci5oCk0gICswICAgIC0xNyAgIHNyYy9jb3JlL3Bs YXlsaXN0cy9QbGF5bGlzdC5jcHAKTSAgKzAgICAgLTEyICAgc3JjL2NvcmUvcGxheWxpc3RzL1Bs YXlsaXN0LmgKTSAgKzQzICAgLTQgICAgc3JjL2NvcmUvcGxheWxpc3RzL1BsYXlsaXN0UHJvdmlk ZXIuY3BwCk0gICs1MCAgIC0xOSAgIHNyYy9jb3JlL3BsYXlsaXN0cy9QbGF5bGlzdFByb3ZpZGVy LmgKTSAgKzEgICAgLTI2ICAgc3JjL2NvcmUvcG9kY2FzdHMvUG9kY2FzdFByb3ZpZGVyLmgKTSAg KzEgICAgLTEgICAgc3JjL3BsYXlsaXN0bWFuYWdlci9QbGF5bGlzdE1hbmFnZXIuY3BwCk0gICsw ICAgIC0xOCAgIHNyYy9wbGF5bGlzdG1hbmFnZXIvU3luY2VkUGxheWxpc3QuY3BwCk0gICswICAg IC0zICAgIHNyYy9wbGF5bGlzdG1hbmFnZXIvU3luY2VkUGxheWxpc3QuaApNICArNyAgICAtMiAg ICBzcmMvcGxheWxpc3RtYW5hZ2VyL2ZpbGUvUGxheWxpc3RGaWxlUHJvdmlkZXIuY3BwCk0gICsz ICAgIC05ICAgIHNyYy9wbGF5bGlzdG1hbmFnZXIvZmlsZS9QbGF5bGlzdEZpbGVQcm92aWRlci5o Ck0gICsyICAgIC0zNCAgIHNyYy9wbGF5bGlzdG1hbmFnZXIvc3FsL1NxbFVzZXJQbGF5bGlzdFBy b3ZpZGVyLmNwcApNICArMiAgICAtOCAgICBzcmMvcGxheWxpc3RtYW5hZ2VyL3NxbC9TcWxVc2Vy UGxheWxpc3RQcm92aWRlci5oCk0gICsxNyAgIC0yOSAgIHNyYy9zZXJ2aWNlcy9ncG9kZGVyL0dw b2RkZXJQcm92aWRlci5jcHAKTSAgKzMgICAgLTIgICAgc3JjL3NlcnZpY2VzL2dwb2RkZXIvR3Bv ZGRlclByb3ZpZGVyLmgKTSAgKzEgICAgLTEgICAgdGVzdHMvcGxheWxpc3RtYW5hZ2VyL2ZpbGUv VGVzdFBsYXlsaXN0RmlsZVByb3ZpZGVyLmNwcApNICArMSAgICAtMSAgICB0ZXN0cy9wbGF5bGlz dG1hbmFnZXIvc3FsL1Rlc3RTcWxVc2VyUGxheWxpc3RQcm92aWRlci5jcHAKCmh0dHA6Ly9jb21t aXRzLmtkZS5vcmcvYW1hcm9rL2QzOTgyZGM2YzJmYTI5NTNjMzdkNDg2NGJjYTYxZTczYWZmMTlh NTIKCmRpZmYgLS1naXQgYS9zcmMvYnJvd3NlcnMvcGxheWxpc3Ricm93c2VyL1BsYXlsaXN0QnJv d3Nlck1vZGVsLmNwcCBiL3NyYy9icm93c2Vycy9wbGF5bGlzdGJyb3dzZXIvUGxheWxpc3RCcm93 c2VyTW9kZWwuY3BwCmluZGV4IDZlZTNkYjMuLmQyYjU1ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9icm93 c2Vycy9wbGF5bGlzdGJyb3dzZXIvUGxheWxpc3RCcm93c2VyTW9kZWwuY3BwCisrKyBiL3NyYy9i cm93c2Vycy9wbGF5bGlzdGJyb3dzZXIvUGxheWxpc3RCcm93c2VyTW9kZWwuY3BwCkBAIC00MSwy OSArNDEsNiBAQCBsZXNzVGhhblBsYXlsaXN0VGl0bGVzKCBjb25zdCBQbGF5bGlzdHM6OlBsYXls aXN0UHRyICZsaHMsIGNvbnN0IFBsYXlsaXN0czo6UGxheQogUGxheWxpc3RCcm93c2VyTW9kZWw6 OlBsYXlsaXN0QnJvd3Nlck1vZGVsKCBpbnQgcGxheWxpc3RDYXRlZ29yeSApCiAgICAgOiBtX3Bs YXlsaXN0Q2F0ZWdvcnkoIHBsYXlsaXN0Q2F0ZWdvcnkgKQogewotICAgIG1fY3JlYXRlRW1wdHlQ bGF5bGlzdEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggIm1lZGlhLXRyYWNrLWFkZC1hbWFy b2siICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkx OG4oICJDcmVhdGUgZW1wdHkgcGxheWxpc3QiICksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoaXMgKTsKLSAgICBjb25uZWN0KCBtX2NyZWF0ZUVtcHR5 UGxheWxpc3RBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIFNMT1Qoc2xvdENyZWF0ZUVtcHR5 UGxheWxpc3QoKSkgKTsKLQotICAgIC8vY29tbW9uLCB1bmNvbmRpdGlvbmFsIGFjdGlvbnMKLSAg ICBtX2FwcGVuZEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggIm1lZGlhLXRyYWNrLWFkZC1h bWFyb2siICksIGkxOG4oICImQWRkIHRvIFBsYXlsaXN0IiApLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRoaXMgKTsKLSAgICAvLyBvYmplY3QgbmFtZSBtdXN0IG1hdGNoIG9u ZSBpbiBQbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmlldwotICAgIG1fYXBwZW5k QWN0aW9uLT5zZXRPYmplY3ROYW1lKCAiYXBwZW5kQWN0aW9uIiApOwotICAgIC8vIGtleSBzaG9y dGN1dCBpcyBvbmx5IGZvciBkaXNwbGF5IHB1cnBvc2VzIGhlcmUsIGFjdHVhbCBvbmUgaXMgZGV0 ZXJtaW5lZCBieSBWaWV3IGluIE1vZGVsL1ZpZXcgY2xhc3NlcwotICAgIG1fYXBwZW5kQWN0aW9u LT5zZXRTaG9ydGN1dCggUXQ6OktleV9FbnRlciApOwotICAgIG1fYXBwZW5kQWN0aW9uLT5zZXRQ cm9wZXJ0eSggInBvcHVwZHJvcHBlcl9zdmdfaWQiLCAiYXBwZW5kIiApOwotICAgIGNvbm5lY3Qo IG1fYXBwZW5kQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCB0aGlzLCBTTE9UKHNsb3RBcHBl bmQoKSkgKTsKLQotICAgIG1fbG9hZEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggImZvbGRl ci1vcGVuIiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuYyggIlJlcGxh Y2UgdGhlIGN1cnJlbnRseSBsb2FkZWQgdHJhY2tzIHdpdGggdGhlc2UiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiZSZXBsYWNlIFBsYXlsaXN0IiApLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzICk7Ci0gICAgbV9sb2FkQWN0aW9uLT5zZXRP YmplY3ROYW1lKCAibG9hZEFjdGlvbiIgKTsKLSAgICBtX2xvYWRBY3Rpb24tPnNldFByb3BlcnR5 KCAicG9wdXBkcm9wcGVyX3N2Z19pZCIsICJsb2FkIiApOwotICAgIGNvbm5lY3QoIG1fbG9hZEFj dGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwgdGhpcywgU0xPVChzbG90TG9hZCgpKSApOwotCiAg ICAgY29ubmVjdCggVGhlOjpwbGF5bGlzdE1hbmFnZXIoKSwgU0lHTkFMKHVwZGF0ZWQoaW50KSks IFNMT1Qoc2xvdFVwZGF0ZShpbnQpKSApOwogCiAgICAgY29ubmVjdCggVGhlOjpwbGF5bGlzdE1h bmFnZXIoKSwgU0lHTkFMKHBsYXlsaXN0QWRkZWQoUGxheWxpc3RzOjpQbGF5bGlzdFB0cixpbnQp KSwKQEAgLTkzLDYgKzcwLDcgQEAgUGxheWxpc3RCcm93c2VyTW9kZWw6OmRhdGEoIGNvbnN0IFFN b2RlbEluZGV4ICZpbmRleCwgaW50IHJvbGUgKSBjb25zdAogICAgIFFMaXN0PFBsYXlsaXN0czo6 UGxheWxpc3RQcm92aWRlciAqPiBwcm92aWRlcnMgPQogICAgICAgICBUaGU6OnBsYXlsaXN0TWFu YWdlcigpLT5nZXRQcm92aWRlcnNGb3JQbGF5bGlzdCggcGxheWxpc3QgKTsKICAgICBQbGF5bGlz dHM6OlBsYXlsaXN0UHJvdmlkZXIgKnByb3ZpZGVyID0gcHJvdmlkZXJzLmNvdW50KCkgPT0gMSA/ IHByb3ZpZGVycy5maXJzdCgpIDogMDsKKyAgICBNZXRhOjpUcmFja1B0ciB0cmFjazsKIAogICAg IHN3aXRjaCggaW5kZXguY29sdW1uKCkgKQogICAgIHsKQEAgLTEwMCw3ICs3OCw3IEBAIFBsYXls aXN0QnJvd3Nlck1vZGVsOjpkYXRhKCBjb25zdCBRTW9kZWxJbmRleCAmaW5kZXgsIGludCByb2xl ICkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYoIElTX1RSQUNLKGluZGV4KSApCiAg ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWV0YTo6VHJhY2tQdHIgdHJhY2sgPSBwbGF5 bGlzdC0+dHJhY2tzKClbaW5kZXgucm93KCldOworICAgICAgICAgICAgICAgIHRyYWNrID0gcGxh eWxpc3QtPnRyYWNrcygpW2luZGV4LnJvdygpXTsKICAgICAgICAgICAgICAgICBuYW1lID0gdHJh Y2stPnByZXR0eU5hbWUoKTsKICAgICAgICAgICAgICAgICBpY29uID0gS0ljb24oICJhbWFyb2tf dHJhY2siICk7CiAgICAgICAgICAgICB9CkBAIC0xOTAsMTcgKzE2OCwxNyBAQCBQbGF5bGlzdEJy b3dzZXJNb2RlbDo6ZGF0YSggY29uc3QgUU1vZGVsSW5kZXggJmluZGV4LCBpbnQgcm9sZSApIGNv bnN0CiAgICAgICAgICAgICBpZiggSVNfVFJBQ0soaW5kZXgpICkKICAgICAgICAgICAgICAgICBy ZXR1cm4gUVZhcmlhbnQoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1 cm4gaTE4bmNwKCAibnVtYmVyIG9mIHBsYXlsaXN0cyBmcm9tIG9uZSBzb3VyY2UiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJPbmUgcGxheWxpc3QiLCAiJTEgcGxheWxpc3RzIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5bGlzdENvdW50ICk7Ci0gICAgICAg IGNhc2UgUHJldHR5VHJlZVJvbGVzOjpEZWNvcmF0b3JSb2xlOgotICAgICAgICAgICAgcmV0dXJu IFFWYXJpYW50Ojpmcm9tVmFsdWUoIGFjdGlvbnNGb3IoIGluZGV4ICkgKTsKLSAgICAgICAgY2Fz ZSBQcmV0dHlUcmVlUm9sZXM6OkRlY29yYXRvclJvbGVDb3VudDoKLSAgICAgICAgICAgIHJldHVy biBhY3Rpb25zRm9yKCBpbmRleCApLmNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkx OG5jcCggIm51bWJlciBvZiBwbGF5bGlzdHMgZnJvbSBvbmUgc291cmNlIiwgIk9uZSBwbGF5bGlz dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUxIHBsYXlsaXN0cyIsIHBsYXls aXN0Q291bnQgKTsKICAgICAgICAgY2FzZSBQbGF5bGlzdEJyb3dzZXJNb2RlbDo6UHJvdmlkZXJS b2xlOgotICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyID8gUVZhcmlhbnQ6OmZyb21WYWx1ZTxQ bGF5bGlzdHM6OlBsYXlsaXN0UHJvdmlkZXIgKj4oIHByb3ZpZGVyICkgOiBRVmFyaWFudCgpOwot Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiBRVmFyaWFudCgpOworICAgICAgICAgICAgcmV0dXJu IHByb3ZpZGVyID8gUVZhcmlhbnQ6OmZyb21WYWx1ZSggcHJvdmlkZXIgKSA6IFFWYXJpYW50KCk7 CisgICAgICAgIGNhc2UgUGxheWxpc3RCcm93c2VyTW9kZWw6OlBsYXlsaXN0Um9sZToKKyAgICAg ICAgICAgIHJldHVybiBwbGF5bGlzdCA/IFFWYXJpYW50Ojpmcm9tVmFsdWUoIHBsYXlsaXN0ICkg OiBRVmFyaWFudCgpOworICAgICAgICBjYXNlIFBsYXlsaXN0QnJvd3Nlck1vZGVsOjpUcmFja1Jv bGU6CisgICAgICAgICAgICByZXR1cm4gdHJhY2sgPyBRVmFyaWFudDo6ZnJvbVZhbHVlKCB0cmFj ayApIDogUVZhcmlhbnQoKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu IFFWYXJpYW50KCk7CiAgICAgfQogfQogCkBAIC02MTgsMzQgKzU5Niw2IEBAIFBsYXlsaXN0QnJv d3Nlck1vZGVsOjpsb2FkUGxheWxpc3RzKCkKIH0KIAogdm9pZAotUGxheWxpc3RCcm93c2VyTW9k ZWw6OnNsb3RMb2FkKCkKLXsKLSAgICBRQWN0aW9uICphY3Rpb24gPSBxb2JqZWN0X2Nhc3Q8UUFj dGlvbiAqPiggUU9iamVjdDo6c2VuZGVyKCkgKTsKLSAgICBpZiggYWN0aW9uID09IDAgKQotICAg ICAgICByZXR1cm47Ci0KLSAgICBRTW9kZWxJbmRleExpc3QgaW5kZXhlcyA9IGFjdGlvbi0+ZGF0 YSgpLnZhbHVlPFFNb2RlbEluZGV4TGlzdD4oKTsKLQotICAgIE1ldGE6OlRyYWNrTGlzdCB0cmFj a3MgPSB0cmFja3NGcm9tSW5kZXhlcyggaW5kZXhlcyApOwotICAgIGlmKCAhdHJhY2tzLmlzRW1w dHkoKSApCi0gICAgICAgIFRoZTo6cGxheWxpc3RDb250cm9sbGVyKCktPmluc2VydE9wdGlvbmVk KCB0cmFja3MsIFBsYXlsaXN0OjpMb2FkQW5kUGxheSApOwotfQotCi12b2lkCi1QbGF5bGlzdEJy b3dzZXJNb2RlbDo6c2xvdEFwcGVuZCgpCi17Ci0gICAgUUFjdGlvbiAqYWN0aW9uID0gcW9iamVj dF9jYXN0PFFBY3Rpb24gKj4oIFFPYmplY3Q6OnNlbmRlcigpICk7Ci0gICAgaWYoIGFjdGlvbiA9 PSAwICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUU1vZGVsSW5kZXhMaXN0IGluZGV4ZXMgPSBh Y3Rpb24tPmRhdGEoKS52YWx1ZTxRTW9kZWxJbmRleExpc3Q+KCk7Ci0KLSAgICBNZXRhOjpUcmFj a0xpc3QgdHJhY2tzID0gdHJhY2tzRnJvbUluZGV4ZXMoIGluZGV4ZXMgKTsKLSAgICBpZiggIXRy YWNrcy5pc0VtcHR5KCkgKQotICAgICAgICBUaGU6OnBsYXlsaXN0Q29udHJvbGxlcigpLT5pbnNl cnRPcHRpb25lZCggdHJhY2tzLCBQbGF5bGlzdDo6QXBwZW5kQW5kUGxheSApOwotfQotCi12b2lk CiBQbGF5bGlzdEJyb3dzZXJNb2RlbDo6c2xvdFBsYXlsaXN0QWRkZWQoIFBsYXlsaXN0czo6UGxh eWxpc3RQdHIgcGxheWxpc3QsIGludCBjYXRlZ29yeSApCiB7CiAgICAgLy9pZ25vcmUgcGxheWxp c3RzIG9mIGEgZGlmZmVyZW50IGNhdGVnb3J5CkBAIC03MDksMTMgKzY1OSw2IEBAIFBsYXlsaXN0 QnJvd3Nlck1vZGVsOjpzbG90UGxheWxpc3RVcGRhdGVkKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRy IHBsYXlsaXN0LCBpbnQKICAgICBlbmRJbnNlcnRSb3dzKCk7CiB9CiAKLXZvaWQKLVBsYXlsaXN0 QnJvd3Nlck1vZGVsOjpzbG90Q3JlYXRlRW1wdHlQbGF5bGlzdCgpCi17Ci0gICAgVGhlOjpwbGF5 bGlzdE1hbmFnZXIoKS0+c2F2ZSggTWV0YTo6VHJhY2tMaXN0KCksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQW1hcm9rOjpnZW5lcmF0ZVBsYXlsaXN0TmFtZSggTWV0YTo6VHJh Y2tMaXN0KCkgKSApOwotfQotCiBNZXRhOjpUcmFja0xpc3QKIFBsYXlsaXN0QnJvd3Nlck1vZGVs Ojp0cmFja3NGcm9tSW5kZXhlcyggY29uc3QgUU1vZGVsSW5kZXhMaXN0ICZsaXN0ICkgY29uc3QK IHsKQEAgLTc3OSw0MCArNzIyLDYgQEAgUGxheWxpc3RCcm93c2VyTW9kZWw6OnByb3ZpZGVyRm9y SW5kZXgoIGNvbnN0IFFNb2RlbEluZGV4ICZpZHggKSBjb25zdAogICAgIHJldHVybiBtX3BsYXls aXN0cy5hdCggcGxheWxpc3RSb3cgKS0+cHJvdmlkZXIoKTsKIH0KIAotUUFjdGlvbkxpc3QKLVBs YXlsaXN0QnJvd3Nlck1vZGVsOjphY3Rpb25zRm9yKCBjb25zdCBRTW9kZWxJbmRleCAmaWR4ICkg Y29uc3QKLXsKLSAgICBpZiggIWlkeC5pc1ZhbGlkKCkgKQotICAgIHsKLSAgICAgICAgUUFjdGlv bkxpc3QgZW1wdHlBY3Rpb25zOwotICAgICAgICBlbXB0eUFjdGlvbnMgPDwgbV9jcmVhdGVFbXB0 eVBsYXlsaXN0QWN0aW9uOwotICAgICAgICByZXR1cm4gZW1wdHlBY3Rpb25zOwotICAgIH0KLSAg ICAvL3doZXRoZXIgd2UgdXNlIHRoZSBsaXN0IGZyb20gbV9hcHBlbmRBY3Rpb24gb2YgbV9sb2Fk QWN0aW9uIGRvZXMgbm90IG1hdHRlciB0aGV5IGFyZSB0aGUgc2FtZQotICAgIFFNb2RlbEluZGV4 TGlzdCBhY3Rpb25MaXN0ID0gbV9hcHBlbmRBY3Rpb24tPmRhdGEoKS52YWx1ZTxRTW9kZWxJbmRl eExpc3Q+KCk7Ci0KLSAgICBhY3Rpb25MaXN0IDw8IGlkeDsKLSAgICBRVmFyaWFudCB2YWx1ZSA9 IFFWYXJpYW50Ojpmcm9tVmFsdWUoIGFjdGlvbkxpc3QgKTsKLSAgICBtX2FwcGVuZEFjdGlvbi0+ c2V0RGF0YSggdmFsdWUgKTsKLSAgICBtX2xvYWRBY3Rpb24tPnNldERhdGEoIHZhbHVlICk7Ci0K LSAgICBRQWN0aW9uTGlzdCBhY3Rpb25zOwotICAgIGFjdGlvbnMgPDwgbV9hcHBlbmRBY3Rpb24g PDwgbV9sb2FkQWN0aW9uOwotCi0gICAgaWYoICFJU19UUkFDSyhpZHgpICkKLSAgICB7Ci0gICAg ICAgIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QgPSBtX3BsYXlsaXN0cy52YWx1ZSgg aWR4LmludGVybmFsSWQoKSApOwotICAgICAgICBhY3Rpb25zIDw8IHBsYXlsaXN0LT5hY3Rpb25z KCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIFBsYXlsaXN0czo6UGxheWxpc3RQ dHIgcGxheWxpc3QgPSBtX3BsYXlsaXN0cy52YWx1ZSggaWR4LnBhcmVudCgpLmludGVybmFsSWQo KSApOwotICAgICAgICBhY3Rpb25zIDw8IHBsYXlsaXN0LT50cmFja0FjdGlvbnMoIGlkeC5yb3co KSApOwotICAgIH0KLQotICAgIHJldHVybiBhY3Rpb25zOwotfQotCiBQbGF5bGlzdHM6OlBsYXls aXN0UHJvdmlkZXIgKgogUGxheWxpc3RCcm93c2VyTW9kZWw6OmdldFByb3ZpZGVyQnlOYW1lKCBj b25zdCBRU3RyaW5nICZuYW1lICkKIHsKZGlmZiAtLWdpdCBhL3NyYy9icm93c2Vycy9wbGF5bGlz dGJyb3dzZXIvUGxheWxpc3RCcm93c2VyTW9kZWwuaCBiL3NyYy9icm93c2Vycy9wbGF5bGlzdGJy b3dzZXIvUGxheWxpc3RCcm93c2VyTW9kZWwuaAppbmRleCBkNTA3NzkzLi42ZjNkNTg0IDEwMDY0 NAotLS0gYS9zcmMvYnJvd3NlcnMvcGxheWxpc3Ricm93c2VyL1BsYXlsaXN0QnJvd3Nlck1vZGVs LmgKKysrIGIvc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9QbGF5bGlzdEJyb3dzZXJNb2Rl bC5oCkBAIC0zOSw4ICszOSw3IEBAIG5hbWVzcGFjZSBQbGF5bGlzdEJyb3dzZXJOUyB7CiAvKioK ICAgICBAYXV0aG9yIEJhcnQgQ2VybmVlbHMgPGJhcnQuY2VybmVlbHNAa2RlLm9yZz4KICovCi1j bGFzcyBQbGF5bGlzdEJyb3dzZXJNb2RlbCA6IHB1YmxpYyBRQWJzdHJhY3RJdGVtTW9kZWwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBQbGF5bGlzdHM6OlBsYXlsaXN0T2JzZXJ2 ZXIKK2NsYXNzIFBsYXlsaXN0QnJvd3Nlck1vZGVsIDogcHVibGljIFFBYnN0cmFjdEl0ZW1Nb2Rl bCwgcHVibGljIFBsYXlsaXN0czo6UGxheWxpc3RPYnNlcnZlcgogewogICAgIFFfT0JKRUNUCiAg ICAgcHVibGljOgpAQCAtNTMsOCArNTIsMTEgQEAgY2xhc3MgUGxheWxpc3RCcm93c2VyTW9kZWwg OiBwdWJsaWMgUUFic3RyYWN0SXRlbU1vZGVsLAogCiAgICAgICAgIGVudW0KICAgICAgICAgewot ICAgICAgICAgICAgUHJvdmlkZXJSb2xlID0gUXQ6OlVzZXJSb2xlICsgMjEsICAvLyBwb2ludGVy IHRvIGFzc29jaWF0ZWQgUGxheWxpc3RQcm92aWRlcgotICAgICAgICAgICAgQ3VzdG9tUm9sZU9m ZnNldCA9IFF0OjpVc2VyUm9sZSArIDIyIC8vZmlyc3Qgcm9sZSB0aGF0IGNhbiBiZSB1c2VkIGJ5 IHN1Ymxhc3NlcyBmb3IgdGhlaXIgb3duIGRhdGEKKyAgICAgICAgICAgIFByb3ZpZGVyUm9sZSA9 IFF0OjpVc2VyUm9sZSArIDIxLCAvLyBwb2ludGVyIHRvIGFzc29jaWF0ZWQgUGxheWxpc3RQcm92 aWRlcgorICAgICAgICAgICAgUGxheWxpc3RSb2xlID0gUXQ6OlVzZXJSb2xlICsgMjIsIC8vIFBs YXlsaXN0UHRyIGZvciBhc3NvY2lhdGVkIHBsYXlsaXN0IG9yIG51bGwKKyAgICAgICAgICAgIFRy YWNrUm9sZSA9IFF0OjpVc2VyUm9sZSArIDIzLCAvLyBUcmFja1B0ciBmb3IgYXNzb2NpYXRlZCB0 cmFjayBvciBudWxsCisgICAgICAgICAgICBFcGlzb2RlSXNOZXdSb2xlID0gUXQ6OlVzZXJSb2xl ICsgMjQsIC8vIGZvciBwb2RjYXN0IGVwaXNvZGVzLCBzdXBwb3J0cyBzZXR0aW5nLCB0eXBlOiBi b29sCisgICAgICAgICAgICBDdXN0b21Sb2xlT2Zmc2V0ID0gUXQ6OlVzZXJSb2xlICsgMjUgLy9m aXJzdCByb2xlIHRoYXQgY2FuIGJlIHVzZWQgYnkgc3VibGFzc2VzIGZvciB0aGVpciBvd24gZGF0 YQogICAgICAgICB9OwogCiAgICAgICAgIFBsYXlsaXN0QnJvd3Nlck1vZGVsKCBpbnQgUGxheWxp c3RDYXRlZ29yeSApOwpAQCAtOTcsNyArOTksNiBAQCBjbGFzcyBQbGF5bGlzdEJyb3dzZXJNb2Rl bCA6IHB1YmxpYyBRQWJzdHJhY3RJdGVtTW9kZWwsCiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg IHZpcnR1YWwgUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgbG9hZFBsYXlsaXN0cygpOwotICAgICAg ICB2aXJ0dWFsIFFBY3Rpb25MaXN0IGFjdGlvbnNGb3IoIGNvbnN0IFFNb2RlbEluZGV4ICZpZHgg KSBjb25zdDsKIAogICAgICAgICBNZXRhOjpUcmFja0xpc3QgdHJhY2tzRnJvbUluZGV4ZXMoIGNv bnN0IFFNb2RlbEluZGV4TGlzdCAmbGlzdCApIGNvbnN0OwogICAgICAgICBNZXRhOjpUcmFja1B0 ciB0cmFja0Zyb21JbmRleCggY29uc3QgUU1vZGVsSW5kZXggJmluZGV4ICkgY29uc3Q7CkBAIC0x MTAsMjMgKzExMSwxNCBAQCBjbGFzcyBQbGF5bGlzdEJyb3dzZXJNb2RlbCA6IHB1YmxpYyBRQWJz dHJhY3RJdGVtTW9kZWwsCiAgICAgICAgIFBsYXlsaXN0czo6UGxheWxpc3RQcm92aWRlciAqZ2V0 UHJvdmlkZXJCeU5hbWUoIGNvbnN0IFFTdHJpbmcgJm5hbWUgKTsKIAogICAgIHByaXZhdGUgc2xv dHM6Ci0gICAgICAgIHZvaWQgc2xvdExvYWQoKTsKLSAgICAgICAgdm9pZCBzbG90QXBwZW5kKCk7 CiAgICAgICAgIHZvaWQgc2xvdFBsYXlsaXN0QWRkZWQoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIg cGxheWxpc3QsIGludCBjYXRlZ29yeSApOwogICAgICAgICB2b2lkIHNsb3RQbGF5bGlzdFJlbW92 ZWQoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIGludCBjYXRlZ29yeSApOwogICAg ICAgICB2b2lkIHNsb3RQbGF5bGlzdFVwZGF0ZWQoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxh eWxpc3QsIGludCBjYXRlZ29yeSApOwotICAgICAgICB2b2lkIHNsb3RDcmVhdGVFbXB0eVBsYXls aXN0KCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9wbGF5bGlzdENhdGVnb3J5Owot ICAgICAgICBRQWN0aW9uICptX2FwcGVuZEFjdGlvbjsKLSAgICAgICAgUUFjdGlvbiAqbV9sb2Fk QWN0aW9uOwotICAgICAgICBRQWN0aW9uICptX2NyZWF0ZUVtcHR5UGxheWxpc3RBY3Rpb247CiB9 OwogCiB9CiAKLS8vd2Ugc3RvcmUgdGhlc2UgaW4gYSBRVmFyaWFudCBmb3IgdGhlIGxvYWQgYW5k IGFwcGVuZCBhY3Rpb25zCi1RX0RFQ0xBUkVfTUVUQVRZUEUoIFFNb2RlbEluZGV4TGlzdCApCi0K ICNlbmRpZiAvL0FNQVJPS19QTEFZTElTVEJST1dTRVJNT0RFTF9ICmRpZmYgLS1naXQgYS9zcmMv YnJvd3NlcnMvcGxheWxpc3Ricm93c2VyL1BsYXlsaXN0QnJvd3NlclZpZXcuY3BwIGIvc3JjL2Jy b3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9QbGF5bGlzdEJyb3dzZXJWaWV3LmNwcAppbmRleCBjMGUx ZDFkLi40NDE4YTA2IDEwMDY0NAotLS0gYS9zcmMvYnJvd3NlcnMvcGxheWxpc3Ricm93c2VyL1Bs YXlsaXN0QnJvd3NlclZpZXcuY3BwCisrKyBiL3NyYy9icm93c2Vycy9wbGF5bGlzdGJyb3dzZXIv UGxheWxpc3RCcm93c2VyVmlldy5jcHAKQEAgLTE3LDExICsxNywxMCBAQAogCiAjaW5jbHVkZSAi UGxheWxpc3RCcm93c2VyVmlldy5oIgogCi0jZGVmaW5lIERFQlVHX1BSRUZJWCAiUGxheWxpc3RC cm93c2VyVmlldyIKLQogI2luY2x1ZGUgIlBhbGV0dGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUG9w dXBEcm9wcGVyRmFjdG9yeS5oIgogI2luY2x1ZGUgIlN2Z0hhbmRsZXIuaCIKKyNpbmNsdWRlICJh bWFyb2tjb25maWcuaCIKICNpbmNsdWRlICJicm93c2Vycy9wbGF5bGlzdGJyb3dzZXIvUGxheWxp c3RCcm93c2VyTW9kZWwuaCIKICNpbmNsdWRlICJicm93c2Vycy9wbGF5bGlzdGJyb3dzZXIvUGxh eWxpc3RzQnlQcm92aWRlclByb3h5LmgiCiAjaW5jbHVkZSAiYnJvd3NlcnMvcGxheWxpc3Ricm93 c2VyL1BsYXlsaXN0c0luRm9sZGVyc1Byb3h5LmgiCkBAIC0yOSwyMiArMjgsMzEgQEAKICNpbmNs dWRlICJjb250ZXh0L3BvcHVwZHJvcHBlci9saWJwdWQvUG9wdXBEcm9wcGVySXRlbS5oIgogI2lu Y2x1ZGUgImNvbnRleHQvcG9wdXBkcm9wcGVyL2xpYnB1ZC9Qb3B1cERyb3BwZXIuaCIKICNpbmNs dWRlICJjb3JlL3N1cHBvcnQvRGVidWcuaCIKKyNpbmNsdWRlICJjb3JlLWltcGwvcGxheWxpc3Rz L3R5cGVzL2ZpbGUvUGxheWxpc3RGaWxlU3VwcG9ydC5oIgogI2luY2x1ZGUgInBsYXlsaXN0L1Bs YXlsaXN0TW9kZWwuaCIKICNpbmNsdWRlICJwbGF5bGlzdC9QbGF5bGlzdENvbnRyb2xsZXIuaCIK KyNpbmNsdWRlICJwbGF5bGlzdG1hbmFnZXIvUGxheWxpc3RNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi d2lkZ2V0cy9QcmV0dHlUcmVlUm9sZXMuaCIKIAotI2luY2x1ZGUgPEtBY3Rpb24+CisjaW5jbHVk ZSA8S0ZpbGVEaWFsb2c+CiAjaW5jbHVkZSA8S0dsb2JhbFNldHRpbmdzPgogI2luY2x1ZGUgPEtN ZW51PgogCiAjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFFNb3VzZUV2ZW50PgorI2lu Y2x1ZGUgPFFDaGVja0JveD4KKyNpbmNsdWRlIDxRTGFiZWw+CisKKyNkZWZpbmUgREVCVUdfUFJF RklYICJQbGF5bGlzdEJyb3dzZXJWaWV3IgorCitRX0RFQ0xBUkVfTUVUQVRZUEUoIFFNb2RlbElu ZGV4TGlzdCApCisKK3VzaW5nIG5hbWVzcGFjZSBQbGF5bGlzdEJyb3dzZXJOUzsKIAogUGxheWxp c3RCcm93c2VyTlM6OlBsYXlsaXN0QnJvd3NlclZpZXc6OlBsYXlsaXN0QnJvd3NlclZpZXcoIFFB YnN0cmFjdEl0ZW1Nb2RlbCAqbW9kZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50ICkKICAgICA6IEFt YXJvazo6UHJldHR5VHJlZVZpZXcoIHBhcmVudCApCiAgICAgLCBtX3BkKCAwICkKLSAgICAsIG1f YWRkRm9sZGVyQWN0aW9uKCAwICkKICAgICAsIG1fb25nb2luZ0RyYWcoIGZhbHNlICkKIHsKICAg ICBERUJVR19CTE9DSwpAQCAtNTUsMTAgKzYzLDU2IEBAIFBsYXlsaXN0QnJvd3Nlck5TOjpQbGF5 bGlzdEJyb3dzZXJWaWV3OjpQbGF5bGlzdEJyb3dzZXJWaWV3KCBRQWJzdHJhY3RJdGVtTW9kZWwK ICAgICBzZXRBY2NlcHREcm9wcyggdHJ1ZSApOwogICAgIHNldEVkaXRUcmlnZ2VycyggUUFic3Ry YWN0SXRlbVZpZXc6OkVkaXRLZXlQcmVzc2VkICk7CiAgICAgc2V0TW91c2VUcmFja2luZyggdHJ1 ZSApOyAvLyBuZWVkZWQgZm9yIGhpZ2hsaWdodGluZyBwcm92aWRlciBhY3Rpb24gaWNvbnMKLX0K IAotUGxheWxpc3RCcm93c2VyTlM6OlBsYXlsaXN0QnJvd3NlclZpZXc6On5QbGF5bGlzdEJyb3dz ZXJWaWV3KCkKLXsKKyAgICBtX2NyZWF0ZUVtcHR5UGxheWxpc3RBY3Rpb24gPSBuZXcgUUFjdGlv biggS0ljb24oICJtZWRpYS10cmFjay1hZGQtYW1hcm9rIiApLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuKCAiQ3JlYXRlIGFuIEVtcHR5IFBsYXls aXN0IiApLCB0aGlzICk7CisgICAgY29ubmVjdCggbV9jcmVhdGVFbXB0eVBsYXlsaXN0QWN0aW9u LCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9UKHNsb3RDcmVhdGVFbXB0eVBsYXlsaXN0KCkpICk7 CisKKyAgICBtX2FwcGVuZEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggIm1lZGlhLXRyYWNr LWFkZC1hbWFyb2siICksCisgICAgICAgICAgICBpMThuKCAiJkFkZCB0byBQbGF5bGlzdCIgKSwg dGhpcyApOworICAgIC8vIGtleSBzaG9ydGN1dCBpcyBvbmx5IGZvciBkaXNwbGF5IHB1cnBvc2Vz IGhlcmUsIGFjdHVhbCBvbmUgaXMgZGV0ZXJtaW5lZCBieSBWaWV3IGluIE1vZGVsL1ZpZXcgY2xh c3NlcworICAgIG1fYXBwZW5kQWN0aW9uLT5zZXRTaG9ydGN1dCggUXQ6OktleV9FbnRlciApOwor ICAgIG1fYXBwZW5kQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBlcl9zdmdfaWQiLCAi YXBwZW5kIiApOworICAgIGNvbm5lY3QoIG1fYXBwZW5kQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVk KCkpLCB0aGlzLCBTTE9UKHNsb3RBcHBlbmQoKSkgKTsKKworICAgIG1fbG9hZEFjdGlvbiA9IG5l dyBRQWN0aW9uKCBLSWNvbiggImZvbGRlci1vcGVuIiApLCBpMThuYyggIlJlcGxhY2UgdGhlIGN1 cnJlbnRseSAiCisgICAgICAgICAgICAibG9hZGVkIHRyYWNrcyB3aXRoIHRoZXNlIiwgIiZSZXBs YWNlIFBsYXlsaXN0IiApLCB0aGlzICk7CisgICAgbV9sb2FkQWN0aW9uLT5zZXRQcm9wZXJ0eSgg InBvcHVwZHJvcHBlcl9zdmdfaWQiLCAibG9hZCIgKTsKKyAgICBjb25uZWN0KCBtX2xvYWRBY3Rp b24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIHRoaXMsIFNMT1Qoc2xvdExvYWQoKSkgKTsKKworICAg IG1fc2V0TmV3QWN0aW9uID0gbmV3IFFBY3Rpb24oIEtJY29uKCAicmF0aW5nIiApLCBpMThuYygg InRvZ2dsZSB0aGUgXCJuZXdcIiBzdGF0dXMgIgorICAgICAgICAgICAgIiBvZiB0aGlzIHBvZGNh c3QgZXBpc29kZSIsICImTmV3IiApLCB0aGlzICk7CisgICAgbV9zZXROZXdBY3Rpb24tPnNldFBy b3BlcnR5KCAicG9wdXBkcm9wcGVyX3N2Z19pZCIsICJuZXciICk7CisgICAgbV9zZXROZXdBY3Rp b24tPnNldENoZWNrYWJsZSggdHJ1ZSApOworICAgIGNvbm5lY3QoIG1fc2V0TmV3QWN0aW9uLCBT SUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzbG90U2V0TmV3KGJvb2wpKSApOworCisgICAg bV9yZW5hbWVQbGF5bGlzdEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggIm1lZGlhLXRyYWNr LWVkaXQtYW1hcm9rIiApLAorICAgICAgICAgICAgaTE4biggIiZSZW5hbWUuLi4iICksIHRoaXMg KTsKKyAgICBtX3JlbmFtZVBsYXlsaXN0QWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBl cl9zdmdfaWQiLCAiZWRpdCIgKTsKKyAgICAvLyBrZXkgc2hvcnRjdXQgaXMgb25seSBmb3IgZGlz cGxheSBwdXJwb3NlcyBoZXJlLCBhY3R1YWwgb25lIGlzIGRldGVybWluZWQgYnkgVmlldyBpbiBN b2RlbC9WaWV3IGNsYXNzZXMKKyAgICBtX3JlbmFtZVBsYXlsaXN0QWN0aW9uLT5zZXRTaG9ydGN1 dCggUXQ6OktleV9GMiApOworICAgIGNvbm5lY3QoIG1fcmVuYW1lUGxheWxpc3RBY3Rpb24sIFNJ R05BTCh0cmlnZ2VyZWQoKSksIHRoaXMsIFNMT1Qoc2xvdFJlbmFtZSgpKSApOworCisgICAgbV9k ZWxldGVQbGF5bGlzdEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggIm1lZGlhLXRyYWNrLXJl bW92ZS1hbWFyb2siICksCisgICAgICAgICAgICBpMThuKCAiJkRlbGV0ZS4uLiIgKSwgdGhpcyAp OworICAgIG1fZGVsZXRlUGxheWxpc3RBY3Rpb24tPnNldFByb3BlcnR5KCAicG9wdXBkcm9wcGVy X3N2Z19pZCIsICJkZWxldGUiICk7CisgICAgLy8ga2V5IHNob3J0Y3V0IGlzIG9ubHkgZm9yIGRp c3BsYXkgcHVycG9zZXMgaGVyZSwgYWN0dWFsIG9uZSBpcyBkZXRlcm1pbmVkIGJ5IFZpZXcgaW4g TW9kZWwvVmlldyBjbGFzc2VzCisgICAgbV9kZWxldGVQbGF5bGlzdEFjdGlvbi0+c2V0U2hvcnRj dXQoIFF0OjpLZXlfRGVsZXRlICk7CisgICAgY29ubmVjdCggbV9kZWxldGVQbGF5bGlzdEFjdGlv biwgU0lHTkFMKHRyaWdnZXJlZCgpKSwgU0xPVChzbG90RGVsZXRlKCkpICk7CisKKyAgICBtX3Jl bW92ZVRyYWNrc0FjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggIm1lZGlhLXRyYWNrLXJlbW92 ZS1hbWFyb2siICksCisgICAgICAgICAgICBRU3RyaW5nKCAiPHBsYWNlaG9sZGVyPiIgKSwgdGhp cyApOworICAgIG1fcmVtb3ZlVHJhY2tzQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBl cl9zdmdfaWQiLCAiZGVsZXRlIiApOworICAgIC8vIGtleSBzaG9ydGN1dCBpcyBvbmx5IGZvciBk aXNwbGF5IHB1cnBvc2VzIGhlcmUsIGFjdHVhbCBvbmUgaXMgZGV0ZXJtaW5lZCBieSBWaWV3IGlu IE1vZGVsL1ZpZXcgY2xhc3NlcworICAgIG1fcmVtb3ZlVHJhY2tzQWN0aW9uLT5zZXRTaG9ydGN1 dCggUXQ6OktleV9EZWxldGUgKTsKKyAgICBjb25uZWN0KCBtX3JlbW92ZVRyYWNrc0FjdGlvbiwg U0lHTkFMKHRyaWdnZXJlZCgpKSwgU0xPVChzbG90UmVtb3ZlVHJhY2tzKCkpICk7CisKKyAgICBt X2V4cG9ydEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggImRvY3VtZW50LWV4cG9ydC1hbWFy b2siICksCisgICAgICAgICAgICBpMThuKCAiJkV4cG9ydCBBcy4uLiIgKSwgdGhpcyApOworICAg IGNvbm5lY3QoIG1fZXhwb3J0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCB0aGlzLCBTTE9U KHNsb3RFeHBvcnQoKSkgKTsKKworICAgIG1fc2VwYXJhdG9yQWN0aW9uID0gbmV3IFFBY3Rpb24o IHRoaXMgKTsKKyAgICBtX3NlcGFyYXRvckFjdGlvbi0+c2V0U2VwYXJhdG9yKCB0cnVlICk7CiB9 CiAKIHZvaWQKQEAgLTEwMCw3ICsxNTQsNyBAQCBQbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RC cm93c2VyVmlldzo6bW91c2VSZWxlYXNlRXZlbnQoIFFNb3VzZUV2ZW50ICpldmVudCApCiAKIHZv aWQgUGxheWxpc3RCcm93c2VyTlM6OlBsYXlsaXN0QnJvd3NlclZpZXc6OnN0YXJ0RHJhZyggUXQ6 OkRyb3BBY3Rpb25zIHN1cHBvcnRlZEFjdGlvbnMgKQogewotICAgIC8vV2FhaD8gd2hlbiBhIHBh cmVudCBpdGVtIGlzIGRyYWdnZWQsIHN0YXJ0RHJhZyBpcyBjYWxsZWQgYSBidW5jaCBvZiB0aW1l cworICAgIC8vIFdhYWg/IHdoZW4gYSBwYXJlbnQgaXRlbSBpcyBkcmFnZ2VkLCBzdGFydERyYWcg aXMgY2FsbGVkIGEgYnVuY2ggb2YgdGltZXMKICAgICBpZiggbV9vbmdvaW5nRHJhZyApCiAgICAg ICAgIHJldHVybjsKICAgICBtX29uZ29pbmdEcmFnID0gdHJ1ZTsKQEAgLTEwOCwxMiArMTYyLDkg QEAgdm9pZCBQbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmlldzo6c3RhcnREcmFn KCBRdDo6RHJvcEFjdGlvbnMgc3VwcG9ydGUKICAgICBpZiggIW1fcGQgKQogICAgICAgICBtX3Bk ID0gVGhlOjpwb3B1cERyb3BwZXJGYWN0b3J5KCktPmNyZWF0ZVBvcHVwRHJvcHBlciggQ29udGV4 dDo6Q29udGV4dFZpZXc6OnNlbGYoKSApOwogCi0gICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25z OwotCiAgICAgaWYoIG1fcGQgJiYgbV9wZC0+aXNIaWRkZW4oKSApCiAgICAgewotICAgICAgICBh Y3Rpb25zID0gYWN0aW9uc0Zvciggc2VsZWN0ZWRJbmRleGVzKCkgKTsKLQorICAgICAgICBRQWN0 aW9uTGlzdCBhY3Rpb25zID0gYWN0aW9uc0Zvciggc2VsZWN0ZWRJbmRleGVzKCkgKTsKICAgICAg ICAgZm9yZWFjaCggUUFjdGlvbiAqYWN0aW9uLCBhY3Rpb25zICkKICAgICAgICAgICAgIG1fcGQt PmFkZEl0ZW0oIFRoZTo6cG9wdXBEcm9wcGVyRmFjdG9yeSgpLT5jcmVhdGVJdGVtKCBhY3Rpb24g KSApOwogCkBAIC0xMjEsMTYgKzE3MiwxMyBAQCB2b2lkIFBsYXlsaXN0QnJvd3Nlck5TOjpQbGF5 bGlzdEJyb3dzZXJWaWV3OjpzdGFydERyYWcoIFF0OjpEcm9wQWN0aW9ucyBzdXBwb3J0ZQogICAg IH0KIAogICAgIFFUcmVlVmlldzo6c3RhcnREcmFnKCBzdXBwb3J0ZWRBY3Rpb25zICk7Ci0gICAg ZGVidWcoKSA8PCAiQWZ0ZXIgdGhlIGRyYWchIjsKIAotICAgIC8vV2Uga2VlcCB0aGUgaXRlbXMg dGhhdCB0aGUgYWN0aW9ucyBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gaW4gdGhlIGFjdGlvbnMgcHJp dmF0ZSBkYXRhLgotICAgIC8vQ2xlYXIgdGhlIGRhdGEgZnJvbSBhbGwgYWN0aW9ucyBub3cgdGhh dCB0aGUgUFVEIGhhcyBleGVjdXRlZC4KLSAgICBmb3JlYWNoKCBRQWN0aW9uICphY3Rpb24sIGFj dGlvbnMgKQotICAgICAgICBhY3Rpb24tPnNldERhdGEoIFFWYXJpYW50KCkgKTsKKyAgICAvLyBX ZSBrZWVwIHRoZSBpdGVtcyB0aGF0IHRoZSBhY3Rpb25zIG5lZWQgdG8gYmUgYXBwbGllZCB0by4K KyAgICAvLyBDbGVhciB0aGUgZGF0YSBmcm9tIGFsbCBhY3Rpb25zIG5vdyB0aGF0IHRoZSBQVUQg aGFzIGV4ZWN1dGVkLgorICAgIHJlc2V0QWN0aW9uVGFyZ2V0cygpOwogCiAgICAgaWYoIG1fcGQg KQogICAgIHsKLSAgICAgICAgZGVidWcoKSA8PCAiY2xlYXJpbmcgUFVEIjsKICAgICAgICAgY29u bmVjdCggbV9wZCwgU0lHTkFMKGZhZGVIaWRlRmluaXNoZWQoKSksIG1fcGQsIFNMT1QoY2xlYXIo KSkgKTsKICAgICAgICAgbV9wZC0+aGlkZSgpOwogICAgIH0KQEAgLTE0MSw3ICsxODksOCBAQCB2 b2lkCiBQbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmlldzo6a2V5UHJlc3NFdmVu dCggUUtleUV2ZW50ICpldmVudCApCiB7CiAgICAgUU1vZGVsSW5kZXhMaXN0IGluZGljZXMgPSBz ZWxlY3RlZEluZGV4ZXMoKTsKLSAgICBpZiggaW5kaWNlcy5pc0VtcHR5KCkgKQorICAgIC8vIG1p bmQgYnVnIDMwNTIwMworICAgIGlmKCBpbmRpY2VzLmlzRW1wdHkoKSB8fCBzdGF0ZSgpICE9IFFB YnN0cmFjdEl0ZW1WaWV3OjpOb1N0YXRlICkKICAgICB7CiAgICAgICAgIEFtYXJvazo6UHJldHR5 VHJlZVZpZXc6OmtleVByZXNzRXZlbnQoIGV2ZW50ICk7CiAgICAgICAgIHJldHVybjsKQEAgLTE1 MiwyMCArMjAxLDIxIEBAIFBsYXlsaXN0QnJvd3Nlck5TOjpQbGF5bGlzdEJyb3dzZXJWaWV3Ojpr ZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKmV2ZW50ICkKICAgICAgICAgLy9hY3RpdmF0ZWQoKSBv bmx5IHdvcmtzIGZvciBjdXJyZW50IGluZGV4LCBub3QgYWxsIHNlbGVjdGVkCiAgICAgICAgIGNh c2UgUXQ6OktleV9FbnRlcjoKICAgICAgICAgY2FzZSBRdDo6S2V5X1JldHVybjoKLSAgICAgICAg ICAgIGlmKCBzdGF0ZSgpICE9IEVkaXRpbmdTdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgLy9XaHkgZG8gd2UgZXZlbiBnZXQgaW4gdGhpcyBzdGF0ZT8gU2hvdWxkbid0IHRo ZSBlZGl0b3IgY29uc3VtZSB0aGUKLSAgICAgICAgICAgICAgICAvL2tleXByZXNzPyBUaGUgZGVs ZXRlIHdvcmtzLiBzZWUgYnVnIDMwNTIwMwotICAgICAgICAgICAgICAgIGFwcGVuZEFuZFBsYXko IGluZGljZXMgKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFwcGVuZEFuZFBsYXkoIGluZGljZXMgKTsKKyAg ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBRdDo6S2V5X0RlbGV0ZToKLSAgICAgICAg ICAgIGRlbGV0ZVBsYXlsaXN0c1RyYWNrcyggaW5kaWNlcyApOworICAgICAgICB7CisgICAgICAg ICAgICBRQWN0aW9uTGlzdCBhY3Rpb25zID0gYWN0aW9uc0ZvciggaW5kaWNlcyApOyAvLyBzZXRz IGFjdGlvbiB0YXJnZXRzCisgICAgICAgICAgICBpZiggYWN0aW9ucy5jb250YWlucyggbV9yZW1v dmVUcmFja3NBY3Rpb24gKSApCisgICAgICAgICAgICAgICAgbV9yZW1vdmVUcmFja3NBY3Rpb24t PnRyaWdnZXIoKTsKKyAgICAgICAgICAgIGVsc2UgaWYoIGFjdGlvbnMuY29udGFpbnMoIG1fZGVs ZXRlUGxheWxpc3RBY3Rpb24gKSApCisgICAgICAgICAgICAgICAgbV9kZWxldGVQbGF5bGlzdEFj dGlvbi0+dHJpZ2dlcigpOworICAgICAgICAgICAgcmVzZXRBY3Rpb25UYXJnZXRzKCk7CiAgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg IGJyZWFrOwotICAgICB9CisgICAgfQogICAgIEFtYXJvazo6UHJldHR5VHJlZVZpZXc6OmtleVBy ZXNzRXZlbnQoIGV2ZW50ICk7CiB9CiAKQEAgLTIwNyw1NiArMjU3LDE0NiBAQCB2b2lkIFBsYXls aXN0QnJvd3Nlck5TOjpQbGF5bGlzdEJyb3dzZXJWaWV3Ojpjb250ZXh0TWVudUV2ZW50KCBRQ29u dGV4dE1lbnVFdmVudAogICAgIFFNb2RlbEluZGV4IGNsaWNrZWRJZHggPSBpbmRleEF0KCBldmVu dC0+cG9zKCkgKTsKIAogICAgIFFNb2RlbEluZGV4TGlzdCBpbmRpY2VzOwotICAgIGlmKCBzZWxl Y3RlZEluZGV4ZXMoKS5jb250YWlucyggY2xpY2tlZElkeCApICkKKyAgICBpZiggY2xpY2tlZElk eC5pc1ZhbGlkKCkgJiYgc2VsZWN0ZWRJbmRleGVzKCkuY29udGFpbnMoIGNsaWNrZWRJZHggKSAp CiAgICAgICAgIGluZGljZXMgPDwgc2VsZWN0ZWRJbmRleGVzKCk7Ci0gICAgZWxzZQorICAgIGVs c2UgaWYoIGNsaWNrZWRJZHguaXNWYWxpZCgpICkKICAgICAgICAgaW5kaWNlcyA8PCBjbGlja2Vk SWR4OwogCiAgICAgUUFjdGlvbkxpc3QgYWN0aW9ucyA9IGFjdGlvbnNGb3IoIGluZGljZXMgKTsK LQogICAgIGlmKCBhY3Rpb25zLmlzRW1wdHkoKSApCisgICAgeworICAgICAgICByZXNldEFjdGlv blRhcmdldHMoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIEtNZW51IG1lbnU7CiAg ICAgZm9yZWFjaCggUUFjdGlvbiAqYWN0aW9uLCBhY3Rpb25zICkKLSAgICB7Ci0gICAgICAgIGlm KCBhY3Rpb24gKQotICAgICAgICAgICAgbWVudS5hZGRBY3Rpb24oIGFjdGlvbiApOwotICAgIH0K LQotICAgIGlmKCBpbmRpY2VzLmNvdW50KCkgPT0gMCApCi0gICAgICAgIG1lbnUuYWRkQWN0aW9u KCBtX2FkZEZvbGRlckFjdGlvbiApOwotCisgICAgICAgIG1lbnUuYWRkQWN0aW9uKCBhY3Rpb24g KTsKICAgICBtZW51LmV4ZWMoIG1hcFRvR2xvYmFsKCBldmVudC0+cG9zKCkgKSApOwogCi0gICAg Ly9XZSBrZWVwIHRoZSBpdGVtcyB0aGF0IHRoZSBhY3Rpb24gbmVlZCB0byBiZSBhcHBsaWVkIHRv IGluIHRoZSBhY3Rpb24ncyBwcml2YXRlIGRhdGEuCi0gICAgLy9DbGVhciB0aGUgZGF0YSBmcm9t IGFsbCBhY3Rpb25zIG5vdyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgaGFzIGV4ZWN1dGVkLgotICAg IGZvcmVhY2goIFFBY3Rpb24gKmFjdGlvbiwgYWN0aW9ucyApCi0gICAgICAgIGFjdGlvbi0+c2V0 RGF0YSggUVZhcmlhbnQoKSApOworICAgIC8vIFdlIGtlZXAgdGhlIGl0ZW1zIHRoYXQgdGhlIGFj dGlvbiBuZWVkIHRvIGJlIGFwcGxpZWQgdG8uCisgICAgLy8gQ2xlYXIgdGhlIGRhdGEgZnJvbSBh bGwgYWN0aW9ucyBub3cgdGhhdCB0aGUgY29udGV4dCBtZW51IGhhcyBleGVjdXRlZC4KKyAgICBy ZXNldEFjdGlvblRhcmdldHMoKTsKIH0KIAogUUxpc3Q8UUFjdGlvbiAqPgotUGxheWxpc3RCcm93 c2VyTlM6OlBsYXlsaXN0QnJvd3NlclZpZXc6OmFjdGlvbnNGb3IoIFFNb2RlbEluZGV4TGlzdCBp bmRleGVzICkKK1BsYXlsaXN0QnJvd3Nlck5TOjpQbGF5bGlzdEJyb3dzZXJWaWV3OjphY3Rpb25z Rm9yKCBjb25zdCBRTW9kZWxJbmRleExpc3QgJmluZGV4ZXMgKQogeworICAgIHJlc2V0QWN0aW9u VGFyZ2V0cygpOworICAgIGlmKCBpbmRleGVzLmlzRW1wdHkoKSApCisgICAgICAgIHJldHVybiBR QWN0aW9uTGlzdCgpOworCisgICAgdXNpbmcgbmFtZXNwYWNlIFBsYXlsaXN0czsKKyAgICBRU2V0 PFBsYXlsaXN0UHJvdmlkZXIgKj4gcHJvdmlkZXJzLCB3cml0YWJsZVByb3ZpZGVyczsKICAgICBR QWN0aW9uTGlzdCBhY3Rpb25zOwotICAgIGZvcmVhY2goIFFNb2RlbEluZGV4IGlkeCwgaW5kZXhl cyApCisgICAgUU1vZGVsSW5kZXhMaXN0IG5ld1BvZGNhc3RFcGlzb2Rlcywgb2xkUG9kY2FzdEVw aXNvZGVzOworICAgIGZvcmVhY2goIGNvbnN0IFFNb2RlbEluZGV4ICZpZHgsIGluZGV4ZXMgKQog ICAgIHsKLSAgICAgICAgUUFjdGlvbkxpc3QgaWR4QWN0aW9ucyA9IG1vZGVsKCktPmRhdGEoIGlk eCwKLSAgICAgICAgICAgICAgICBQcmV0dHlUcmVlUm9sZXM6OkRlY29yYXRvclJvbGUgKS52YWx1 ZTxRQWN0aW9uTGlzdD4oKTsKLSAgICAgICAgLy9vbmx5IGFkZCB1bmlxdWUgYWN0aW9ucyBtb2Rl bCBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZW0gdW5pcXVlCi0gICAgICAgIGZvcmVhY2go IFFBY3Rpb24gKmFjdGlvbiwgaWR4QWN0aW9ucyApCisgICAgICAgIC8vIGRpcmVjdCBwcm92aWRl ciBhY3Rpb25zOgorICAgICAgICBhY3Rpb25zIDw8IGlkeC5kYXRhKCBQcmV0dHlUcmVlUm9sZXM6 OkRlY29yYXRvclJvbGUgKS52YWx1ZTxRQWN0aW9uTGlzdD4oKTsKKworICAgICAgICBQbGF5bGlz dFByb3ZpZGVyICpwcm92aWRlciA9IGlkeC5kYXRhKCBQbGF5bGlzdEJyb3dzZXJNb2RlbDo6UHJv dmlkZXJSb2xlICkudmFsdWU8UGxheWxpc3RQcm92aWRlciAqPigpOworICAgICAgICBpZiggcHJv dmlkZXIgKQorICAgICAgICAgICAgcHJvdmlkZXJzIDw8IHByb3ZpZGVyOworICAgICAgICBib29s IGlzV3JpdGFibGUgPSAgcHJvdmlkZXIgPyBwcm92aWRlci0+aXNXcml0YWJsZSgpIDogZmFsc2U7 CisgICAgICAgIGlmKCBpc1dyaXRhYmxlICkKKyAgICAgICAgICAgIHdyaXRhYmxlUHJvdmlkZXJz IHw9IHByb3ZpZGVyOworICAgICAgICBNZXRhOjpUcmFja1B0ciB0cmFjayA9IGlkeC5kYXRhKCBQ bGF5bGlzdEJyb3dzZXJNb2RlbDo6VHJhY2tSb2xlICkudmFsdWU8TWV0YTo6VHJhY2tQdHI+KCk7 CisgICAgICAgIFBsYXlsaXN0UHRyIHBsYXlsaXN0ID0gaWR4LmRhdGEoIFBsYXlsaXN0QnJvd3Nl ck1vZGVsOjpQbGF5bGlzdFJvbGUgKS52YWx1ZTxQbGF5bGlzdFB0cj4oKTsKKyAgICAgICAgaWYo ICF0cmFjayAmJiBwbGF5bGlzdCApIC8vIGEgcGxheWxpc3QgKG11c3QgY2hlY2sgaXQgaXMgbm90 IGEgdHJhY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCAhYWN0aW9ucy5jb250YWlucygg YWN0aW9uICkgKQotICAgICAgICAgICAgICAgIGFjdGlvbnMgPDwgYWN0aW9uOworICAgICAgICAg ICAgbV9hY3Rpb25QbGF5bGlzdHMgPDwgcGxheWxpc3Q7CisgICAgICAgICAgICBpZiggaXNXcml0 YWJsZSApCisgICAgICAgICAgICAgICAgbV93cml0YWJsZUFjdGlvblBsYXlsaXN0cyA8PCBwbGF5 bGlzdDsKKyAgICAgICAgfQorICAgICAgICBpZiggdHJhY2sgKQorICAgICAgICB7CisgICAgICAg ICAgICBtX2FjdGlvblRyYWNrcy5pbnNlcnQoIHBsYXlsaXN0LCBpZHgucm93KCkgKTsKKyAgICAg ICAgICAgIGlmKCBpc1dyaXRhYmxlICkKKyAgICAgICAgICAgICAgICBtX3dyaXRhYmxlQWN0aW9u VHJhY2tzLmluc2VydCggcGxheWxpc3QsIGlkeC5yb3coKSApOworICAgICAgICB9CisKKyAgICAg ICAgUVZhcmlhbnQgZXBpc29kZUlzTmV3ID0gaWR4LmRhdGEoIFBsYXlsaXN0QnJvd3Nlck1vZGVs OjpFcGlzb2RlSXNOZXdSb2xlICk7CisgICAgICAgIGlmKCBlcGlzb2RlSXNOZXcudHlwZSgpID09 IFFWYXJpYW50OjpCb29sICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIGVwaXNvZGVJc05l dy50b0Jvb2woKSApCisgICAgICAgICAgICAgICAgbmV3UG9kY2FzdEVwaXNvZGVzIDw8IGlkeDsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvbGRQb2RjYXN0RXBpc29kZXMgPDwg aWR4OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBhY3Rpb25zOworICAgIC8vIGFsbCBh Y3Rpb25zIHRha2luZyBwcm92aWRlciBoYXZlIG9ubHkgc2Vuc2Ugd2l0aCBvbmUgcHJvdmlkZXIK KyAgICBpZiggd3JpdGFibGVQcm92aWRlcnMuY291bnQoKSA9PSAxICkKKyAgICAgICAgbV93cml0 YWJsZUFjdGlvblByb3ZpZGVyID0gd3JpdGFibGVQcm92aWRlcnMudG9MaXN0KCkuZmlyc3QoKTsK KworICAgIC8vIHByb2Nlc3MgcGVyLXByb3ZpZGVyIGFjdGlvbnMKKyAgICBmb3JlYWNoKCBQbGF5 bGlzdFByb3ZpZGVyICpwcm92aWRlciwgcHJvdmlkZXJzICkKKyAgICB7CisgICAgICAgIC8vIHBy ZXBhcmUgYXJndW1lbnRzIGFuZCBnZXQgcmVsZXZhbnQgYWN0aW9ucworICAgICAgICBQbGF5bGlz dExpc3QgcHJvdmlkZXJQbGF5bGlzdHM7CisgICAgICAgIGZvcmVhY2goIGNvbnN0IFBsYXlsaXN0 UHRyICZwbGF5bGlzdCwgbV9hY3Rpb25QbGF5bGlzdHMgKQorICAgICAgICB7CisgICAgICAgICAg ICBpZiggcGxheWxpc3QtPnByb3ZpZGVyKCkgPT0gcHJvdmlkZXIgKQorICAgICAgICAgICAgICAg IHByb3ZpZGVyUGxheWxpc3RzIDw8IHBsYXlsaXN0OworICAgICAgICB9CisgICAgICAgIGFjdGlv bnMgPDwgcHJvdmlkZXItPnBsYXlsaXN0QWN0aW9ucyggcHJvdmlkZXJQbGF5bGlzdHMgKTsKKwor ICAgICAgICBRTXVsdGlIYXNoPFBsYXlsaXN0UHRyLCBpbnQ+IHBsYXlsaXN0VHJhY2tzOworICAg ICAgICBRSGFzaEl0ZXJhdG9yPFBsYXlsaXN0UHRyLCBpbnQ+IGl0KCBtX2FjdGlvblRyYWNrcyAp OworICAgICAgICB3aGlsZSggaXQuaGFzTmV4dCgpICkKKyAgICAgICAgeworICAgICAgICAgICAg aXQubmV4dCgpOworICAgICAgICAgICAgaWYoIGl0LmtleSgpLT5wcm92aWRlcigpID09IHByb3Zp ZGVyICkKKyAgICAgICAgICAgICAgICBwbGF5bGlzdFRyYWNrcy5pbnNlcnQoIGl0LmtleSgpLCBp dC52YWx1ZSgpICk7CisgICAgICAgIH0KKyAgICAgICAgYWN0aW9ucyA8PCBwcm92aWRlci0+dHJh Y2tBY3Rpb25zKCBwbGF5bGlzdFRyYWNrcyApOworICAgIH0KKworICAgIC8vIHNlcGFyYXRlIG1v ZGVsIGFjdGlvbnMgZnJvbSBzdGFuZGFyZCBhY3Rpb25zIHdlIHByb3ZpZGUgKGF0IHRoZSB0b3Ap CisgICAgUUFjdGlvbkxpc3Qgc3RhbmRhcmRBY3Rpb25zOworICAgIGlmKCBtX2FjdGlvblBsYXls aXN0cy5pc0VtcHR5KCkgJiYgbV9hY3Rpb25UcmFja3MuaXNFbXB0eSgpICYmIG1fd3JpdGFibGVB Y3Rpb25Qcm92aWRlciApCisgICAgICAgIHN0YW5kYXJkQWN0aW9ucyA8PCBtX2NyZWF0ZUVtcHR5 UGxheWxpc3RBY3Rpb247CisgICAgaWYoICFtX2FjdGlvblBsYXlsaXN0cy5pc0VtcHR5KCkgfHwg IW1fYWN0aW9uVHJhY2tzLmlzRW1wdHkoKSApCisgICAgICAgIHN0YW5kYXJkQWN0aW9ucyA8PCBt X2FwcGVuZEFjdGlvbiA8PCBtX2xvYWRBY3Rpb247CisgICAgaWYoICFuZXdQb2RjYXN0RXBpc29k ZXMuaXNFbXB0eSgpIHx8ICFvbGRQb2RjYXN0RXBpc29kZXMuaXNFbXB0eSgpICkKKyAgICB7Cisg ICAgICAgIG1fc2V0TmV3QWN0aW9uLT5zZXRDaGVja2VkKCBvbGRQb2RjYXN0RXBpc29kZXMuaXNF bXB0eSgpICk7CisgICAgICAgIG1fc2V0TmV3QWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJv bVZhbHVlKCBuZXdQb2RjYXN0RXBpc29kZXMgKyBvbGRQb2RjYXN0RXBpc29kZXMgKSApOworICAg ICAgICBzdGFuZGFyZEFjdGlvbnMgPDwgbV9zZXROZXdBY3Rpb247CisgICAgfQorICAgIGlmKCBt X3dyaXRhYmxlQWN0aW9uUGxheWxpc3RzLmNvdW50KCkgPT0gMSAmJiBtX2FjdGlvblRyYWNrcy5p c0VtcHR5KCkgKQorICAgICAgICBzdGFuZGFyZEFjdGlvbnMgPDwgbV9yZW5hbWVQbGF5bGlzdEFj dGlvbjsKKyAgICBpZiggIW1fd3JpdGFibGVBY3Rpb25QbGF5bGlzdHMuaXNFbXB0eSgpICYmIG1f YWN0aW9uVHJhY2tzLmlzRW1wdHkoKSApCisgICAgICAgIHN0YW5kYXJkQWN0aW9ucyA8PCBtX2Rl bGV0ZVBsYXlsaXN0QWN0aW9uOworICAgIGlmKCBtX2FjdGlvblBsYXlsaXN0cy5pc0VtcHR5KCkg JiYgIW1fd3JpdGFibGVBY3Rpb25UcmFja3MuaXNFbXB0eSgpICkKKyAgICB7CisgICAgICAgIGNv bnN0IGludCBhY3Rpb25UcmFja0NvdW50ID0gbV93cml0YWJsZUFjdGlvblRyYWNrcy5jb3VudCgp OworICAgICAgICBjb25zdCBpbnQgcGxheWxpc3RDb3VudCA9IG1fd3JpdGFibGVBY3Rpb25UcmFj a3MudW5pcXVlS2V5cygpLmNvdW50KCk7CisgICAgICAgIGlmKCBwbGF5bGlzdENvdW50ID4gMSAp CisgICAgICAgICAgICBtX3JlbW92ZVRyYWNrc0FjdGlvbi0+c2V0VGV4dCggaTE4bmNwKCAiTnVt YmVyIG9mIHBsYXlsaXN0cyBpcyA+PSAyIiwKKyAgICAgICAgICAgICAgICAiUmVtb3ZlIGEgVHJh Y2sgRnJvbSAlMiBQbGF5bGlzdHMiLCAiUmVtb3ZlICUxIFRyYWNrcyBGcm9tICUyIFBsYXlsaXN0 cyIsCisgICAgICAgICAgICAgICAgYWN0aW9uVHJhY2tDb3VudCwgcGxheWxpc3RDb3VudCApICk7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVtb3ZlVHJhY2tzQWN0aW9uLT5zZXRUZXh0 KCBpMThuY3AoICIlMiBpcyBzYXZlZCBwbGF5bGlzdCBuYW1lIiwKKyAgICAgICAgICAgICAgICAi UmVtb3ZlIGEgVHJhY2sgRnJvbSAlMiIsICJSZW1vdmUgJTEgVHJhY2tzIEZyb20gJTIiLCBhY3Rp b25UcmFja0NvdW50LAorICAgICAgICAgICAgICAgIG1fd3JpdGFibGVBY3Rpb25UcmFja3MudW5p cXVlS2V5cygpLmZpcnN0KCktPnByZXR0eU5hbWUoKSApICk7CisgICAgICAgIHN0YW5kYXJkQWN0 aW9ucyA8PCBtX3JlbW92ZVRyYWNrc0FjdGlvbjsKKyAgICB9CisgICAgaWYoIG1fYWN0aW9uUGxh eWxpc3RzLmNvdW50KCkgPT0gMSAmJiBtX2FjdGlvblRyYWNrcy5pc0VtcHR5KCkgKQorICAgICAg ICBzdGFuZGFyZEFjdGlvbnMgPDwgbV9leHBvcnRBY3Rpb247CisgICAgc3RhbmRhcmRBY3Rpb25z IDw8IG1fc2VwYXJhdG9yQWN0aW9uOworCisgICAgcmV0dXJuIHN0YW5kYXJkQWN0aW9ucyArIGFj dGlvbnM7CiB9CiAKIHZvaWQKLVBsYXlsaXN0QnJvd3Nlck5TOjpQbGF5bGlzdEJyb3dzZXJWaWV3 OjpzZXROZXdGb2xkZXJBY3Rpb24oIEtBY3Rpb24gKmFjdGlvbiApCitQbGF5bGlzdEJyb3dzZXJW aWV3OjpyZXNldEFjdGlvblRhcmdldHMoKQogewotICAgIG1fYWRkRm9sZGVyQWN0aW9uID0gYWN0 aW9uOworICAgIG1fd3JpdGFibGVBY3Rpb25Qcm92aWRlciA9IDA7CisgICAgbV9hY3Rpb25QbGF5 bGlzdHMuY2xlYXIoKTsKKyAgICBtX3dyaXRhYmxlQWN0aW9uUGxheWxpc3RzLmNsZWFyKCk7Cisg ICAgbV9hY3Rpb25UcmFja3MuY2xlYXIoKTsKKyAgICBtX3dyaXRhYmxlQWN0aW9uVHJhY2tzLmNs ZWFyKCk7CiB9CiAKIHZvaWQKQEAgLTI2OSwzNSArNDA5LDE3NyBAQCBQbGF5bGlzdEJyb3dzZXJO Uzo6UGxheWxpc3RCcm93c2VyVmlldzo6Y3VycmVudENoYW5nZWQoIGNvbnN0IFFNb2RlbEluZGV4 ICZjdXJyZQogfQogCiB2b2lkCi1QbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmll dzo6YXBwZW5kQW5kUGxheSggY29uc3QgUU1vZGVsSW5kZXggJmluZGV4ICkKK1BsYXlsaXN0QnJv d3NlclZpZXc6OnNsb3RDcmVhdGVFbXB0eVBsYXlsaXN0KCkKIHsKLSAgICBhcHBlbmRBbmRQbGF5 KCBRTW9kZWxJbmRleExpc3QoKSA8PCBpbmRleCApOworICAgIC8vIG1fYWN0aW9uUHJvdmlkZXIg bWF5IGJlIG51bGwsIHdoaWNoIGlzIGZpbmUKKyAgICBUaGU6OnBsYXlsaXN0TWFuYWdlcigpLT5z YXZlKCBNZXRhOjpUcmFja0xpc3QoKSwgQW1hcm9rOjpnZW5lcmF0ZVBsYXlsaXN0TmFtZSgKKyAg ICAgICAgICAgIE1ldGE6OlRyYWNrTGlzdCgpICksIG1fd3JpdGFibGVBY3Rpb25Qcm92aWRlciAp OwogfQogCiB2b2lkCi1QbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmlldzo6YXBw ZW5kQW5kUGxheSggY29uc3QgUU1vZGVsSW5kZXhMaXN0ICZsaXN0ICkKK1BsYXlsaXN0QnJvd3Nl clZpZXc6OnNsb3RBcHBlbmQoKQogewotICAgIHBlcmZvcm1BY3Rpb25OYW1lZCggImFwcGVuZEFj dGlvbiIsIGxpc3QgKTsKKyAgICBpbnNlcnRUb1BsYXlRdWV1ZSggUGxheWxpc3Q6OkFwcGVuZEFu ZFBsYXkgKTsKIH0KIAogdm9pZAotUGxheWxpc3RCcm93c2VyTlM6OlBsYXlsaXN0QnJvd3NlclZp ZXc6OmRlbGV0ZVBsYXlsaXN0c1RyYWNrcyggY29uc3QgUU1vZGVsSW5kZXhMaXN0ICZsaXN0ICkK K1BsYXlsaXN0QnJvd3NlclZpZXc6OnNsb3RMb2FkKCkKIHsKLSAgICBwZXJmb3JtQWN0aW9uTmFt ZWQoICJkZWxldGVBY3Rpb24iLCBsaXN0ICk7CisgICAgaW5zZXJ0VG9QbGF5UXVldWUoIFBsYXls aXN0OjpMb2FkQW5kUGxheSApOwogfQogCiB2b2lkCi1QbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxp c3RCcm93c2VyVmlldzo6cGVyZm9ybUFjdGlvbk5hbWVkKCBjb25zdCBRU3RyaW5nICZuYW1lLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUU1vZGVsSW5kZXhMaXN0ICZsaXN0ICkKK1BsYXlsaXN0QnJvd3NlclZpZXc6OnNs b3RTZXROZXcoIGJvb2wgbmV3U3RhdGUgKQogewotICAgIFFBY3Rpb25MaXN0IGFjdGlvbnMgPSBh Y3Rpb25zRm9yKCBsaXN0ICk7CisgICAgUU1vZGVsSW5kZXhMaXN0IGluZGljZXMgPSBtX3NldE5l d0FjdGlvbi0+ZGF0YSgpLnZhbHVlPFFNb2RlbEluZGV4TGlzdD4oKTsKKyAgICBmb3JlYWNoKCBj b25zdCBRTW9kZWxJbmRleCAmaWR4LCBpbmRpY2VzICkKKyAgICAgICAgbW9kZWwoKS0+c2V0RGF0 YSggaWR4LCBuZXdTdGF0ZSwgUGxheWxpc3RCcm93c2VyTW9kZWw6OkVwaXNvZGVJc05ld1JvbGUg KTsKK30KIAotICAgIGZvcmVhY2goIFFBY3Rpb24gKmFjdGlvbiwgYWN0aW9ucyApCit2b2lkCitQ bGF5bGlzdEJyb3dzZXJWaWV3OjpzbG90UmVuYW1lKCkKK3sKKyAgICBpZiggbV93cml0YWJsZUFj dGlvblBsYXlsaXN0cy5jb3VudCgpICE9IDEgKQogICAgIHsKLSAgICAgICAgaWYoIGFjdGlvbi0+ b2JqZWN0TmFtZSgpID09IG5hbWUgKQotICAgICAgICAgICAgYWN0aW9uLT50cmlnZ2VyKCk7Ci0g ICAgICAgIGFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQoKSApOyAgLy8gcmVzZXQgZGF0YSBvZiBh bGwgYWN0aW9ucworICAgICAgICB3YXJuaW5nKCkgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAi bV93cml0YWJsZUFjdGlvblBsYXlsaXN0cy5jb3VudCgpIGlzIG5vdCAxIjsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKyAgICBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0ID0gbV93cml0 YWJsZUFjdGlvblBsYXlsaXN0cy5hdCggMCApOworCisgICAgLy8gVE9ETzogdGhpcyBtYWtlcyBh IHJhdGhlciBjb21wbGljYXRlZCByb3VuZC10cmlwIGFuZCBlbmRzIHVwIGluIGVkaXQoUU1vZGVs SW5kZXgpCisgICAgLy8gaGVyZSAtLSBzaW1wbGlmeSB0aGF0CisgICAgVGhlOjpwbGF5bGlzdE1h bmFnZXIoKS0+cmVuYW1lKCBwbGF5bGlzdCApOworfQorCit2b2lkCitQbGF5bGlzdEJyb3dzZXJW aWV3OjpzbG90RGVsZXRlKCkKK3sKKyAgICBpZiggbV93cml0YWJsZUFjdGlvblBsYXlsaXN0cy5p c0VtcHR5KCkgKQorICAgICAgICByZXR1cm47CisKKyAgICB1c2luZyBuYW1lc3BhY2UgUGxheWxp c3RzOworICAgIFFIYXNoPFBsYXlsaXN0UHJvdmlkZXIgKiwgUGxheWxpc3RMaXN0PiBwcm92aWRl clBsYXlsaXN0czsKKyAgICBmb3JlYWNoKCBjb25zdCBQbGF5bGlzdFB0ciAmcGxheWxpc3QsIG1f d3JpdGFibGVBY3Rpb25QbGF5bGlzdHMgKQorICAgIHsKKyAgICAgICAgaWYoIHBsYXlsaXN0LT5w cm92aWRlcigpICkKKyAgICAgICAgICAgIHByb3ZpZGVyUGxheWxpc3RzWyBwbGF5bGlzdC0+cHJv dmlkZXIoKSBdIDw8IHBsYXlsaXN0OworICAgIH0KKyAgICBRU3RyaW5nTGlzdCBwcm92aWRlck5h bWVzOworICAgIGZvcmVhY2goIGNvbnN0IFBsYXlsaXN0UHJvdmlkZXIgKnByb3ZpZGVyLCBwcm92 aWRlclBsYXlsaXN0cy5rZXlzKCkgKQorICAgICAgICBwcm92aWRlck5hbWVzIDw8IHByb3ZpZGVy LT5wcmV0dHlOYW1lKCk7CisKKyAgICBLRGlhbG9nIGRpYWxvZzsKKyAgICBkaWFsb2cuc2V0Q2Fw dGlvbiggaTE4biggIkNvbmZpcm0gUGxheWxpc3QgRGVsZXRpb24iICkgKTsKKyAgICBkaWFsb2cu c2V0QnV0dG9ucyggS0RpYWxvZzo6T2sgfCBLRGlhbG9nOjpDYW5jZWwgKTsKKyAgICBRTGFiZWwg KmxhYmVsID0gbmV3IFFMYWJlbCggaTE4bnAoICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVs ZXRlIHRoaXMgcGxheWxpc3Q/IiwKKyAgICAgICAgICAgICJBcmUgeW91IHN1cmUgeW91IHdhbnQg dG8gZGVsZXRlIHRoZXNlICUxIHBsYXlsaXN0cz8iLAorICAgICAgICAgICAgbV93cml0YWJsZUFj dGlvblBsYXlsaXN0cy5jb3VudCgpICksICZkaWFsb2cgKTsKKyAgICAvLyBUT0RPOiBpbmNsdWRl IGEgdGV4dCBhcmVhIHdpdGggYWxsIHRoZSBuYW1lcyBvZiB0aGUgcGxheWxpc3RzCisgICAgZGlh bG9nLnNldEJ1dHRvblRleHQoIEtEaWFsb2c6Ok9rLCBpMThuYyggIiUxIGlzIHBsYXlsaXN0IHBy b3ZpZGVyIHByZXR0eSBuYW1lIiwKKyAgICAgICAgICAgICJZZXMsIGRlbGV0ZSBmcm9tICUxLiIs IHByb3ZpZGVyTmFtZXMuam9pbiggIiwgIiApICkgKTsKKyAgICBkaWFsb2cuc2V0TWFpbldpZGdl dCggbGFiZWwgKTsKKyAgICBpZiggZGlhbG9nLmV4ZWMoKSA9PSBRRGlhbG9nOjpBY2NlcHRlZCAp CisgICAgeworICAgICAgICBmb3JlYWNoKCBQbGF5bGlzdFByb3ZpZGVyICpwcm92aWRlciwgcHJv dmlkZXJQbGF5bGlzdHMua2V5cygpICkKKyAgICAgICAgICAgIHByb3ZpZGVyLT5kZWxldGVQbGF5 bGlzdHMoIHByb3ZpZGVyUGxheWxpc3RzLnZhbHVlKCBwcm92aWRlciApICk7CisgICAgfQorfQor Cit2b2lkCitQbGF5bGlzdEJyb3dzZXJWaWV3OjpzbG90UmVtb3ZlVHJhY2tzKCkKK3sKKyAgICBm b3JlYWNoKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0LCBtX3dyaXRhYmxlQWN0aW9u VHJhY2tzLnVuaXF1ZUtleXMoKSApCisgICAgeworICAgICAgICBRTGlzdDxpbnQ+IHRyYWNrSW5k aWNlcyA9IG1fd3JpdGFibGVBY3Rpb25UcmFja3MudmFsdWVzKCBwbGF5bGlzdCApOworICAgICAg ICBxU29ydCggdHJhY2tJbmRpY2VzICk7CisgICAgICAgIGludCByZW1vdmVkID0gMDsKKyAgICAg ICAgZm9yZWFjaCggaW50IHRyYWNrSW5kZXgsIHRyYWNrSW5kaWNlcyApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHBsYXlsaXN0LT5yZW1vdmVUcmFjayggdHJhY2tJbmRleCAtIHJlbW92ZWQgLyog YWNjb3VudCBmb3IgYWxyZWFkeSByZW1vdmVkICovICk7CisgICAgICAgICAgICByZW1vdmVkKys7 CisgICAgICAgIH0KICAgICB9CiB9CiAKLSNpbmNsdWRlICJQbGF5bGlzdEJyb3dzZXJWaWV3Lm1v YyIKK3ZvaWQKK1BsYXlsaXN0QnJvd3NlclZpZXc6OnNsb3RFeHBvcnQoKQoreworICAgIGlmKCBt X2FjdGlvblBsYXlsaXN0cy5jb3VudCgpICE9IDEgKQorICAgIHsKKyAgICAgICAgd2FybmluZygp IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgIm1fYWN0aW9uUGxheWxpc3RzLmNvdW50KCkgaXMg bm90IDEiOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBsYXlsaXN0czo6UGxheWxpc3RQ dHIgcGxheWxpc3QgPSBtX2FjdGlvblBsYXlsaXN0cy5hdCggMCApOworCisgICAgLy8gLS0tIGRp c3BsYXkgc2F2ZSBsb2NhdGlvbiBkaWFsb2cKKyAgICAvLyBjb21wYXJlIHdpdGggTWFpbldpbmRv dzo6ZXhwb3J0UGxheWxpc3QKKyAgICAvLyBUT0RPOiBoYXZlIHRoaXMgY29kZSBvbmx5IG9uY2UK KyAgICBRQ2hlY2tCb3ggKnNhdmVSZWxhdGl2ZUNoZWNrID0gbmV3IFFDaGVja0JveCggaTE4bigi VXNlIHJlbGF0aXZlIHBhdGggZm9yICZzYXZpbmciKSApOworICAgIHNhdmVSZWxhdGl2ZUNoZWNr LT5zZXRDaGVja2VkKCBBbWFyb2tDb25maWc6OnJlbGF0aXZlUGxheWxpc3QoKSApOworICAgIEtG aWxlRGlhbG9nIGZpbGVEaWFsb2coIEtVcmwoICJrZmlsZWRpYWxvZzovLy9hbWFyb2stcGxheWxp c3QtZXhwb3J0IiApLCBRU3RyaW5nKCksIDAsIHNhdmVSZWxhdGl2ZUNoZWNrICk7CisKKyAgICBR U3RyaW5nTGlzdCBzdXBwb3J0ZWRNaW1lVHlwZXM7CisgICAgc3VwcG9ydGVkTWltZVR5cGVzIDw8 ICJ2aWRlby94LW1zLWFzZiI7IC8vIEFTWAorICAgIHN1cHBvcnRlZE1pbWVUeXBlcyA8PCAiYXVk aW8veC1tcGVndXJsIjsgLy8gTTNVCisgICAgc3VwcG9ydGVkTWltZVR5cGVzIDw8ICJhdWRpby94 LXNjcGxzIjsgLy8gUExTCisgICAgc3VwcG9ydGVkTWltZVR5cGVzIDw8ICJhcHBsaWNhdGlvbi94 c3BmK3htbCI7IC8vIFhTUEYKKworICAgIGZpbGVEaWFsb2cuc2V0U2VsZWN0aW9uKCBwbGF5bGlz dC0+bmFtZSgpICk7CisgICAgZmlsZURpYWxvZy5zZXRNaW1lRmlsdGVyKCBzdXBwb3J0ZWRNaW1l VHlwZXMsIHN1cHBvcnRlZE1pbWVUeXBlcy52YWx1ZSggMSApICk7CisgICAgZmlsZURpYWxvZy5z ZXRPcGVyYXRpb25Nb2RlKCBLRmlsZURpYWxvZzo6U2F2aW5nICk7CisgICAgZmlsZURpYWxvZy5z ZXRNb2RlKCBLRmlsZTo6RmlsZSApOworICAgIGZpbGVEaWFsb2cuc2V0Q2FwdGlvbiggaTE4bigi U2F2ZSBBcyIpICk7CisgICAgZmlsZURpYWxvZy5zZXRPYmplY3ROYW1lKCAiUGxheWxpc3RFeHBv cnQiICk7CisKKyAgICBmaWxlRGlhbG9nLmV4ZWMoKTsKKyAgICBRU3RyaW5nIHBsYXlsaXN0UGF0 aCA9IGZpbGVEaWFsb2cuc2VsZWN0ZWRGaWxlKCk7CisKKyAgICAvLyAtLS0gYWN0dWFsbHkgc2F2 ZSB0aGUgcGxheWxpc3QKKyAgICBpZiggIXBsYXlsaXN0UGF0aC5pc0VtcHR5KCkgKQorICAgICAg ICBQbGF5bGlzdHM6OmV4cG9ydFBsYXlsaXN0RmlsZSggcGxheWxpc3QtPnRyYWNrcygpLCBwbGF5 bGlzdFBhdGgsIHNhdmVSZWxhdGl2ZUNoZWNrLT5pc0NoZWNrZWQoKSApOworfQorCit2b2lkCitQ bGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmlldzo6YXBwZW5kQW5kUGxheSggY29u c3QgUU1vZGVsSW5kZXggJmluZGV4ICkKK3sKKyAgICBhcHBlbmRBbmRQbGF5KCBRTW9kZWxJbmRl eExpc3QoKSA8PCBpbmRleCApOworfQorCit2b2lkCitQbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxp c3RCcm93c2VyVmlldzo6YXBwZW5kQW5kUGxheSggY29uc3QgUU1vZGVsSW5kZXhMaXN0ICZsaXN0 ICkKK3sKKyAgICBhY3Rpb25zRm9yKCBsaXN0ICk7IC8vIHNldHMgYWN0aW9uIHRhcmdldHMKKyAg ICBpbnNlcnRUb1BsYXlRdWV1ZSggUGxheWxpc3Q6OkFwcGVuZEFuZFBsYXkgKTsKKyAgICByZXNl dEFjdGlvblRhcmdldHMoKTsKK30KKwordm9pZAorUGxheWxpc3RCcm93c2VyVmlldzo6aW5zZXJ0 VG9QbGF5UXVldWUoIGludCBvcHRpb25zICkKK3sKKyAgICBNZXRhOjpUcmFja0xpc3QgdHJhY2tz OworCisgICAgLy8gYWRkIHRyYWNrcyBmb3IgZnVsbHktc2VsZWN0ZWQgcGxheWxpc3RzOgorICAg IGZvcmVhY2goIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIG1fYWN0aW9uUGxheWxp c3RzICkKKyAgICB7CisgICAgICAgIHRyYWNrcyA8PCBwbGF5bGlzdC0+dHJhY2tzKCk7CisgICAg fQorCisgICAgLy8gZmlsdGVyLW91dCB0cmFja3MgZnJvbSBwbGF5bGlzdHMgdGhhdCBhcmUgc2Vs ZWN0ZWQsIGFkZCBsb25lIHRyYWNrczoKKyAgICBmb3JlYWNoKCBQbGF5bGlzdHM6OlBsYXlsaXN0 UHRyIHBsYXlsaXN0LCBtX2FjdGlvblRyYWNrcy51bmlxdWVLZXlzKCkgKQorICAgIHsKKyAgICAg ICAgaWYoIG1fYWN0aW9uUGxheWxpc3RzLmNvbnRhaW5zKCBwbGF5bGlzdCApICkKKyAgICAgICAg ICAgIGNvbnRpbnVlOworCisgICAgICAgIE1ldGE6OlRyYWNrTGlzdCBwbGF5bGlzdFRyYWNrcyA9 IHBsYXlsaXN0LT50cmFja3MoKTsKKyAgICAgICAgUUxpc3Q8aW50PiBwb3NpdGlvbnMgPSBtX2Fj dGlvblRyYWNrcy52YWx1ZXMoIHBsYXlsaXN0ICk7CisgICAgICAgIHFTb3J0KCBwb3NpdGlvbnMg KTsKKyAgICAgICAgZm9yZWFjaCggaW50IHBvc2l0aW9uLCBwb3NpdGlvbnMgKQorICAgICAgICB7 CisgICAgICAgICAgICBpZiggcG9zaXRpb24gPj0gMCAmJiBwb3NpdGlvbiA8IHBsYXlsaXN0VHJh Y2tzLmNvdW50KCkgKQorICAgICAgICAgICAgICAgIHRyYWNrcyA8PCBwbGF5bGlzdFRyYWNrcy5h dCggcG9zaXRpb24gKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCAhdHJhY2tzLmlzRW1w dHkoKSApCisgICAgICAgIFRoZTo6cGxheWxpc3RDb250cm9sbGVyKCktPmluc2VydE9wdGlvbmVk KCB0cmFja3MsIG9wdGlvbnMgKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9icm93c2Vycy9wbGF5bGlz dGJyb3dzZXIvUGxheWxpc3RCcm93c2VyVmlldy5oIGIvc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJv d3Nlci9QbGF5bGlzdEJyb3dzZXJWaWV3LmgKaW5kZXggYjBkNzJiZC4uZTJiYjNiMiAxMDA2NDQK LS0tIGEvc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9QbGF5bGlzdEJyb3dzZXJWaWV3LmgK KysrIGIvc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9QbGF5bGlzdEJyb3dzZXJWaWV3LmgK QEAgLTE4LDEyICsxOCwxMiBAQAogI2lmbmRlZiBQTEFZTElTVEJST1dTRVJWSUVXX0gKICNkZWZp bmUgUExBWUxJU1RCUk9XU0VSVklFV19ICiAKKyNpbmNsdWRlICJjb3JlL3BsYXlsaXN0cy9QbGF5 bGlzdC5oIgogI2luY2x1ZGUgIndpZGdldHMvUHJldHR5VHJlZVZpZXcuaCIKIAogI2luY2x1ZGUg PFFNdXRleD4KIAogY2xhc3MgUG9wdXBEcm9wcGVyOwotY2xhc3MgS0FjdGlvbjsKIGNsYXNzIFFL ZXlFdmVudDsKIGNsYXNzIFFNb3VzZUV2ZW50OwogY2xhc3MgUUNvbnRleHRNZW51RXZlbnQ7CkBA IC0zNSw1NCArMzUsNjkgQEAgY2xhc3MgUGxheWxpc3RCcm93c2VyVmlldyA6IHB1YmxpYyBBbWFy b2s6OlByZXR0eVRyZWVWaWV3CiBRX09CSkVDVAogcHVibGljOgogICAgIGV4cGxpY2l0IFBsYXls aXN0QnJvd3NlclZpZXcoIFFBYnN0cmFjdEl0ZW1Nb2RlbCAqbW9kZWwsIFFXaWRnZXQgKnBhcmVu dCA9IDAgKTsKLSAgICB+UGxheWxpc3RCcm93c2VyVmlldygpOwogCiAgICAgdmlydHVhbCB2b2lk IHNldE1vZGVsKCBRQWJzdHJhY3RJdGVtTW9kZWwgKm1vZGVsICk7CiAKLSAgICB2b2lkIHNldE5l d0ZvbGRlckFjdGlvbiggS0FjdGlvbiAqYWN0aW9uICk7Ci0KIHNpZ25hbHM6CiAgICAgdm9pZCBj dXJyZW50SXRlbUNoYW5nZWQoIGNvbnN0IFFNb2RlbEluZGV4ICZjdXJyZW50ICk7CiAKIHByb3Rl Y3RlZDoKLSAgICAvL1RPRE86cmUtaW1wbGVtZW50IFFXaWRnZXQ6OmRyYWdFbnRlckV2ZW50KCkg dG8gc2hvdyBkcm9wLW5vdC1hbGxvd2VkIGluZGljYXRvcgorICAgIC8vIFRPRE86IHJlLWltcGxl bWVudCBRV2lkZ2V0OjpkcmFnRW50ZXJFdmVudCgpIHRvIHNob3cgZHJvcC1ub3QtYWxsb3dlZCBp bmRpY2F0b3IKIAogICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKmV2 ZW50ICk7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudCggUU1vdXNlRXZl bnQgKmV2ZW50ICk7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VF dmVudCAqZXZlbnQgKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKCBRdDo6RHJvcEFjdGlv bnMgc3VwcG9ydGVkQWN0aW9ucyApOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RXZl bnQoIFFDb250ZXh0TWVudUV2ZW50KiBldmVudCApOworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0 TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVudCAqZXZlbnQgKTsKIAogcHJvdGVjdGVkIHNsb3Rz OgogICAgIC8qKiByZWltcGxlbWVudGVkIHRvIGVtaXQgYSBzaWduYWwgKi8KICAgICB2b2lkIGN1 cnJlbnRDaGFuZ2VkKCBjb25zdCBRTW9kZWxJbmRleCAmY3VycmVudCwgY29uc3QgUU1vZGVsSW5k ZXggJnByZXZpb3VzICk7CiAKK3ByaXZhdGUgc2xvdHM6CisgICAgLy8gdGhlc2UgYXJlIGNvbm5l Y3RlZCB0byBtXypBY3Rpb25zOgorICAgIHZvaWQgc2xvdENyZWF0ZUVtcHR5UGxheWxpc3QoKTsK KyAgICB2b2lkIHNsb3RBcHBlbmQoKTsKKyAgICB2b2lkIHNsb3RMb2FkKCk7CisgICAgdm9pZCBz bG90U2V0TmV3KCBib29sIG5ld1N0YXRlICk7CisgICAgdm9pZCBzbG90UmVuYW1lKCk7CisgICAg dm9pZCBzbG90RGVsZXRlKCk7CisgICAgdm9pZCBzbG90UmVtb3ZlVHJhY2tzKCk7CisgICAgdm9p ZCBzbG90RXhwb3J0KCk7CisKIHByaXZhdGU6Ci0gICAgLyoqCi0gICAgICogRXhlY3V0ZSBhbGwg YWN0aW9ucyB0aGF0IGFyZSBuYW1lZCBhcHBlbmRBY3Rpb24KLSAgICAgKi8KICAgICB2b2lkIGFw cGVuZEFuZFBsYXkoIGNvbnN0IFFNb2RlbEluZGV4ICZpbmRleCApOwogICAgIHZvaWQgYXBwZW5k QW5kUGxheSggY29uc3QgUU1vZGVsSW5kZXhMaXN0ICZsaXN0ICk7CisgICAgdm9pZCBpbnNlcnRU b1BsYXlRdWV1ZSggaW50IG9wdGlvbnMgKTsKIAogICAgIC8qKgotICAgICAqIEV4ZWN1dGUgYWxs IGFjdGlvbnMgdGhhdCBhcmUgbmFtZWQgZGVsZXRlQWN0aW9uCi0gICAgICovCi0gICAgdm9pZCBk ZWxldGVQbGF5bGlzdHNUcmFja3MoIGNvbnN0IFFNb2RlbEluZGV4TGlzdCAmbGlzdCApOwotCi0g ICAgLyoqCi0gICAgICogRXhlY3V0ZXMgYWxsIGFjdGlvbnMgdGhhdCBhcmUgbmFtZWQgQHBhcmFt IG5hbWUKKyAgICAgKiBHZXRzIGFjdGlvbiBmb3IgYSBsaXN0IG9mIGluZGljZXMgYW5kIHNldHMg aW50ZXJuYWwgYWN0aW9uIHRhcmdldHMgdG8gdGhlc2UuCisgICAgICoKKyAgICAgKiBBZnRlciB5 b3UgaGF2ZSBwcm9jZXNzZWQvdHJpZ2dlcmVkIHRoZSBhY3Rpb25zLCB5b3Ugc2hvdWxkIGNhbGwK KyAgICAgKiByZXNldEFjdGlvblRhcmdldHMoKSB0byBwcmV2ZW50IHN0YWxlIHRhcmdldHMgbGF5 aW5nIGFyb3VuZC4KICAgICAgKi8KLSAgICB2b2lkIHBlcmZvcm1BY3Rpb25OYW1lZCggY29uc3Qg UVN0cmluZyAmbmFtZSwgY29uc3QgUU1vZGVsSW5kZXhMaXN0ICZsaXN0ICk7Ci0KLSAgICBRQWN0 aW9uICpkZWNvcmF0b3JBY3Rpb25BdCggY29uc3QgUU1vZGVsSW5kZXggJmlkeCwgY29uc3QgUVBv aW50IHBvc2l0aW9uICk7Ci0gICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zRm9yKCBRTW9kZWxJ bmRleExpc3QgaW5kZXhlcyApOworICAgIFFMaXN0PFFBY3Rpb24gKj4gYWN0aW9uc0ZvciggY29u c3QgUU1vZGVsSW5kZXhMaXN0ICZpbmRleGVzICk7CisgICAgdm9pZCByZXNldEFjdGlvblRhcmdl dHMoKTsKIAogICAgIFBvcHVwRHJvcHBlciogbV9wZDsKIAotICAgIEtBY3Rpb24gKm1fYWRkRm9s ZGVyQWN0aW9uOwotCisgICAgUUFjdGlvbiAqbV9jcmVhdGVFbXB0eVBsYXlsaXN0QWN0aW9uOwor ICAgIFFBY3Rpb24gKm1fYXBwZW5kQWN0aW9uOworICAgIFFBY3Rpb24gKm1fbG9hZEFjdGlvbjsK KyAgICBRQWN0aW9uICptX3NldE5ld0FjdGlvbjsgLy8gZm9yIHBvZGNhc3RzCisgICAgUUFjdGlv biAqbV9yZW5hbWVQbGF5bGlzdEFjdGlvbjsKKyAgICBRQWN0aW9uICptX2RlbGV0ZVBsYXlsaXN0 QWN0aW9uOworICAgIFFBY3Rpb24gKm1fcmVtb3ZlVHJhY2tzQWN0aW9uOworICAgIFFBY3Rpb24g Km1fZXhwb3J0QWN0aW9uOworICAgIFFBY3Rpb24gKm1fc2VwYXJhdG9yQWN0aW9uOwogICAgIGJv b2wgbV9vbmdvaW5nRHJhZzsKKworICAgIFBsYXlsaXN0czo6UGxheWxpc3RQcm92aWRlciAqbV93 cml0YWJsZUFjdGlvblByb3ZpZGVyOworICAgIFBsYXlsaXN0czo6UGxheWxpc3RMaXN0IG1fYWN0 aW9uUGxheWxpc3RzOworICAgIFBsYXlsaXN0czo6UGxheWxpc3RMaXN0IG1fd3JpdGFibGVBY3Rp b25QbGF5bGlzdHM7CisgICAgUU11bHRpSGFzaDxQbGF5bGlzdHM6OlBsYXlsaXN0UHRyLCBpbnQ+ IG1fYWN0aW9uVHJhY2tzOyAvLyBtYXBzIHBsYXlsaXN0cyB0byB0cmFjayBwb3NpdGlvbnMKKyAg ICBRTXVsdGlIYXNoPFBsYXlsaXN0czo6UGxheWxpc3RQdHIsIGludD4gbV93cml0YWJsZUFjdGlv blRyYWNrczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFBsYXlsaXN0QnJvd3Nlck5TCmRpZmYgLS1n aXQgYS9zcmMvYnJvd3NlcnMvcGxheWxpc3Ricm93c2VyL1BvZGNhc3RNb2RlbC5jcHAgYi9zcmMv YnJvd3NlcnMvcGxheWxpc3Ricm93c2VyL1BvZGNhc3RNb2RlbC5jcHAKaW5kZXggNWYyNzdhYS4u NmY5YjkzNSAxMDA2NDQKLS0tIGEvc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9Qb2RjYXN0 TW9kZWwuY3BwCisrKyBiL3NyYy9icm93c2Vycy9wbGF5bGlzdGJyb3dzZXIvUG9kY2FzdE1vZGVs LmNwcApAQCAtNjYsMTcgKzY2LDggQEAgUGxheWxpc3RCcm93c2VyTlM6OlBvZGNhc3RNb2RlbDo6 ZGVzdHJveSgpCiAKIFBsYXlsaXN0QnJvd3Nlck5TOjpQb2RjYXN0TW9kZWw6OlBvZGNhc3RNb2Rl bCgpCiAgICAgOiBQbGF5bGlzdEJyb3dzZXJNb2RlbCggUGxheWxpc3RNYW5hZ2VyOjpQb2RjYXN0 Q2hhbm5lbCApCi0gICAgLCBtX3NldE5ld0FjdGlvbiggMCApCiB7CiAgICAgc19pbnN0YW5jZSA9 IHRoaXM7Ci0gICAgbV9zZXROZXdBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24oICJyYXRpbmci ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bmMoICJ0b2dnbGUgdGhl IFwibmV3XCIgc3RhdHVzIG9mIHRoaXMgcG9kY2FzdCBlcGlzb2RlIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiZOZXciICksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgIG1fc2V0TmV3QWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBlcl9zdmdfaWQiLCAi bmV3IiApOwotICAgIG1fc2V0TmV3QWN0aW9uLT5zZXRDaGVja2FibGUoIHRydWUgKTsKLSAgICBj b25uZWN0KCBtX3NldE5ld0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2xv dFNldE5ldyhib29sKSkgKTsKIH0KIAogYm9vbApAQCAtMjY3LDYgKzI1OCw4IEBAIFBsYXlsaXN0 QnJvd3Nlck5TOjpQb2RjYXN0TW9kZWw6OmVwaXNvZGVEYXRhKCBjb25zdCBQb2RjYXN0RXBpc29k ZVB0ciAmZXBpc29kZSwKICAgICAgICAgICAgIGlmKCBpZHguY29sdW1uKCkgPT0gUGxheWxpc3RC cm93c2VyTW9kZWw6OlBsYXlsaXN0SXRlbUNvbHVtbiApCiAgICAgICAgICAgICAgICAgcmV0dXJu IGljb24oIGVwaXNvZGUgKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVwaXNv ZGVJc05ld1JvbGU6CisgICAgICAgICAgICByZXR1cm4gZXBpc29kZS0+aXNOZXcoKTsKICAgICB9 CiAKICAgICByZXR1cm4gUGxheWxpc3RCcm93c2VyTW9kZWw6OmRhdGEoIGlkeCwgcm9sZSApOwpA QCAtMjc1LDEwICsyNjgsMTggQEAgUGxheWxpc3RCcm93c2VyTlM6OlBvZGNhc3RNb2RlbDo6ZXBp c29kZURhdGEoIGNvbnN0IFBvZGNhc3RFcGlzb2RlUHRyICZlcGlzb2RlLAogYm9vbAogUGxheWxp c3RCcm93c2VyTlM6OlBvZGNhc3RNb2RlbDo6c2V0RGF0YSggY29uc3QgUU1vZGVsSW5kZXggJmlk eCwgY29uc3QgUVZhcmlhbnQgJnZhbHVlLCBpbnQgcm9sZSApCiB7Ci0gICAgREVCVUdfQkxPQ0sK KyAgICBQb2RjYXN0RXBpc29kZVB0ciBlcGlzb2RlID0gZXBpc29kZUZvckluZGV4KCBpZHggKTsK KyAgICBpZiggIWVwaXNvZGUgfHwgIXZhbHVlLmNhbkNvbnZlcnQ8Ym9vbD4oKSB8fCByb2xlICE9 IEVwaXNvZGVJc05ld1JvbGUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBsYXlsaXN0QnJvd3Nl ck1vZGVsOjpzZXREYXRhKCBpZHgsIHZhbHVlLCByb2xlICk7CisgICAgfQogCi0gICAgLy9UT0RP OiBpbXBsZW1lbnQgc2V0TmV3LgotICAgIHJldHVybiBQbGF5bGlzdEJyb3dzZXJNb2RlbDo6c2V0 RGF0YSggaWR4LCB2YWx1ZSwgcm9sZSApOworICAgIGJvb2wgY2hlY2tlZCA9IHZhbHVlLnRvQm9v bCgpOworICAgIGVwaXNvZGUtPnNldE5ldyggY2hlY2tlZCApOworICAgIGlmKCBjaGVja2VkICkK KyAgICAgICAgZW1pdCBlcGlzb2RlTWFya2VkQXNOZXcoIGVwaXNvZGUgKTsKKyAgICBlbWl0IGRh dGFDaGFuZ2VkKCBpZHgsIGlkeCApOworICAgIHJldHVybiB0cnVlOwogfQogCiBpbnQKQEAgLTM1 Myw2MiArMzU0LDYgQEAgUGxheWxpc3RCcm93c2VyTlM6OlBvZGNhc3RNb2RlbDo6cmVmcmVzaFBv ZGNhc3RzKCkKICAgICB9CiB9CiAKLVFBY3Rpb25MaXN0Ci1QbGF5bGlzdEJyb3dzZXJOUzo6UG9k Y2FzdE1vZGVsOjphY3Rpb25zRm9yKCBjb25zdCBRTW9kZWxJbmRleCAmaWR4ICkgY29uc3QKLXsK LSAgICBpZiggIWlkeC5pc1ZhbGlkKCkgKQotICAgIHsKLSAgICAgICAgLy9UT0RPOiBhZGQgcG9k Y2FzdCBhY3Rpb24KLSAgICAgICAgcmV0dXJuIFFBY3Rpb25MaXN0KCk7Ci0gICAgfQotCi0gICAg UUFjdGlvbkxpc3QgYWN0aW9ucyA9IFBsYXlsaXN0QnJvd3Nlck1vZGVsOjphY3Rpb25zRm9yKCBp ZHggKTsKLQotICAgIC8qIGJ5IGRlZmF1bHQgYSBsaXN0IG9mIHBvZGNhc3QgZXBpc29kZXMgY2Fu IG9ubHkgYmUgY2hhbmdlZCB0byBpc05ldyA9IGZhbHNlIG9yCi0gICAgICAgaXNLZWVwID0gZmFs c2UsIGV4Y2VwdCB3aGVuIGFsbCBzZWxlY3RlZCBlcGlzb2RlcyBhcmUgdGhlIHNhbWUgc3RhdGUg Ki8KLSAgICBtX3NldE5ld0FjdGlvbi0+c2V0Q2hlY2tlZCggZmFsc2UgKTsKLQotICAgIFBvZGNh c3RzOjpQb2RjYXN0RXBpc29kZUxpc3QgZXBpc29kZXMgPSBtX3NldE5ld0FjdGlvbi0+ZGF0YSgp LnZhbHVlPFBvZGNhc3RzOjpQb2RjYXN0RXBpc29kZUxpc3Q+KCk7Ci0gICAgaWYoIElTX1RSQUNL KGlkeCkgKQotICAgICAgICBlcGlzb2RlcyA8PCBlcGlzb2RlRm9ySW5kZXgoIGlkeCApOwotICAg IGVsc2UKLSAgICAgICAgZXBpc29kZXMgPDwgY2hhbm5lbEZvckluZGV4KCBpZHggKS0+ZXBpc29k ZXMoKTsKLQotICAgIGZvcmVhY2goIGNvbnN0IFBvZGNhc3RzOjpQb2RjYXN0RXBpc29kZVB0ciBl cGlzb2RlLCBlcGlzb2RlcyApCi0gICAgewotICAgICAgICBpZiggZXBpc29kZS0+aXNOZXcoKSAp Ci0gICAgICAgICAgICBtX3NldE5ld0FjdGlvbi0+c2V0Q2hlY2tlZCggdHJ1ZSApOwotICAgIH0K LQotICAgIG1fc2V0TmV3QWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBlcGlz b2RlcyApICk7Ci0KLSAgICBhY3Rpb25zIDw8IG1fc2V0TmV3QWN0aW9uOwotCi0gICAgcmV0dXJu IGFjdGlvbnM7Ci19Ci0KLXZvaWQKLVBsYXlsaXN0QnJvd3Nlck5TOjpQb2RjYXN0TW9kZWw6OnNs b3RTZXROZXcoIGJvb2wgbmV3U3RhdGUgKQotewotICAgIFFfVU5VU0VEKCBuZXdTdGF0ZSApOwot ICAgIFFBY3Rpb24gKmFjdGlvbiA9IHFvYmplY3RfY2FzdDxRQWN0aW9uICo+KCBRT2JqZWN0Ojpz ZW5kZXIoKSApOwotICAgIGlmKCBhY3Rpb24gPT0gMCApCi0gICAgICAgIHJldHVybjsKLQotICAg IFBvZGNhc3RzOjpQb2RjYXN0RXBpc29kZUxpc3QgZXBpc29kZXMgPSBhY3Rpb24tPmRhdGEoKS52 YWx1ZTxQb2RjYXN0czo6UG9kY2FzdEVwaXNvZGVMaXN0PigpOwotCi0gICAgZm9yZWFjaCggUG9k Y2FzdHM6OlBvZGNhc3RFcGlzb2RlUHRyIGVwaXNvZGUsIGVwaXNvZGVzICkKLSAgICB7Ci0gICAg ICAgIGlmKCAhZXBpc29kZS5pc051bGwoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVwaXNv ZGUtPnNldE5ldyggYWN0aW9uLT5pc0NoZWNrZWQoKSApOwotCi0gICAgICAgICAgICBpZiggYWN0 aW9uLT5pc0NoZWNrZWQoKSApCi0gICAgICAgICAgICAgICAgZW1pdCBlcGlzb2RlTWFya2VkQXNO ZXcoIGVwaXNvZGUgKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogUG9kY2FzdHM6OlBvZGNhc3RD aGFubmVsUHRyCiBQbGF5bGlzdEJyb3dzZXJOUzo6UG9kY2FzdE1vZGVsOjpjaGFubmVsRm9ySW5k ZXgoIGNvbnN0IFFNb2RlbEluZGV4ICZpZHggKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvc3JjL2Jy b3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9Qb2RjYXN0TW9kZWwuaCBiL3NyYy9icm93c2Vycy9wbGF5 bGlzdGJyb3dzZXIvUG9kY2FzdE1vZGVsLmgKaW5kZXggMGYwYjNiNS4uNGQ4ZWI0MSAxMDA2NDQK LS0tIGEvc3JjL2Jyb3dzZXJzL3BsYXlsaXN0YnJvd3Nlci9Qb2RjYXN0TW9kZWwuaAorKysgYi9z cmMvYnJvd3NlcnMvcGxheWxpc3Ricm93c2VyL1BvZGNhc3RNb2RlbC5oCkBAIC01MCw2ICs1MCw3 IEBAIGVudW0KIGNsYXNzIFBvZGNhc3RNb2RlbCA6IHB1YmxpYyBQbGF5bGlzdEJyb3dzZXJNb2Rl bAogewogICAgIFFfT0JKRUNUCisKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQb2RjYXN0 TW9kZWwgKmluc3RhbmNlKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koKTsKQEAgLTc3 LDE0ICs3OCw4IEBAIGNsYXNzIFBvZGNhc3RNb2RlbCA6IHB1YmxpYyBQbGF5bGlzdEJyb3dzZXJN b2RlbAogICAgICAgICB2b2lkIGFkZFBvZGNhc3QoKTsKICAgICAgICAgdm9pZCByZWZyZXNoUG9k Y2FzdHMoKTsKIAotICAgIHByaXZhdGUgc2xvdHM6Ci0gICAgICAgIHZvaWQgc2xvdFNldE5ldygg Ym9vbCBuZXdTdGF0ZSApOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIFFBY3Rp b25MaXN0IGFjdGlvbnNGb3IoIGNvbnN0IFFNb2RlbEluZGV4ICZpZHggKSBjb25zdDsKLQogICAg IHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBQb2RjYXN0TW9kZWwqIHNfaW5zdGFuY2U7CisgICAg ICAgIHN0YXRpYyBQb2RjYXN0TW9kZWwgKnNfaW5zdGFuY2U7CiAgICAgICAgIFBvZGNhc3RNb2Rl bCgpOwogCiAgICAgICAgIFFWYXJpYW50IGNoYW5uZWxEYXRhKCBjb25zdCBQb2RjYXN0czo6UG9k Y2FzdENoYW5uZWxQdHIgJmNoYW5uZWwsCkBAIC05Nyw4ICs5Miw2IEBAIGNsYXNzIFBvZGNhc3RN b2RlbCA6IHB1YmxpYyBQbGF5bGlzdEJyb3dzZXJNb2RlbAogCiAgICAgICAgIFFfRElTQUJMRV9D T1BZKCBQb2RjYXN0TW9kZWwgKQogCi0gICAgICAgIFFBY3Rpb24gKm1fc2V0TmV3QWN0aW9uOwot CiAgICAgICAgIC8qKgogICAgICAgICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZl cnQgYSBQb2RjYXN0RXBpc29kZUxpc3QgaW50byBhIFRyYWNrTGlzdC4KICAgICAgICAgICovCmRp ZmYgLS1naXQgYS9zcmMvY29yZS1pbXBsL2NvbGxlY3Rpb25zL2lwb2Rjb2xsZWN0aW9uL0lwb2RQ bGF5bGlzdFByb3ZpZGVyLmNwcCBiL3NyYy9jb3JlLWltcGwvY29sbGVjdGlvbnMvaXBvZGNvbGxl Y3Rpb24vSXBvZFBsYXlsaXN0UHJvdmlkZXIuY3BwCmluZGV4IGFiZjBmYWUuLmZmOWU0YWQgMTAw NjQ0Ci0tLSBhL3NyYy9jb3JlLWltcGwvY29sbGVjdGlvbnMvaXBvZGNvbGxlY3Rpb24vSXBvZFBs YXlsaXN0UHJvdmlkZXIuY3BwCisrKyBiL3NyYy9jb3JlLWltcGwvY29sbGVjdGlvbnMvaXBvZGNv bGxlY3Rpb24vSXBvZFBsYXlsaXN0UHJvdmlkZXIuY3BwCkBAIC0xMDEsNDUgKzEwMSwyOCBAQCBJ cG9kUGxheWxpc3RQcm92aWRlcjo6cHJvdmlkZXJBY3Rpb25zKCkKIH0KIAogUUFjdGlvbkxpc3QK LUlwb2RQbGF5bGlzdFByb3ZpZGVyOjpwbGF5bGlzdEFjdGlvbnMoIFBsYXlsaXN0czo6UGxheWxp c3RQdHIgcGxheWxpc3QgKQorSXBvZFBsYXlsaXN0UHJvdmlkZXI6OnBsYXlsaXN0QWN0aW9ucygg Y29uc3QgUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgJnBsYXlsaXN0cyApCiB7Ci0gICAgUUxpc3Q8 UUFjdGlvbiAqPiBhY3Rpb25zOwotICAgIGlmKCAhbV9wbGF5bGlzdHMuY29udGFpbnMoIHBsYXls aXN0ICkgKSAgLy8gbWFrZSBmb2xsb3dpbmcgc3RhdGljIGNhc3Qgc2FmZQotICAgICAgICByZXR1 cm4gYWN0aW9uczsKLSAgICBLU2hhcmVkUHRyPElwb2RQbGF5bGlzdD4gaXBvZFBsYXlsaXN0ID0g S1NoYXJlZFB0cjxJcG9kUGxheWxpc3Q+OjpzdGF0aWNDYXN0KCBwbGF5bGlzdCApOwotICAgIHN3 aXRjaCggaXBvZFBsYXlsaXN0LT50eXBlKCkgKQorICAgIFFBY3Rpb25MaXN0IGFjdGlvbnM7Cisg ICAgZm9yZWFjaCggY29uc3QgUGxheWxpc3RzOjpQbGF5bGlzdFB0ciAmcGxheWxpc3QsIHBsYXls aXN0cyApCiAgICAgewotICAgICAgICBjYXNlIElwb2RQbGF5bGlzdDo6Tm9ybWFsOgotICAgICAg ICAgICAgYWN0aW9ucyA8PCBQbGF5bGlzdHM6OlVzZXJQbGF5bGlzdFByb3ZpZGVyOjpwbGF5bGlz dEFjdGlvbnMoIHBsYXlsaXN0ICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ cG9kUGxheWxpc3Q6OlN0YWxlOgotICAgICAgICBjYXNlIElwb2RQbGF5bGlzdDo6T3JwaGFuZWQ6 CisgICAgICAgIGlmKCAhbV9wbGF5bGlzdHMuY29udGFpbnMoIHBsYXlsaXN0ICkgKSAgLy8gbWFr ZSBmb2xsb3dpbmcgc3RhdGljIGNhc3Qgc2FmZQorICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgIElwb2RQbGF5bGlzdDo6VHlwZSB0eXBlID0gS1NoYXJlZFB0cjxJcG9kUGxheWxpc3Q+Ojpz dGF0aWNDYXN0KCBwbGF5bGlzdCApLT50eXBlKCk7CisgICAgICAgIGlmKCB0eXBlID09IElwb2RQ bGF5bGlzdDo6U3RhbGUgfHwgdHlwZSA9PSBJcG9kUGxheWxpc3Q6Ok9ycGhhbmVkICkKKyAgICAg ICAgewogICAgICAgICAgICAgYWN0aW9ucyA8PCBtX2NvbGwtPm1fY29uc29saWRhdGVBY3Rpb247 CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBhY3Rp b25zOwogfQogCiBRQWN0aW9uTGlzdAotSXBvZFBsYXlsaXN0UHJvdmlkZXI6OnRyYWNrQWN0aW9u cyggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwgaW50IHRyYWNrSW5kZXggKQorSXBv ZFBsYXlsaXN0UHJvdmlkZXI6OnRyYWNrQWN0aW9ucyggY29uc3QgUU11bHRpSGFzaDxQbGF5bGlz dHM6OlBsYXlsaXN0UHRyLCBpbnQ+ICZwbGF5bGlzdFRyYWNrcyApCiB7Ci0gICAgUUxpc3Q8UUFj dGlvbiAqPiBhY3Rpb25zOwotICAgIGlmKCAhbV9wbGF5bGlzdHMuY29udGFpbnMoIHBsYXlsaXN0 ICkgKSAgLy8gbWFrZSBmb2xsb3dpbmcgc3RhdGljIGNhc3Qgc2FmZQotICAgICAgICByZXR1cm4g YWN0aW9uczsKLSAgICBLU2hhcmVkUHRyPElwb2RQbGF5bGlzdD4gaXBvZFBsYXlsaXN0ID0gS1No YXJlZFB0cjxJcG9kUGxheWxpc3Q+OjpzdGF0aWNDYXN0KCBwbGF5bGlzdCApOwotICAgIHN3aXRj aCggaXBvZFBsYXlsaXN0LT50eXBlKCkgKQotICAgIHsKLSAgICAgICAgY2FzZSBJcG9kUGxheWxp c3Q6Ok5vcm1hbDoKLSAgICAgICAgICAgIGFjdGlvbnMgPDwgUGxheWxpc3RzOjpVc2VyUGxheWxp c3RQcm92aWRlcjo6dHJhY2tBY3Rpb25zKCBwbGF5bGlzdCwgdHJhY2tJbmRleCApOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSXBvZFBsYXlsaXN0OjpTdGFsZToKLSAgICAgICAg Y2FzZSBJcG9kUGxheWxpc3Q6Ok9ycGhhbmVkOgotICAgICAgICAgICAgYWN0aW9ucyA8PCBtX2Nv bGwtPm1fY29uc29saWRhdGVBY3Rpb247Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg ICByZXR1cm4gYWN0aW9uczsKKyAgICByZXR1cm4gcGxheWxpc3RBY3Rpb25zKCBwbGF5bGlzdFRy YWNrcy51bmlxdWVLZXlzKCkgKTsKIH0KIAogYm9vbApAQCAtMTQ5LDcgKzEzMiw3IEBAIElwb2RQ bGF5bGlzdFByb3ZpZGVyOjppc1dyaXRhYmxlKCkKIH0KIAogdm9pZAotSXBvZFBsYXlsaXN0UHJv dmlkZXI6OnJlbmFtZSggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwgY29uc3QgUVN0 cmluZyAmbmV3TmFtZSApCitJcG9kUGxheWxpc3RQcm92aWRlcjo6cmVuYW1lUGxheWxpc3QoIFBs YXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKQog ewogICAgIGlmKCAhbV9wbGF5bGlzdHMuY29udGFpbnMoIHBsYXlsaXN0ICkgKSAgLy8gbWFrZSBm b2xsb3dpbmcgc3RhdGljIGNhc3Qgc2FmZQogICAgICAgICByZXR1cm47CkBAIC0xNjMsNyArMTQ2 LDcgQEAgSXBvZFBsYXlsaXN0UHJvdmlkZXI6OnJlbmFtZSggUGxheWxpc3RzOjpQbGF5bGlzdFB0 ciBwbGF5bGlzdCwgY29uc3QgUVN0cmluZyAmbmUKIH0KIAogYm9vbAotSXBvZFBsYXlsaXN0UHJv dmlkZXI6OmRlbGV0ZVBsYXlsaXN0cyggUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgcGxheWxpc3Rs aXN0ICkKK0lwb2RQbGF5bGlzdFByb3ZpZGVyOjpkZWxldGVQbGF5bGlzdHMoIGNvbnN0IFBsYXls aXN0czo6UGxheWxpc3RMaXN0ICZwbGF5bGlzdGxpc3QgKQogewogICAgIGlmKCAhaXNXcml0YWJs ZSgpICkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUtaW1wbC9j b2xsZWN0aW9ucy9pcG9kY29sbGVjdGlvbi9JcG9kUGxheWxpc3RQcm92aWRlci5oIGIvc3JjL2Nv cmUtaW1wbC9jb2xsZWN0aW9ucy9pcG9kY29sbGVjdGlvbi9JcG9kUGxheWxpc3RQcm92aWRlci5o CmluZGV4IDk5MGQ0MjMuLjBiYTJkMTUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlLWltcGwvY29sbGVj dGlvbnMvaXBvZGNvbGxlY3Rpb24vSXBvZFBsYXlsaXN0UHJvdmlkZXIuaAorKysgYi9zcmMvY29y ZS1pbXBsL2NvbGxlY3Rpb25zL2lwb2Rjb2xsZWN0aW9uL0lwb2RQbGF5bGlzdFByb3ZpZGVyLmgK QEAgLTQ5LDEzICs0OSwxMiBAQCBjbGFzcyBJcG9kUGxheWxpc3RQcm92aWRlciA6IHB1YmxpYyBQ bGF5bGlzdHM6OlVzZXJQbGF5bGlzdFByb3ZpZGVyLCBwcml2YXRlIFBsYQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgbmFtZSA9IFFT dHJpbmcoKSApOwogCiAgICAgICAgIHZpcnR1YWwgUUFjdGlvbkxpc3QgcHJvdmlkZXJBY3Rpb25z KCk7Ci0gICAgICAgIHZpcnR1YWwgUUFjdGlvbkxpc3QgcGxheWxpc3RBY3Rpb25zKCBQbGF5bGlz dHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0ICk7Ci0gICAgICAgIHZpcnR1YWwgUUFjdGlvbkxpc3Qg dHJhY2tBY3Rpb25zKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhY2tJbmRleCApOwor ICAgICAgICB2aXJ0dWFsIFFBY3Rpb25MaXN0IHBsYXlsaXN0QWN0aW9ucyggY29uc3QgUGxheWxp c3RzOjpQbGF5bGlzdExpc3QgJnBsYXlsaXN0cyApOworICAgICAgICB2aXJ0dWFsIFFBY3Rpb25M aXN0IHRyYWNrQWN0aW9ucyggY29uc3QgUU11bHRpSGFzaDxQbGF5bGlzdHM6OlBsYXlsaXN0UHRy LCBpbnQ+ICZwbGF5bGlzdFRyYWNrcyApOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dyaXRh YmxlKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW5hbWUoIFBsYXlsaXN0czo6UGxheWxpc3RQ dHIgcGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKTsKLSAgICAgICAgdmlydHVhbCBi b29sIGRlbGV0ZVBsYXlsaXN0cyggUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgcGxheWxpc3RsaXN0 ICk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW5hbWVQbGF5bGlzdCggUGxheWxpc3RzOjpQbGF5 bGlzdFB0ciBwbGF5bGlzdCwgY29uc3QgUVN0cmluZyAmbmV3TmFtZSApOworICAgICAgICB2aXJ0 dWFsIGJvb2wgZGVsZXRlUGxheWxpc3RzKCBjb25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCAm cGxheWxpc3RsaXN0ICk7CiAKICAgICAgICAgLy8gUGxheWxpc3RPYnNlcnZlciBtZXRob2RzOgog ICAgICAgICB2aXJ0dWFsIHZvaWQgbWV0YWRhdGFDaGFuZ2VkKCBQbGF5bGlzdHM6OlBsYXlsaXN0 UHRyIHBsYXlsaXN0ICk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS1pbXBsL2NvbGxlY3Rpb25zL21l ZGlhZGV2aWNlY29sbGVjdGlvbi9wbGF5bGlzdC9NZWRpYURldmljZVVzZXJQbGF5bGlzdFByb3Zp ZGVyLmNwcCBiL3NyYy9jb3JlLWltcGwvY29sbGVjdGlvbnMvbWVkaWFkZXZpY2Vjb2xsZWN0aW9u L3BsYXlsaXN0L01lZGlhRGV2aWNlVXNlclBsYXlsaXN0UHJvdmlkZXIuY3BwCmluZGV4IGY0OWE5 ZjYuLmU2ZDUyZTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlLWltcGwvY29sbGVjdGlvbnMvbWVkaWFk ZXZpY2Vjb2xsZWN0aW9uL3BsYXlsaXN0L01lZGlhRGV2aWNlVXNlclBsYXlsaXN0UHJvdmlkZXIu Y3BwCisrKyBiL3NyYy9jb3JlLWltcGwvY29sbGVjdGlvbnMvbWVkaWFkZXZpY2Vjb2xsZWN0aW9u L3BsYXlsaXN0L01lZGlhRGV2aWNlVXNlclBsYXlsaXN0UHJvdmlkZXIuY3BwCkBAIC0zMyw3ICsz Myw2IEBACiAjaW5jbHVkZSA8S0lucHV0RGlhbG9nPgogI2luY2x1ZGUgPEtVcmw+CiAKLSNpbmNs dWRlIDxRQWN0aW9uPgogI2luY2x1ZGUgPFFNYXA+CiAKIHN0YXRpYyBjb25zdCBpbnQgVVNFUlBM QVlMSVNUX0RCX1ZFUlNJT04gPSAyOwpAQCAtNDMsNyArNDIsNiBAQCBuYW1lc3BhY2UgUGxheWxp c3RzIHsKIAogTWVkaWFEZXZpY2VVc2VyUGxheWxpc3RQcm92aWRlcjo6TWVkaWFEZXZpY2VVc2Vy UGxheWxpc3RQcm92aWRlciggQ29sbGVjdGlvbnM6Ok1lZGlhRGV2aWNlQ29sbGVjdGlvbiAqY29s bGVjdGlvbiApCiAgICAgOiBQbGF5bGlzdHM6OlVzZXJQbGF5bGlzdFByb3ZpZGVyKCkKLSAgICAs IG1fcmVuYW1lQWN0aW9uKCAwICkKICAgICAsIG1fY29sbGVjdGlvbiggY29sbGVjdGlvbiApCiB7 CiAgICAgREVCVUdfQkxPQ0sKQEAgLTc5LDY1ICs3Nyw3IEBAIE1lZGlhRGV2aWNlVXNlclBsYXls aXN0UHJvdmlkZXI6OnBsYXlsaXN0cygpCiAKICAgICByZXR1cm4gcGxheWxpc3RzOwogfQotI2lm IDAKLXZvaWQKLVNxbFBsYXlsaXN0czo6VXNlclBsYXlsaXN0UHJvdmlkZXI6OnNsb3REZWxldGUo KQotewotICAgIERFQlVHX0JMT0NLCi0KLSAgICAvL1RPRE8gRklYTUUgQ29uZmlybWF0aW9uIG9m IGRlbGV0ZQotICAgIGZvcmVhY2goIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIFRo ZTo6dXNlclBsYXlsaXN0TW9kZWwoKS0+c2VsZWN0ZWRQbGF5bGlzdHMoKSApCi0gICAgewotICAg ICAgICBNZXRhOjpTcWxQbGF5bGlzdFB0ciBzcWxQbGF5bGlzdCA9Ci0gICAgICAgICAgICAgICAg TWV0YTo6U3FsUGxheWxpc3RQdHI6OmR5bmFtaWNDYXN0KCBwbGF5bGlzdCApOwotICAgICAgICBp Ziggc3FsUGxheWxpc3QgKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWJ1ZygpIDw8ICJkZWxl dGluZyAiIDw8IHNxbFBsYXlsaXN0LT5uYW1lKCk7Ci0gICAgICAgICAgICBzcWxQbGF5bGlzdC0+ cmVtb3ZlRnJvbURiKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVsb2FkRnJvbURiKCk7Ci19 Ci0jZW5kaWYKLQotI2lmIDAKLXZvaWQKLU1lZGlhRGV2aWNlVXNlclBsYXlsaXN0UHJvdmlkZXI6 OnNsb3RSZW5hbWUoKQotewotICAgIERFQlVHX0JMT0NLCi0gICAgLy9vbmx5IG9uZSBwbGF5bGlz dCBjYW4gYmUgc2VsZWN0ZWQgYXQgdGhpcyBwb2ludAotICAgIFBsYXlsaXN0czo6TWVkaWFEZXZp Y2VQbGF5bGlzdFB0ciBwbGF5bGlzdCA9IHNlbGVjdGVkUGxheWxpc3RzKCkuZmlyc3QoKTsKLSAg ICBpZiggcGxheWxpc3QuaXNOdWxsKCkgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIG9r OwotICAgIGNvbnN0IFFTdHJpbmcgbmV3TmFtZSA9IEtJbnB1dERpYWxvZzo6Z2V0VGV4dCggaTE4 bigiQ2hhbmdlIHBsYXlsaXN0IiksCi0gICAgICAgICAgICAgICAgaTE4bigiRW50ZXIgbmV3IG5h bWUgZm9yIHBsYXlsaXN0OiIpLCBwbGF5bGlzdC0+bmFtZSgpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9rICk7Ci0gICAgaWYgKCBvayApCi0g ICAgewotICAgICAgICBwbGF5bGlzdC0+c2V0TmFtZSggbmV3TmFtZS50cmltbWVkKCkgKTsKLSAg ICAgICAgZW1pdCggdXBkYXRlZCgpICk7Ci0gICAgfQotfQotI2VuZGlmCi0jaWYgMAotdm9pZAot U3FsUGxheWxpc3RzOjpVc2VyUGxheWxpc3RQcm92aWRlcjo6c2xvdFJlbW92ZSgpCi17Ci0gICAg UUFjdGlvbiAqYWN0aW9uID0gcW9iamVjdF9jYXN0PFFBY3Rpb24gKj4oIFFPYmplY3Q6OnNlbmRl cigpICk7Ci0gICAgaWYoIGFjdGlvbiA9PSAwICkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgUGxh eWxpc3RUcmFja01hcCBwbGF5bGlzdE1hcCA9IGFjdGlvbi0+ZGF0YSgpLnZhbHVlPFBsYXlsaXN0 VHJhY2tNYXA+KCk7Ci0gICAgZm9yZWFjaCggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlz dCwgcGxheWxpc3RNYXAua2V5cygpICkKLSAgICAgICAgZm9yZWFjaCggTWV0YTo6VHJhY2tQdHIg dHJhY2ssIHBsYXlsaXN0TWFwLnZhbHVlcyggcGxheWxpc3QgKSApCi0gICAgICAgICAgICBwbGF5 bGlzdC0+cmVtb3ZlVHJhY2soIHBsYXlsaXN0LT50cmFja3MoKS5pbmRleE9mKCB0cmFjayApICk7 Ci0KLSAgICAvL2NsZWFyIHRoZSBkYXRhCi0gICAgYWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudCgp ICk7Ci19Ci0jZW5kaWYKIFBsYXlsaXN0czo6UGxheWxpc3RQdHIKIE1lZGlhRGV2aWNlVXNlclBs YXlsaXN0UHJvdmlkZXI6OnNhdmUoIGNvbnN0IE1ldGE6OlRyYWNrTGlzdCAmdHJhY2tzICkKIHsK QEAgLTE2OSw3ICsxMDksNyBAQCBNZWRpYURldmljZVVzZXJQbGF5bGlzdFByb3ZpZGVyOjpzYXZl KCBjb25zdCBNZXRhOjpUcmFja0xpc3QgJnRyYWNrcywgY29uc3QgUVN0cgogfQogCiB2b2lkCi1N ZWRpYURldmljZVVzZXJQbGF5bGlzdFByb3ZpZGVyOjpyZW5hbWUoIFBsYXlsaXN0czo6UGxheWxp c3RQdHIgcGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKQorTWVkaWFEZXZpY2VVc2Vy UGxheWxpc3RQcm92aWRlcjo6cmVuYW1lUGxheWxpc3QoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIg cGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKQogewogICAgIERFQlVHX0JMT0NLCiAg ICAgUGxheWxpc3RzOjpNZWRpYURldmljZVBsYXlsaXN0UHRyIHBsID0gUGxheWxpc3RzOjpNZWRp YURldmljZVBsYXlsaXN0UHRyOjpzdGF0aWNDYXN0KCBwbGF5bGlzdCApOwpAQCAtMTgzLDcgKzEy Myw3IEBAIE1lZGlhRGV2aWNlVXNlclBsYXlsaXN0UHJvdmlkZXI6OnJlbmFtZSggUGxheWxpc3Rz OjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwgY29uc3QKIH0KIAogYm9vbAotTWVkaWFEZXZpY2VVc2Vy UGxheWxpc3RQcm92aWRlcjo6ZGVsZXRlUGxheWxpc3RzKCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlz dCBwbGF5bGlzdGxpc3QgKQorTWVkaWFEZXZpY2VVc2VyUGxheWxpc3RQcm92aWRlcjo6ZGVsZXRl UGxheWxpc3RzKCBjb25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCAmcGxheWxpc3RsaXN0ICkK IHsKICAgICBQbGF5bGlzdHM6Ok1lZGlhRGV2aWNlUGxheWxpc3RMaXN0IHBsbGlzdDsKICAgICBm b3JlYWNoKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0LCBwbGF5bGlzdGxpc3QgKQpk aWZmIC0tZ2l0IGEvc3JjL2NvcmUtaW1wbC9jb2xsZWN0aW9ucy9tZWRpYWRldmljZWNvbGxlY3Rp b24vcGxheWxpc3QvTWVkaWFEZXZpY2VVc2VyUGxheWxpc3RQcm92aWRlci5oIGIvc3JjL2NvcmUt aW1wbC9jb2xsZWN0aW9ucy9tZWRpYWRldmljZWNvbGxlY3Rpb24vcGxheWxpc3QvTWVkaWFEZXZp Y2VVc2VyUGxheWxpc3RQcm92aWRlci5oCmluZGV4IDNhMTU3MmYuLmQ4NmRlY2MgMTAwNjQ0Ci0t LSBhL3NyYy9jb3JlLWltcGwvY29sbGVjdGlvbnMvbWVkaWFkZXZpY2Vjb2xsZWN0aW9uL3BsYXls aXN0L01lZGlhRGV2aWNlVXNlclBsYXlsaXN0UHJvdmlkZXIuaAorKysgYi9zcmMvY29yZS1pbXBs L2NvbGxlY3Rpb25zL21lZGlhZGV2aWNlY29sbGVjdGlvbi9wbGF5bGlzdC9NZWRpYURldmljZVVz ZXJQbGF5bGlzdFByb3ZpZGVyLmgKQEAgLTIzLDggKzIzLDYgQEAKICNpbmNsdWRlIDxrbG9jYWxl Lmg+CiAjaW5jbHVkZSA8a2ljb24uaD4KIAotY2xhc3MgUUFjdGlvbjsKLQogbmFtZXNwYWNlIENv bGxlY3Rpb25zIHsKICAgICBjbGFzcyBNZWRpYURldmljZUNvbGxlY3Rpb247CiB9CkBAIC0zOSw3 ICszNyw3IEBAIGNsYXNzIEFNQVJPS19FWFBPUlQgTWVkaWFEZXZpY2VVc2VyUGxheWxpc3RQcm92 aWRlciA6IHB1YmxpYyBQbGF5bGlzdHM6OlVzZXJQbGF5CiAgICAgICAgIH5NZWRpYURldmljZVVz ZXJQbGF5bGlzdFByb3ZpZGVyKCk7CiAKICAgICAgICAgLyogUGxheWxpc3RQcm92aWRlciBmdW5j dGlvbnMgKi8KLSAgICAgICAgdmlydHVhbCBRU3RyaW5nIHByZXR0eU5hbWUoKSBjb25zdCB7IHJl dHVybiBpMThuKCJNZWRpYSBEZXZpY2UgcGxheWxpc3RzIik7IH07CisgICAgICAgIHZpcnR1YWwg UVN0cmluZyBwcmV0dHlOYW1lKCkgY29uc3QgeyByZXR1cm4gaTE4biggIk1lZGlhIERldmljZSBw bGF5bGlzdHMiICk7IH07CiAgICAgICAgIHZpcnR1YWwgS0ljb24gaWNvbigpIGNvbnN0IHsgcmV0 dXJuIEtJY29uKCAibXVsdGltZWRpYS1wbGF5ZXIiICk7IH0KIAogICAgICAgICAvKiBQbGF5bGlz dHM6OlVzZXJQbGF5bGlzdFByb3ZpZGVyIGZ1bmN0aW9ucyAqLwpAQCAtNDgsMTUgKzQ2LDkgQEAg Y2xhc3MgQU1BUk9LX0VYUE9SVCBNZWRpYURldmljZVVzZXJQbGF5bGlzdFByb3ZpZGVyIDogcHVi bGljIFBsYXlsaXN0czo6VXNlclBsYXkKICAgICAgICAgdmlydHVhbCBQbGF5bGlzdHM6OlBsYXls aXN0UHRyIHNhdmUoIGNvbnN0IE1ldGE6OlRyYWNrTGlzdCAmdHJhY2tzICk7CiAgICAgICAgIHZp cnR1YWwgUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBzYXZlKCBjb25zdCBNZXRhOjpUcmFja0xpc3Qg JnRyYWNrcywgY29uc3QgUVN0cmluZyYgbmFtZSApOwogCi0gICAgICAgIC8vICAgICAgdmlydHVh bCBib29sIHN1cHBvcnRzRW1wdHlHcm91cHMoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAg Ly92aXJ0dWFsIFFMaXN0PFFBY3Rpb24gKj4gcGxheWxpc3RBY3Rpb25zKCBNZXRhOjpQbGF5bGlz dExpc3QgbGlzdCApOwotCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dyaXRhYmxlKCkgeyByZXR1 cm4gdHJ1ZTsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZW5hbWUoIFBsYXlsaXN0czo6UGxh eWxpc3RQdHIgcGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKTsKLQotICAgICAgICB2 aXJ0dWFsIGJvb2wgZGVsZXRlUGxheWxpc3RzKCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCBwbGF5 bGlzdGxpc3QgKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbmFtZVBsYXlsaXN0KCBQbGF5bGlz dHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0LCBjb25zdCBRU3RyaW5nICZuZXdOYW1lICk7CisgICAg ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQbGF5bGlzdHMoIGNvbnN0IFBsYXlsaXN0czo6UGxheWxp c3RMaXN0ICZwbGF5bGlzdGxpc3QgKTsKIAogICAgICAgICAvLy8gTWVkaWFEZXZpY2Utc3BlY2lm aWMgRnVuY3Rpb25zCiAKQEAgLTcxLDE2ICs2Myw5IEBAIGNsYXNzIEFNQVJPS19FWFBPUlQgTWVk aWFEZXZpY2VVc2VyUGxheWxpc3RQcm92aWRlciA6IHB1YmxpYyBQbGF5bGlzdHM6OlVzZXJQbGF5 CiAgICAgICAgICAgICB2b2lkIHBsYXlsaXN0UmVuYW1lZCggY29uc3QgUGxheWxpc3RzOjpNZWRp YURldmljZVBsYXlsaXN0UHRyICZwbGF5bGlzdCApOwogICAgICAgICAgICAgdm9pZCBwbGF5bGlz dHNEZWxldGVkKCBjb25zdCBQbGF5bGlzdHM6Ok1lZGlhRGV2aWNlUGxheWxpc3RMaXN0ICZwbGF5 bGlzdGxpc3QgKTsKIAotICAgICAgICBwcml2YXRlIHNsb3RzOgotICAgICAgICAvL3ZvaWQgc2xv dERlbGV0ZSgpOwotICAgICAgICAvL3ZvaWQgc2xvdFJlbmFtZSgpOwotICAgICAgICAvL3ZvaWQg c2xvdFJlbW92ZSgpOwotCiAgcHJpdmF0ZToKLQogICAgIE1lZGlhRGV2aWNlUGxheWxpc3RMaXN0 IG1fcGxheWxpc3RzOwogCi0gICAgUUFjdGlvbiAqbV9yZW5hbWVBY3Rpb247CiAgICAgQ29sbGVj dGlvbnM6Ok1lZGlhRGV2aWNlQ29sbGVjdGlvbiAqbV9jb2xsZWN0aW9uOwogfTsKIApkaWZmIC0t Z2l0IGEvc3JjL2NvcmUtaW1wbC9jb2xsZWN0aW9ucy91bXNjb2xsZWN0aW9uL3BvZGNhc3RzL1Vt c1BvZGNhc3RQcm92aWRlci5jcHAgYi9zcmMvY29yZS1pbXBsL2NvbGxlY3Rpb25zL3Vtc2NvbGxl Y3Rpb24vcG9kY2FzdHMvVW1zUG9kY2FzdFByb3ZpZGVyLmNwcAppbmRleCBlOGFmNjc2Li43NTc5 YmEyIDEwMDY0NAotLS0gYS9zcmMvY29yZS1pbXBsL2NvbGxlY3Rpb25zL3Vtc2NvbGxlY3Rpb24v cG9kY2FzdHMvVW1zUG9kY2FzdFByb3ZpZGVyLmNwcAorKysgYi9zcmMvY29yZS1pbXBsL2NvbGxl Y3Rpb25zL3Vtc2NvbGxlY3Rpb24vcG9kY2FzdHMvVW1zUG9kY2FzdFByb3ZpZGVyLmNwcApAQCAt MTc0LDI4ICsxNzQsMjMgQEAgVW1zUG9kY2FzdFByb3ZpZGVyOjpwbGF5bGlzdHMoKQogICAgIHJl dHVybiBwbGF5bGlzdHM7CiB9CiAKLVFMaXN0PFFBY3Rpb24gKj4KK1FBY3Rpb25MaXN0CiBVbXNQ b2RjYXN0UHJvdmlkZXI6OmVwaXNvZGVBY3Rpb25zKCBQb2RjYXN0RXBpc29kZUxpc3QgZXBpc29k ZXMgKQogewotICAgIFFMaXN0PFFBY3Rpb24gKj4gYWN0aW9uczsKKyAgICBRQWN0aW9uTGlzdCBh Y3Rpb25zOworICAgIGlmKCBlcGlzb2Rlcy5pc0VtcHR5KCkgKQorICAgICAgICByZXR1cm4gYWN0 aW9uczsKKwogICAgIGlmKCBtX2RlbGV0ZUVwaXNvZGVBY3Rpb24gPT0gMCApCiAgICAgewotICAg ICAgICBtX2RlbGV0ZUVwaXNvZGVBY3Rpb24gPSBuZXcgUUFjdGlvbigKLSAgICAgICAgICAgIEtJ Y29uKCAiZWRpdC1kZWxldGUiICksCi0gICAgICAgICAgICBpMThuKCAiJkRlbGV0ZSBFcGlzb2Rl IiApLAotICAgICAgICAgICAgdGhpcwotICAgICAgICApOworICAgICAgICBtX2RlbGV0ZUVwaXNv ZGVBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24oICJlZGl0LWRlbGV0ZSIgKSwgaTE4biggIiZE ZWxldGUgRXBpc29kZSIgKSwgdGhpcyApOwogICAgICAgICBtX2RlbGV0ZUVwaXNvZGVBY3Rpb24t PnNldFByb3BlcnR5KCAicG9wdXBkcm9wcGVyX3N2Z19pZCIsICJkZWxldGUiICk7Ci0gICAgICAg IGNvbm5lY3QoIG1fZGVsZXRlRXBpc29kZUFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwKLSAg ICAgICAgICAgICAgICAgU0xPVChzbG90RGVsZXRlRXBpc29kZXMoKSkgKTsKKyAgICAgICAgY29u bmVjdCggbV9kZWxldGVFcGlzb2RlQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9UKHNs b3REZWxldGVFcGlzb2RlcygpKSApOwogICAgIH0KLSAgICAvL3NldCB0aGUgZXBpc29kZSBsaXN0 IGFzIGRhdGEgdGhhdCB3ZSdsbCByZXRyaWV2ZSBpbiB0aGUgc2xvdAotICAgIFBvZGNhc3RFcGlz b2RlTGlzdCBhY3Rpb25MaXN0ID0KLSAgICAgICAgICAgIG1fZGVsZXRlRXBpc29kZUFjdGlvbi0+ ZGF0YSgpLnZhbHVlPFBvZGNhc3RFcGlzb2RlTGlzdD4oKTsKLQotICAgIGFjdGlvbkxpc3QgPDwg ZXBpc29kZXM7Ci0gICAgbV9kZWxldGVFcGlzb2RlQWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6 ZnJvbVZhbHVlKCBhY3Rpb25MaXN0ICkgKTsKKyAgICAvLyBzZXQgdGhlIGVwaXNvZGUgbGlzdCBh cyBkYXRhIHRoYXQgd2UnbGwgcmV0cmlldmUgaW4gdGhlIHNsb3QKKyAgICBtX2RlbGV0ZUVwaXNv ZGVBY3Rpb24tPnNldERhdGEoIFFWYXJpYW50Ojpmcm9tVmFsdWUoIGVwaXNvZGVzICkgKTsKICAg ICBhY3Rpb25zIDw8IG1fZGVsZXRlRXBpc29kZUFjdGlvbjsKKwogICAgIHJldHVybiBhY3Rpb25z OwogfQogCkBAIC0zMTgsMjkgKzMxMywyNCBAQCBVbXNQb2RjYXN0UHJvdmlkZXI6OmRlbGV0ZUpv YkNvbXBsZXRlKCBLSm9iICpqb2IgKQogICAgIH0KIH0KIAotUUxpc3Q8UUFjdGlvbiAqPgorUUFj dGlvbkxpc3QKIFVtc1BvZGNhc3RQcm92aWRlcjo6Y2hhbm5lbEFjdGlvbnMoIFBvZGNhc3RDaGFu bmVsTGlzdCBjaGFubmVscyApCiB7Ci0gICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zOworICAg IFFBY3Rpb25MaXN0IGFjdGlvbnM7CisgICAgaWYoIGNoYW5uZWxzLmlzRW1wdHkoKSApCisgICAg ICAgIHJldHVybiBhY3Rpb25zOworCiAgICAgaWYoIG1fZGVsZXRlQ2hhbm5lbEFjdGlvbiA9PSAw ICkKICAgICB7Ci0gICAgICAgIG1fZGVsZXRlQ2hhbm5lbEFjdGlvbiA9IG5ldyBRQWN0aW9uKAot ICAgICAgICAgICAgS0ljb24oICJlZGl0LWRlbGV0ZSIgKSwKLSAgICAgICAgICAgIGkxOG4oICIm RGVsZXRlIENoYW5uZWwgYW5kIEVwaXNvZGVzIiApLAotICAgICAgICAgICAgdGhpcwotICAgICAg ICApOworICAgICAgICBtX2RlbGV0ZUNoYW5uZWxBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24o ICJlZGl0LWRlbGV0ZSIgKSwgaTE4biggIiZEZWxldGUgIgorICAgICAgICAgICAgICAgICJDaGFu bmVsIGFuZCBFcGlzb2RlcyIgKSwgdGhpcyApOwogICAgICAgICBtX2RlbGV0ZUNoYW5uZWxBY3Rp b24tPnNldFByb3BlcnR5KCAicG9wdXBkcm9wcGVyX3N2Z19pZCIsICJkZWxldGUiICk7Ci0gICAg ICAgIGNvbm5lY3QoIG1fZGVsZXRlQ2hhbm5lbEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwK LSAgICAgICAgICAgICAgICAgU0xPVChzbG90RGVsZXRlQ2hhbm5lbHMoKSkgKTsKKyAgICAgICAg Y29ubmVjdCggbV9kZWxldGVDaGFubmVsQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9U KHNsb3REZWxldGVDaGFubmVscygpKSApOwogICAgIH0KLSAgICAvL3NldCB0aGUgZXBpc29kZSBs aXN0IGFzIGRhdGEgdGhhdCB3ZSdsbCByZXRyaWV2ZSBpbiB0aGUgc2xvdAotICAgIFBvZGNhc3RD aGFubmVsTGlzdCBhY3Rpb25MaXN0ID0KLSAgICAgICAgICAgIG1fZGVsZXRlQ2hhbm5lbEFjdGlv bi0+ZGF0YSgpLnZhbHVlPFBvZGNhc3RDaGFubmVsTGlzdD4oKTsKLQotICAgIGFjdGlvbkxpc3Qg PDwgY2hhbm5lbHM7Ci0gICAgbV9kZWxldGVDaGFubmVsQWN0aW9uLT5zZXREYXRhKCBRVmFyaWFu dDo6ZnJvbVZhbHVlKCBhY3Rpb25MaXN0ICkgKTsKLQorICAgIC8vIHNldCB0aGUgZXBpc29kZSBs aXN0IGFzIGRhdGEgdGhhdCB3ZSdsbCByZXRyaWV2ZSBpbiB0aGUgc2xvdAorICAgIG1fZGVsZXRl Q2hhbm5lbEFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggY2hhbm5lbHMgKSAp OwogICAgIGFjdGlvbnMgPDwgbV9kZWxldGVDaGFubmVsQWN0aW9uOworCiAgICAgcmV0dXJuIGFj dGlvbnM7CiB9CiAKQEAgLTM3MiwyOSArMzYyLDQxIEBAIFVtc1BvZGNhc3RQcm92aWRlcjo6c2xv dERlbGV0ZUNoYW5uZWxzKCkKICAgICB9CiB9CiAKLVFMaXN0PFFBY3Rpb24gKj4KLVVtc1BvZGNh c3RQcm92aWRlcjo6cGxheWxpc3RBY3Rpb25zKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXls aXN0ICkKK1FBY3Rpb25MaXN0CitVbXNQb2RjYXN0UHJvdmlkZXI6OnBsYXlsaXN0QWN0aW9ucygg Y29uc3QgUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgJnBsYXlsaXN0cyApCiB7CiAgICAgUG9kY2Fz dENoYW5uZWxMaXN0IGNoYW5uZWxzOwotICAgIFBvZGNhc3RDaGFubmVsUHRyIGNoYW5uZWwgPSBQ b2RjYXN0Q2hhbm5lbFB0cjo6ZHluYW1pY0Nhc3QoIHBsYXlsaXN0ICk7Ci0gICAgaWYoIGNoYW5u ZWwuaXNOdWxsKCkgKQotICAgICAgICByZXR1cm4gUUxpc3Q8UUFjdGlvbiAqPigpOworICAgIGZv cmVhY2goIGNvbnN0IFBsYXlsaXN0czo6UGxheWxpc3RQdHIgJnBsYXlsaXN0LCBwbGF5bGlzdHMg KQorICAgIHsKKyAgICAgICAgUG9kY2FzdENoYW5uZWxQdHIgY2hhbm5lbCA9IFBvZGNhc3RDaGFu bmVsUHRyOjpkeW5hbWljQ2FzdCggcGxheWxpc3QgKTsKKyAgICAgICAgaWYoIGNoYW5uZWwgKQor ICAgICAgICAgICAgY2hhbm5lbHMgPDwgY2hhbm5lbDsKKyAgICB9CiAKLSAgICByZXR1cm4gY2hh bm5lbEFjdGlvbnMoIGNoYW5uZWxzIDw8IGNoYW5uZWwgKTsKKyAgICByZXR1cm4gY2hhbm5lbEFj dGlvbnMoIGNoYW5uZWxzICk7CiB9CiAKLVFMaXN0PFFBY3Rpb24gKj4KLVVtc1BvZGNhc3RQcm92 aWRlcjo6dHJhY2tBY3Rpb25zKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0LCBpbnQg dHJhY2tJbmRleCApCitRQWN0aW9uTGlzdAorVW1zUG9kY2FzdFByb3ZpZGVyOjp0cmFja0FjdGlv bnMoIGNvbnN0IFFNdWx0aUhhc2g8UGxheWxpc3RzOjpQbGF5bGlzdFB0ciwgaW50PiAmcGxheWxp c3RUcmFja3MgKQogewotICAgIGlmKCBwbGF5bGlzdC0+dHJhY2tzKCkuY291bnQoKSA+IHRyYWNr SW5kZXggKQorICAgIFBvZGNhc3RFcGlzb2RlTGlzdCBlcGlzb2RlczsKKyAgICBmb3JlYWNoKCBj b25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyICZwbGF5bGlzdCwgcGxheWxpc3RUcmFja3MudW5p cXVlS2V5cygpICkKICAgICB7Ci0gICAgICAgIFBvZGNhc3RFcGlzb2RlTGlzdCBlcGlzb2RlczsK LSAgICAgICAgZXBpc29kZXMgPDwgVW1zUG9kY2FzdEVwaXNvZGU6OnRvUG9kY2FzdEVwaXNvZGVQ dHIoCi0gICAgICAgICAgICAgICAgICAgIFVtc1BvZGNhc3RFcGlzb2RlOjpmcm9tVHJhY2tQdHIo IHBsYXlsaXN0LT50cmFja3MoKVt0cmFja0luZGV4XSApCi0gICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgcmV0dXJuIGVwaXNvZGVBY3Rpb25zKCBlcGlzb2RlcyApOworICAgICAgICBQb2RjYXN0 Q2hhbm5lbFB0ciBjaGFubmVsID0gUG9kY2FzdENoYW5uZWxQdHI6OmR5bmFtaWNDYXN0KCBwbGF5 bGlzdCApOworICAgICAgICBpZiggIWNoYW5uZWwgKQorICAgICAgICAgICAgY29udGludWU7CisK KyAgICAgICAgUG9kY2FzdEVwaXNvZGVMaXN0IGNoYW5uZWxFcGlzb2RlcyA9IGNoYW5uZWwtPmVw aXNvZGVzKCk7CisgICAgICAgIFFMaXN0PGludD4gdHJhY2tQb3NpdGlvbnMgPSBwbGF5bGlzdFRy YWNrcy52YWx1ZXMoIHBsYXlsaXN0ICk7CisgICAgICAgIHFTb3J0KCB0cmFja1Bvc2l0aW9ucyAp OworICAgICAgICBmb3JlYWNoKCBpbnQgdHJhY2tQb3NpdGlvbiwgdHJhY2tQb3NpdGlvbnMgKQor ICAgICAgICB7CisgICAgICAgICAgICBpZiggdHJhY2tQb3NpdGlvbiA+PSAwICYmIHRyYWNrUG9z aXRpb24gPCBjaGFubmVsRXBpc29kZXMuY291bnQoKSApCisgICAgICAgICAgICAgICAgZXBpc29k ZXMgPDwgY2hhbm5lbEVwaXNvZGVzLmF0KCB0cmFja1Bvc2l0aW9uICk7CisgICAgICAgIH0KICAg ICB9Ci0gICAgcmV0dXJuIFFMaXN0PFFBY3Rpb24gKj4oKTsKKworICAgIHJldHVybiBlcGlzb2Rl QWN0aW9ucyggZXBpc29kZXMgKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUtaW1w bC9jb2xsZWN0aW9ucy91bXNjb2xsZWN0aW9uL3BvZGNhc3RzL1Vtc1BvZGNhc3RQcm92aWRlci5o IGIvc3JjL2NvcmUtaW1wbC9jb2xsZWN0aW9ucy91bXNjb2xsZWN0aW9uL3BvZGNhc3RzL1Vtc1Bv ZGNhc3RQcm92aWRlci5oCmluZGV4IGQ0NmY2M2QuLjE4ZjI5ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9j b3JlLWltcGwvY29sbGVjdGlvbnMvdW1zY29sbGVjdGlvbi9wb2RjYXN0cy9VbXNQb2RjYXN0UHJv dmlkZXIuaAorKysgYi9zcmMvY29yZS1pbXBsL2NvbGxlY3Rpb25zL3Vtc2NvbGxlY3Rpb24vcG9k Y2FzdHMvVW1zUG9kY2FzdFByb3ZpZGVyLmgKQEAgLTU3LDEyICs1Nyw4IEBAIGNsYXNzIFVtc1Bv ZGNhc3RQcm92aWRlciA6IHB1YmxpYyBQb2RjYXN0UHJvdmlkZXIKIAogICAgICAgICB2aXJ0dWFs IFBsYXlsaXN0czo6UGxheWxpc3RMaXN0IHBsYXlsaXN0cygpOwogCi0gICAgICAgIHZpcnR1YWwg UUxpc3Q8UUFjdGlvbiAqPiBlcGlzb2RlQWN0aW9ucyggUG9kY2FzdHM6OlBvZGNhc3RFcGlzb2Rl TGlzdCApOwotICAgICAgICB2aXJ0dWFsIFFMaXN0PFFBY3Rpb24gKj4gY2hhbm5lbEFjdGlvbnMo IFBvZGNhc3RzOjpQb2RjYXN0Q2hhbm5lbExpc3QgKTsKLQotICAgICAgICB2aXJ0dWFsIFFMaXN0 PFFBY3Rpb24gKj4gcGxheWxpc3RBY3Rpb25zKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXls aXN0ICk7Ci0gICAgICAgIHZpcnR1YWwgUUxpc3Q8UUFjdGlvbiAqPiB0cmFja0FjdGlvbnMoIFBs YXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmFja0luZGV4ICk7CisgICAgICAgIHZpcnR1 YWwgUUFjdGlvbkxpc3QgcGxheWxpc3RBY3Rpb25zKCBjb25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0 TGlzdCAmcGxheWxpc3RzICk7CisgICAgICAgIHZpcnR1YWwgUUFjdGlvbkxpc3QgdHJhY2tBY3Rp b25zKCBjb25zdCBRTXVsdGlIYXNoPFBsYXlsaXN0czo6UGxheWxpc3RQdHIsIGludD4gJnBsYXls aXN0VHJhY2tzICk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlUG9kY2FzdERvd25s b2FkcygpOwogCkBAIC04NCw2ICs4MCw4IEBAIGNsYXNzIFVtc1BvZGNhc3RQcm92aWRlciA6IHB1 YmxpYyBQb2RjYXN0UHJvdmlkZXIKICAgICAgICAgdm9pZCBzbG90Q29weUNvbXBsZXRlKCBLSm9i ICpqb2IgKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFFMaXN0PFFBY3Rpb24gKj4gZXBpc29k ZUFjdGlvbnMoIFBvZGNhc3RzOjpQb2RjYXN0RXBpc29kZUxpc3QgKTsKKyAgICAgICAgUUxpc3Q8 UUFjdGlvbiAqPiBjaGFubmVsQWN0aW9ucyggUG9kY2FzdHM6OlBvZGNhc3RDaGFubmVsTGlzdCAp OwogICAgICAgICB2b2lkIGRlbGV0ZUVwaXNvZGVzKCBVbXNQb2RjYXN0RXBpc29kZUxpc3QgdW1z RXBpc29kZXMgKTsKIAogICAgICAgICBLVXJsIG1fc2NhbkRpcmVjdG9yeTsKZGlmZiAtLWdpdCBh L3NyYy9jb3JlLWltcGwvcGxheWxpc3RzL3Byb3ZpZGVycy91c2VyL1VzZXJQbGF5bGlzdFByb3Zp ZGVyLmNwcCBiL3NyYy9jb3JlLWltcGwvcGxheWxpc3RzL3Byb3ZpZGVycy91c2VyL1VzZXJQbGF5 bGlzdFByb3ZpZGVyLmNwcAppbmRleCBkOWQwNjZjLi5hYmNkMWQ0IDEwMDY0NAotLS0gYS9zcmMv Y29yZS1pbXBsL3BsYXlsaXN0cy9wcm92aWRlcnMvdXNlci9Vc2VyUGxheWxpc3RQcm92aWRlci5j cHAKKysrIGIvc3JjL2NvcmUtaW1wbC9wbGF5bGlzdHMvcHJvdmlkZXJzL3VzZXIvVXNlclBsYXls aXN0UHJvdmlkZXIuY3BwCkBAIC0xNSw1NiArMTUsMTEgQEAKICAqIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICAgICAgICAgICAgICAg ICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1 ZGUgImNvcmUtaW1wbC9wbGF5bGlzdHMvcHJvdmlkZXJzL3VzZXIvVXNlclBsYXlsaXN0UHJvdmlk ZXIuaCIKLSNpbmNsdWRlICJjb3JlLWltcGwvcGxheWxpc3RzL3R5cGVzL2ZpbGUvUGxheWxpc3RG aWxlU3VwcG9ydC5oIgotCi0jaW5jbHVkZSAicGxheWxpc3RtYW5hZ2VyL1BsYXlsaXN0TWFuYWdl ci5oIgotI2luY2x1ZGUgImFtYXJva2NvbmZpZy5oIgotCi0jaW5jbHVkZSA8S0RpYWxvZz4KLSNp bmNsdWRlIDxLRmlsZURpYWxvZz4KLSNpbmNsdWRlIDxrYWJzdHJhY3RmaWxld2lkZ2V0Lmg+IC8v IEtGaWxlRGlhbG9nIG5lZWRzIHRoaXMuIEl0J3MgYSBzY2FuZGFsLgotI2luY2x1ZGUgPEtMb2Nh bGl6ZWRTdHJpbmc+Ci0KLSNpbmNsdWRlIDxRQWN0aW9uPgotI2luY2x1ZGUgPFFDaGVja0JveD4K LSNpbmNsdWRlIDxRTGFiZWw+Ci0KLS8vIEZvciByZW1vdmluZyBtdWx0aXBsZSB0cmFja3MgZnJv bSBkaWZmZXJlbnQgcGxheWxpc3RzIHdpdGggb25lIFFBY3Rpb24KLXR5cGVkZWYgUU11bHRpTWFw PFBsYXlsaXN0czo6UGxheWxpc3RQdHIsIGludD4gUGxheWxpc3RUcmFja01hcDsKLVFfREVDTEFS RV9NRVRBVFlQRSggUGxheWxpc3RUcmFja01hcCApCisjaW5jbHVkZSAiVXNlclBsYXlsaXN0UHJv dmlkZXIuaCIKIAogUGxheWxpc3RzOjpVc2VyUGxheWxpc3RQcm92aWRlcjo6VXNlclBsYXlsaXN0 UHJvdmlkZXIoIFFPYmplY3QgKnBhcmVudCApCiAgICAgOiBQbGF5bGlzdFByb3ZpZGVyKCBwYXJl bnQgKQogewotICAgIG1fZGVsZXRlQWN0aW9uID0gbmV3IFFBY3Rpb24oIEtJY29uKCAibWVkaWEt dHJhY2stcmVtb3ZlLWFtYXJvayIgKSwgaTE4biggIiZEZWxldGUuLi4iICksIHRoaXMgKTsKLSAg ICBtX2RlbGV0ZUFjdGlvbi0+c2V0UHJvcGVydHkoICJwb3B1cGRyb3BwZXJfc3ZnX2lkIiwgImRl bGV0ZSIgKTsKLSAgICAvLyBvYmplY3QgbmFtZSBtdXN0IG1hdGNoIG9uZSBpbiBQbGF5bGlzdEJy b3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmlldwotICAgIG1fZGVsZXRlQWN0aW9uLT5zZXRPYmpl Y3ROYW1lKCAiZGVsZXRlQWN0aW9uIiApOwotICAgIC8vIGtleSBzaG9ydGN1dCBpcyBvbmx5IGZv ciBkaXNwbGF5IHB1cnBvc2VzIGhlcmUsIGFjdHVhbCBvbmUgaXMgZGV0ZXJtaW5lZCBieSBWaWV3 IGluIE1vZGVsL1ZpZXcgY2xhc3NlcwotICAgIG1fZGVsZXRlQWN0aW9uLT5zZXRTaG9ydGN1dCgg UXQ6OktleV9EZWxldGUgKTsKLSAgICBjb25uZWN0KCBtX2RlbGV0ZUFjdGlvbiwgU0lHTkFMKHRy aWdnZXJlZCgpKSwgU0xPVChzbG90RGVsZXRlKCkpICk7Ci0KLSAgICBtX3JlbmFtZUFjdGlvbiA9 ICBuZXcgUUFjdGlvbiggS0ljb24oICJtZWRpYS10cmFjay1lZGl0LWFtYXJvayIgKSwgaTE4bigg IiZSZW5hbWUuLi4iICksIHRoaXMgKTsKLSAgICBtX3JlbmFtZUFjdGlvbi0+c2V0UHJvcGVydHko ICJwb3B1cGRyb3BwZXJfc3ZnX2lkIiwgImVkaXQiICk7Ci0gICAgLy8ga2V5IHNob3J0Y3V0IGlz IG9ubHkgZm9yIGRpc3BsYXkgcHVycG9zZXMgaGVyZSwgYWN0dWFsIG9uZSBpcyBkZXRlcm1pbmVk IGJ5IFZpZXcgaW4gTW9kZWwvVmlldyBjbGFzc2VzCi0gICAgbV9yZW5hbWVBY3Rpb24tPnNldFNo b3J0Y3V0KCBRdDo6S2V5X0YyICk7Ci0gICAgY29ubmVjdCggbV9yZW5hbWVBY3Rpb24sIFNJR05B TCh0cmlnZ2VyZWQoKSksIHRoaXMsIFNMT1Qoc2xvdFJlbmFtZSgpKSApOwotCi0gICAgbV9leHBv cnRBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24oICJkb2N1bWVudC1leHBvcnQtYW1hcm9rIiAp LCBpMThuKCImRXhwb3J0IFBsYXlsaXN0IEFzLi4uIiksIHRoaXMgKTsKLSAgICBjb25uZWN0KCBt X2V4cG9ydEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwgdGhpcywgU0xPVChzbG90RXhwb3J0 KCkpICk7Ci0KLSAgICBtX3JlbW92ZVRyYWNrQWN0aW9uID0gbmV3IFFBY3Rpb24oIEtJY29uKCAi bWVkaWEtdHJhY2stcmVtb3ZlLWFtYXJvayIgKSwgUVN0cmluZyggIlBsYWNlaG9sZGVyIiApLCB0 aGlzICk7Ci0gICAgbV9yZW1vdmVUcmFja0FjdGlvbi0+c2V0UHJvcGVydHkoICJwb3B1cGRyb3Bw ZXJfc3ZnX2lkIiwgImRlbGV0ZSIgKTsKLSAgICAvLyBvYmplY3QgbmFtZSBtdXN0IG1hdGNoIG9u ZSBpbiBQbGF5bGlzdEJyb3dzZXJOUzo6UGxheWxpc3RCcm93c2VyVmlldwotICAgIG1fcmVtb3Zl VHJhY2tBY3Rpb24tPnNldE9iamVjdE5hbWUoICJkZWxldGVBY3Rpb24iICk7Ci0gICAgLy8ga2V5 IHNob3J0Y3V0IGlzIG9ubHkgZm9yIGRpc3BsYXkgcHVycG9zZXMgaGVyZSwgYWN0dWFsIG9uZSBp cyBkZXRlcm1pbmVkIGJ5IFZpZXcgaW4gTW9kZWwvVmlldyBjbGFzc2VzCi0gICAgbV9yZW1vdmVU cmFja0FjdGlvbi0+c2V0U2hvcnRjdXQoIFF0OjpLZXlfRGVsZXRlICk7Ci0gICAgY29ubmVjdCgg bV9yZW1vdmVUcmFja0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwgU0xPVChzbG90UmVtb3Zl VHJhY2soKSkgKTsKLX0KLQotUGxheWxpc3RzOjpVc2VyUGxheWxpc3RQcm92aWRlcjo6flVzZXJQ bGF5bGlzdFByb3ZpZGVyKCkKLXsKIH0KIAogaW50CkBAIC03MiwxNzUgKzI3LDMgQEAgUGxheWxp c3RzOjpVc2VyUGxheWxpc3RQcm92aWRlcjo6Y2F0ZWdvcnkoKSBjb25zdAogewogICAgICByZXR1 cm4gUGxheWxpc3RzOjpVc2VyUGxheWxpc3Q7CiB9Ci0KLVFMaXN0PFFBY3Rpb24gKj4KLVBsYXls aXN0czo6VXNlclBsYXlsaXN0UHJvdmlkZXI6OnBsYXlsaXN0QWN0aW9ucyggUGxheWxpc3RzOjpQ bGF5bGlzdFB0ciBwbGF5bGlzdCApCi17Ci0gICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zOwot Ci0gICAgUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgYWN0aW9uTGlzdCA9IG1fZGVsZXRlQWN0aW9u LT5kYXRhKCkudmFsdWU8UGxheWxpc3RzOjpQbGF5bGlzdExpc3Q+KCk7Ci0gICAgYWN0aW9uTGlz dCA8PCBwbGF5bGlzdDsKLSAgICBtX2RlbGV0ZUFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZy b21WYWx1ZSggYWN0aW9uTGlzdCApICk7Ci0gICAgYWN0aW9ucyA8PCBtX2RlbGV0ZUFjdGlvbjsK LQotICAgIG1fcmVuYW1lQWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBwbGF5 bGlzdCApICk7Ci0gICAgYWN0aW9ucyA8PCBtX3JlbmFtZUFjdGlvbjsKLQotICAgIG1fZXhwb3J0 QWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBwbGF5bGlzdCApICk7Ci0gICAg YWN0aW9ucyA8PCBtX2V4cG9ydEFjdGlvbjsKLQotICAgIHJldHVybiBhY3Rpb25zOwotfQotCi1R TGlzdDxRQWN0aW9uICo+Ci1QbGF5bGlzdHM6OlVzZXJQbGF5bGlzdFByb3ZpZGVyOjp0cmFja0Fj dGlvbnMoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIGludCB0cmFja0luZGV4ICkK LXsKLSAgICBRX1VOVVNFRCggdHJhY2tJbmRleCApOwotICAgIFFMaXN0PFFBY3Rpb24gKj4gYWN0 aW9uczsKLQotICAgIGlmKCB0cmFja0luZGV4IDwgMCApCi0gICAgICAgIHJldHVybiBhY3Rpb25z OwotICAgIGludCB0cmFja0NvdW50ID0gcGxheWxpc3QtPnRyYWNrQ291bnQoKTsKLSAgICBpZigg dHJhY2tDb3VudCA9PSAtMSApCi0gICAgICAgIHRyYWNrQ291bnQgPSBwbGF5bGlzdC0+dHJhY2tz KCkuc2l6ZSgpOwotICAgIGlmKCB0cmFja0luZGV4ID49IHRyYWNrQ291bnQgKQotICAgICAgICBy ZXR1cm4gYWN0aW9uczsKLQotICAgIC8vIEFkZCB0aGUgcGxheWxpc3QvdHJhY2sgY29tYmluYXRp b24gdG8gYSBRTXVsdGlNYXAgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGFjdGlvbi4KLSAgICAvLyBJ biB0aGUgc2xvdCB3ZSB1c2UgdGhpcyBkYXRhIHRvIHJlbW92ZSB0aGF0IHRyYWNrIGZyb20gdGhl IHBsYXlsaXN0LgotICAgIFBsYXlsaXN0VHJhY2tNYXAgcGxheWxpc3RNYXAgPSBtX3JlbW92ZVRy YWNrQWN0aW9uLT5kYXRhKCkudmFsdWU8UGxheWxpc3RUcmFja01hcD4oKTsKLQotICAgIC8vb25s eSBhZGQgYWN0aW9uIHRvIG1hcCBpZiBwbGF5bGlzdC90cmFjayBjb21ibyBpcyBub3QgaW4gdGhl cmUgeWV0LgotICAgIGlmKCAhcGxheWxpc3RNYXAua2V5cygpLmNvbnRhaW5zKCBwbGF5bGlzdCAp IHx8Ci0gICAgICAgICFwbGF5bGlzdE1hcC52YWx1ZXMoIHBsYXlsaXN0ICkuY29udGFpbnMoIHRy YWNrSW5kZXggKSApCi0gICAgewotICAgICAgICBwbGF5bGlzdE1hcC5pbnNlcnQoIHBsYXlsaXN0 LCB0cmFja0luZGV4ICk7Ci0gICAgfQotICAgIG1fcmVtb3ZlVHJhY2tBY3Rpb24tPnNldERhdGEo IFFWYXJpYW50Ojpmcm9tVmFsdWUoIHBsYXlsaXN0TWFwICkgKTsKLQotICAgIGNvbnN0IGludCBh Y3Rpb25UcmFja0NvdW50ID0gcGxheWxpc3RNYXAuY291bnQoKTsKLSAgICBjb25zdCBpbnQgcGxh eWxpc3RDb3VudCA9IHBsYXlsaXN0TWFwLnVuaXF1ZUtleXMoKS5jb3VudCgpOwotICAgIGlmKCBw bGF5bGlzdENvdW50ID4gMSApCi0gICAgewotICAgICAgICBtX3JlbW92ZVRyYWNrQWN0aW9uLT5z ZXRUZXh0KCBpMThuY3AoICJOdW1iZXIgb2YgcGxheWxpc3RzIGlzID49IDIiLAotICAgICAgICAg ICAgIlJlbW92ZSBhIHRyYWNrIGZyb20gJTIgcGxheWxpc3RzIiwgIlJlbW92ZSAlMSB0cmFja3Mg ZnJvbSAlMiBwbGF5bGlzdHMiLAotICAgICAgICAgICAgYWN0aW9uVHJhY2tDb3VudCwgcGxheWxp c3RDb3VudCApICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1fcmVtb3ZlVHJh Y2tBY3Rpb24tPnNldFRleHQoIGkxOG5jcCggIiUyIGlzIHNhdmVkIHBsYXlsaXN0IG5hbWUiLAot ICAgICAgICAgICAgIlJlbW92ZSBhIHRyYWNrIGZyb20gJTIiLCAiUmVtb3ZlICUxIHRyYWNrcyBm cm9tICUyIiwgYWN0aW9uVHJhY2tDb3VudCwKLSAgICAgICAgICAgIHBsYXlsaXN0LT5uYW1lKCkg KSApOwotICAgIH0KLSAgICBhY3Rpb25zIDw8IG1fcmVtb3ZlVHJhY2tBY3Rpb247Ci0KLSAgICBy ZXR1cm4gYWN0aW9uczsKLX0KLQotdm9pZAotUGxheWxpc3RzOjpVc2VyUGxheWxpc3RQcm92aWRl cjo6c2xvdERlbGV0ZSgpCi17Ci0gICAgUUFjdGlvbiAqYWN0aW9uID0gcW9iamVjdF9jYXN0PFFB Y3Rpb24gKj4oIFFPYmplY3Q6OnNlbmRlcigpICk7Ci0gICAgaWYoIGFjdGlvbiA9PSAwICkKLSAg ICAgICAgcmV0dXJuOwotCi0gICAgUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgcGxheWxpc3RzID0g YWN0aW9uLT5kYXRhKCkudmFsdWU8UGxheWxpc3RzOjpQbGF5bGlzdExpc3Q+KCk7Ci0gICAgaWYo IHBsYXlsaXN0cy5jb3VudCgpID09IDAgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBLRGlhbG9n IGRpYWxvZzsKLSAgICBkaWFsb2cuc2V0Q2FwdGlvbiggaTE4biggIkNvbmZpcm0gRGVsZXRlIiAp ICk7Ci0gICAgZGlhbG9nLnNldEJ1dHRvbnMoIEtEaWFsb2c6Ok9rIHwgS0RpYWxvZzo6Q2FuY2Vs ICk7Ci0gICAgUUxhYmVsIGxhYmVsKCBpMThucCggIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBk ZWxldGUgdGhpcyBwbGF5bGlzdD8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICJBcmUgeW91 IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZXNlICUxIHBsYXlsaXN0cz8iLAotICAgICAgICAg ICAgICAgICAgICAgICAgIHBsYXlsaXN0cy5jb3VudCgpICkKLSAgICAgICAgICAgICAgICAgICAg LCAmZGlhbG9nCi0gICAgICAgICAgICAgICAgICApOwotICAgIC8vVE9ETzppbmNsdWRlIGEgdGV4 dCBhcmVhIHdpdGggYWxsIHRoZSBuYW1lcyBvZiB0aGUgcGxheWxpc3RzCi0gICAgZGlhbG9nLnNl dEJ1dHRvblRleHQoIEtEaWFsb2c6Ok9rLCBpMThuYyggIiUxIGlzIHBsYXlsaXN0IHByb3ZpZGVy IHByZXR0eSBuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiWWVzLCBkZWxldGUgZnJvbSAlMS4iLCBwcmV0dHlOYW1lKCkgKSApOwotICAgIGRpYWxv Zy5zZXRNYWluV2lkZ2V0KCAmbGFiZWwgKTsKLSAgICBpZiggZGlhbG9nLmV4ZWMoKSA9PSBRRGlh bG9nOjpBY2NlcHRlZCApCi0gICAgICAgIGRlbGV0ZVBsYXlsaXN0cyggcGxheWxpc3RzICk7Ci19 Ci0KLXZvaWQKLVBsYXlsaXN0czo6VXNlclBsYXlsaXN0UHJvdmlkZXI6OnNsb3RSZW5hbWUoKQot ewotICAgIFFBY3Rpb24gKmFjdGlvbiA9IHFvYmplY3RfY2FzdDxRQWN0aW9uICo+KCBRT2JqZWN0 OjpzZW5kZXIoKSApOwotICAgIGlmKCBhY3Rpb24gPT0gMCApCi0gICAgICAgIHJldHVybjsKLQot ICAgIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QgPSBhY3Rpb24tPmRhdGEoKS52YWx1 ZTxQbGF5bGlzdHM6OlBsYXlsaXN0UHRyPigpOwotICAgIGlmKCBwbGF5bGlzdC5pc051bGwoKSAp Ci0gICAgICAgIHJldHVybjsKLQotICAgIFRoZTo6cGxheWxpc3RNYW5hZ2VyKCktPnJlbmFtZSgg cGxheWxpc3QgKTsgIC8vIGluaXRpYXRlcyBpbmxpbmUgcmVuYW1lIG9mIHRoZSBwbGF5bGlzdAot fQotCi12b2lkCi1QbGF5bGlzdHM6OlVzZXJQbGF5bGlzdFByb3ZpZGVyOjpzbG90RXhwb3J0KCkK LXsKLSAgICBRQWN0aW9uICphY3Rpb24gPSBxb2JqZWN0X2Nhc3Q8UUFjdGlvbiAqPiggUU9iamVj dDo6c2VuZGVyKCkgKTsKLSAgICBpZiggYWN0aW9uID09IDAgKQotICAgICAgICByZXR1cm47Ci0K LSAgICBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0ID0gYWN0aW9uLT5kYXRhKCkudmFs dWU8UGxheWxpc3RzOjpQbGF5bGlzdFB0cj4oKTsKLSAgICBpZiggcGxheWxpc3QuaXNOdWxsKCkg KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyAtLS0gZGlzcGxheSBzYXZlIGxvY2F0aW9uIGRp YWxvZwotICAgIC8vIGNvbXBhcmUgd2l0aCBNYWluV2luZG93OjpleHBvcnRQbGF5bGlzdAotICAg IC8vIFRPRE86IGhhdmUgdGhpcyBjb2RlIG9ubHkgb25jZQotICAgIEtGaWxlRGlhbG9nIGZpbGVE aWFsb2coIEtVcmwoImtmaWxlZGlhbG9nOi8vL2FtYXJvay1wbGF5bGlzdC1leHBvcnQiKSwgUVN0 cmluZygpLCAwICk7Ci0gICAgUUNoZWNrQm94ICpzYXZlUmVsYXRpdmVDaGVjayA9IG5ldyBRQ2hl Y2tCb3goIGkxOG4oIlVzZSByZWxhdGl2ZSBwYXRoIGZvciAmc2F2aW5nIikgKTsKLSAgICBzYXZl UmVsYXRpdmVDaGVjay0+c2V0Q2hlY2tlZCggQW1hcm9rQ29uZmlnOjpyZWxhdGl2ZVBsYXlsaXN0 KCkgKTsKLQotICAgIFFTdHJpbmdMaXN0IHN1cHBvcnRlZE1pbWVUeXBlczsKLQotICAgIHN1cHBv cnRlZE1pbWVUeXBlcyA8PCAidmlkZW8veC1tcy1hc2YiOyAvL0FTWAotICAgIHN1cHBvcnRlZE1p bWVUeXBlcyA8PCAiYXVkaW8veC1tcGVndXJsIjsgLy9NM1UKLSAgICBzdXBwb3J0ZWRNaW1lVHlw ZXMgPDwgImF1ZGlvL3gtc2NwbHMiOyAvL1BMUwotICAgIHN1cHBvcnRlZE1pbWVUeXBlcyA8PCAi YXBwbGljYXRpb24veHNwZit4bWwiOyAvL1hTUEYKLQotICAgIGZpbGVEaWFsb2cuc2V0TWltZUZp bHRlciggc3VwcG9ydGVkTWltZVR5cGVzLCBzdXBwb3J0ZWRNaW1lVHlwZXMuZmlyc3QoKSApOwot ICAgIGZpbGVEaWFsb2cuZmlsZVdpZGdldCgpLT5zZXRDdXN0b21XaWRnZXQoIHNhdmVSZWxhdGl2 ZUNoZWNrICk7Ci0gICAgZmlsZURpYWxvZy5zZXRPcGVyYXRpb25Nb2RlKCBLRmlsZURpYWxvZzo6 U2F2aW5nICk7Ci0gICAgZmlsZURpYWxvZy5zZXRNb2RlKCBLRmlsZTo6RmlsZSApOwotICAgIGZp bGVEaWFsb2cuc2V0Q2FwdGlvbiggaTE4bigiU2F2ZSBBcyIpICk7Ci0gICAgZmlsZURpYWxvZy5z ZXRPYmplY3ROYW1lKCAiUGxheWxpc3RFeHBvcnQiICk7Ci0KLSAgICBmaWxlRGlhbG9nLmV4ZWMo KTsKLQotICAgIFFTdHJpbmcgcGxheWxpc3RQYXRoID0gZmlsZURpYWxvZy5zZWxlY3RlZEZpbGUo KTsKLQotICAgIC8vIC0tLSBhY3R1YWxseSBzYXZlIHRoZSBwbGF5bGlzdAotICAgIGlmKCAhcGxh eWxpc3RQYXRoLmlzRW1wdHkoKSApCi0gICAgICAgIGV4cG9ydFBsYXlsaXN0RmlsZSggcGxheWxp c3QtPnRyYWNrcygpLCBwbGF5bGlzdFBhdGgsIHNhdmVSZWxhdGl2ZUNoZWNrLT5pc0NoZWNrZWQo KSApOwotfQotCi12b2lkCi1QbGF5bGlzdHM6OlVzZXJQbGF5bGlzdFByb3ZpZGVyOjpzbG90UmVt b3ZlVHJhY2soKQotewotICAgIFFBY3Rpb24gKmFjdGlvbiA9IHFvYmplY3RfY2FzdDxRQWN0aW9u ICo+KCBRT2JqZWN0OjpzZW5kZXIoKSApOwotICAgIGlmKCBhY3Rpb24gPT0gMCApCi0gICAgICAg IHJldHVybjsKLQotICAgIFBsYXlsaXN0VHJhY2tNYXAgcGxheWxpc3RNYXAgPSBhY3Rpb24tPmRh dGEoKS52YWx1ZTxQbGF5bGlzdFRyYWNrTWFwPigpOwotICAgIGZvcmVhY2goIFBsYXlsaXN0czo6 UGxheWxpc3RQdHIgcGxheWxpc3QsIHBsYXlsaXN0TWFwLnVuaXF1ZUtleXMoKSApCi0gICAgewot ICAgICAgICBRTGlzdDxpbnQ+IHRyYWNrSW5kaWNlcyA9IHBsYXlsaXN0TWFwLnZhbHVlcyggcGxh eWxpc3QgKTsKLSAgICAgICAgcVNvcnQoIHRyYWNrSW5kaWNlcyApOwotICAgICAgICBpbnQgcmVt b3ZlZCA9IDA7Ci0gICAgICAgIGZvcmVhY2goIGludCB0cmFja0luZGV4LCB0cmFja0luZGljZXMg KQotICAgICAgICB7Ci0gICAgICAgICAgICBwbGF5bGlzdC0+cmVtb3ZlVHJhY2soIHRyYWNrSW5k ZXggLSByZW1vdmVkIC8qIGFjY291bnQgZm9yIGFscmVhZHkgcmVtb3ZlZCAqLyApOwotICAgICAg ICAgICAgcmVtb3ZlZCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy9jbGVhciB0aGUgZGF0 YQotICAgIGFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQoKSApOwotfQotCi0jaW5jbHVkZSAiVXNl clBsYXlsaXN0UHJvdmlkZXIubW9jIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUtaW1wbC9wbGF5bGlz dHMvcHJvdmlkZXJzL3VzZXIvVXNlclBsYXlsaXN0UHJvdmlkZXIuaCBiL3NyYy9jb3JlLWltcGwv cGxheWxpc3RzL3Byb3ZpZGVycy91c2VyL1VzZXJQbGF5bGlzdFByb3ZpZGVyLmgKaW5kZXggMzhh M2NkOS4uYjcyZWFkNSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUtaW1wbC9wbGF5bGlzdHMvcHJvdmlk ZXJzL3VzZXIvVXNlclBsYXlsaXN0UHJvdmlkZXIuaAorKysgYi9zcmMvY29yZS1pbXBsL3BsYXls aXN0cy9wcm92aWRlcnMvdXNlci9Vc2VyUGxheWxpc3RQcm92aWRlci5oCkBAIC0yMCw3MyArMjAs MjYgQEAKICNkZWZpbmUgVVNFUlBMQVlMSVNUUFJPVklERVJfSAogCiAjaW5jbHVkZSAiYW1hcm9r X2V4cG9ydC5oIgotI2luY2x1ZGUgImNvcmUvcGxheWxpc3RzL1BsYXlsaXN0LmgiCiAjaW5jbHVk ZSAiY29yZS9wbGF5bGlzdHMvUGxheWxpc3RQcm92aWRlci5oIgogCi1jbGFzcyBRQWN0aW9uOwot CiBuYW1lc3BhY2UgUGxheWxpc3RzIHsKLQotLyoqCi0gICAgQGF1dGhvciBCYXJ0IENlcm5lZWxz IDxiYXJ0LmNlcm5lZWxzQGtkZS5vcmc+Ci0qLwotY2xhc3MgQU1BUk9LX0VYUE9SVCBVc2VyUGxh eWxpc3RQcm92aWRlciA6IHB1YmxpYyBQbGF5bGlzdFByb3ZpZGVyCi17Ci0gICAgUV9PQkpFQ1QK LSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFVzZXJQbGF5bGlzdFByb3ZpZGVyKCBRT2Jq ZWN0ICpwYXJlbnQgPSAwICk7Ci0gICAgICAgIHZpcnR1YWwgflVzZXJQbGF5bGlzdFByb3ZpZGVy KCk7Ci0KLSAgICAgICAgLyogUGxheWxpc3RQcm92aWRlciBmdW5jdGlvbnMgKi8KLSAgICAgICAg dmlydHVhbCBpbnQgY2F0ZWdvcnkoKSBjb25zdDsKLQotICAgICAgICAvKiBVc2VyUGxheWxpc3RQ cm92aWRlciBmdW5jdGlvbnMgKi8KLSAgICAgICAgdmlydHVhbCBQbGF5bGlzdHM6OlBsYXlsaXN0 UHRyIHNhdmUoIGNvbnN0IE1ldGE6OlRyYWNrTGlzdCAmdHJhY2tzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgbmFtZSA9IFFTdHJp bmcoKSApID0gMDsKLQotICAgICAgICB2aXJ0dWFsIFFMaXN0PFFBY3Rpb24gKj4gcGxheWxpc3RB Y3Rpb25zKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0ICk7Ci0gICAgICAgIHZpcnR1 YWwgUUxpc3Q8UUFjdGlvbiAqPiB0cmFja0FjdGlvbnMoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIg cGxheWxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB0cmFja0luZGV4ICk7Ci0KLSAgICAgICAgLy8gVXNlclBsYXlsaXN0UHJvdmlkZXIt c3BlY2lmaWMKLSAgICAgICAgdmlydHVhbCBib29sIGlzV3JpdGFibGUoKSB7IHJldHVybiBmYWxz ZTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuYW1lKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRy IHBsYXlsaXN0LCBjb25zdCBRU3RyaW5nICZuZXdOYW1lICkKLSAgICAgICAgICAgICAgICB7IFFf VU5VU0VEKCBwbGF5bGlzdCApIFFfVU5VU0VEKG5ld05hbWUpIH0KLSAgICAgICAgdmlydHVhbCBi b29sIGRlbGV0ZVBsYXlsaXN0cyggUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgcGxheWxpc3RsaXN0 ICkKLSAgICAgICAgICAgICAgICB7IFFfVU5VU0VEKCBwbGF5bGlzdGxpc3QgKSByZXR1cm4gZmFs c2U7IH0KLQotICAgIHByb3RlY3RlZCBzbG90czoKLSAgICAgICAgLyoqCi0gICAgICAgICAqIERl bGV0ZSBzZWxlY3RlZCBwbGF5bGlzdHMuCi0gICAgICAgICAqIFdpbGwgb25seSB3b3JrIGlmIHRo ZSBzZW5kZXIgaXMgYSBRQWN0aW9uIHdpdGggYSBQbGF5bGlzdFB0ciBhcyBkYXRhLgotICAgICAg ICAgKi8KLSAgICAgICAgdmlydHVhbCB2b2lkIHNsb3REZWxldGUoKTsKLQotICAgICAgICAvKioK LSAgICAgICAgICogUmVuYW1lIHNlbGVjdGVkIHBsYXlsaXN0LgotICAgICAgICAgKiBXaWxsIG9u bHkgd29yayBpZiB0aGUgc2VuZGVyIGlzIGEgUUFjdGlvbiB3aXRoIGEgUGxheWxpc3RQdHIgYXMg ZGF0YS4KLSAgICAgICAgICovCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzbG90UmVuYW1lKCk7Ci0K LSAgICAgICAgLyoqCi0gICAgICAgICAqIEV4cG9ydCB0aGUgc2VsZWN0ZWQgcGxheWxpc3QuCi0g ICAgICAgICAqIFdpbGwgb25seSB3b3JrIGlmIHRoZSBzZW5kZXIgaXMgYSBRQWN0aW9uIHdpdGgg YSBQbGF5bGlzdFB0ciBhcyBkYXRhLgotICAgICAgICAgKi8KLSAgICAgICAgdmlydHVhbCB2b2lk IHNsb3RFeHBvcnQoKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogUmVtb3ZlIGEgdHJhY2sg KG9yIHRyYWNrcykgZnJvbSBhIHBsYXlsaXN0LgotICAgICAgICAgKiBXaWxsIG9ubHkgd29yayBp ZiB0aGUgc2VuZGVyIGlzIGEgUUFjdGlvbiB3aXRoIGEgUGxheWxpc3RUcmFja01hcCBhcyBkYXRh LgotICAgICAgICAgKi8KLSAgICAgICAgdmlydHVhbCB2b2lkIHNsb3RSZW1vdmVUcmFjaygpOwot Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBRQWN0aW9uICptX2RlbGV0ZUFjdGlvbjsKLSAgICAg ICAgUUFjdGlvbiAqbV9yZW5hbWVBY3Rpb247Ci0gICAgICAgIFFBY3Rpb24gKm1fZXhwb3J0QWN0 aW9uOwotICAgICAgICBRQWN0aW9uICptX3JlbW92ZVRyYWNrQWN0aW9uOwotfTsKLQorICAgIC8q KgorICAgICAqIEBhdXRob3IgQmFydCBDZXJuZWVscyA8YmFydC5jZXJuZWVsc0BrZGUub3JnPgor ICAgICAqLworICAgIGNsYXNzIEFNQVJPS19FWFBPUlQgVXNlclBsYXlsaXN0UHJvdmlkZXIgOiBw dWJsaWMgUGxheWxpc3RQcm92aWRlcgorICAgIHsKKyAgICAgICAgUV9PQkpFQ1QKKworICAgICAg ICBwdWJsaWM6CisgICAgICAgICAgICBleHBsaWNpdCBVc2VyUGxheWxpc3RQcm92aWRlciggUU9i amVjdCAqcGFyZW50ID0gMCApOworCisgICAgICAgICAgICAvKiBQbGF5bGlzdFByb3ZpZGVyIGZ1 bmN0aW9ucyAqLworICAgICAgICAgICAgdmlydHVhbCBpbnQgY2F0ZWdvcnkoKSBjb25zdDsKKwor ICAgICAgICAgICAgLyogVXNlclBsYXlsaXN0UHJvdmlkZXIgZnVuY3Rpb25zICovCisgICAgICAg ICAgICB2aXJ0dWFsIFBsYXlsaXN0UHRyIHNhdmUoIGNvbnN0IE1ldGE6OlRyYWNrTGlzdCAmdHJh Y2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n ICZuYW1lID0gUVN0cmluZygpICkgPSAwOworICAgIH07CiB9IC8vbmFtZXNwYWNlIFBsYXlsaXN0 cwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlLWltcGwvcGxheWxpc3RzL3R5cGVzL2Zp bGUvUGxheWxpc3RGaWxlLmggYi9zcmMvY29yZS1pbXBsL3BsYXlsaXN0cy90eXBlcy9maWxlL1Bs YXlsaXN0RmlsZS5oCmluZGV4IGRlNzEwNTcuLmJkODgxOTkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3Jl LWltcGwvcGxheWxpc3RzL3R5cGVzL2ZpbGUvUGxheWxpc3RGaWxlLmgKKysrIGIvc3JjL2NvcmUt aW1wbC9wbGF5bGlzdHMvdHlwZXMvZmlsZS9QbGF5bGlzdEZpbGUuaApAQCAtMjUsMTEgKzI1LDEx IEBACiAjaW5jbHVkZSA8UU11dGV4PgogI2luY2x1ZGUgPFFTZW1hcGhvcmU+CiAKLWNsYXNzIFBs YXlsaXN0UHJvdmlkZXI7CiBjbGFzcyBRRmlsZTsKIAogbmFtZXNwYWNlIFBsYXlsaXN0cwogewor ICAgIGNsYXNzIFBsYXlsaXN0UHJvdmlkZXI7CiAgICAgY2xhc3MgUGxheWxpc3RGaWxlOwogICAg IGNsYXNzIFBsYXlsaXN0RmlsZUxvYWRlckpvYjsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUtaW1w bC9wb2RjYXN0cy9zcWwvU3FsUG9kY2FzdFByb3ZpZGVyLmNwcCBiL3NyYy9jb3JlLWltcGwvcG9k Y2FzdHMvc3FsL1NxbFBvZGNhc3RQcm92aWRlci5jcHAKaW5kZXggYWQ2MGUyYi4uYmE3Mzg3YiAx MDA2NDQKLS0tIGEvc3JjL2NvcmUtaW1wbC9wb2RjYXN0cy9zcWwvU3FsUG9kY2FzdFByb3ZpZGVy LmNwcAorKysgYi9zcmMvY29yZS1pbXBsL3BvZGNhc3RzL3NxbC9TcWxQb2RjYXN0UHJvdmlkZXIu Y3BwCkBAIC0yODAsMzEgKzI4MCwyNSBAQCBTcWxQb2RjYXN0UHJvdmlkZXI6OnBsYXlsaXN0cygp CiAgICAgcmV0dXJuIHBsYXlsaXN0TGlzdDsKIH0KIAotUUxpc3Q8UUFjdGlvbiAqPgorUUFjdGlv bkxpc3QKIFNxbFBvZGNhc3RQcm92aWRlcjo6cHJvdmlkZXJBY3Rpb25zKCkKIHsKICAgICBpZigg bV9wcm92aWRlckFjdGlvbnMuaXNFbXB0eSgpICkKICAgICB7CiAgICAgICAgIFFBY3Rpb24gKnVw ZGF0ZUFsbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCBLSWNvbiggInZpZXctcmVmcmVzaC1hbWFyb2si ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4oICImVXBk YXRlIEFsbCBDaGFubmVscyIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICBpMThuKCAiJlVwZGF0ZSBBbGwgQ2hhbm5lbHMiICksIHRoaXMgKTsKICAg ICAgICAgdXBkYXRlQWxsQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBlcl9zdmdfaWQi LCAidXBkYXRlIiApOwogICAgICAgICBjb25uZWN0KCB1cGRhdGVBbGxBY3Rpb24sIFNJR05BTCh0 cmlnZ2VyZWQoKSksIHRoaXMsIFNMT1QodXBkYXRlQWxsKCkpICk7CiAgICAgICAgIG1fcHJvdmlk ZXJBY3Rpb25zIDw8IHVwZGF0ZUFsbEFjdGlvbjsKIAogICAgICAgICBRQWN0aW9uICpjb25maWd1 cmVBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24oICJjb25maWd1cmUiICksCi0gICAgICAgICAg ICBpMThuKCAiJkNvbmZpZ3VyZSBHZW5lcmFsIFNldHRpbmdzIiApLAotICAgICAgICAgICAgdGhp cwotICAgICAgICApOworICAgICAgICAgICAgICAgIGkxOG4oICImQ29uZmlndXJlIEdlbmVyYWwg U2V0dGluZ3MiICksIHRoaXMgKTsKICAgICAgICAgY29uZmlndXJlQWN0aW9uLT5zZXRQcm9wZXJ0 eSggInBvcHVwZHJvcHBlcl9zdmdfaWQiLCAiY29uZmlndXJlIiApOwogICAgICAgICBjb25uZWN0 KCBjb25maWd1cmVBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIHRoaXMsIFNMT1Qoc2xvdENv bmZpZ3VyZVByb3ZpZGVyKCkpICk7CiAgICAgICAgIG1fcHJvdmlkZXJBY3Rpb25zIDw8IGNvbmZp Z3VyZUFjdGlvbjsKIAogICAgICAgICBRQWN0aW9uICpleHBvcnRPcG1sQWN0aW9uID0gbmV3IFFB Y3Rpb24oIEtJY29uKCAiZG9jdW1lbnQtZXhwb3J0IiApLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4oICImRXhwb3J0IHN1YnNjcmlwdGlvbnMg dG8gT1BNTCBmaWxlIiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgICAgICBpMThuKCAiJkV4cG9ydCBzdWJzY3JpcHRpb25zIHRv IE9QTUwgZmlsZSIgKSwgdGhpcyApOwogICAgICAgICBjb25uZWN0KCBleHBvcnRPcG1sQWN0aW9u LCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9UKHNsb3RFeHBvcnRPcG1sKCkpICk7CiAgICAgICAg IG1fcHJvdmlkZXJBY3Rpb25zIDw8IGV4cG9ydE9wbWxBY3Rpb247CiAgICAgfQpAQCAtMzEyLDEx NCArMzA2LDEwMCBAQCBTcWxQb2RjYXN0UHJvdmlkZXI6OnByb3ZpZGVyQWN0aW9ucygpCiAgICAg cmV0dXJuIG1fcHJvdmlkZXJBY3Rpb25zOwogfQogCi1RTGlzdDxRQWN0aW9uICo+Ci1TcWxQb2Rj YXN0UHJvdmlkZXI6OnBsYXlsaXN0QWN0aW9ucyggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5 bGlzdCApCitRQWN0aW9uTGlzdAorU3FsUG9kY2FzdFByb3ZpZGVyOjpwbGF5bGlzdEFjdGlvbnMo IGNvbnN0IFBsYXlsaXN0czo6UGxheWxpc3RMaXN0ICZwbGF5bGlzdHMgKQogewotICAgIFFMaXN0 PFFBY3Rpb24gKj4gYWN0aW9uczsKKyAgICBRQWN0aW9uTGlzdCBhY3Rpb25zOworICAgIFNxbFBv ZGNhc3RDaGFubmVsTGlzdCBzcWxDaGFubmVsczsKKyAgICBmb3JlYWNoKCBjb25zdCBQbGF5bGlz dHM6OlBsYXlsaXN0UHRyICZwbGF5bGlzdCwgcGxheWxpc3RzICkKKyAgICB7CisgICAgICAgIFNx bFBvZGNhc3RDaGFubmVsUHRyIHNxbENoYW5uZWwgPSBTcWxQb2RjYXN0Q2hhbm5lbDo6ZnJvbVBs YXlsaXN0UHRyKCBwbGF5bGlzdCApOworICAgICAgICBpZiggc3FsQ2hhbm5lbCApCisgICAgICAg ICAgICBzcWxDaGFubmVscyA8PCBzcWxDaGFubmVsOworICAgIH0KIAotICAgIFBvZGNhc3RzOjpT cWxQb2RjYXN0Q2hhbm5lbFB0ciBzcWxDaGFubmVsID0gUG9kY2FzdHM6OlNxbFBvZGNhc3RDaGFu bmVsOjpmcm9tUGxheWxpc3RQdHIoIHBsYXlsaXN0ICk7Ci0gICAgaWYoIHNxbENoYW5uZWwuaXNO dWxsKCkgKQorICAgIGlmKCBzcWxDaGFubmVscy5pc0VtcHR5KCkgKQogICAgICAgICByZXR1cm4g YWN0aW9uczsKIAogICAgIC8vVE9ETzogYWRkIGV4cG9ydCBPUE1MIGFjdGlvbiBmb3Igc2VsZWN0 ZWQgcGxheWxpc3RzIG9ubHkuIFVzZSB0aGUgUUFjdGlvbjo6ZGF0YSgpIHRyaWNrLgogICAgIGlm KCBtX2NvbmZpZ3VyZUNoYW5uZWxBY3Rpb24gPT0gMCApCiAgICAgewotICAgICAgICBtX2NvbmZp Z3VyZUNoYW5uZWxBY3Rpb24gPSBuZXcgUUFjdGlvbigKLSAgICAgICAgICAgIEtJY29uKCAiY29u ZmlndXJlIiApLAotICAgICAgICAgICAgaTE4biggIiZDb25maWd1cmUiICksCi0gICAgICAgICAg ICB0aGlzCi0gICAgICAgICk7CisgICAgICAgIG1fY29uZmlndXJlQ2hhbm5lbEFjdGlvbiA9IG5l dyBRQWN0aW9uKCBLSWNvbiggImNvbmZpZ3VyZSIgKSwgaTE4biggIiZDb25maWd1cmUiICksIHRo aXMgKTsKICAgICAgICAgbV9jb25maWd1cmVDaGFubmVsQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBv cHVwZHJvcHBlcl9zdmdfaWQiLCAiY29uZmlndXJlIiApOwogICAgICAgICBjb25uZWN0KCBtX2Nv bmZpZ3VyZUNoYW5uZWxBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIFNMT1Qoc2xvdENvbmZp Z3VyZUNoYW5uZWwoKSkgKTsKICAgICB9Ci0KICAgICAvL29ubHkgb25lIGNoYW5uZWwgY2FuIGJl IGNvbmZpZ3VyZWQgYXQgYSB0aW1lLgotICAgIGlmKCBtX2NvbmZpZ3VyZUNoYW5uZWxBY3Rpb24t PmRhdGEoKS5pc051bGwoKSApCi0gICAgICAgIG1fY29uZmlndXJlQ2hhbm5lbEFjdGlvbi0+c2V0 RGF0YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggc3FsQ2hhbm5lbCApICk7Ci0KLSAgICBhY3Rpb25z IDw8IG1fY29uZmlndXJlQ2hhbm5lbEFjdGlvbjsKKyAgICBpZiggc3FsQ2hhbm5lbHMuY291bnQo KSA9PSAxICkKKyAgICB7CisgICAgICAgIG1fY29uZmlndXJlQ2hhbm5lbEFjdGlvbi0+c2V0RGF0 YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggc3FsQ2hhbm5lbHMuZmlyc3QoKSApICk7CisgICAgICAg IGFjdGlvbnMgPDwgbV9jb25maWd1cmVDaGFubmVsQWN0aW9uOworICAgIH0KIAotICAgIFBvZGNh c3RzOjpTcWxQb2RjYXN0Q2hhbm5lbExpc3QgYWN0aW9uQ2hhbm5lbHM7CiAgICAgaWYoIG1fcmVt b3ZlQWN0aW9uID09IDAgKQogICAgIHsKLSAgICAgICAgbV9yZW1vdmVBY3Rpb24gPSBuZXcgUUFj dGlvbigKLSAgICAgICAgICAgIEtJY29uKCAibmV3cy11bnN1YnNjcmliZSIgKSwKLSAgICAgICAg ICAgIGkxOG4oICImUmVtb3ZlIFN1YnNjcmlwdGlvbiIgKSwKLSAgICAgICAgICAgIHRoaXMKLSAg ICAgICAgKTsKKyAgICAgICAgbV9yZW1vdmVBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24oICJu ZXdzLXVuc3Vic2NyaWJlIiApLCBpMThuKCAiJlJlbW92ZSBTdWJzY3JpcHRpb24iICksIHRoaXMg KTsKICAgICAgICAgbV9yZW1vdmVBY3Rpb24tPnNldFByb3BlcnR5KCAicG9wdXBkcm9wcGVyX3N2 Z19pZCIsICJyZW1vdmUiICk7CiAgICAgICAgIGNvbm5lY3QoIG1fcmVtb3ZlQWN0aW9uLCBTSUdO QUwodHJpZ2dlcmVkKCkpLCBTTE9UKHNsb3RSZW1vdmVDaGFubmVscygpKSApOwogICAgIH0KLSAg ICBlbHNlCi0gICAgewotICAgICAgICBhY3Rpb25DaGFubmVscyA9IG1fcmVtb3ZlQWN0aW9uLT5k YXRhKCkudmFsdWU8UG9kY2FzdHM6OlNxbFBvZGNhc3RDaGFubmVsTGlzdD4oKTsKLSAgICB9Ci0g ICAgbV9yZW1vdmVBY3Rpb24tPnNldE9iamVjdE5hbWUoICJkZWxldGVBY3Rpb24iICk7Ci0KLSAg ICBhY3Rpb25DaGFubmVscyA8PCBzcWxDaGFubmVsOwotICAgIG1fcmVtb3ZlQWN0aW9uLT5zZXRE YXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBhY3Rpb25DaGFubmVscyApICk7Ci0KKyAgICBtX3Jl bW92ZUFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggc3FsQ2hhbm5lbHMgKSAp OwogICAgIGFjdGlvbnMgPDwgbV9yZW1vdmVBY3Rpb247CiAKLSAgICBhY3Rpb25DaGFubmVscy5j bGVhcigpOwogICAgIGlmKCBtX3VwZGF0ZUFjdGlvbiA9PSAwICkKICAgICB7Ci0gICAgICAgIG1f dXBkYXRlQWN0aW9uID0gbmV3IFFBY3Rpb24oCi0gICAgICAgICAgICBLSWNvbiggInZpZXctcmVm cmVzaC1hbWFyb2siICksCi0gICAgICAgICAgICBpMThuKCAiJlVwZGF0ZSBDaGFubmVsIiApLAot ICAgICAgICAgICAgdGhpcwotICAgICAgICApOworICAgICAgICBtX3VwZGF0ZUFjdGlvbiA9IG5l dyBRQWN0aW9uKCBLSWNvbiggInZpZXctcmVmcmVzaC1hbWFyb2siICksIGkxOG4oICImVXBkYXRl IENoYW5uZWwiICksIHRoaXMgKTsKICAgICAgICAgbV91cGRhdGVBY3Rpb24tPnNldFByb3BlcnR5 KCAicG9wdXBkcm9wcGVyX3N2Z19pZCIsICJ1cGRhdGUiICk7CiAgICAgICAgIGNvbm5lY3QoIG1f dXBkYXRlQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9UKHNsb3RVcGRhdGVDaGFubmVs cygpKSApOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBhY3Rpb25DaGFubmVscyA9 IG1fdXBkYXRlQWN0aW9uLT5kYXRhKCkudmFsdWU8UG9kY2FzdHM6OlNxbFBvZGNhc3RDaGFubmVs TGlzdD4oKTsKLSAgICB9Ci0KLSAgICBhY3Rpb25DaGFubmVscyA8PCBzcWxDaGFubmVsOwotICAg IG1fdXBkYXRlQWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBhY3Rpb25DaGFu bmVscyApICk7Ci0KKyAgICBtX3VwZGF0ZUFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZyb21W YWx1ZSggc3FsQ2hhbm5lbHMgKSApOwogICAgIGFjdGlvbnMgPDwgbV91cGRhdGVBY3Rpb247CiAK ICAgICByZXR1cm4gYWN0aW9uczsKIH0KIAotUUxpc3Q8UUFjdGlvbiAqPgotU3FsUG9kY2FzdFBy b3ZpZGVyOjp0cmFja0FjdGlvbnMoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIGlu dCB0cmFja0luZGV4ICkKK1FBY3Rpb25MaXN0CitTcWxQb2RjYXN0UHJvdmlkZXI6OnRyYWNrQWN0 aW9ucyggY29uc3QgUU11bHRpSGFzaDxQbGF5bGlzdHM6OlBsYXlsaXN0UHRyLCBpbnQ+ICZwbGF5 bGlzdFRyYWNrcyApCiB7Ci0gICAgUUxpc3Q8UUFjdGlvbiAqPiBhY3Rpb25zOwotICAgIFBvZGNh c3RzOjpTcWxQb2RjYXN0Q2hhbm5lbFB0ciBzcWxDaGFubmVsID0gUG9kY2FzdHM6OlNxbFBvZGNh c3RDaGFubmVsOjpmcm9tUGxheWxpc3RQdHIoIHBsYXlsaXN0ICk7Ci0gICAgaWYoIHNxbENoYW5u ZWwuaXNOdWxsKCkgKQotICAgICAgICByZXR1cm4gYWN0aW9uczsKKyAgICBTcWxQb2RjYXN0RXBp c29kZUxpc3QgZXBpc29kZXM7CisgICAgZm9yZWFjaCggY29uc3QgUGxheWxpc3RzOjpQbGF5bGlz dFB0ciAmcGxheWxpc3QsIHBsYXlsaXN0VHJhY2tzLnVuaXF1ZUtleXMoKSApCisgICAgeworICAg ICAgICBTcWxQb2RjYXN0Q2hhbm5lbFB0ciBzcWxDaGFubmVsID0gU3FsUG9kY2FzdENoYW5uZWw6 OmZyb21QbGF5bGlzdFB0ciggcGxheWxpc3QgKTsKKyAgICAgICAgaWYoICFzcWxDaGFubmVsICkK KyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgUG9kY2FzdHM6OlNxbFBvZGNhc3RFcGlzb2Rl TGlzdCBzcWxFcGlzb2RlcyA9IHNxbENoYW5uZWwtPnNxbEVwaXNvZGVzKCk7Ci0gICAgaWYoIHRy YWNrSW5kZXggPj0gc3FsRXBpc29kZXMuY291bnQoKSApCi0gICAgICAgIHJldHVybiBhY3Rpb25z OworICAgICAgICBTcWxQb2RjYXN0RXBpc29kZUxpc3QgY2hhbm5lbEVwaXNvZGVzID0gc3FsQ2hh bm5lbC0+c3FsRXBpc29kZXMoKTsKKyAgICAgICAgUUxpc3Q8aW50PiB0cmFja1Bvc2l0aW9ucyA9 IHBsYXlsaXN0VHJhY2tzLnZhbHVlcyggcGxheWxpc3QgKTsKKyAgICAgICAgcVNvcnQoIHRyYWNr UG9zaXRpb25zICk7CisgICAgICAgIGZvcmVhY2goIGludCB0cmFja1Bvc2l0aW9uLCB0cmFja1Bv c2l0aW9ucyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCB0cmFja1Bvc2l0aW9uID49IDAg JiYgdHJhY2tQb3NpdGlvbiA8IGNoYW5uZWxFcGlzb2Rlcy5jb3VudCgpICkKKyAgICAgICAgICAg ICAgICBlcGlzb2RlcyA8PCBjaGFubmVsRXBpc29kZXMuYXQoIHRyYWNrUG9zaXRpb24gKTsKKyAg ICAgICAgfQorICAgIH0KIAotICAgIFBvZGNhc3RzOjpTcWxQb2RjYXN0RXBpc29kZVB0ciBzcWxF cGlzb2RlID0gc3FsRXBpc29kZXMuYXQoIHRyYWNrSW5kZXggKTsKLSAgICBpZiggc3FsRXBpc29k ZS5pc051bGwoKSApCisgICAgUUFjdGlvbkxpc3QgYWN0aW9uczsKKyAgICBpZiggZXBpc29kZXMu aXNFbXB0eSgpICkKICAgICAgICAgcmV0dXJuIGFjdGlvbnM7CiAKKyAgICBpZiggbV9kb3dubG9h ZEFjdGlvbiA9PSAwICkKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRBY3Rpb24gPSBuZXcgUUFj dGlvbiggS0ljb24oICJnby1kb3duIiApLCBpMThuKCAiJkRvd25sb2FkIEVwaXNvZGUiICksIHRo aXMgKTsKKyAgICAgICAgbV9kb3dubG9hZEFjdGlvbi0+c2V0UHJvcGVydHkoICJwb3B1cGRyb3Bw ZXJfc3ZnX2lkIiwgImRvd25sb2FkIiApOworICAgICAgICBjb25uZWN0KCBtX2Rvd25sb2FkQWN0 aW9uLCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9UKHNsb3REb3dubG9hZEVwaXNvZGVzKCkpICk7 CisgICAgfQorCiAgICAgaWYoIG1fZGVsZXRlQWN0aW9uID09IDAgKQogICAgIHsKLSAgICAgICAg bV9kZWxldGVBY3Rpb24gPSBuZXcgUUFjdGlvbigKLSAgICAgICAgICAgIEtJY29uKCAiZWRpdC1k ZWxldGUiICksCi0gICAgICAgICAgICBpMThuKCAiJkRlbGV0ZSBEb3dubG9hZGVkIEVwaXNvZGUi ICksCi0gICAgICAgICAgICB0aGlzCi0gICAgICAgICk7CisgICAgICAgIG1fZGVsZXRlQWN0aW9u ID0gbmV3IFFBY3Rpb24oIEtJY29uKCAiZWRpdC1kZWxldGUiICksCisgICAgICAgICAgICBpMThu KCAiJkRlbGV0ZSBEb3dubG9hZGVkIEVwaXNvZGUiICksIHRoaXMgKTsKICAgICAgICAgbV9kZWxl dGVBY3Rpb24tPnNldFByb3BlcnR5KCAicG9wdXBkcm9wcGVyX3N2Z19pZCIsICJkZWxldGUiICk7 CisgICAgICAgIG1fZGVsZXRlQWN0aW9uLT5zZXRPYmplY3ROYW1lKCAiZGVsZXRlQWN0aW9uIiAp OwogICAgICAgICBjb25uZWN0KCBtX2RlbGV0ZUFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwg U0xPVChzbG90RGVsZXRlRG93bmxvYWRlZEVwaXNvZGVzKCkpICk7CiAgICAgfQotICAgIG1fZGVs ZXRlQWN0aW9uLT5zZXRPYmplY3ROYW1lKCAiZGVsZXRlQWN0aW9uIiApOwogCiAgICAgaWYoIG1f d3JpdGVUYWdzQWN0aW9uID09IDAgKQogICAgIHsKLSAgICAgICAgbV93cml0ZVRhZ3NBY3Rpb24g PSBuZXcgUUFjdGlvbigKLSAgICAgICAgICAgIEtJY29uKCAibWVkaWEtdHJhY2stZWRpdC1hbWFy b2siICksCi0gICAgICAgICAgICBpMThuKCAiJldyaXRlIEZlZWQgSW5mb3JtYXRpb24gdG8gRmls ZSIgKSwKLSAgICAgICAgICAgIHRoaXMKLSAgICAgICAgKTsKKyAgICAgICAgbV93cml0ZVRhZ3NB Y3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24oICJtZWRpYS10cmFjay1lZGl0LWFtYXJvayIgKSwK KyAgICAgICAgICAgIGkxOG4oICImV3JpdGUgRmVlZCBJbmZvcm1hdGlvbiB0byBGaWxlIiApLCB0 aGlzICk7CiAgICAgICAgIG1fd3JpdGVUYWdzQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJv cHBlcl9zdmdfaWQiLCAiZWRpdCIgKTsKICAgICAgICAgY29ubmVjdCggbV93cml0ZVRhZ3NBY3Rp b24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIFNMT1Qoc2xvdFdyaXRlVGFnc1RvRmlsZXMoKSkgKTsK ICAgICB9CkBAIC00MjcsNTEgKzQwNyw0NCBAQCBTcWxQb2RjYXN0UHJvdmlkZXI6OnRyYWNrQWN0 aW9ucyggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwgaW50IHRyYWNrSW5kZQogICAg IGlmKCBtX2tlZXBBY3Rpb24gPT0gMCApCiAgICAgewogICAgICAgICBtX2tlZXBBY3Rpb24gPSBu ZXcgUUFjdGlvbiggS0ljb24oICJwb2RjYXN0LWFtYXJvayIgKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGkxOG5jKCAidG9nZ2xlIHRoZSBcImtlZXBcIiBkb3dubG9h ZGVkIGZpbGUgc3RhdHVzIG9mIHRoaXMgcG9kY2FzdCBlcGlzb2RlLiAiCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdGljZSB0aGF0IGRvd25sb2FkZWQg ZmlsZXMgd2l0aCB0aGlzIHN0YXR1cyB3b3VsZG4ndCBiZSBkZWxldGVkIGlmIHdlIGFwcGx5IGEg cHVyZ2UuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi JktlZXAgZG93bmxvYWRlZCBmaWxlIiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgICAgICBpMThuKCAiJktlZXAgZG93bmxvYWRlZCBmaWxlIiApLCB0aGlzICk7 CisgICAgICAgIG1fa2VlcEFjdGlvbi0+c2V0VG9vbFRpcCggaTE4biggIlRvZ2dsZSB0aGUgXCJr ZWVwXCIgZG93bmxvYWRlZCBmaWxlIHN0YXR1cyBvZiAiCisgICAgICAgICAgICAgICAgInRoaXMg cG9kY2FzdCBlcGlzb2RlLiBEb3dubG9hZGVkIGZpbGVzIHdpdGggdGhpcyBzdGF0dXMgd291bGRu J3QgYmUgIgorICAgICAgICAgICAgICAgICJkZWxldGVkIGV2ZW4gaWYgd2UgYXBwbHkgYSBwdXJn ZS4iICkgKTsKICAgICAgICAgbV9rZWVwQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBl cl9zdmdfaWQiLCAia2VlcCIgKTsKICAgICAgICAgbV9rZWVwQWN0aW9uLT5zZXRDaGVja2FibGUo IHRydWUgKTsKLQogICAgICAgICBjb25uZWN0KCBtX2tlZXBBY3Rpb24sIFNJR05BTCh0cmlnZ2Vy ZWQoYm9vbCkpLCBTTE9UKHNsb3RTZXRLZWVwKCkpICk7CiAgICAgfQogCi0gICAgUG9kY2FzdHM6 OlNxbFBvZGNhc3RFcGlzb2RlTGlzdCBhY3Rpb25FcGlzb2RlczsKLSAgICBpZiggIXNxbEVwaXNv ZGUtPmxvY2FsVXJsKCkuaXNFbXB0eSgpICkKLSAgICB7Ci0gICAgICAgIGFjdGlvbkVwaXNvZGVz ID0gbV9kZWxldGVBY3Rpb24tPmRhdGEoKS52YWx1ZTxQb2RjYXN0czo6U3FsUG9kY2FzdEVwaXNv ZGVMaXN0PigpOwotICAgICAgICBhY3Rpb25FcGlzb2RlcyA8PCBzcWxFcGlzb2RlOwotICAgICAg ICBtX2tlZXBBY3Rpb24tPnNldENoZWNrZWQoIHNxbEVwaXNvZGUtPmlzS2VlcCgpICk7Ci0gICAg ICAgIG1fa2VlcEFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggYWN0aW9uRXBp c29kZXMgKSApOwotICAgICAgICBtX2RlbGV0ZUFjdGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZy b21WYWx1ZSggYWN0aW9uRXBpc29kZXMgKSApOwotICAgICAgICAvL3RoZXNlIGxpc3RzIGFyZSB0 aGUgc2FtZSBhbnl3YXkKLSAgICAgICAgbV93cml0ZVRhZ3NBY3Rpb24tPnNldERhdGEoIFFWYXJp YW50Ojpmcm9tVmFsdWUoIGFjdGlvbkVwaXNvZGVzICkgKTsKLSAgICAgICAgYWN0aW9ucyA8PCBt X2tlZXBBY3Rpb247Ci0gICAgICAgIGFjdGlvbnMgPDwgbV9kZWxldGVBY3Rpb247Ci0gICAgICAg IGFjdGlvbnMgPDwgbV93cml0ZVRhZ3NBY3Rpb247Ci0gICAgfQotICAgIGVsc2UKKyAgICBTcWxQ b2RjYXN0RXBpc29kZUxpc3QgcmVtb3RlRXBpc29kZXM7CisgICAgU3FsUG9kY2FzdEVwaXNvZGVM aXN0IGtlcHREb3dubG9hZGVkRXBpc29kZXMsIHVua2VwdERvd25sb2FkZWRFcGlzb2RlczsKKyAg ICBmb3JlYWNoKCBjb25zdCBTcWxQb2RjYXN0RXBpc29kZVB0ciAmZXBpc29kZSwgZXBpc29kZXMg KQogICAgIHsKLSAgICAgICAgaWYoIG1fZG93bmxvYWRBY3Rpb24gPT0gMCApCi0gICAgICAgIHsK LSAgICAgICAgICAgIG1fZG93bmxvYWRBY3Rpb24gPSBuZXcgUUFjdGlvbigKLSAgICAgICAgICAg ICAgICBLSWNvbiggImdvLWRvd24iICksCi0gICAgICAgICAgICAgICAgaTE4biggIiZEb3dubG9h ZCBFcGlzb2RlIiApLAotICAgICAgICAgICAgICAgIHRoaXMKLSAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICBtX2Rvd25sb2FkQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBlcl9zdmdf aWQiLCAiZG93bmxvYWQiICk7Ci0gICAgICAgICAgICBjb25uZWN0KCBtX2Rvd25sb2FkQWN0aW9u LCBTSUdOQUwodHJpZ2dlcmVkKCkpLCBTTE9UKHNsb3REb3dubG9hZEVwaXNvZGVzKCkpICk7Ci0g ICAgICAgIH0KKyAgICAgICAgaWYoIGVwaXNvZGUtPmxvY2FsVXJsKCkuaXNFbXB0eSgpICkKKyAg ICAgICAgICAgIHJlbW90ZUVwaXNvZGVzIDw8IGVwaXNvZGU7CiAgICAgICAgIGVsc2UKICAgICAg ICAgewotICAgICAgICAgICAgYWN0aW9uRXBpc29kZXMgPSBtX2Rvd25sb2FkQWN0aW9uLT5kYXRh KCkudmFsdWU8UG9kY2FzdHM6OlNxbFBvZGNhc3RFcGlzb2RlTGlzdD4oKTsKKyAgICAgICAgICAg IGlmKCBlcGlzb2RlLT5pc0tlZXAoKSApCisgICAgICAgICAgICAgICAga2VwdERvd25sb2FkZWRF cGlzb2RlcyA8PCBlcGlzb2RlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVu a2VwdERvd25sb2FkZWRFcGlzb2RlcyA8PCBlcGlzb2RlOwogICAgICAgICB9Ci0gICAgICAgIGFj dGlvbkVwaXNvZGVzIDw8IHNxbEVwaXNvZGU7Ci0gICAgICAgIG1fZG93bmxvYWRBY3Rpb24tPnNl dERhdGEoIFFWYXJpYW50Ojpmcm9tVmFsdWUoIGFjdGlvbkVwaXNvZGVzICkgKTsKKyAgICB9CisK KyAgICBpZiggIXJlbW90ZUVwaXNvZGVzLmlzRW1wdHkoKSApCisgICAgeworICAgICAgICBtX2Rv d25sb2FkQWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCByZW1vdGVFcGlzb2Rl cyApICk7CiAgICAgICAgIGFjdGlvbnMgPDwgbV9kb3dubG9hZEFjdGlvbjsKICAgICB9CisgICAg aWYoICEoIGtlcHREb3dubG9hZGVkRXBpc29kZXMgKyB1bmtlcHREb3dubG9hZGVkRXBpc29kZXMg KS5pc0VtcHR5KCkgKQorICAgIHsKKyAgICAgICAgbV9kZWxldGVBY3Rpb24tPnNldERhdGEoIFFW YXJpYW50Ojpmcm9tVmFsdWUoIGtlcHREb3dubG9hZGVkRXBpc29kZXMgKyB1bmtlcHREb3dubG9h ZGVkRXBpc29kZXMgKSApOworICAgICAgICBhY3Rpb25zIDw8IG1fZGVsZXRlQWN0aW9uOworCisg ICAgICAgIG1fa2VlcEFjdGlvbi0+c2V0Q2hlY2tlZCggdW5rZXB0RG93bmxvYWRlZEVwaXNvZGVz LmlzRW1wdHkoKSApOworICAgICAgICBtX2tlZXBBY3Rpb24tPnNldERhdGEoIFFWYXJpYW50Ojpm cm9tVmFsdWUoIGtlcHREb3dubG9hZGVkRXBpc29kZXMgKyB1bmtlcHREb3dubG9hZGVkRXBpc29k ZXMgKSApOworICAgICAgICBhY3Rpb25zIDw8IG1fa2VlcEFjdGlvbjsKKyAgICB9CiAKICAgICBy ZXR1cm4gYWN0aW9uczsKIH0KQEAgLTgwNiwxNzkgKzc3OSw2IEBAIFNxbFBvZGNhc3RQcm92aWRl cjo6Y29uZmlndXJlQ2hhbm5lbCggUG9kY2FzdHM6OlNxbFBvZGNhc3RDaGFubmVsUHRyIHNxbENo YW5uZWwKICAgICAgICAgc3RhcnRUaW1lcigpOwogfQogCi1RTGlzdDxRQWN0aW9uICo+Ci1TcWxQ b2RjYXN0UHJvdmlkZXI6OmVwaXNvZGVBY3Rpb25zKCBQb2RjYXN0czo6UG9kY2FzdEVwaXNvZGVM aXN0IGVwaXNvZGVzICkKLXsKLSAgICBRTGlzdDwgUUFjdGlvbiAqID4gYWN0aW9uczsKLSAgICBp ZiggZXBpc29kZXMuaXNFbXB0eSgpICkKLSAgICAgICAgcmV0dXJuIGFjdGlvbnM7Ci0KLSAgICBQ b2RjYXN0czo6UG9kY2FzdEVwaXNvZGVMaXN0IGFjdGlvbkVwaXNvZGVzOwotICAgIGlmKCBtX2Rl bGV0ZUFjdGlvbiA9PSAwICkKLSAgICB7Ci0gICAgICAgIG1fZGVsZXRlQWN0aW9uID0gbmV3IFFB Y3Rpb24oCi0gICAgICAgICAgICBLSWNvbiggImVkaXQtZGVsZXRlIiApLAotICAgICAgICAgICAg aTE4biggIiZEZWxldGUgRG93bmxvYWRlZCBFcGlzb2RlIiApLAotICAgICAgICAgICAgdGhpcwot ICAgICAgICApOwotICAgICAgICBtX2RlbGV0ZUFjdGlvbi0+c2V0UHJvcGVydHkoICJwb3B1cGRy b3BwZXJfc3ZnX2lkIiwgImRlbGV0ZSIgKTsKLSAgICAgICAgY29ubmVjdCggbV9kZWxldGVBY3Rp b24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIFNMT1Qoc2xvdERlbGV0ZURvd25sb2FkZWRFcGlzb2Rl cygpKSApOwotICAgIH0KLQotICAgIGFjdGlvbkVwaXNvZGVzLmNsZWFyKCk7Ci0gICAgaWYoIG1f d3JpdGVUYWdzQWN0aW9uID09IDAgKQotICAgIHsKLSAgICAgICAgbV93cml0ZVRhZ3NBY3Rpb24g PSBuZXcgUUFjdGlvbigKLSAgICAgICAgICAgIEtJY29uKCAibWVkaWEtdHJhY2stZWRpdC1hbWFy b2siICksCi0gICAgICAgICAgICBpMThuKCAiJldyaXRlIEZlZWQgSW5mb3JtYXRpb24gdG8gRmls ZSIgKSwKLSAgICAgICAgICAgIHRoaXMKLSAgICAgICAgKTsKLSAgICAgICAgbV93cml0ZVRhZ3NB Y3Rpb24tPnNldFByb3BlcnR5KCAicG9wdXBkcm9wcGVyX3N2Z19pZCIsICJlZGl0IiApOwotICAg ICAgICBjb25uZWN0KCBtX3dyaXRlVGFnc0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwgU0xP VChzbG90V3JpdGVUYWdzVG9GaWxlcygpKSApOwotICAgIH0KLQotICAgIGlmKCBtX2tlZXBBY3Rp b24gPT0gMCApCi0gICAgewotICAgICAgICBtX2tlZXBBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0lj b24oICJwb2RjYXN0LWFtYXJvayIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGkxOG5jKCAidG9nZ2xlIHRoZSBcImtlZXBcIiBkb3dubG9hZGVkIGZpbGUgc3RhdHVz IG9mIHRoaXMgcG9kY2FzdCBlcGlzb2RlLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIk5vdGljZSB0aGF0IGRvd25sb2FkZWQgZmlsZXMgd2l0aCB0aGlz IHN0YXR1cyB3b3VsZG4ndCBiZSBkZWxldGVkIGlmIHdlIGFwcGx5IGEgcHVyZ2UuIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJktlZXAgZG93bmxvYWRl ZCBmaWxlIiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgbV9rZWVw QWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBlcl9zdmdfaWQiLCAia2VlcCIgKTsKLSAg ICAgICAgbV9rZWVwQWN0aW9uLT5zZXRDaGVja2FibGUoIHRydWUgKTsKLQotICAgICAgICBjb25u ZWN0KCBtX2tlZXBBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNsb3RTZXRL ZWVwKCkpICk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNEb3dubG9hZGVkID0gZmFsc2U7Ci0gICAg Ym9vbCBoYXNLZWVwID0gZmFsc2U7Ci0gICAgZm9yZWFjaCggUG9kY2FzdHM6OlBvZGNhc3RFcGlz b2RlUHRyIGVwaXNvZGUsIGVwaXNvZGVzICkKLSAgICB7Ci0gICAgICAgIFBvZGNhc3RzOjpTcWxQ b2RjYXN0RXBpc29kZVB0ciBzcWxFcGlzb2RlCi0gICAgICAgICAgICAgICAgPSBQb2RjYXN0czo6 U3FsUG9kY2FzdEVwaXNvZGVQdHI6OmR5bmFtaWNDYXN0KCBlcGlzb2RlICk7Ci0gICAgICAgIGlm KCBzcWxFcGlzb2RlLmlzTnVsbCgpICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlm KCAhc3FsRXBpc29kZS0+bG9jYWxVcmwoKS5pc0VtcHR5KCkgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBoYXNEb3dubG9hZGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKCBzcWxFcGlzb2Rl LT5pc0tlZXAoKSApCi0gICAgICAgICAgICAgICAgaGFzS2VlcCA9IHRydWU7Ci0KLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmKCBoYXNEb3dubG9hZGVkICkKLSAg ICB7Ci0gICAgICAgIFBvZGNhc3RzOjpQb2RjYXN0RXBpc29kZUxpc3QgYWN0aW9uRXBpc29kZXMg PSBtX2RlbGV0ZUFjdGlvbi0+ZGF0YSgpLnZhbHVlPFBvZGNhc3RzOjpQb2RjYXN0RXBpc29kZUxp c3Q+KCk7Ci0gICAgICAgIGFjdGlvbkVwaXNvZGVzIDw8IGVwaXNvZGVzOwotICAgICAgICAvL3Ro ZXNlIGxpc3RzIGFyZSB0aGUgc2FtZSBhbnl3YXkKLSAgICAgICAgbV9rZWVwQWN0aW9uLT5zZXRE YXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBhY3Rpb25FcGlzb2RlcyApICk7Ci0gICAgICAgIG1f ZGVsZXRlQWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBhY3Rpb25FcGlzb2Rl cyApICk7Ci0gICAgICAgIG1fd3JpdGVUYWdzQWN0aW9uLT5zZXREYXRhKCBRVmFyaWFudDo6ZnJv bVZhbHVlKCBhY3Rpb25FcGlzb2RlcyApICk7Ci0KLSAgICAgICAgbV9rZWVwQWN0aW9uLT5zZXRD aGVja2VkKCBoYXNLZWVwICk7Ci0KLSAgICAgICAgYWN0aW9ucyA8PCBtX2tlZXBBY3Rpb247Ci0g ICAgICAgIGFjdGlvbnMgPDwgbV9kZWxldGVBY3Rpb247Ci0gICAgICAgIGFjdGlvbnMgPDwgbV93 cml0ZVRhZ3NBY3Rpb247Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmKCBtX2Rv d25sb2FkQWN0aW9uID09IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2Rvd25sb2FkQWN0 aW9uID0gbmV3IFFBY3Rpb24oCi0gICAgICAgICAgICAgICAgS0ljb24oICJnby1kb3duIiApLAot ICAgICAgICAgICAgICAgIGkxOG4oICImRG93bmxvYWQgRXBpc29kZSIgKSwKLSAgICAgICAgICAg ICAgICB0aGlzCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgbV9kb3dubG9hZEFjdGlvbi0+ c2V0UHJvcGVydHkoICJwb3B1cGRyb3BwZXJfc3ZnX2lkIiwgImRvd25sb2FkIiApOwotICAgICAg ICAgICAgY29ubmVjdCggbV9kb3dubG9hZEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZCgpKSwgU0xP VChzbG90RG93bmxvYWRFcGlzb2RlcygpKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgewotICAgICAgICAgICAgYWN0aW9uRXBpc29kZXMgPSBtX2Rvd25sb2FkQWN0aW9uLT5k YXRhKCkudmFsdWU8UG9kY2FzdHM6OlBvZGNhc3RFcGlzb2RlTGlzdD4oKTsKLSAgICAgICAgfQot ICAgICAgICBhY3Rpb25FcGlzb2RlcyA8PCBlcGlzb2RlczsKLSAgICAgICAgbV9kb3dubG9hZEFj dGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggYWN0aW9uRXBpc29kZXMgKSApOwot ICAgICAgICBhY3Rpb25zIDw8IG1fZG93bmxvYWRBY3Rpb247Ci0gICAgfQotCi0gICAgcmV0dXJu IGFjdGlvbnM7Ci19Ci0KLVFMaXN0PFFBY3Rpb24gKj4KLVNxbFBvZGNhc3RQcm92aWRlcjo6Y2hh bm5lbEFjdGlvbnMoIFBvZGNhc3RzOjpQb2RjYXN0Q2hhbm5lbExpc3QgY2hhbm5lbHMgKQotewot ICAgIFFMaXN0PCBRQWN0aW9uICogPiBhY3Rpb25zOwotCi0gICAgaWYoIGNoYW5uZWxzLmlzRW1w dHkoKSApCi0gICAgICAgIHJldHVybiBhY3Rpb25zOwotCi0gICAgaWYoIG1fY29uZmlndXJlQ2hh bm5lbEFjdGlvbiA9PSAwICkKLSAgICB7Ci0gICAgICAgIG1fY29uZmlndXJlQ2hhbm5lbEFjdGlv biA9IG5ldyBRQWN0aW9uKAotICAgICAgICAgICAgS0ljb24oICJjb25maWd1cmUiICksCi0gICAg ICAgICAgICBpMThuKCAiJkNvbmZpZ3VyZSIgKSwKLSAgICAgICAgICAgIHRoaXMKLSAgICAgICAg KTsKLSAgICAgICAgbV9jb25maWd1cmVDaGFubmVsQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVw ZHJvcHBlcl9zdmdfaWQiLCAiY29uZmlndXJlIiApOwotICAgICAgICBjb25uZWN0KCBtX2NvbmZp Z3VyZUNoYW5uZWxBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoKSksIFNMT1Qoc2xvdENvbmZpZ3Vy ZUNoYW5uZWwoKSkgKTsKLSAgICB9Ci0KLSAgICAvL29ubHkgb25lIHBsYXlsaXN0IGNhbiBiZSBy ZW5hbWVkIGF0IGEgdGltZS4KLSAgICBpZiggbV9jb25maWd1cmVDaGFubmVsQWN0aW9uLT5kYXRh KCkuaXNOdWxsKCkgKQotICAgICAgICBtX2NvbmZpZ3VyZUNoYW5uZWxBY3Rpb24tPnNldERhdGEo IFFWYXJpYW50Ojpmcm9tVmFsdWUoIGNoYW5uZWxzLmZpcnN0KCkgKSApOwotCi0gICAgYWN0aW9u cyA8PCBtX2NvbmZpZ3VyZUNoYW5uZWxBY3Rpb247Ci0KLSAgICBQb2RjYXN0czo6UG9kY2FzdENo YW5uZWxMaXN0IGFjdGlvbkNoYW5uZWxzOwotICAgIGlmKCBtX3JlbW92ZUFjdGlvbiA9PSAwICkK LSAgICB7Ci0gICAgICAgIG1fcmVtb3ZlQWN0aW9uID0gbmV3IFFBY3Rpb24oCi0gICAgICAgICAg ICBLSWNvbiggIm5ld3MtdW5zdWJzY3JpYmUiICksCi0gICAgICAgICAgICBpMThuKCAiJlJlbW92 ZSBTdWJzY3JpcHRpb24iICksCi0gICAgICAgICAgICB0aGlzCi0gICAgICAgICk7Ci0gICAgICAg IG1fcmVtb3ZlQWN0aW9uLT5zZXRQcm9wZXJ0eSggInBvcHVwZHJvcHBlcl9zdmdfaWQiLCAicmVt b3ZlIiApOwotICAgICAgICBjb25uZWN0KCBtX3JlbW92ZUFjdGlvbiwgU0lHTkFMKHRyaWdnZXJl ZCgpKSwgU0xPVChzbG90UmVtb3ZlQ2hhbm5lbHMoKSkgKTsKLSAgICB9Ci0gICAgZWxzZQotICAg IHsKLSAgICAgICAgYWN0aW9uQ2hhbm5lbHMgPSBtX3JlbW92ZUFjdGlvbi0+ZGF0YSgpLnZhbHVl PFBvZGNhc3RzOjpQb2RjYXN0Q2hhbm5lbExpc3Q+KCk7Ci0gICAgfQotCi0gICAgYWN0aW9uQ2hh bm5lbHMgPDwgY2hhbm5lbHM7Ci0gICAgbV9yZW1vdmVBY3Rpb24tPnNldERhdGEoIFFWYXJpYW50 Ojpmcm9tVmFsdWUoIGFjdGlvbkNoYW5uZWxzICkgKTsKLQotICAgIGFjdGlvbnMgPDwgbV9yZW1v dmVBY3Rpb247Ci0KLSAgICBhY3Rpb25DaGFubmVscy5jbGVhcigpOwotICAgIGlmKCBtX3VwZGF0 ZUFjdGlvbiA9PSAwICkKLSAgICB7Ci0gICAgICAgIG1fdXBkYXRlQWN0aW9uID0gbmV3IFFBY3Rp b24oCi0gICAgICAgICAgICBLSWNvbiggInZpZXctcmVmcmVzaC1hbWFyb2siICksCi0gICAgICAg ICAgICBpMThuKCAiJlVwZGF0ZSBDaGFubmVsIiApLAotICAgICAgICAgICAgdGhpcwotICAgICAg ICApOwotICAgICAgICBtX3VwZGF0ZUFjdGlvbi0+c2V0UHJvcGVydHkoICJwb3B1cGRyb3BwZXJf c3ZnX2lkIiwgInVwZGF0ZSIgKTsKLSAgICAgICAgY29ubmVjdCggbV91cGRhdGVBY3Rpb24sIFNJ R05BTCh0cmlnZ2VyZWQoKSksIFNMT1Qoc2xvdFVwZGF0ZUNoYW5uZWxzKCkpICk7Ci0gICAgfQot ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGFjdGlvbkNoYW5uZWxzID0gbV91cGRhdGVBY3Rpb24t PmRhdGEoKS52YWx1ZTxQb2RjYXN0czo6UG9kY2FzdENoYW5uZWxMaXN0PigpOwotICAgIH0KLQot ICAgIGFjdGlvbkNoYW5uZWxzIDw8IGNoYW5uZWxzOwotICAgIG1fdXBkYXRlQWN0aW9uLT5zZXRE YXRhKCBRVmFyaWFudDo6ZnJvbVZhbHVlKCBhY3Rpb25DaGFubmVscyApICk7Ci0KLSAgICBhY3Rp b25zIDw8IG1fdXBkYXRlQWN0aW9uOwotCi0gICAgcmV0dXJuIGFjdGlvbnM7Ci19Ci0KIHZvaWQK IFNxbFBvZGNhc3RQcm92aWRlcjo6ZGVsZXRlRG93bmxvYWRlZEVwaXNvZGVzKCBQb2RjYXN0czo6 U3FsUG9kY2FzdEVwaXNvZGVMaXN0ICZlcGlzb2RlcyApCiB7CmRpZmYgLS1naXQgYS9zcmMvY29y ZS1pbXBsL3BvZGNhc3RzL3NxbC9TcWxQb2RjYXN0UHJvdmlkZXIuaCBiL3NyYy9jb3JlLWltcGwv cG9kY2FzdHMvc3FsL1NxbFBvZGNhc3RQcm92aWRlci5oCmluZGV4IDZkMzQxY2EuLjJlNTkwYjQg MTAwNjQ0Ci0tLSBhL3NyYy9jb3JlLWltcGwvcG9kY2FzdHMvc3FsL1NxbFBvZGNhc3RQcm92aWRl ci5oCisrKyBiL3NyYy9jb3JlLWltcGwvcG9kY2FzdHMvc3FsL1NxbFBvZGNhc3RQcm92aWRlci5o CkBAIC01OSw5ICs1OSw5IEBAIGNsYXNzIEFNQVJPS19FWFBPUlQgU3FsUG9kY2FzdFByb3ZpZGVy IDogcHVibGljIFBvZGNhc3RzOjpQb2RjYXN0UHJvdmlkZXIKICAgICAgICAgdmlydHVhbCBQbGF5 bGlzdHM6OlBsYXlsaXN0TGlzdCBwbGF5bGlzdHMoKTsKIAogICAgICAgICAvL1BsYXlsaXN0UHJv dmlkZXIgbWV0aG9kcwotICAgICAgICB2aXJ0dWFsIFFMaXN0PFFBY3Rpb24gKj4gcHJvdmlkZXJB Y3Rpb25zKCk7Ci0gICAgICAgIHZpcnR1YWwgUUxpc3Q8UUFjdGlvbiAqPiBwbGF5bGlzdEFjdGlv bnMoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QgKTsKLSAgICAgICAgdmlydHVhbCBR TGlzdDxRQWN0aW9uICo+IHRyYWNrQWN0aW9ucyggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5 bGlzdCwgaW50IHRyYWNrSW5kZXggKTsKKyAgICAgICAgdmlydHVhbCBRQWN0aW9uTGlzdCBwcm92 aWRlckFjdGlvbnMoKTsKKyAgICAgICAgdmlydHVhbCBRQWN0aW9uTGlzdCBwbGF5bGlzdEFjdGlv bnMoIGNvbnN0IFBsYXlsaXN0czo6UGxheWxpc3RMaXN0ICZwbGF5bGlzdHMgKTsKKyAgICAgICAg dmlydHVhbCBRQWN0aW9uTGlzdCB0cmFja0FjdGlvbnMoIGNvbnN0IFFNdWx0aUhhc2g8UGxheWxp c3RzOjpQbGF5bGlzdFB0ciwgaW50PiAmcGxheWxpc3RUcmFja3MgKTsKIAogICAgICAgICAvL1Bv ZGNhc3RQcm92aWRlciBtZXRob2RzCiAgICAgICAgIHZpcnR1YWwgUG9kY2FzdHM6OlBvZGNhc3RF cGlzb2RlUHRyIGVwaXNvZGVGb3JHdWlkKCBjb25zdCBRU3RyaW5nICZndWlkICk7CkBAIC03Myw5 ICs3Myw2IEBAIGNsYXNzIEFNQVJPS19FWFBPUlQgU3FsUG9kY2FzdFByb3ZpZGVyIDogcHVibGlj IFBvZGNhc3RzOjpQb2RjYXN0UHJvdmlkZXIKIAogICAgICAgICB2aXJ0dWFsIFBvZGNhc3RzOjpQ b2RjYXN0Q2hhbm5lbExpc3QgY2hhbm5lbHMoKTsKIAotICAgICAgICB2aXJ0dWFsIFFMaXN0PFFB Y3Rpb24gKj4gZXBpc29kZUFjdGlvbnMoIFBvZGNhc3RzOjpQb2RjYXN0RXBpc29kZUxpc3QgKTsK LSAgICAgICAgdmlydHVhbCBRTGlzdDxRQWN0aW9uICo+IGNoYW5uZWxBY3Rpb25zKCBQb2RjYXN0 czo6UG9kY2FzdENoYW5uZWxMaXN0ICk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIGNvbXBsZXRl UG9kY2FzdERvd25sb2FkcygpOwogCiAgICAgICAgIC8vU3FsUG9kY2FzdFByb3ZpZGVyIHNwZWNp ZmljIG1ldGhvZHMKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3BsYXlsaXN0cy9QbGF5bGlzdC5jcHAg Yi9zcmMvY29yZS9wbGF5bGlzdHMvUGxheWxpc3QuY3BwCmluZGV4IDI2NzdjNzguLjQwMWQ3Mjgg MTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL3BsYXlsaXN0cy9QbGF5bGlzdC5jcHAKKysrIGIvc3JjL2Nv cmUvcGxheWxpc3RzL1BsYXlsaXN0LmNwcApAQCAtOTYsMjMgKzk2LDYgQEAgUGxheWxpc3Q6OnN5 bmNUcmFja1N0YXR1cyggaW50LCBNZXRhOjpUcmFja1B0ciApCiB7CiB9CiAKLVFBY3Rpb25MaXN0 Ci1QbGF5bGlzdDo6YWN0aW9ucygpCi17Ci0gICAgaWYoIHByb3ZpZGVyKCkgKQotICAgICAgICBy ZXR1cm4gcHJvdmlkZXIoKS0+cGxheWxpc3RBY3Rpb25zKCBQbGF5bGlzdFB0ciggdGhpcyApICk7 Ci0KLSAgICByZXR1cm4gUUFjdGlvbkxpc3QoKTsKLX0KLQotUUFjdGlvbkxpc3QKLVBsYXlsaXN0 Ojp0cmFja0FjdGlvbnMoIGludCB0cmFja0luZGV4ICkKLXsKLSAgICBpZiggcHJvdmlkZXIoKSAp Ci0gICAgICAgIHJldHVybiBwcm92aWRlcigpLT50cmFja0FjdGlvbnMoIFBsYXlsaXN0UHRyKCB0 aGlzICksIHRyYWNrSW5kZXggKTsKLSAgICByZXR1cm4gUUFjdGlvbkxpc3QoKTsKLX0KLQogUVN0 cmluZ0xpc3QKIFBsYXlsaXN0Ojpncm91cHMoKQogewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvcGxh eWxpc3RzL1BsYXlsaXN0LmggYi9zcmMvY29yZS9wbGF5bGlzdHMvUGxheWxpc3QuaAppbmRleCA5 ZmE4NTRmLi44NTQzYjljIDEwMDY0NAotLS0gYS9zcmMvY29yZS9wbGF5bGlzdHMvUGxheWxpc3Qu aAorKysgYi9zcmMvY29yZS9wbGF5bGlzdHMvUGxheWxpc3QuaApAQCAtMjA2LDE4ICsyMDYsNiBA QCBuYW1lc3BhY2UgUGxheWxpc3RzCiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgc3luY1RyYWNr U3RhdHVzKCBpbnQgcG9zaXRpb24sIE1ldGE6OlRyYWNrUHRyIG90aGVyVHJhY2sgKTsKIAogICAg ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBSZXR1cm4gdXNlci1hY3Rpb25hYmxlIGFjdGlv bnMgZm9yIHRoaXMgcGxheWxpc3QuIERlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAg ICAqIGp1c3QgcmV0dXJucyBwcm92aWRlciBhY3Rpb25zIGZvciB0aGlzIHBsYXlsaXN0LgotICAg ICAgICAgICAgICovCi0gICAgICAgICAgICB2aXJ0dWFsIFFBY3Rpb25MaXN0IGFjdGlvbnMoKTsK LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBSZXR1cm4gYWN0aW9ucyBmb3IgdHJh Y2sgYXQgcG9zaXRpb24gQHRyYWNrSW5kZXggZm9yIHRoaXMgcGxheWxpc3QuIERlZmF1bHQKLSAg ICAgICAgICAgICAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgcHJvdmlkZXIoKSdzIHRyYWNrQWN0 aW9ucygpLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB2aXJ0dWFsIFFBY3Rpb25MaXN0 IHRyYWNrQWN0aW9ucyggaW50IHRyYWNrSW5kZXggKTsKLQotICAgICAgICAgICAgLyoqCiAgICAg ICAgICAgICAgKiBBIGxpc3Qgb2YgZ3JvdXBzIG9yIGxhYmVscyB0aGlzIHBsYXlsaXN0IGJlbG9u Z3MgdG8uCiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICogQ2FuIGJlIHVzZWQgZm9yIGdy b3VwaW5nIGluIGZvbGRlcnMgKHVzZSBleC4gJy8nIGFzIHNlcGFyYXRvcikgb3IgZm9yCmRpZmYg LS1naXQgYS9zcmMvY29yZS9wbGF5bGlzdHMvUGxheWxpc3RQcm92aWRlci5jcHAgYi9zcmMvY29y ZS9wbGF5bGlzdHMvUGxheWxpc3RQcm92aWRlci5jcHAKaW5kZXggNTQ1YTExZS4uYjQyMDYxZiAx MDA2NDQKLS0tIGEvc3JjL2NvcmUvcGxheWxpc3RzL1BsYXlsaXN0UHJvdmlkZXIuY3BwCisrKyBi L3NyYy9jb3JlL3BsYXlsaXN0cy9QbGF5bGlzdFByb3ZpZGVyLmNwcApAQCAtMTksMTYgKzE5LDU1 IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBQbGF5bGlzdHM7CiAKK1BsYXlsaXN0UHJvdmlkZXI6OlBs YXlsaXN0UHJvdmlkZXIoIFFPYmplY3QgKnBhcmVudCkKKyAgICA6IFFPYmplY3QoIHBhcmVudCAp Cit7Cit9CisKK1FBY3Rpb25MaXN0CitQbGF5bGlzdFByb3ZpZGVyOjpwcm92aWRlckFjdGlvbnMo KQoreworICAgIHJldHVybiBRQWN0aW9uTGlzdCgpOworfQorCitRQWN0aW9uTGlzdAorUGxheWxp c3RQcm92aWRlcjo6cGxheWxpc3RBY3Rpb25zKCBjb25zdCBQbGF5bGlzdExpc3QgJiApCit7Cisg ICAgcmV0dXJuIFFBY3Rpb25MaXN0KCk7CisKK30KKworUUFjdGlvbkxpc3QKK1BsYXlsaXN0UHJv dmlkZXI6OnRyYWNrQWN0aW9ucyggY29uc3QgUU11bHRpSGFzaDxQbGF5bGlzdFB0ciwgaW50PiAm ICkKK3sKKyAgICByZXR1cm4gUUFjdGlvbkxpc3QoKTsKK30KKworYm9vbAorUGxheWxpc3RQcm92 aWRlcjo6aXNXcml0YWJsZSgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBQbGF5bGlzdFB0 cgotUGxheWxpc3RQcm92aWRlcjo6YWRkUGxheWxpc3QoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIg cGxheWxpc3QgKQorUGxheWxpc3RQcm92aWRlcjo6YWRkUGxheWxpc3QoIFBsYXlsaXN0czo6UGxh eWxpc3RQdHIgKQogewotICAgIFFfVU5VU0VEKCBwbGF5bGlzdCApOwogICAgIHJldHVybiBQbGF5 bGlzdFB0cigpOwogfQogCit2b2lkCitQbGF5bGlzdFByb3ZpZGVyOjpyZW5hbWVQbGF5bGlzdCgg UGxheWxpc3RQdHIsIGNvbnN0IFFTdHJpbmcgJiApCit7Cit9CisKK2Jvb2wKK1BsYXlsaXN0UHJv dmlkZXI6OmRlbGV0ZVBsYXlsaXN0cyggY29uc3QgUGxheWxpc3RMaXN0ICYgKQoreworICAgIHJl dHVybiBmYWxzZTsKK30KKwogTWV0YTo6VHJhY2tQdHIKLVBsYXlsaXN0UHJvdmlkZXI6OmFkZFRy YWNrKCBNZXRhOjpUcmFja1B0ciB0cmFjayApCitQbGF5bGlzdFByb3ZpZGVyOjphZGRUcmFjaygg TWV0YTo6VHJhY2tQdHIgKQogewotICAgIFFfVU5VU0VEKCB0cmFjayApOwogICAgIHJldHVybiBN ZXRhOjpUcmFja1B0cigpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvcGxheWxpc3RzL1BsYXls aXN0UHJvdmlkZXIuaCBiL3NyYy9jb3JlL3BsYXlsaXN0cy9QbGF5bGlzdFByb3ZpZGVyLmgKaW5k ZXggNDc1MjIyNS4uOTVjYWZiMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvcGxheWxpc3RzL1BsYXls aXN0UHJvdmlkZXIuaAorKysgYi9zcmMvY29yZS9wbGF5bGlzdHMvUGxheWxpc3RQcm92aWRlci5o CkBAIC0yMCw5ICsyMCw2IEBACiAjaW5jbHVkZSAiY29yZS9hbWFyb2tjb3JlX2V4cG9ydC5oIgog I2luY2x1ZGUgImNvcmUvcGxheWxpc3RzL1BsYXlsaXN0LmgiCiAKLSNpbmNsdWRlIDxRU3RyaW5n PgotCi1jbGFzcyBRQWN0aW9uOwogY2xhc3MgS0ljb247CiAKIG5hbWVzcGFjZSBQbGF5bGlzdHMg ewpAQCAtMzIsMTQgKzI5LDE2IEBAIGNsYXNzIEFNQVJPS19DT1JFX0VYUE9SVCBQbGF5bGlzdFBy b3ZpZGVyIDogcHVibGljIFFPYmplY3QKICAgICBRX09CSkVDVAogCiAgICAgcHVibGljOgotICAg ICAgICBQbGF5bGlzdFByb3ZpZGVyKCBRT2JqZWN0ICpwYXJlbnQgPSAwICkgOiBRT2JqZWN0KCBw YXJlbnQgKSB7fQotICAgICAgICB2aXJ0dWFsIH5QbGF5bGlzdFByb3ZpZGVyKCkge30KKyAgICAg ICAgZXhwbGljaXQgUGxheWxpc3RQcm92aWRlciggUU9iamVjdCAqcGFyZW50ID0gMCApOwogCiAg ICAgICAgIC8qKgotICAgICAgICAqIEByZXR1cm5zIEEgdHJhbnNsYXRlZCBzdHJpbmcgdG8gaWRl bnRpZnkgdGhpcyBQcm92aWRlci4KLSAgICAgICAgKi8KKyAgICAgICAgICogQSB0cmFuc2xhdGVk IHN0cmluZyB0byBpZGVudGlmeSB0aGlzIFByb3ZpZGVyLgorICAgICAgICAgKi8KICAgICAgICAg dmlydHVhbCBRU3RyaW5nIHByZXR0eU5hbWUoKSBjb25zdCA9IDA7CiAKKyAgICAgICAgLyoqCisg ICAgICAgICAqIEEgbmljZSBpY29uIGZvciB0aGlzIHBsYXlsaXN0IHByb3ZpZGVyLgorICAgICAg ICAgKi8KICAgICAgICAgdmlydHVhbCBLSWNvbiBpY29uKCkgY29uc3QgPSAwOwogCiAgICAgICAg IC8qKgpAQCAtNDgsMjQgKzQ3LDU2IEBAIGNsYXNzIEFNQVJPS19DT1JFX0VYUE9SVCBQbGF5bGlz dFByb3ZpZGVyIDogcHVibGljIFFPYmplY3QKICAgICAgICAgICovCiAgICAgICAgIHZpcnR1YWwg aW50IGNhdGVnb3J5KCkgY29uc3QgPSAwOwogCi0gICAgICAgIC8qKiBAcmV0dXJucyB0aGUgbnVt YmVyIG9mIHBsYXlsaXN0cyB0aGlzIHByb3ZpZGVyIGhhcyBvciBhIG5lZ2F0aXZlIHZhbHVlIGlm IGl0CisgICAgICAgIC8qKgorICAgICAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBsYXls aXN0cyB0aGlzIHByb3ZpZGVyIGhhcyBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIGl0CiAgICAgICAg ICAqIGNhbiBub3QgZGV0ZXJtaW5lIHRoYXQgYmVmb3JlIGxvYWRpbmcgdGhlbSBhbGwuCisgICAg ICAgICAqCisgICAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyAtMS4KICAg ICAgICAgICovCiAgICAgICAgIHZpcnR1YWwgaW50IHBsYXlsaXN0Q291bnQoKSBjb25zdCB7IHJl dHVybiAtMTsgfQotICAgICAgICB2aXJ0dWFsIFBsYXlsaXN0czo6UGxheWxpc3RMaXN0IHBsYXls aXN0cygpID0gMDsKIAotICAgICAgICB2aXJ0dWFsIFFBY3Rpb25MaXN0IHByb3ZpZGVyQWN0aW9u cygpIHsgcmV0dXJuIFFMaXN0PFFBY3Rpb24gKj4oKTsgfQotICAgICAgICB2aXJ0dWFsIFFBY3Rp b25MaXN0IHBsYXlsaXN0QWN0aW9ucyggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlzdCAp ID0gMDsKLSAgICAgICAgdmlydHVhbCBRQWN0aW9uTGlzdCB0cmFja0FjdGlvbnMoIFBsYXlsaXN0 czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIGludCB0cmFja0luZGV4ICkgPSAwOworICAgICAgICAv KioKKyAgICAgICAgICogUmV0dXJuIGEgbGlzdCBvZiBwbHlhbGlzdHMgb2YgdGhpcyBwcm92aWRl ci4gSWYgcGxheWxpc3RDb3VudCgpIGlzIG5lZ2F0aXZlLAorICAgICAgICAgKiB0aGlzIGxpc3Qg bWF5IGJlIGluY29tcGxldGUuCisgICAgICAgICAqLworICAgICAgICB2aXJ0dWFsIFBsYXlsaXN0 TGlzdCBwbGF5bGlzdHMoKSA9IDA7CiAKLSAgICAgICAgLyoqIENvcHkgYSBwbGF5bGlzdCB0byB0 aGUgcHJvdmlkZXIuCi0gICAgICAgICAgKi8KLSAgICAgICAgdmlydHVhbCBQbGF5bGlzdHM6OlBs YXlsaXN0UHRyIGFkZFBsYXlsaXN0KCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0ICk7 CisgICAgICAgIHZpcnR1YWwgUUFjdGlvbkxpc3QgcHJvdmlkZXJBY3Rpb25zKCk7CisgICAgICAg IHZpcnR1YWwgUUFjdGlvbkxpc3QgcGxheWxpc3RBY3Rpb25zKCBjb25zdCBQbGF5bGlzdExpc3Qg JnBsYXlsaXN0cyApOworICAgICAgICB2aXJ0dWFsIFFBY3Rpb25MaXN0IHRyYWNrQWN0aW9ucygg Y29uc3QgUU11bHRpSGFzaDxQbGF5bGlzdFB0ciwgaW50PiAmcGxheWxpc3RUcmFja3MgKTsKIAot ICAgICAgICAvKiogQ29weSBhIHRyYWNrIGRpcmVjdGx5IHRvIGEgcGxheWxpc3QgcHJvdmlkZXIg d2l0aG91dCBiZWluZyBpbiBhIHBsYXlsaXN0LgotICAgICAgICAgICogSXQncyB1cCB0byB0aGUg aW1wbGVtZW50YXRpb24gdG8gZGVjaWRlIHdoYXQgdG8gZG8gYnV0IGNvdWxkIGZvciBpbnN0YW5j ZSBhbGxvdyB0aGUKLSAgICAgICAgICAqIGNyZWF0aW9uIG9mIGEgbmV3IHBsYXlsaXN0IGZyb20g c2NyYXRjaC4KLSAgICAgICAgICAqLworICAgICAgICAvKioKKyAgICAgICAgICogUmV0dXJuIHRy dWUgaWYgdGhpcyBwcm92aWRlcnMgc3VwcG9ydHMgbW9kaWZpY2F0aW9uIG1hZGUgYnkgdGhlIHVz ZXIuCisgICAgICAgICAqCisgICAgICAgICAqIEkuZS4gd2hldGhlciBhZGRQbGF5bGlzdCgpLCBy ZW5hbWVQbGF5bGlzdCgpLCBkZWxldGVQbGF5bGlzdHMoKSBtYWtlIHNlbnNlCisgICAgICAgICAq IHRvIGJlIHRyaWdnZXJlZCBieSB1c2VyIGFjdGlvbi4KKyAgICAgICAgICoKKyAgICAgICAgICog RGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGZhbHNlLgorICAgICAgICAgKi8KKyAgICAg ICAgdmlydHVhbCBib29sIGlzV3JpdGFibGUoKTsKKworICAgICAgICAvKioKKyAgICAgICAgICog Q29weSBhIHBsYXlsaXN0IHRvIHRoZSBwcm92aWRlci4KKyAgICAgICAgICovCisgICAgICAgIHZp cnR1YWwgUGxheWxpc3RQdHIgYWRkUGxheWxpc3QoIFBsYXlsaXN0UHRyIHBsYXlsaXN0ICk7CisK KyAgICAgICAgLyoqCisgICAgICAgICAqIFJlbmFtZSBhIHBsYXlsaXN0IG9mIHRoaXMgcHJvdmlk ZXIuCisgICAgICAgICAqLworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuYW1lUGxheWxpc3QoIFBs YXlsaXN0UHRyIHBsYXlsaXN0LCBjb25zdCBRU3RyaW5nICZuZXdOYW1lICk7CisKKyAgICAgICAg LyoqCisgICAgICAgICAqIERlbGV0ZXMgYSBsaXN0IG9mIHBsYXlsaXN0cy4gUmV0dXJucyB0cnVl IG9mIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgICoKKyAgICAgICAgICog RGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgYW5kIHJldHVybnMgZmFsc2UuCisg ICAgICAgICAqLworICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUGxheWxpc3RzKCBjb25zdCBQ bGF5bGlzdExpc3QgJnBsYXlsaXN0bGlzdCApOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBD b3B5IGEgdHJhY2sgZGlyZWN0bHkgdG8gYSBwbGF5bGlzdCBwcm92aWRlciB3aXRob3V0IGJlaW5n IGluIGEgcGxheWxpc3QuCisgICAgICAgICAqIEl0J3MgdXAgdG8gdGhlIGltcGxlbWVudGF0aW9u IHRvIGRlY2lkZSB3aGF0IHRvIGRvIGJ1dCBjb3VsZCBmb3IgaW5zdGFuY2UgYWxsb3cgdGhlCisg ICAgICAgICAqIGNyZWF0aW9uIG9mIGEgbmV3IHBsYXlsaXN0IGZyb20gc2NyYXRjaC4KKyAgICAg ICAgICovCiAgICAgICAgIHZpcnR1YWwgTWV0YTo6VHJhY2tQdHIgYWRkVHJhY2soIE1ldGE6OlRy YWNrUHRyIHRyYWNrICk7CiAKICAgICBzaWduYWxzOgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvcG9k Y2FzdHMvUG9kY2FzdFByb3ZpZGVyLmggYi9zcmMvY29yZS9wb2RjYXN0cy9Qb2RjYXN0UHJvdmlk ZXIuaAppbmRleCAyNTdhYWVlLi5mMTI2ZWJlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9wb2RjYXN0 cy9Qb2RjYXN0UHJvdmlkZXIuaAorKysgYi9zcmMvY29yZS9wb2RjYXN0cy9Qb2RjYXN0UHJvdmlk ZXIuaApAQCAtMjEsMTIgKzIxLDYgQEAKICNpbmNsdWRlICJjb3JlL3BsYXlsaXN0cy9QbGF5bGlz dFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiY29yZS9wb2RjYXN0cy9Qb2RjYXN0TWV0YS5oIgogCi0j aW5jbHVkZSA8a2lvL2pvYmNsYXNzZXMuaD4KLSNpbmNsdWRlIDxLTG9jYWxlPgotCi1jbGFzcyBL VXJsOwotY2xhc3MgUUFjdGlvbjsKLQogbmFtZXNwYWNlIFBvZGNhc3RzIHsKIAogLyoqCkBAIC0z OCw4ICszMiw2IEBAIGNsYXNzIEFNQVJPS19DT1JFX0VYUE9SVCBQb2RjYXN0UHJvdmlkZXIgOiBw dWJsaWMgQ29sbGVjdGlvbnM6OlRyYWNrUHJvdmlkZXIsIHB1CiAgICAgICAgIHN0YXRpYyBib29s IGNvdWxkQmVGZWVkKCBjb25zdCBRU3RyaW5nICZ1cmxTdHJpbmcgKTsKICAgICAgICAgc3RhdGlj IEtVcmwgdG9GZWVkVXJsKCBjb25zdCBRU3RyaW5nICZ1cmxTdHJpbmcgKTsKIAotICAgICAgICB2 aXJ0dWFsIH5Qb2RjYXN0UHJvdmlkZXIoKSB7fQotCiAgICAgICAgIHZpcnR1YWwgYm9vbCBwb3Nz aWJseUNvbnRhaW5zVHJhY2soIGNvbnN0IEtVcmwgJnVybCApIGNvbnN0ID0gMDsKICAgICAgICAg dmlydHVhbCBNZXRhOjpUcmFja1B0ciB0cmFja0ZvclVybCggY29uc3QgS1VybCAmdXJsICkgPSAw OwogCkBAIC01OSwyOSArNTEsMTIgQEAgY2xhc3MgQU1BUk9LX0NPUkVfRVhQT1JUIFBvZGNhc3RQ cm92aWRlciA6IHB1YmxpYyBDb2xsZWN0aW9uczo6VHJhY2tQcm92aWRlciwgcHUKIAogICAgICAg ICB2aXJ0dWFsIFBvZGNhc3RzOjpQb2RjYXN0Q2hhbm5lbExpc3QgY2hhbm5lbHMoKSA9IDA7CiAK LSAgICAgICAgdmlydHVhbCBRTGlzdDxRQWN0aW9uICo+IGVwaXNvZGVBY3Rpb25zKCBQb2RjYXN0 czo6UG9kY2FzdEVwaXNvZGVMaXN0ICkKLSAgICAgICAgICAgIHsgcmV0dXJuIFFMaXN0PFFBY3Rp b24gKj4oKTsgfQotICAgICAgICB2aXJ0dWFsIFFMaXN0PFFBY3Rpb24gKj4gY2hhbm5lbEFjdGlv bnMoIFBvZGNhc3RzOjpQb2RjYXN0Q2hhbm5lbExpc3QgKQotICAgICAgICAgICAgeyByZXR1cm4g UUxpc3Q8UUFjdGlvbiAqPigpOyB9Ci0KICAgICAgICAgLy9UT0RPOiBuZWVkIHRvIG1vdmUgdGhp cyB0byBTcWxQb2RjYXN0UHJvdmlkZXIgc2luY2UgaXQncyBwcm92aWRlciBzcGVjaWZpYy4KICAg ICAgICAgLy9wZXJoYXBzIHVzZSBhIG1vcmUgZ2VuZXJhbCB0cmFuc2ZlcnByb2dyZXNzIGZvciBw bGF5bGlzdHMKICAgICAgICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlUG9kY2FzdERvd25sb2Fkcygp ID0gMDsKIAogICAgICAgICAvLyBQbGF5bGlzdFByb3ZpZGVyIG1ldGhvZHMKLSAgICAgICAgdmly dHVhbCBRU3RyaW5nIHByZXR0eU5hbWUoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgS0lj b24gaWNvbigpIGNvbnN0ID0gMDsKLQotICAgICAgICB2aXJ0dWFsIGludCBjYXRlZ29yeSgpIGNv bnN0IHsgcmV0dXJuIChpbnQpUGxheWxpc3RzOjpQb2RjYXN0Q2hhbm5lbFBsYXlsaXN0OyB9Ci0K LSAgICAgICAgdmlydHVhbCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCBwbGF5bGlzdHMoKSA9IDA7 Ci0KLSAgICAgICAgdmlydHVhbCBRTGlzdDxRQWN0aW9uICo+IHByb3ZpZGVyQWN0aW9ucygpIHsg cmV0dXJuIFFMaXN0PFFBY3Rpb24gKj4oKTsgfQotICAgICAgICB2aXJ0dWFsIFFMaXN0PFFBY3Rp b24gKj4gcGxheWxpc3RBY3Rpb25zKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0ICkK LSAgICAgICAgICAgICAgICB7IFFfVU5VU0VEKCBwbGF5bGlzdCApIHJldHVybiBRTGlzdDxRQWN0 aW9uICo+KCk7IH0KLSAgICAgICAgdmlydHVhbCBRTGlzdDxRQWN0aW9uICo+IHRyYWNrQWN0aW9u cyggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyYWNrSW5kZXggKQotICAgICAgICAg ICAgICAgIHsgUV9VTlVTRUQoIHBsYXlsaXN0KSBRX1VOVVNFRCggdHJhY2tJbmRleCApIHJldHVy biBRTGlzdDxRQWN0aW9uICo+KCk7IH0KKyAgICAgICAgdmlydHVhbCBpbnQgY2F0ZWdvcnkoKSBj b25zdCB7IHJldHVybiBQbGF5bGlzdHM6OlBvZGNhc3RDaGFubmVsUGxheWxpc3Q7IH0KIAogICAg ICAgICAvKiogY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBkb3duY2FzdCB0aGUgYXJndW1lbnQg dG8gUG9kY2FzdENoYW5uZWwgYW5kIGNhbGxzIGFkZENoYW5uZWwoKQogICAgICAgICAgICovCmRp ZmYgLS1naXQgYS9zcmMvcGxheWxpc3RtYW5hZ2VyL1BsYXlsaXN0TWFuYWdlci5jcHAgYi9zcmMv cGxheWxpc3RtYW5hZ2VyL1BsYXlsaXN0TWFuYWdlci5jcHAKaW5kZXggMjgxMjE1ZS4uODYwYThk YSAxMDA2NDQKLS0tIGEvc3JjL3BsYXlsaXN0bWFuYWdlci9QbGF5bGlzdE1hbmFnZXIuY3BwCisr KyBiL3NyYy9wbGF5bGlzdG1hbmFnZXIvUGxheWxpc3RNYW5hZ2VyLmNwcApAQCAtMzU5LDcgKzM1 OSw3IEBAIFBsYXlsaXN0TWFuYWdlcjo6cmVuYW1lKCBQbGF5bGlzdFB0ciBwbGF5bGlzdCwgY29u c3QgUVN0cmluZyAmbmV3TmFtZSApCiAgICAgaWYoICFwcm92aWRlciB8fCAhcHJvdmlkZXItPmlz V3JpdGFibGUoKSApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHByb3ZpZGVyLT5yZW5h bWUoIHBsYXlsaXN0LCBuZXdOYW1lICk7CisgICAgcHJvdmlkZXItPnJlbmFtZVBsYXlsaXN0KCBw bGF5bGlzdCwgbmV3TmFtZSApOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9z cmMvcGxheWxpc3RtYW5hZ2VyL1N5bmNlZFBsYXlsaXN0LmNwcCBiL3NyYy9wbGF5bGlzdG1hbmFn ZXIvU3luY2VkUGxheWxpc3QuY3BwCmluZGV4IGFlNmY5YWIuLjk4NWYwODcgMTAwNjQ0Ci0tLSBh L3NyYy9wbGF5bGlzdG1hbmFnZXIvU3luY2VkUGxheWxpc3QuY3BwCisrKyBiL3NyYy9wbGF5bGlz dG1hbmFnZXIvU3luY2VkUGxheWxpc3QuY3BwCkBAIC0xMDQsMjQgKzEwNCw2IEBAIFN5bmNlZFBs YXlsaXN0OjpyZW1vdmVUcmFjayggaW50IHBvc2l0aW9uICkKICAgICBtX3BsYXlsaXN0cy5maXJz dCgpLT5yZW1vdmVUcmFjayggcG9zaXRpb24gKTsKIH0KIAotUUFjdGlvbkxpc3QKLVN5bmNlZFBs YXlsaXN0OjphY3Rpb25zKCkKLXsKLSAgICBRQWN0aW9uTGlzdCBhY3Rpb25zOwotICAgIC8vb25s eSBhZGQgYWN0aW9ucyBmcm9tIHRoZSBtYXN0ZXIgcGxheWxpc3QKLSAgICBhY3Rpb25zIDw8IHBs YXlsaXN0cygpLmZpcnN0KCktPmFjdGlvbnMoKTsKLSAgICByZXR1cm4gYWN0aW9uczsKLX0KLQot UUFjdGlvbkxpc3QKLVN5bmNlZFBsYXlsaXN0Ojp0cmFja0FjdGlvbnMoIGludCB0cmFja0luZGV4 ICkKLXsKLSAgICBRQWN0aW9uTGlzdCBhY3Rpb25zOwotICAgIC8vb25seSBhZGQgYWN0aW9ucyBm cm9tIHRoZSBtYXN0ZXIgcGxheWxpc3QKLSAgICBhY3Rpb25zIDw8IHBsYXlsaXN0cygpLmZpcnN0 KCktPnRyYWNrQWN0aW9ucyggdHJhY2tJbmRleCApOwotICAgIHJldHVybiBhY3Rpb25zOwotfQot CiB2b2lkCiBTeW5jZWRQbGF5bGlzdDo6bWV0YWRhdGFDaGFuZ2VkKCBQbGF5bGlzdHM6OlBsYXls aXN0UHRyIHBsYXlsaXN0ICkKIHsKZGlmZiAtLWdpdCBhL3NyYy9wbGF5bGlzdG1hbmFnZXIvU3lu Y2VkUGxheWxpc3QuaCBiL3NyYy9wbGF5bGlzdG1hbmFnZXIvU3luY2VkUGxheWxpc3QuaAppbmRl eCAyMTRiYjVjLi5mZDJmOTY2IDEwMDY0NAotLS0gYS9zcmMvcGxheWxpc3RtYW5hZ2VyL1N5bmNl ZFBsYXlsaXN0LmgKKysrIGIvc3JjL3BsYXlsaXN0bWFuYWdlci9TeW5jZWRQbGF5bGlzdC5oCkBA IC00Myw5ICs0Myw2IEBAIGNsYXNzIFN5bmNlZFBsYXlsaXN0IDogcHVibGljIFBsYXlsaXN0czo6 UGxheWxpc3QsIHB1YmxpYyBQbGF5bGlzdHM6OlBsYXlsaXN0T2JzCiAgICAgICAgIHZpcnR1YWwg dm9pZCBhZGRUcmFjayggTWV0YTo6VHJhY2tQdHIgdHJhY2ssIGludCBwb3NpdGlvbiA9IC0xICk7 CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUcmFjayggaW50IHBvc2l0aW9uICk7CiAKLSAg ICAgICAgdmlydHVhbCBRQWN0aW9uTGlzdCBhY3Rpb25zKCk7Ci0gICAgICAgIHZpcnR1YWwgUUFj dGlvbkxpc3QgdHJhY2tBY3Rpb25zKCBpbnQgdHJhY2tJbmRleCApOwotCiAgICAgICAgIC8vUGxh eWxpc3RPYnNlcnZlciBtZXRob2RzCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtZXRhZGF0YUNoYW5n ZWQoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QgKTsKICAgICAgICAgdmlydHVhbCB2 b2lkIHRyYWNrc0xvYWRlZCggUGxheWxpc3RzOjpQbGF5bGlzdFB0cik7CmRpZmYgLS1naXQgYS9z cmMvcGxheWxpc3RtYW5hZ2VyL2ZpbGUvUGxheWxpc3RGaWxlUHJvdmlkZXIuY3BwIGIvc3JjL3Bs YXlsaXN0bWFuYWdlci9maWxlL1BsYXlsaXN0RmlsZVByb3ZpZGVyLmNwcAppbmRleCA1MTI2YzYy Li5jZDM1ZWZhIDEwMDY0NAotLS0gYS9zcmMvcGxheWxpc3RtYW5hZ2VyL2ZpbGUvUGxheWxpc3RG aWxlUHJvdmlkZXIuY3BwCisrKyBiL3NyYy9wbGF5bGlzdG1hbmFnZXIvZmlsZS9QbGF5bGlzdEZp bGVQcm92aWRlci5jcHAKQEAgLTk3LDYgKzk3LDExIEBAIFBsYXlsaXN0RmlsZVByb3ZpZGVyOjpw cmV0dHlOYW1lKCkgY29uc3QKICAgICByZXR1cm4gaTE4biggIlBsYXlsaXN0IEZpbGVzIG9uIERp c2siICk7CiB9CiAKK0tJY29uIFBsYXlsaXN0RmlsZVByb3ZpZGVyOjppY29uKCkgY29uc3QKK3sK KyAgICByZXR1cm4gS0ljb24oICJmb2xkZXItZG9jdW1lbnRzIiApOworfQorCiBpbnQKIFBsYXls aXN0RmlsZVByb3ZpZGVyOjpwbGF5bGlzdENvdW50KCkgY29uc3QKIHsKQEAgLTIyOSwxNCArMjM0 LDE0IEBAIFBsYXlsaXN0RmlsZVByb3ZpZGVyOjppbXBvcnQoIGNvbnN0IEtVcmwgJnBhdGggKQog fQogCiB2b2lkCi1QbGF5bGlzdEZpbGVQcm92aWRlcjo6cmVuYW1lKCBQbGF5bGlzdHM6OlBsYXls aXN0UHRyIHBsYXlsaXN0LCBjb25zdCBRU3RyaW5nICZuZXdOYW1lICkKK1BsYXlsaXN0RmlsZVBy b3ZpZGVyOjpyZW5hbWVQbGF5bGlzdCggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwg Y29uc3QgUVN0cmluZyAmbmV3TmFtZSApCiB7CiAgICAgREVCVUdfQkxPQ0sKICAgICBwbGF5bGlz dC0+c2V0TmFtZSggbmV3TmFtZSApOwogfQogCiBib29sCi1QbGF5bGlzdEZpbGVQcm92aWRlcjo6 ZGVsZXRlUGxheWxpc3RzKCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCBwbGF5bGlzdHMgKQorUGxh eWxpc3RGaWxlUHJvdmlkZXI6OmRlbGV0ZVBsYXlsaXN0cyggY29uc3QgUGxheWxpc3RzOjpQbGF5 bGlzdExpc3QgJnBsYXlsaXN0cyApCiB7CiAgICAgUGxheWxpc3RzOjpQbGF5bGlzdEZpbGVMaXN0 IHBsYXlsaXN0RmlsZXM7CiAgICAgZm9yZWFjaCggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5 bGlzdCwgcGxheWxpc3RzICkKZGlmZiAtLWdpdCBhL3NyYy9wbGF5bGlzdG1hbmFnZXIvZmlsZS9Q bGF5bGlzdEZpbGVQcm92aWRlci5oIGIvc3JjL3BsYXlsaXN0bWFuYWdlci9maWxlL1BsYXlsaXN0 RmlsZVByb3ZpZGVyLmgKaW5kZXggYjE1NDM3YS4uNThiMmY0MSAxMDA2NDQKLS0tIGEvc3JjL3Bs YXlsaXN0bWFuYWdlci9maWxlL1BsYXlsaXN0RmlsZVByb3ZpZGVyLmgKKysrIGIvc3JjL3BsYXls aXN0bWFuYWdlci9maWxlL1BsYXlsaXN0RmlsZVByb3ZpZGVyLmgKQEAgLTIyLDEyICsyMiw2IEBA CiAjaW5jbHVkZSAiY29yZS1pbXBsL3BsYXlsaXN0cy9wcm92aWRlcnMvdXNlci9Vc2VyUGxheWxp c3RQcm92aWRlci5oIgogI2luY2x1ZGUgImNvcmUtaW1wbC9wbGF5bGlzdHMvdHlwZXMvZmlsZS9Q bGF5bGlzdEZpbGVTdXBwb3J0LmgiCiAKLSNpbmNsdWRlIDxraWNvbi5oPgotCi1jbGFzcyBLQ29u ZmlnR3JvdXA7Ci1jbGFzcyBLVXJsOwotCi1jbGFzcyBRQWN0aW9uOwogY2xhc3MgUVRpbWVyOwog CiBuYW1lc3BhY2UgUGxheWxpc3RzIHsKQEAgLTQzLDcgKzM3LDcgQEAgY2xhc3MgUGxheWxpc3RG aWxlUHJvdmlkZXIgOiBwdWJsaWMgUGxheWxpc3RzOjpVc2VyUGxheWxpc3RQcm92aWRlcgogICAg ICAgICB2aXJ0dWFsIH5QbGF5bGlzdEZpbGVQcm92aWRlcigpOwogCiAgICAgICAgIHZpcnR1YWwg UVN0cmluZyBwcmV0dHlOYW1lKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgS0ljb24gaWNvbigp IGNvbnN0IHsgcmV0dXJuIEtJY29uKCAiZm9sZGVyLWRvY3VtZW50cyIgKTsgfQorICAgICAgICB2 aXJ0dWFsIEtJY29uIGljb24oKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGludCBjYXRlZ29y eSgpIGNvbnN0IHsgcmV0dXJuIFBsYXlsaXN0czo6VXNlclBsYXlsaXN0OyB9CiAKQEAgLTYyLDgg KzU2LDggQEAgY2xhc3MgUGxheWxpc3RGaWxlUHJvdmlkZXIgOiBwdWJsaWMgUGxheWxpc3RzOjpV c2VyUGxheWxpc3RQcm92aWRlcgogICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wb3J0KCBjb25zdCBL VXJsICZwYXRoICk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzV3JpdGFibGUoKSB7IHJldHVy biB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW5hbWUoIFBsYXlsaXN0czo6UGxheWxp c3RQdHIgcGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKTsKLSAgICAgICAgdmlydHVh bCBib29sIGRlbGV0ZVBsYXlsaXN0cyggUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgcGxheWxpc3RM aXN0ICk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW5hbWVQbGF5bGlzdCggUGxheWxpc3RzOjpQ bGF5bGlzdFB0ciBwbGF5bGlzdCwgY29uc3QgUVN0cmluZyAmbmV3TmFtZSApOworICAgICAgICB2 aXJ0dWFsIGJvb2wgZGVsZXRlUGxheWxpc3RzKCBjb25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlz dCAmcGxheWxpc3RzICk7CiAKICAgICAgICAgLyogUGxheWxpc3RGaWxlUHJvdmlkZXIgbWV0aG9k cyAqLwogICAgICAgICAvKiogU2NoZWR1bGVzIGEgUGxheWxpc3RGaWxlIHRvIGJlIHNhdmVkIG9u IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWFpbmxvb3AuCmRpZmYgLS1naXQgYS9zcmMvcGxh eWxpc3RtYW5hZ2VyL3NxbC9TcWxVc2VyUGxheWxpc3RQcm92aWRlci5jcHAgYi9zcmMvcGxheWxp c3RtYW5hZ2VyL3NxbC9TcWxVc2VyUGxheWxpc3RQcm92aWRlci5jcHAKaW5kZXggMGZmYjNkNi4u ZDkyMDlkMiAxMDA2NDQKLS0tIGEvc3JjL3BsYXlsaXN0bWFuYWdlci9zcWwvU3FsVXNlclBsYXls aXN0UHJvdmlkZXIuY3BwCisrKyBiL3NyYy9wbGF5bGlzdG1hbmFnZXIvc3FsL1NxbFVzZXJQbGF5 bGlzdFByb3ZpZGVyLmNwcApAQCAtNzYsNDMgKzc2LDExIEBAIFNxbFVzZXJQbGF5bGlzdFByb3Zp ZGVyOjpwbGF5bGlzdHMoKQogfQogCiB2b2lkCi1TcWxVc2VyUGxheWxpc3RQcm92aWRlcjo6cmVu YW1lKCBQbGF5bGlzdHM6OlBsYXlsaXN0UHRyIHBsYXlsaXN0LCBjb25zdCBRU3RyaW5nICZuZXdO YW1lICkKK1NxbFVzZXJQbGF5bGlzdFByb3ZpZGVyOjpyZW5hbWVQbGF5bGlzdCggUGxheWxpc3Rz OjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwgY29uc3QgUVN0cmluZyAmbmV3TmFtZSApCiB7CiAgICAg cGxheWxpc3QtPnNldE5hbWUoIG5ld05hbWUudHJpbW1lZCgpICk7CiB9CiAKLXZvaWQKLVNxbFVz ZXJQbGF5bGlzdFByb3ZpZGVyOjpzbG90RGVsZXRlKCkKLXsKLSAgICBRQWN0aW9uICphY3Rpb24g PSBxb2JqZWN0X2Nhc3Q8UUFjdGlvbiAqPiggUU9iamVjdDo6c2VuZGVyKCkgKTsKLSAgICBpZigg YWN0aW9uID09IDAgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF5bGlzdHM6OlBsYXlsaXN0 TGlzdCBwbGF5bGlzdHMgPSBhY3Rpb24tPmRhdGEoKS52YWx1ZTxQbGF5bGlzdHM6OlBsYXlsaXN0 TGlzdD4oKTsKLSAgICBpZiggcGxheWxpc3RzLmNvdW50KCkgPT0gMCApCi0gICAgICAgIHJldHVy bjsKLQotICAgIGlmKCAhbV9kZWJ1ZyApCi0gICAgewotICAgICAgICBLRGlhbG9nIGRpYWxvZzsK LSAgICAgICAgZGlhbG9nLnNldENhcHRpb24oIGkxOG4oICJDb25maXJtIERlbGV0ZSIgKSApOwot ICAgICAgICBkaWFsb2cuc2V0QnV0dG9ucyggS0RpYWxvZzo6T2sgfCBLRGlhbG9nOjpDYW5jZWwg KTsKLSAgICAgICAgUUxhYmVsIGxhYmVsKCBpMThucCggIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0 byBkZWxldGUgdGhpcyBwbGF5bGlzdD8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGVzZSAlMSBwbGF5bGlzdHM/IiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWxpc3RzLmNvdW50KCkgKQotICAgICAgICAg ICAgICAgICAgICAgICwgJmRpYWxvZwotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAv L1RPRE86aW5jbHVkZSBhIHRleHQgYXJlYSB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIHBsYXls aXN0cwotICAgICAgICBkaWFsb2cuc2V0QnV0dG9uVGV4dCggS0RpYWxvZzo6T2ssIGkxOG5jKCAi JTEgaXMgcGxheWxpc3QgcHJvdmlkZXIgcHJldHR5IG5hbWUiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWVzLCBkZWxldGUgZnJvbSAlMS4iLCBw cmV0dHlOYW1lKCkgKSApOwotICAgICAgICBkaWFsb2cuc2V0TWFpbldpZGdldCggJmxhYmVsICk7 Ci0gICAgICAgIGlmKCBkaWFsb2cuZXhlYygpICE9IFFEaWFsb2c6OkFjY2VwdGVkICkKLSAgICAg ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkZWxldGVQbGF5bGlzdHMoIHBsYXlsaXN0cyAp OwotfQotCiBib29sCiBTcWxVc2VyUGxheWxpc3RQcm92aWRlcjo6aXNXcml0YWJsZSgpCiB7CkBA IC0xMjAsNyArODgsNyBAQCBTcWxVc2VyUGxheWxpc3RQcm92aWRlcjo6aXNXcml0YWJsZSgpCiB9 CiAKIGJvb2wKLVNxbFVzZXJQbGF5bGlzdFByb3ZpZGVyOjpkZWxldGVQbGF5bGlzdHMoIFBsYXls aXN0czo6UGxheWxpc3RMaXN0IHBsYXlsaXN0TGlzdCApCitTcWxVc2VyUGxheWxpc3RQcm92aWRl cjo6ZGVsZXRlUGxheWxpc3RzKCBjb25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCAmcGxheWxp c3RMaXN0ICkKIHsKICAgICBQbGF5bGlzdHM6OlNxbFBsYXlsaXN0TGlzdCBzcWxQbGF5bGlzdHM7 CiAgICAgZm9yZWFjaCggUGxheWxpc3RzOjpQbGF5bGlzdFB0ciBwbGF5bGlzdCwgcGxheWxpc3RM aXN0ICkKZGlmZiAtLWdpdCBhL3NyYy9wbGF5bGlzdG1hbmFnZXIvc3FsL1NxbFVzZXJQbGF5bGlz dFByb3ZpZGVyLmggYi9zcmMvcGxheWxpc3RtYW5hZ2VyL3NxbC9TcWxVc2VyUGxheWxpc3RQcm92 aWRlci5oCmluZGV4IDJmZjlmZGEuLjI3M2EwNTAgMTAwNjQ0Ci0tLSBhL3NyYy9wbGF5bGlzdG1h bmFnZXIvc3FsL1NxbFVzZXJQbGF5bGlzdFByb3ZpZGVyLmgKKysrIGIvc3JjL3BsYXlsaXN0bWFu YWdlci9zcWwvU3FsVXNlclBsYXlsaXN0UHJvdmlkZXIuaApAQCAtNTMsMTkgKzUzLDEzIEBAIGNs YXNzIEFNQVJPS19FWFBPUlQgU3FsVXNlclBsYXlsaXN0UHJvdmlkZXIgOiBwdWJsaWMgVXNlclBs YXlsaXN0UHJvdmlkZXIKIAogICAgICAgICAvKiBVc2VyUGxheWxpc3RQcm92aWRlciBmdW5jdGlv bnMgKi8KICAgICAgICAgdmlydHVhbCBib29sIGlzV3JpdGFibGUoKTsKLSAgICAgICAgdmlydHVh bCBib29sIGRlbGV0ZVBsYXlsaXN0cyggUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgcGxheWxpc3Rs aXN0ICk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW5hbWUoIFBsYXlsaXN0czo6UGxheWxpc3RQ dHIgcGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKTsKKyAgICAgICAgdmlydHVhbCBi b29sIGRlbGV0ZVBsYXlsaXN0cyggY29uc3QgUGxheWxpc3RzOjpQbGF5bGlzdExpc3QgJnBsYXls aXN0bGlzdCApOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuYW1lUGxheWxpc3QoIFBsYXlsaXN0 czo6UGxheWxpc3RQdHIgcGxheWxpc3QsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUgKTsKIAogICAg ICAgICBQbGF5bGlzdHM6OlNxbFBsYXlsaXN0R3JvdXBQdHIgZ3JvdXAoIGNvbnN0IFFTdHJpbmcg Jm5hbWUgKTsKIAogICAgICAgICBzdGF0aWMgUGxheWxpc3RzOjpTcWxQbGF5bGlzdExpc3QgdG9T cWxQbGF5bGlzdHMoIFBsYXlsaXN0czo6UGxheWxpc3RMaXN0IHBsYXlsaXN0cyApOwogCi0gICAg cHJpdmF0ZSBzbG90czoKLSAgICAgICAgLyoqCi0gICAgICAgICAqIE92ZXJyaWRkZW4gb25seSBi YWNhdXNlIG9mIHRoZSBtX2RlYnVnIGZsYWcKLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgc2xv dERlbGV0ZSgpOwotCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCByZWxvYWRGcm9tRGIoKTsK ICAgICAgICAgUGxheWxpc3RzOjpTcWxQbGF5bGlzdEdyb3VwUHRyIG1fcm9vdDsKZGlmZiAtLWdp dCBhL3NyYy9zZXJ2aWNlcy9ncG9kZGVyL0dwb2RkZXJQcm92aWRlci5jcHAgYi9zcmMvc2Vydmlj ZXMvZ3BvZGRlci9HcG9kZGVyUHJvdmlkZXIuY3BwCmluZGV4IDI4MTAyYTUuLmQ3YWU2MGYgMTAw NjQ0Ci0tLSBhL3NyYy9zZXJ2aWNlcy9ncG9kZGVyL0dwb2RkZXJQcm92aWRlci5jcHAKKysrIGIv c3JjL3NlcnZpY2VzL2dwb2RkZXIvR3BvZGRlclByb3ZpZGVyLmNwcApAQCAtMzQzLDUxICszNDMs MzkgQEAgR3BvZGRlclByb3ZpZGVyOjpyZW1vdmVDaGFubmVsKCBjb25zdCBRVXJsICZ1cmwgKQog ICAgIH0KIH0KIAotUUxpc3Q8UUFjdGlvbiAqPgorUUFjdGlvbkxpc3QKIEdwb2RkZXJQcm92aWRl cjo6Y2hhbm5lbEFjdGlvbnMoIFBvZGNhc3RDaGFubmVsTGlzdCBjaGFubmVscyApCiB7Ci0gICAg REVCVUdfQkxPQ0sKLQotICAgIFFMaXN0PFFBY3Rpb24gKj4gYWN0aW9uczsKKyAgICBRQWN0aW9u TGlzdCBhY3Rpb25zOworICAgIGlmKCBjaGFubmVscy5pc0VtcHR5KCkgKQorICAgICAgICByZXR1 cm4gYWN0aW9uczsKIAogICAgIGlmKCBtX3JlbW92ZUFjdGlvbiA9PSAwICkKICAgICB7Ci0gICAg ICAgIG1fcmVtb3ZlQWN0aW9uID0gbmV3IFFBY3Rpb24oCi0gICAgICAgICAgICBLSWNvbiggImVk aXQtZGVsZXRlIiApLAotICAgICAgICAgICAgaTE4biggIiZEZWxldGUgQ2hhbm5lbCBhbmQgRXBp c29kZXMiICksCi0gICAgICAgICAgICB0aGlzCi0gICAgICAgICk7Ci0KKyAgICAgICAgbV9yZW1v dmVBY3Rpb24gPSBuZXcgUUFjdGlvbiggS0ljb24oICJlZGl0LWRlbGV0ZSIgKSwKKyAgICAgICAg ICAgICAgICBpMThuKCAiJkRlbGV0ZSBDaGFubmVsIGFuZCBFcGlzb2RlcyIgKSwgdGhpcyApOwog ICAgICAgICBtX3JlbW92ZUFjdGlvbi0+c2V0UHJvcGVydHkoICJwb3B1cGRyb3BwZXJfc3ZnX2lk IiwgImRlbGV0ZSIgKTsKLSAgICAgICAgY29ubmVjdCggbV9yZW1vdmVBY3Rpb24sIAotICAgICAg ICAgICAgICAgICBTSUdOQUwodHJpZ2dlcmVkKCkpLAotICAgICAgICAgICAgICAgICBTTE9UKHNs b3RSZW1vdmVDaGFubmVscygpKSApOworICAgICAgICBjb25uZWN0KCBtX3JlbW92ZUFjdGlvbiwg IFNJR05BTCh0cmlnZ2VyZWQoKSksIFNMT1Qoc2xvdFJlbW92ZUNoYW5uZWxzKCkpICk7CiAgICAg fQotCiAgICAgLy9TZXQgdGhlIGVwaXNvZGUgbGlzdCBhcyBkYXRhIHRoYXQgd2UnbGwgcmV0cmll dmUgaW4gdGhlIHNsb3QKLSAgICBQb2RjYXN0Q2hhbm5lbExpc3QgYWN0aW9uTGlzdCA9Ci0gICAg ICAgIG1fcmVtb3ZlQWN0aW9uLT5kYXRhKCkudmFsdWU8UG9kY2FzdENoYW5uZWxMaXN0PigpOwot Ci0gICAgYWN0aW9uTGlzdCA8PCBjaGFubmVsczsKLSAgICBtX3JlbW92ZUFjdGlvbi0+c2V0RGF0 YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggYWN0aW9uTGlzdCApICk7Ci0KKyAgICBtX3JlbW92ZUFj dGlvbi0+c2V0RGF0YSggUVZhcmlhbnQ6OmZyb21WYWx1ZSggY2hhbm5lbHMgKSApOwogICAgIGFj dGlvbnMgPDwgbV9yZW1vdmVBY3Rpb247CiAKICAgICByZXR1cm4gYWN0aW9uczsKIH0KIAotUUxp c3Q8UUFjdGlvbiAqPgotR3BvZGRlclByb3ZpZGVyOjpwbGF5bGlzdEFjdGlvbnMoIFBsYXlsaXN0 czo6UGxheWxpc3RQdHIgcGxheWxpc3QgKQorUUFjdGlvbkxpc3QKK0dwb2RkZXJQcm92aWRlcjo6 cGxheWxpc3RBY3Rpb25zKCBjb25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCAmcGxheWxpc3Rz ICkKIHsKLSAgICBERUJVR19CTE9DSwotCiAgICAgUG9kY2FzdENoYW5uZWxMaXN0IGNoYW5uZWxz OwotICAgIFBvZGNhc3RDaGFubmVsUHRyIGNoYW5uZWwgPSBQb2RjYXN0Q2hhbm5lbFB0cjo6ZHlu YW1pY0Nhc3QoIHBsYXlsaXN0ICk7Ci0KLSAgICBpZiggY2hhbm5lbC5pc051bGwoKSApCi0gICAg ICAgIHJldHVybiBRTGlzdDxRQWN0aW9uICo+KCk7CisgICAgZm9yZWFjaCggY29uc3QgUGxheWxp c3RzOjpQbGF5bGlzdFB0ciAmcGxheWxpc3QsIHBsYXlsaXN0cyApCisgICAgeworICAgICAgICBQ b2RjYXN0Q2hhbm5lbFB0ciBjaGFubmVsID0gUG9kY2FzdENoYW5uZWxQdHI6OmR5bmFtaWNDYXN0 KCBwbGF5bGlzdCApOworICAgICAgICBpZiggY2hhbm5lbCApCisgICAgICAgICAgICBjaGFubmVs cyA8PCBjaGFubmVsOworICAgIH0KIAotICAgIHJldHVybiBjaGFubmVsQWN0aW9ucyggY2hhbm5l bHMgPDwgY2hhbm5lbCApOworICAgIHJldHVybiBjaGFubmVsQWN0aW9ucyggY2hhbm5lbHMgKTsK IH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvc3JjL3NlcnZpY2VzL2dwb2RkZXIvR3BvZGRlclByb3Zp ZGVyLmggYi9zcmMvc2VydmljZXMvZ3BvZGRlci9HcG9kZGVyUHJvdmlkZXIuaAppbmRleCBhMjU5 ZDVkLi5mNWRjMjY4IDEwMDY0NAotLS0gYS9zcmMvc2VydmljZXMvZ3BvZGRlci9HcG9kZGVyUHJv dmlkZXIuaAorKysgYi9zcmMvc2VydmljZXMvZ3BvZGRlci9HcG9kZGVyUHJvdmlkZXIuaApAQCAt NzcsOCArNzcsNyBAQCBwdWJsaWM6CiAgICAgLyoqIENvcHkgYSBwbGF5bGlzdCB0byB0aGUgcHJv dmlkZXIuCiAgICAgKi8KICAgICB2aXJ0dWFsIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgYWRkUGxh eWxpc3QoIFBsYXlsaXN0czo6UGxheWxpc3RQdHIgcGxheWxpc3QgKTsKLSAgICBRTGlzdDxRQWN0 aW9uICo+IGNoYW5uZWxBY3Rpb25zKCBQb2RjYXN0Q2hhbm5lbExpc3QgZXBpc29kZXMgKTsKLSAg ICBRTGlzdDxRQWN0aW9uICo+IHBsYXlsaXN0QWN0aW9ucyggUGxheWxpc3RzOjpQbGF5bGlzdFB0 ciBwbGF5bGlzdCApOworICAgIHZpcnR1YWwgUUFjdGlvbkxpc3QgcGxheWxpc3RBY3Rpb25zKCBj b25zdCBQbGF5bGlzdHM6OlBsYXlsaXN0TGlzdCAmcGxheWxpc3RzICk7CiAKIHByaXZhdGUgc2xv dHM6CiAgICAgdm9pZCByZXF1ZXN0RGV2aWNlVXBkYXRlcygpOwpAQCAtMTIwLDYgKzExOSw4IEBA IHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBzbG90RXBpc29kZU1hcmtlZEFzTmV3KCBQb2RjYXN0 czo6UG9kY2FzdEVwaXNvZGVQdHIgZXBpc29kZSApOwogCiBwcml2YXRlOgorICAgIFFBY3Rpb25M aXN0IGNoYW5uZWxBY3Rpb25zKCBQb2RjYXN0Q2hhbm5lbExpc3QgZXBpc29kZXMgKTsKKwogICAg IEFwaVJlcXVlc3QgKm1fYXBpUmVxdWVzdDsKICAgICBjb25zdCBRU3RyaW5nIG1fdXNlcm5hbWU7 CiAgICAgY29uc3QgUVN0cmluZyBtX2RldmljZU5hbWU7CmRpZmYgLS1naXQgYS90ZXN0cy9wbGF5 bGlzdG1hbmFnZXIvZmlsZS9UZXN0UGxheWxpc3RGaWxlUHJvdmlkZXIuY3BwIGIvdGVzdHMvcGxh eWxpc3RtYW5hZ2VyL2ZpbGUvVGVzdFBsYXlsaXN0RmlsZVByb3ZpZGVyLmNwcAppbmRleCAyZDk3 ZWUyLi5kODcyM2E5IDEwMDY0NAotLS0gYS90ZXN0cy9wbGF5bGlzdG1hbmFnZXIvZmlsZS9UZXN0 UGxheWxpc3RGaWxlUHJvdmlkZXIuY3BwCisrKyBiL3Rlc3RzL3BsYXlsaXN0bWFuYWdlci9maWxl L1Rlc3RQbGF5bGlzdEZpbGVQcm92aWRlci5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIFRl c3RQbGF5bGlzdEZpbGVQcm92aWRlcjo6dGVzdFJlbmFtZSgpCiAgICAgdGVtcExpc3QgPSBtX3Rl c3RQbGF5bGlzdEZpbGVQcm92aWRlci0+cGxheWxpc3RzKCk7CiAgICAgUUNPTVBBUkUoIHRlbXBM aXN0LnNpemUoKSwgMSApOwogCi0gICAgbV90ZXN0UGxheWxpc3RGaWxlUHJvdmlkZXItPnJlbmFt ZSggdGVtcExpc3QuYXQoIDAgKSwgIk5ldyBUZXN0IE5hbWUiICk7CisgICAgbV90ZXN0UGxheWxp c3RGaWxlUHJvdmlkZXItPnJlbmFtZVBsYXlsaXN0KCB0ZW1wTGlzdC5hdCggMCApLCAiTmV3IFRl c3QgTmFtZSIgKTsKICAgICB0ZW1wTGlzdCA9IG1fdGVzdFBsYXlsaXN0RmlsZVByb3ZpZGVyLT5w bGF5bGlzdHMoKTsKICAgICBRQ09NUEFSRSggdGVtcExpc3QuYXQoIDAgKS0+bmFtZSgpLCBRU3Ry aW5nKCAiTmV3IFRlc3QgTmFtZS5tM3UiICkgKTsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvcGxheWxp c3RtYW5hZ2VyL3NxbC9UZXN0U3FsVXNlclBsYXlsaXN0UHJvdmlkZXIuY3BwIGIvdGVzdHMvcGxh eWxpc3RtYW5hZ2VyL3NxbC9UZXN0U3FsVXNlclBsYXlsaXN0UHJvdmlkZXIuY3BwCmluZGV4IGIx YTFmOWQuLjgzZWEyYmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BsYXlsaXN0bWFuYWdlci9zcWwvVGVz dFNxbFVzZXJQbGF5bGlzdFByb3ZpZGVyLmNwcAorKysgYi90ZXN0cy9wbGF5bGlzdG1hbmFnZXIv c3FsL1Rlc3RTcWxVc2VyUGxheWxpc3RQcm92aWRlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9p ZCBUZXN0U3FsVXNlclBsYXlsaXN0UHJvdmlkZXI6OnRlc3RTYXZlKCkKIHZvaWQgVGVzdFNxbFVz ZXJQbGF5bGlzdFByb3ZpZGVyOjp0ZXN0UmVuYW1lKCkKIHsKICAgICBQbGF5bGlzdHM6OlBsYXls aXN0TGlzdCB0ZW1wTGlzdCA9IG1fdGVzdFNxbFVzZXJQbGF5bGlzdFByb3ZpZGVyLT5wbGF5bGlz dHMoKTsKLSAgICBtX3Rlc3RTcWxVc2VyUGxheWxpc3RQcm92aWRlci0+cmVuYW1lKCB0ZW1wTGlz dC5hdCggMCApLCAiTmV3IFRlc3QgTmFtZSIgKTsKKyAgICBtX3Rlc3RTcWxVc2VyUGxheWxpc3RQ cm92aWRlci0+cmVuYW1lUGxheWxpc3QoIHRlbXBMaXN0LmF0KCAwICksICJOZXcgVGVzdCBOYW1l IiApOwogICAgIFFDT01QQVJFKCB0ZW1wTGlzdC5hdCggMCApLT5uYW1lKCksIFFTdHJpbmcoICJO ZXcgVGVzdCBOYW1lIiApICk7CiB9CiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KQW1hcm9rLWRldmVsIG1haWxpbmcgbGlzdApBbWFyb2stZGV2ZWxAa2Rl Lm9yZwpodHRwczovL21haWwua2RlLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtYXJvay1kZXZlbAo=