ZGlmZiAtLWdpdCBhL2NtZHMvYXRyYWNlL2F0cmFjZS5jcHAgYi9jbWRzL2F0cmFjZS9hdHJhY2UuY3BwCmluZGV4IDllNWM5MTAuLmEzZDIxMGEgMTAwNjQ0Ci0tLSBhL2NtZHMvYXRyYWNlL2F0cmFjZS5jcHAKKysrIGIvY21kcy9hdHJhY2UvYXRyYWNlLmNwcApAQCAtNzcsNyArNzcsNyBAQAogICAgIHsgIndlYnZpZXciLCAgICAiV2ViVmlldyIsICAgICAgICAgIEFUUkFDRV9UQUdfV0VCVklFVywgeyB9IH0sCiAgICAgeyAid20iLCAgICAgICAgICJXaW5kb3cgTWFuYWdlciIsICAgQVRSQUNFX1RBR19XSU5ET1dfTUFOQUdFUiwgeyB9IH0sCiAgICAgeyAiYW0iLCAgICAgICAgICJBY3Rpdml0eSBNYW5hZ2VyIiwgQVRSQUNFX1RBR19BQ1RJVklUWV9NQU5BR0VSLCB7IH0gfSwKLSAgICB7ICJzeW5jIiwgICAgICAgIlN5bmMgTWFuYWdlciIsICAgICBBVFJBQ0VfVEFHX1NZTkNfTUFOQUdFUiwgeyB9IH0sCisgICAgeyAic20iLCAgICAgICAgICJTeW5jIE1hbmFnZXIiLCAgICAgQVRSQUNFX1RBR19TWU5DX01BTkFHRVIsIHsgfSB9LAogICAgIHsgImF1ZGlvIiwgICAgICAiQXVkaW8iLCAgICAgICAgICAgIEFUUkFDRV9UQUdfQVVESU8sIHsgfSB9LAogICAgIHsgInZpZGVvIiwgICAgICAiVmlkZW8iLCAgICAgICAgICAgIEFUUkFDRV9UQUdfVklERU8sIHsgfSB9LAogICAgIHsgImNhbWVyYSIsICAgICAiQ2FtZXJhIiwgICAgICAgICAgIEFUUkFDRV9UQUdfQ0FNRVJBLCB7IH0gfSwKQEAgLTEwNiwxNCArMTA2LDE0IEBACiAgICAgICAgIHsgUkVRLCAgICAgICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9wb3dlci9jcHVfaWRsZS9lbmFibGUiIH0sCiAgICAgfSB9LAogICAgIHsgImRpc2siLCAgICAgICAiRGlzayBJL08iLCAgICAgICAgIDAsIHsKLSAgICAgICAgeyBSRVEsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2YyZnMvZjJmc19zeW5jX2ZpbGVfZW50ZXIvZW5hYmxlIiB9LAotICAgICAgICB7IFJFUSwgICAgICAiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvZjJmcy9mMmZzX3N5bmNfZmlsZV9leGl0L2VuYWJsZSIgfSwKLSAgICAgICAgeyBSRVEsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2YyZnMvZjJmc193cml0ZV9iZWdpbi9lbmFibGUiIH0sCi0gICAgICAgIHsgUkVRLCAgICAgICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9mMmZzL2YyZnNfd3JpdGVfZW5kL2VuYWJsZSIgfSwKLSAgICAgICAgeyBSRVEsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2V4dDQvZXh0NF9kYV93cml0ZV9iZWdpbi9lbmFibGUiIH0sCi0gICAgICAgIHsgUkVRLCAgICAgICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9leHQ0L2V4dDRfZGFfd3JpdGVfZW5kL2VuYWJsZSIgfSwKLSAgICAgICAgeyBSRVEsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2V4dDQvZXh0NF9zeW5jX2ZpbGVfZW50ZXIvZW5hYmxlIiB9LAotICAgICAgICB7IFJFUSwgICAgICAiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvZXh0NC9leHQ0X3N5bmNfZmlsZV9leGl0L2VuYWJsZSIgfSwKKyAgICAgICAgeyBPUFQsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2YyZnMvZjJmc19zeW5jX2ZpbGVfZW50ZXIvZW5hYmxlIiB9LAorICAgICAgICB7IE9QVCwgICAgICAiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvZjJmcy9mMmZzX3N5bmNfZmlsZV9leGl0L2VuYWJsZSIgfSwKKyAgICAgICAgeyBPUFQsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2YyZnMvZjJmc193cml0ZV9iZWdpbi9lbmFibGUiIH0sCisgICAgICAgIHsgT1BULCAgICAgICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9mMmZzL2YyZnNfd3JpdGVfZW5kL2VuYWJsZSIgfSwKKyAgICAgICAgeyBPUFQsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2V4dDQvZXh0NF9kYV93cml0ZV9iZWdpbi9lbmFibGUiIH0sCisgICAgICAgIHsgT1BULCAgICAgICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9leHQ0L2V4dDRfZGFfd3JpdGVfZW5kL2VuYWJsZSIgfSwKKyAgICAgICAgeyBPUFQsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2V4dDQvZXh0NF9zeW5jX2ZpbGVfZW50ZXIvZW5hYmxlIiB9LAorICAgICAgICB7IE9QVCwgICAgICAiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvZXh0NC9leHQ0X3N5bmNfZmlsZV9leGl0L2VuYWJsZSIgfSwKICAgICAgICAgeyBSRVEsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2Jsb2NrL2Jsb2NrX3JxX2lzc3VlL2VuYWJsZSIgfSwKICAgICAgICAgeyBSRVEsICAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2Jsb2NrL2Jsb2NrX3JxX2NvbXBsZXRlL2VuYWJsZSIgfSwKICAgICB9IH0sCmRpZmYgLS1naXQgYS9jbWRzL2R1bXBzdGF0ZS9kdW1wc3RhdGUuYyBiL2NtZHMvZHVtcHN0YXRlL2R1bXBzdGF0ZS5jCmluZGV4IDFmYmNlZjYuLmRjMWFkYTAgMTAwNjQ0Ci0tLSBhL2NtZHMvZHVtcHN0YXRlL2R1bXBzdGF0ZS5jCisrKyBiL2NtZHMvZHVtcHN0YXRlL2R1bXBzdGF0ZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCisjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNzUsNiArNzYsMjggQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIGR1bXBfZGV2X2ZpbGVzKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpkcml2ZXJwYXRoLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBESVIgKmQ7CisgICAgc3RydWN0IGRpcmVudCAqZGU7CisgICAgY2hhciBwYXRoW1BBVEhfTUFYXTsKKworICAgIGQgPSBvcGVuZGlyKGRyaXZlcnBhdGgpOworICAgIGlmIChkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSkgeworICAgICAgICBpZiAoZGUtPmRfdHlwZSAhPSBEVF9MTkspIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzLyVzIiwgZHJpdmVycGF0aCwgZGUtPmRfbmFtZSwgZmlsZW5hbWUpOworICAgICAgICBkdW1wX2ZpbGUodGl0bGUsIHBhdGgpOworICAgIH0KKworICAgIGNsb3NlZGlyKGQpOworfQorCiAvKiBkdW1wcyB0aGUgY3VycmVudCBzeXN0ZW0gc3RhdGUgdG8gc3Rkb3V0ICovCiBzdGF0aWMgdm9pZCBkdW1wc3RhdGUoKSB7CiAgICAgdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7CkBAIC0xMDcsNyArMTMwLDkgQEAKICAgICBwcmludGYoIkNvbW1hbmQgbGluZTogJXNcbiIsIHN0cnRvayhjbWRsaW5lX2J1ZiwgIlxuIikpOwogICAgIHByaW50ZigiXG4iKTsKIAorICAgIGR1bXBfZGV2X2ZpbGVzKCJUUlVTVFkgVkVSU0lPTiIsICIvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3RydXN0eSIsICJ0cnVzdHlfdmVyc2lvbiIpOwogICAgIHJ1bl9jb21tYW5kKCJVUFRJTUUiLCAxMCwgInVwdGltZSIsIE5VTEwpOworICAgIGR1bXBfZmlsZSgiTU1DIFBFUkYiLCAiL3N5cy9ibG9jay9tbWNibGswL3N0YXQiKTsKICAgICBkdW1wX2ZpbGUoIk1FTU9SWSBJTkZPIiwgIi9wcm9jL21lbWluZm8iKTsKICAgICBydW5fY29tbWFuZCgiQ1BVIElORk8iLCAxMCwgInRvcCIsICItbiIsICIxIiwgIi1kIiwgIjEiLCAiLW0iLCAiMzAiLCAiLXQiLCBOVUxMKTsKICAgICBydW5fY29tbWFuZCgiUFJPQ1JBTksiLCAyMCwgInByb2NyYW5rIiwgTlVMTCk7CkBAIC0yNzAsOSArMjk1LDYgQEAKIAogICAgIHJ1bl9jb21tYW5kKCJGSUxFU1lTVEVNUyAmIEZSRUUgU1BBQ0UiLCAxMCwgImRmIiwgTlVMTCk7CiAKLSAgICBydW5fY29tbWFuZCgiUEFDS0FHRSBTRVRUSU5HUyIsIDIwLCBTVV9QQVRILCAicm9vdCIsICJjYXQiLCAiL2RhdGEvc3lzdGVtL3BhY2thZ2VzLnhtbCIsIE5VTEwpOwotICAgIGR1bXBfZmlsZSgiUEFDS0FHRSBVSUQgRVJST1JTIiwgIi9kYXRhL3N5c3RlbS91aWRlcnJvcnMudHh0Iik7Ci0KICAgICBydW5fY29tbWFuZCgiTEFTVCBSQURJTyBMT0ciLCAxMCwgInBhcnNlX3JhZGlvX2xvZyIsICIvcHJvYy9sYXN0X3JhZGlvX2xvZyIsIE5VTEwpOwogCiAgICAgcHJpbnRmKCItLS0tLS0gQkFDS0xJR0hUUyAtLS0tLS1cbiIpOwpkaWZmIC0tZ2l0IGEvY21kcy9pbnN0YWxsZC9jb21tYW5kcy5jIGIvY21kcy9pbnN0YWxsZC9jb21tYW5kcy5jCmluZGV4IGIxNjE2MTQuLjM0NGE1YTMgMTAwNjQ0Ci0tLSBhL2NtZHMvaW5zdGFsbGQvY29tbWFuZHMuYworKysgYi9jbWRzL2luc3RhbGxkL2NvbW1hbmRzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxjdXRpbHMvc2NoZWRfcG9saWN5Lmg+CiAjaW5jbHVkZSA8ZGlza3VzYWdlL2RpcnNpemUuaD4KICNpbmNsdWRlIDxzZWxpbnV4L2FuZHJvaWQuaD4KKyNpbmNsdWRlIDxzeXN0ZW0vdGhyZWFkX2RlZnMuaD4KIAogLyogRGlyZWN0b3J5IHJlY29yZHMgdGhhdCBhcmUgdXNlZCBpbiBleGVjdXRpb24gb2YgY29tbWFuZHMuICovCiBkaXJfcmVjX3QgYW5kcm9pZF9kYXRhX2RpcjsKQEAgLTEwMjksNiArMTAzMCwxMCBAQAogICAgICAgICAgICAgQUxPR0UoInNldF9zY2hlZF9wb2xpY3kgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgICAgIGV4aXQoNzApOwogICAgICAgICB9CisgICAgICAgIGlmIChzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIDAsIEFORFJPSURfUFJJT1JJVFlfQkFDS0dST1VORCkgPCAwKSB7CisgICAgICAgICAgICBBTE9HRSgic2V0cHJpb3JpdHkgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGV4aXQoNzEpOworICAgICAgICB9CiAgICAgICAgIGlmIChmbG9jayhvdXRfZmQsIExPQ0tfRVggfCBMT0NLX05CKSAhPSAwKSB7CiAgICAgICAgICAgICBBTE9HRSgiZmxvY2soJXMpIGZhaWxlZDogJXNcbiIsIG91dF9wYXRoLCBzdHJlcnJvcihlcnJubykpOwogICAgICAgICAgICAgZXhpdCg2Nyk7CmRpZmYgLS1naXQgYS9kYXRhL2V0Yy9hbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5idXJzdF9jYXB0dXJlLnhtbCBiL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmJ1cnN0X2NhcHR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjc1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRhL2V0Yy9hbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5idXJzdF9jYXB0dXJlLnhtbApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8IS0tIFRoaXMgaXMgdGhlIHNldCBvZiBmZWF0dXJlcyByZXF1aXJlZCBmb3IgYSBjYW1lcmEyIGRldmljZSB0aGF0IHN1cHBvcnRzIHRoZQorICAgICBidXJzdCBjYXB0dXJlIGNhcGFiaWxpdHktLT4KKzxwZXJtaXNzaW9ucz4KKyAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hbnkiIC8+CisgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuY2FwYWJpbGl0eS5idXJzdF9jYXB0dXJlIiAvPgorPC9wZXJtaXNzaW9ucz4KZGlmZiAtLWdpdCBhL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmZ1bGwueG1sIGIvZGF0YS9ldGMvYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuZnVsbC54bWwKaW5kZXggYTA1ZGNiZS4uZGYwMDg1ZSAxMDA2NDQKLS0tIGEvZGF0YS9ldGMvYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuZnVsbC54bWwKKysrIGIvZGF0YS9ldGMvYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuZnVsbC54bWwKQEAgLTIwLDQgKzIwLDYgQEAKICAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5sZXZlbC5mdWxsIiAvPgogICAgIDxmZWF0dXJlIG5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmNhcGFiaWxpdHkubWFudWFsX3NlbnNvciIgLz4KICAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5jYXBhYmlsaXR5Lm1hbnVhbF9wb3N0X3Byb2Nlc3NpbmciIC8+CisgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuY2FwYWJpbGl0eS5idXJzdF9jYXB0dXJlIiAvPgorICAgIDxmZWF0dXJlIG5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmNhcGFiaWxpdHkucmVhZF9zZW5zb3Jfc2V0dGluZ3MiIC8+CiA8L3Blcm1pc3Npb25zPgpkaWZmIC0tZ2l0IGEvZGF0YS9ldGMvYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEubWFudWFsX3Bvc3Rwcm9jZXNzaW5nLnhtbCBiL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLm1hbnVhbF9wb3N0cHJvY2Vzc2luZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3OTZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLm1hbnVhbF9wb3N0cHJvY2Vzc2luZy54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPCEtLSBUaGlzIGlzIHRoZSBzZXQgb2YgZmVhdHVyZXMgcmVxdWlyZWQgZm9yIGEgY2FtZXJhMiBkZXZpY2UgdGhhdCBzdXBwb3J0cyBtYW51YWwgcG9zdHByb2Nlc3NpbmcgY2FwYWJpbGl0eSAtLT4KKzxwZXJtaXNzaW9ucz4KKyAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hbnkiIC8+CisgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuY2FwYWJpbGl0eS5tYW51YWxfcG9zdF9wcm9jZXNzaW5nIiAvPgorPC9wZXJtaXNzaW9ucz4KZGlmZiAtLWdpdCBhL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLm1hbnVhbF9zZW5zb3IueG1sIGIvZGF0YS9ldGMvYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEubWFudWFsX3NlbnNvci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5NTA2NwotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLm1hbnVhbF9zZW5zb3IueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhLS0gVGhpcyBpcyB0aGUgc2V0IG9mIGZlYXR1cmVzIHJlcXVpcmVkIGZvciBhIGNhbWVyYTIgZGV2aWNlIHRoYXQgc3VwcG9ydHMgbWFudWFsIHNlbnNvciBjYXBhYmlsaXR5LS0+Cis8cGVybWlzc2lvbnM+CisgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuYW55IiAvPgorICAgIDxmZWF0dXJlIG5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmNhcGFiaWxpdHkubWFudWFsX3NlbnNvciIgLz4KKyAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5jYXBhYmlsaXR5LnJlYWRfc2Vuc29yX3NldHRpbmdzIiAvPgorPC9wZXJtaXNzaW9ucz4KZGlmZiAtLWdpdCBhL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLnJlYWRfc2Vuc29yX3NldHRpbmdzLnhtbCBiL2RhdGEvZXRjL2FuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLnJlYWRfc2Vuc29yX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAxOGYzCi0tLSAvZGV2L251bGwKKysrIGIvZGF0YS9ldGMvYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEucmVhZF9zZW5zb3Jfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhLS0gVGhpcyBpcyB0aGUgc2V0IG9mIGZlYXR1cmVzIHJlcXVpcmVkIGZvciBhIGNhbWVyYTIgZGV2aWNlIHRoYXQgc3VwcG9ydHMgdGhlCisgICAgIHJlYWQgc2Vuc29yIHNldHRpbmdzIGNhcGFiaWxpdHktLT4KKzxwZXJtaXNzaW9ucz4KKyAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hbnkiIC8+CisgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuY2FwYWJpbGl0eS5yZWFkX3NlbnNvcl9zZXR0aW5ncyIgLz4KKzwvcGVybWlzc2lvbnM+CmRpZmYgLS1naXQgYS9kYXRhL2V0Yy9hbmRyb2lkLnNvZnR3YXJlLnZvaWNlX3JlY29nbml6ZXJzLnhtbCBiL2RhdGEvZXRjL2FuZHJvaWQuc29mdHdhcmUudm9pY2VfcmVjb2duaXplcnMueG1sCmluZGV4IDdlNzIxNzcuLjQzNWVlZDQgMTAwNjQ0Ci0tLSBhL2RhdGEvZXRjL2FuZHJvaWQuc29mdHdhcmUudm9pY2VfcmVjb2duaXplcnMueG1sCisrKyBiL2RhdGEvZXRjL2FuZHJvaWQuc29mdHdhcmUudm9pY2VfcmVjb2duaXplcnMueG1sCkBAIC0xNSw1ICsxNSw1IEBACiAtLT4KIAogPHBlcm1pc3Npb25zPgotICAgIDxmZWF0dXJlIG5hbWU9ImFuZHJvaWQuc29mdHdhcmUudm9pY2VfcmVjb2duaXplcnMiIC8+CisgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5zb2Z0d2FyZS52b2ljZV9yZWNvZ25pemVycyIgbm90TG93UmFtPSJ0cnVlIiAvPgogPC9wZXJtaXNzaW9ucz4KZGlmZiAtLWdpdCBhL2RhdGEvZXRjL2hhbmRoZWxkX2NvcmVfaGFyZHdhcmUueG1sIGIvZGF0YS9ldGMvaGFuZGhlbGRfY29yZV9oYXJkd2FyZS54bWwKaW5kZXggZWFmOTNmZC4uNTBjYmU5ZSAxMDA2NDQKLS0tIGEvZGF0YS9ldGMvaGFuZGhlbGRfY29yZV9oYXJkd2FyZS54bWwKKysrIGIvZGF0YS9ldGMvaGFuZGhlbGRfY29yZV9oYXJkd2FyZS54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8IS0tIGJhc2ljIHN5c3RlbSBzZXJ2aWNlcyAtLT4KICAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLnNvZnR3YXJlLmFwcF93aWRnZXRzIiAvPgogICAgIDxmZWF0dXJlIG5hbWU9ImFuZHJvaWQuc29mdHdhcmUuY29ubmVjdGlvbnNlcnZpY2UiIC8+Ci0gICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5zb2Z0d2FyZS52b2ljZV9yZWNvZ25pemVycyIgLz4KKyAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLnNvZnR3YXJlLnZvaWNlX3JlY29nbml6ZXJzIiBub3RMb3dSYW09InRydWUiIC8+CiAgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5zb2Z0d2FyZS5iYWNrdXAiIC8+CiAgICAgPGZlYXR1cmUgbmFtZT0iYW5kcm9pZC5zb2Z0d2FyZS5ob21lX3NjcmVlbiIgLz4KICAgICA8ZmVhdHVyZSBuYW1lPSJhbmRyb2lkLnNvZnR3YXJlLmlucHV0X21ldGhvZHMiIC8+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2JpbmRlci9QYXJjZWwuaCBiL2luY2x1ZGUvYmluZGVyL1BhcmNlbC5oCmluZGV4IGZlZTgwOTAuLmE1MmUwNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYmluZGVyL1BhcmNlbC5oCisrKyBiL2luY2x1ZGUvYmluZGVyL1BhcmNlbC5oCkBAIC0yMDgsNyArMjA4LDExIEBACiAKICAgICAvLyBFeHBsaWNpdGx5IGNsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSBwYXJjZWwuCiAgICAgdm9pZCAgICAgICAgICAgICAgICBjbG9zZUZpbGVEZXNjcmlwdG9ycygpOwotICAgIAorCisgICAgLy8gRGVidWdnaW5nOiBnZXQgbWV0cmljcyBvbiBjdXJyZW50IGFsbG9jYXRpb25zLgorICAgIHN0YXRpYyBzaXplX3QgICAgICAgZ2V0R2xvYmFsQWxsb2NTaXplKCk7CisgICAgc3RhdGljIHNpemVfdCAgICAgICBnZXRHbG9iYWxBbGxvY0NvdW50KCk7CisKIHByaXZhdGU6CiAgICAgdHlwZWRlZiB2b2lkICAgICAgICAoKnJlbGVhc2VfZnVuYykoUGFyY2VsKiBwYXJjZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ndWkvQnVmZmVySXRlbS5oIGIvaW5jbHVkZS9ndWkvQnVmZmVySXRlbS5oCmluZGV4IDVlZmZkMTAuLjAxYjZmZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3VpL0J1ZmZlckl0ZW0uaAorKysgYi9pbmNsdWRlL2d1aS9CdWZmZXJJdGVtLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBtQnVmLCB1c2VkIHRvIGluZGljYXRlIHRoaXMgZG9lc24ndCBjb3JyZXNwb25kIHRvIGEgc2xvdC4KICAgICBlbnVtIHsgSU5WQUxJRF9CVUZGRVJfU0xPVCA9IC0xIH07CiAgICAgQnVmZmVySXRlbSgpOworICAgIH5CdWZmZXJJdGVtKCk7CiAgICAgb3BlcmF0b3IgSUdyYXBoaWNCdWZmZXJDb25zdW1lcjo6QnVmZmVySXRlbSgpIGNvbnN0OwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNjYWxpbmdNb2RlTmFtZSh1aW50MzJfdCBzY2FsaW5nTW9kZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2d1aS9CdWZmZXJRdWV1ZS5oIGIvaW5jbHVkZS9ndWkvQnVmZmVyUXVldWUuaAppbmRleCAzMjk3YjEwLi4xMTg4ODM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2d1aS9CdWZmZXJRdWV1ZS5oCisrKyBiL2luY2x1ZGUvZ3VpL0J1ZmZlclF1ZXVlLmgKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwdWJsaWM6CiAgICAgICAgIFByb3h5Q29uc3VtZXJMaXN0ZW5lcihjb25zdCB3cDxDb25zdW1lckxpc3RlbmVyPiYgY29uc3VtZXJMaXN0ZW5lcik7CiAgICAgICAgIHZpcnR1YWwgflByb3h5Q29uc3VtZXJMaXN0ZW5lcigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZShjb25zdCBhbmRyb2lkOjpCdWZmZXJJdGVtJiBpdGVtKTsKICAgICAgICAgdmlydHVhbCB2b2lkIG9uQnVmZmVyc1JlbGVhc2VkKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvblNpZGViYW5kU3RyZWFtQ2hhbmdlZCgpOwogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2d1aS9CdWZmZXJRdWV1ZVByb2R1Y2VyLmggYi9pbmNsdWRlL2d1aS9CdWZmZXJRdWV1ZVByb2R1Y2VyLmgKaW5kZXggM2ZjNWRlMi4uZWQxMDU2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ndWkvQnVmZmVyUXVldWVQcm9kdWNlci5oCisrKyBiL2luY2x1ZGUvZ3VpL0J1ZmZlclF1ZXVlUHJvZHVjZXIuaApAQCAtMTk3LDYgKzE5NywyMiBAQAogCiAgICAgdWludDMyX3QgbVN0aWNreVRyYW5zZm9ybTsKIAorICAgIC8vIFRoaXMgc2F2ZXMgdGhlIGZlbmNlIGZyb20gdGhlIGxhc3QgcXVldWVCdWZmZXIsIHN1Y2ggdGhhdCB0aGUKKyAgICAvLyBuZXh0IHF1ZXVlQnVmZmVyIGNhbGwgY2FuIHRocm90dGxlIGJ1ZmZlciBwcm9kdWN0aW9uLiBUaGUgcHJpb3IKKyAgICAvLyBxdWV1ZUJ1ZmZlcidzIGZlbmNlIGlzIG5vdCBuZXNzZXNzYXJpbHkgYXZhaWxhYmxlIGVsc2V3aGVyZSwKKyAgICAvLyBzaW5jZSB0aGUgcHJldmlvdXMgYnVmZmVyIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFjcXVpcmVkLgorICAgIHNwPEZlbmNlPiBtTGFzdFF1ZXVlQnVmZmVyRmVuY2U7CisKKyAgICAvLyBUYWtlLWEtdGlja2V0IHN5c3RlbSBmb3IgZW5zdXJpbmcgdGhhdCBvbkZyYW1lKiBjYWxsYmFja3MgYXJlIGNhbGxlZCBpbgorICAgIC8vIHRoZSBvcmRlciB0aGF0IGZyYW1lcyBhcmUgcXVldWVkLiBXaGlsZSB0aGUgQnVmZmVyUXVldWUgbG9jaworICAgIC8vIChtQ29yZS0+bU11dGV4KSBpcyBoZWxkLCBhIHRpY2tldCBpcyByZXRhaW5lZCBieSB0aGUgcHJvZHVjZXIuIEFmdGVyCisgICAgLy8gZHJvcHBpbmcgdGhlIEJ1ZmZlclF1ZXVlIGxvY2ssIHRoZSBwcm9kdWNlciBtdXN0IHdhaXQgb24gdGhlIGNvbmRpdGlvbgorICAgIC8vIHZhcmlhYmxlIHVudGlsIHRoZSBjdXJyZW50IGNhbGxiYWNrIHRpY2tldCBtYXRjaGVzIGl0cyByZXRhaW5lZCB0aWNrZXQuCisgICAgTXV0ZXggbUNhbGxiYWNrTXV0ZXg7CisgICAgaW50IG1OZXh0Q2FsbGJhY2tUaWNrZXQ7IC8vIFByb3RlY3RlZCBieSBtQ29yZS0+bU11dGV4CisgICAgaW50IG1DdXJyZW50Q2FsbGJhY2tUaWNrZXQ7IC8vIFByb3RlY3RlZCBieSBtQ2FsbGJhY2tNdXRleAorICAgIENvbmRpdGlvbiBtQ2FsbGJhY2tDb25kaXRpb247CisKIH07IC8vIGNsYXNzIEJ1ZmZlclF1ZXVlUHJvZHVjZXIKIAogfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ndWkvQ29uc3VtZXJCYXNlLmggYi9pbmNsdWRlL2d1aS9Db25zdW1lckJhc2UuaAppbmRleCAxMDBiYjI2Li5mN2FiNWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2d1aS9Db25zdW1lckJhc2UuaAorKysgYi9pbmNsdWRlL2d1aS9Db25zdW1lckJhc2UuaApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAvLwogICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrIGhlbGQgYW5kIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5CiAgICAgICAgIC8vIGJ5IG11bHRpcGxlIHRocmVhZHMuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiBpdGVtKSA9IDA7CiAgICAgfTsKIAogICAgIHZpcnR1YWwgfkNvbnN1bWVyQmFzZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgLy8gdGhlIENvbnN1bWVyQmFzZSBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBkZXJpdmVkIGNsYXNzLgogICAgIC8vIFRoZSBDb25zdW1lckJhc2UgdmVyc2lvbiBvZiBvblNpZGViYW5kU3RyZWFtQ2hhbmdlZCBkb2VzIG5vdGhpbmcgYW5kIGNhbgogICAgIC8vIGJlIG92ZXJyaWRlbiBieSBkZXJpdmVkIGNsYXNzZXMgaWYgdGhleSB3YW50IHRoZSBub3RpZmljYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIG9uRnJhbWVBdmFpbGFibGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiBpdGVtKTsKICAgICB2aXJ0dWFsIHZvaWQgb25CdWZmZXJzUmVsZWFzZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgb25TaWRlYmFuZFN0cmVhbUNoYW5nZWQoKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ndWkvSUNvbnN1bWVyTGlzdGVuZXIuaCBiL2luY2x1ZGUvZ3VpL0lDb25zdW1lckxpc3RlbmVyLmgKaW5kZXggMjYwMDk5ZS4uM2YzOTc5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ndWkvSUNvbnN1bWVyTGlzdGVuZXIuaAorKysgYi9pbmNsdWRlL2d1aS9JQ29uc3VtZXJMaXN0ZW5lci5oCkBAIC0yOCw2ICsyOCw4IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2NsYXNzIEJ1ZmZlckl0ZW07CisKIC8vIENvbnN1bWVyTGlzdGVuZXIgaXMgdGhlIGludGVyZmFjZSB0aHJvdWdoIHdoaWNoIHRoZSBCdWZmZXJRdWV1ZSBub3RpZmllcwogLy8gdGhlIGNvbnN1bWVyIG9mIGV2ZW50cyB0aGF0IHRoZSBjb25zdW1lciBtYXkgd2lzaCB0byByZWFjdCB0by4gIEJlY2F1c2UKIC8vIHRoZSBjb25zdW1lciB3aWxsIGdlbmVyYWxseSBoYXZlIGEgbXV0ZXggdGhhdCBpcyBsb2NrZWQgZHVyaW5nIGNhbGxzIGZyb20KQEAgLTQzLDExICs0NSwyNCBAQAogICAgIC8vIGZyYW1lIGJlY29tZXMgYXZhaWxhYmxlIGZvciBjb25zdW1wdGlvbi4gVGhpcyBtZWFucyB0aGF0IGZyYW1lcyB0aGF0CiAgICAgLy8gYXJlIHF1ZXVlZCB3aGlsZSBpbiBhc3luY2hyb25vdXMgbW9kZSBvbmx5IHRyaWdnZXIgdGhlIGNhbGxiYWNrIGlmIG5vCiAgICAgLy8gcHJldmlvdXMgZnJhbWVzIGFyZSBwZW5kaW5nLiBGcmFtZXMgcXVldWVkIHdoaWxlIGluIHN5bmNocm9ub3VzIG1vZGUKLSAgICAvLyBhbHdheXMgdHJpZ2dlciB0aGUgY2FsbGJhY2suCisgICAgLy8gYWx3YXlzIHRyaWdnZXIgdGhlIGNhbGxiYWNrLiBUaGUgaXRlbSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdpbGwgY29udGFpbgorICAgIC8vIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXVlZCBmcmFtZSBleGNlcHQgZm9yIGl0cworICAgIC8vIEdyYXBoaWNCdWZmZXIgcG9pbnRlciwgd2hpY2ggd2lsbCBhbHdheXMgYmUgbnVsbC4KICAgICAvLwogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2sgaGVsZCBhbmQgY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkKICAgICAvLyBieSBtdWx0aXBsZSB0aHJlYWRzLgotICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKCkgPSAwOyAvKiBBc3luY2hyb25vdXMgKi8KKyAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiBpdGVtKSA9IDA7IC8qIEFzeW5jaHJvbm91cyAqLworCisgICAgLy8gb25GcmFtZVJlcGxhY2VkIGlzIGNhbGxlZCBmcm9tIHF1ZXVlQnVmZmVyIGlmIHRoZSBmcmFtZSBiZWluZyBxdWV1ZWQgaXMKKyAgICAvLyByZXBsYWNpbmcgYW4gZXhpc3Rpbmcgc2xvdCBpbiB0aGUgcXVldWUuIEFueSBjYWxsIHRvIHF1ZXVlQnVmZmVyIHRoYXQKKyAgICAvLyBkb2Vzbid0IGNhbGwgb25GcmFtZUF2YWlsYWJsZSB3aWxsIGNhbGwgdGhpcyBjYWxsYmFjayBpbnN0ZWFkLiBUaGUgaXRlbQorICAgIC8vIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgLy8gcXVldWVkIGZyYW1lIGV4Y2VwdCBmb3IgaXRzIEdyYXBoaWNCdWZmZXIgcG9pbnRlciwgd2hpY2ggd2lsbCBhbHdheXMgYmUKKyAgICAvLyBudWxsLgorICAgIC8vCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2l0aG91dCBhbnkgbG9jayBoZWxkIGFuZCBjYW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseQorICAgIC8vIGJ5IG11bHRpcGxlIHRocmVhZHMuCisgICAgdmlydHVhbCB2b2lkIG9uRnJhbWVSZXBsYWNlZChjb25zdCBCdWZmZXJJdGVtJiAvKiBpdGVtICovKSB7fSAvKiBBc3luY2hyb25vdXMgKi8KIAogICAgIC8vIG9uQnVmZmVyc1JlbGVhc2VkIGlzIGNhbGxlZCB0byBub3RpZnkgdGhlIGJ1ZmZlciBjb25zdW1lciB0aGF0IHRoZQogICAgIC8vIEJ1ZmZlclF1ZXVlIGhhcyByZWxlYXNlZCBpdHMgcmVmZXJlbmNlcyB0byBvbmUgb3IgbW9yZSBHcmFwaGljQnVmZmVycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ndWkvU3RyZWFtU3BsaXR0ZXIuaCBiL2luY2x1ZGUvZ3VpL1N0cmVhbVNwbGl0dGVyLmgKaW5kZXggZjkyNzk1My4uOGY0N2ViNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ndWkvU3RyZWFtU3BsaXR0ZXIuaAorKysgYi9pbmNsdWRlL2d1aS9TdHJlYW1TcGxpdHRlci5oCkBAIC03NCw3ICs3NCw3IEBACiAgICAgLy8gY2FuIGJsb2NrIGlmIHRoZXJlIGFyZSB0b28gbWFueSBvdXRzdGFuZGluZyBidWZmZXJzLiBJZiBpdCBibG9ja3MsIGl0CiAgICAgLy8gd2lsbCByZXN1bWUgd2hlbiBvbkJ1ZmZlclJlbGVhc2VkQnlPdXRwdXQgcmVsZWFzZXMgYSBidWZmZXIgYmFjayB0byB0aGUKICAgICAvLyBpbnB1dC4KLSAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIGl0ZW0pOwogCiAgICAgLy8gRnJvbSBJQ29uc3VtZXJMaXN0ZW5lcgogICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgcmVsZWFzZWQgYnVmZmVycyBiZWNhdXNlIHdlIGRldGFjaCBlYWNoIGJ1ZmZlciBhcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kcm0vRHJtQVBJLmggYi9pbmNsdWRlL21lZGlhL2RybS9Ecm1BUEkuaAppbmRleCA0NjMzYjdlLi40OTkzOWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2RybS9Ecm1BUEkuaAorKysgYi9pbmNsdWRlL21lZGlhL2RybS9Ecm1BUEkuaApAQCAtMjA5LDcgKzIwOSw5IEBACiAgICAgICAgIC8vIGNvbmZpcm1lZC4gVGhlIHBlcnNpc3RlZCByZWNvcmQgb24gdGhlIGNsaWVudCBpcyBvbmx5IHJlbW92ZWQgYWZ0ZXIgcG9zaXRpdmUKICAgICAgICAgLy8gY29uZmlybWF0aW9uIHRoYXQgdGhlIHNlcnZlciByZWNlaXZlZCB0aGUgbWVzc2FnZSB1c2luZyByZWxlYXNlU2VjdXJlU3RvcHMoKS4KICAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBnZXRTZWN1cmVTdG9wcyhMaXN0PFZlY3Rvcjx1aW50OF90PiA+ICZzZWN1cmVTdG9wcykgPSAwOworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IGdldFNlY3VyZVN0b3AoVmVjdG9yPHVpbnQ4X3Q+IGNvbnN0ICZzc2lkLCBWZWN0b3I8dWludDhfdD4gJnNlY3VyZVN0b3ApID0gMDsKICAgICAgICAgdmlydHVhbCBzdGF0dXNfdCByZWxlYXNlU2VjdXJlU3RvcHMoVmVjdG9yPHVpbnQ4X3Q+IGNvbnN0ICZzc1JlbGVhc2UpID0gMDsKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCByZWxlYXNlQWxsU2VjdXJlU3RvcHMoKSA9IDA7CiAKICAgICAgICAgLy8gUmVhZCBhIHByb3BlcnR5IHZhbHVlIGdpdmVuIHRoZSBkZXZpY2UgcHJvcGVydHkgc3RyaW5nLiAgVGhlcmUgYXJlIGEgZmV3IGZvcm1zCiAgICAgICAgIC8vIG9mIHByb3BlcnR5IGFjY2VzcyBtZXRob2RzLCBkZXBlbmRpbmcgb24gdGhlIGRhdGEgdHlwZSByZXR1cm5lZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXNTdHJpbmcuaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXNTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjE3N2ExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Bc1N0cmluZy5oCkBAIC0wLDAgKzEsOTQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKiBOT1RFOiBUaGlzIGZpbGUgY29udGFpbnMgc2V2ZXJhbCBzZWN0aW9ucyBmb3IgaW5kaXZpZHVhbCBPTVggaW5jbHVkZSBmaWxlcy4KKyAgIEVhY2ggc2VjdGlvbiBoYXMgaXRzIG93biBpbmNsdWRlIGd1YXJkLiAgVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBBRlRFUgorICAgdGhlIE9NWCBpbmNsdWRlIGZpbGVzLiAqLworCisjaWZkZWYgT01YX0F1ZGlvX2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX0F1ZGlvLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfQVVESU9fSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9BVURJT19ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0NPRElOR1RZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdVbnVzZWQ6ICAgICByZXR1cm4gIlVudXNlZCI7ICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0F1dG9EZXRlY3Q6IHJldHVybiAiQXV0b0RldGVjdCI7ICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUENNOiAgICAgICAgcmV0dXJuICJQQ00iOworICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdBRFBDTTogICAgICByZXR1cm4gIkFEUENNIjsgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0FNUjogICAgICAgIHJldHVybiAiQU1SIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nR1NNRlI6ICAgICAgcmV0dXJuICJHU01GUiI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0dTTUVGUjogICAgIHJldHVybiAiR1NNRUZSIjsgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nR1NNSFI6ICAgICAgcmV0dXJuICJHU01IUiI7ICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdQRENGUjogICAgICByZXR1cm4gIlBEQ0ZSIjsgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ1BEQ0VGUjogICAgIHJldHVybiAiUERDRUZSIjsgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUERDSFI6ICAgICAgcmV0dXJuICJQRENIUiI7ICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdURE1BRlI6ICAgICByZXR1cm4gIlRETUFGUiI7ICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ1RETUFFRlI6ICAgIHJldHVybiAiVERNQUVGUiI7ICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUUNFTFA4OiAgICAgcmV0dXJuICJRQ0VMUDgiOyAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdRQ0VMUDEzOiAgICByZXR1cm4gIlFDRUxQMTMiOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0VWUkM6ICAgICAgIHJldHVybiAiRVZSQyI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nU01WOiAgICAgICAgcmV0dXJuICJTTVYiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdHNzExOiAgICAgICByZXR1cm4gIkc3MTEiOworICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdHNzIzOiAgICAgICByZXR1cm4gIkc3MjMiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0c3MjY6ICAgICAgIHJldHVybiAiRzcyNiI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nRzcyOTogICAgICAgcmV0dXJuICJHNzI5IjsgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdBQUM6ICAgICAgICByZXR1cm4gIkFBQyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ01QMzogICAgICAgIHJldHVybiAiTVAzIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nU0JDOiAgICAgICAgcmV0dXJuICJTQkMiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdWT1JCSVM6ICAgICByZXR1cm4gIlZPUkJJUyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ1dNQTogICAgICAgIHJldHVybiAiV01BIjsgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nUkE6ICAgICAgICAgcmV0dXJuICJSQSI7ICAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9BVURJT19Db2RpbmdNSURJOiAgICAgICByZXR1cm4gIk1JREkiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0ZMQUM6ICAgICAgIHJldHVybiAiRkxBQyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19QQ01NT0RFVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0FVRElPX1BDTU1vZGVMaW5lYXI6IHJldHVybiAiTGluZWFyIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fUENNTW9kZUFMYXc6ICAgcmV0dXJuICJBTGF3IjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fUENNTW9kZU1VTGF3OiAgcmV0dXJuICJNVUxhdyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19DSEFOTkVMVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxOb25lOiByZXR1cm4gIk5vbmUiOyAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxMRjogICByZXR1cm4gIkxGIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbFJGOiAgIHJldHVybiAiUkYiOworICAgICAgICBjYXNlIE9NWF9BVURJT19DaGFubmVsQ0Y6ICAgcmV0dXJuICJDRiI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxMUzogICByZXR1cm4gIkxTIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbFJTOiAgIHJldHVybiAiUlMiOworICAgICAgICBjYXNlIE9NWF9BVURJT19DaGFubmVsTEZFOiAgcmV0dXJuICJMRkUiOworICAgICAgICBjYXNlIE9NWF9BVURJT19DaGFubmVsQ1M6ICAgcmV0dXJuICJDUyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxMUjogICByZXR1cm4gIkxSIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbFJSOiAgIHJldHVybiAiUlIiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0NIQU5ORUxNT0RFVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxNb2RlU3RlcmVvOiAgICAgIHJldHVybiAiU3RlcmVvIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQ2hhbm5lbE1vZGVKb2ludFN0ZXJlbzogcmV0dXJuICJKb2ludFN0ZXJlbyI7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxNb2RlRHVhbDogICAgICAgIHJldHVybiAiRHVhbCI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NoYW5uZWxNb2RlTW9ubzogICAgICAgIHJldHVybiAiTW9ubyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19BQUNTVFJFQU1GT1JNQVRUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVAyQURUUzogcmV0dXJuICJNUDJBRFRTIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0QURUUzogcmV0dXJuICJNUDRBRFRTIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0TE9BUzogcmV0dXJuICJNUDRMT0FTIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0TEFUTTogcmV0dXJuICJNUDRMQVRNIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0QURJRjogICAgcmV0dXJuICJBRElGIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0RkY6ICAgcmV0dXJuICJNUDRGRiI7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdFJBVzogICAgIHJldHVybiAiUkFXIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0Q29uZm9ybWFuY2U6IHJldHVybiAiQ29uZm9ybWFuY2UiOworLy8gICAgICBjYXNlIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdElGMTogICAgICAgICByZXR1cm4gIklGMSI7CisvLyAgICAgIGNhc2UgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SUYyOiAgICAgICAgIHJldHVybiAiSUYyIjsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRGU0Y6ICAgICAgICAgcmV0dXJuICJGU0YiOworLy8gICAgICBjYXNlIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdFJUUFBheWxvYWQ6ICByZXR1cm4gIlJUUFBheWxvYWQiOworLy8gICAgICBjYXNlIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdElUVTogICAgICAgICByZXR1cm4gIklUVSI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19BTVJCQU5ETU9ERVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVVudXNlZDogcmV0dXJuICJVbnVzZWQiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMDogICAgcmV0dXJuICJOQjAiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMTogICAgcmV0dXJuICJOQjEiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMjogICAgcmV0dXJuICJOQjIiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMzogICAgcmV0dXJuICJOQjMiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNDogICAgcmV0dXJuICJOQjQiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNTogICAgcmV0dXJuICJOQjUiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNjogICAgcmV0dXJuICJOQjYiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNzogICAgcmV0dXJuICJOQjciOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMDogICAgcmV0dXJuICJXQjAiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMTogICAgcmV0dXJuICJXQjEiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMjogICAgcmV0dXJuICJXQjIiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMzogICAgcmV0dXJuICJXQjMiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNDogICAgcmV0dXJuICJXQjQiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNTogICAgcmV0dXJuICJXQjUiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNjogICAgcmV0dXJuICJXQjYiOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNzogICAgcmV0dXJuICJXQjciOworICAgICAgICBjYXNlIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCODogICAgcmV0dXJuICJXQjgiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0FVRElPX0FNUkRUWE1PREVUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9mZjogICAgcmV0dXJuICJNb2RlT2ZmIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9uVkFEMTogcmV0dXJuICJNb2RlT25WQUQxIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9uVkFEMjogcmV0dXJuICJNb2RlT25WQUQyIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYTW9kZU9uQXV0bzogcmV0dXJuICJNb2RlT25BdXRvIjsKKy8vICAgICAgY2FzZSBPTVhfQVVESU9fQU1SRFRYYXNFRlI6ICAgICAgcmV0dXJuICJhc0VGUiI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCisjZW5kaWYgLy8gQVNfU1RSSU5HX0ZPUl9PTVhfQVVESU9fSAorCisjZW5kaWYgLy8gT01YX0F1ZGlvX2gKKworI2lmZGVmIE9NWF9BdWRpb0V4dF9oCisvKiBhc1N0cmluZyBkZWZpbml0aW9ucyBpZiBtZWRpYS9vcGVubWF4L09NWF9BdWRpb0V4dC5oIHdhcyBpbmNsdWRlZCAqLworCisjaWZuZGVmIEFTX1NUUklOR19GT1JfT01YX0FVRElPRVhUX0gKKyNkZWZpbmUgQVNfU1RSSU5HX0ZPUl9PTVhfQVVESU9FWFRfSAorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9BVURJT19DT0RJTkdFWFRUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfQVVESU9fQ29kaW5nQW5kcm9pZEFDMzogIHJldHVybiAiQW5kcm9pZEFDMyI7CisgICAgICAgIGNhc2UgT01YX0FVRElPX0NvZGluZ0FuZHJvaWRPUFVTOiByZXR1cm4gIkFuZHJvaWRPUFVTIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZygoT01YX0FVRElPX0NPRElOR1RZUEUpaSwgZGVmKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9BVURJT0VYVF9ICisKKyNlbmRpZiAvLyBPTVhfQXVkaW9FeHRfaAorCisjaWZkZWYgT01YX0NvbXBvbmVudF9oCisvKiBhc1N0cmluZyBkZWZpbml0aW9ucyBpZiBtZWRpYS9vcGVubWF4L09NWF9Db21wb25lbnQuaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9DT01QT05FTlRfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9DT01QT05FTlRfSAorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9QT1JURE9NQUlOVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1BvcnREb21haW5BdWRpbzogcmV0dXJuICJBdWRpbyI7CisgICAgICAgIGNhc2UgT01YX1BvcnREb21haW5WaWRlbzogcmV0dXJuICJWaWRlbyI7CisgICAgICAgIGNhc2UgT01YX1BvcnREb21haW5JbWFnZTogcmV0dXJuICJJbWFnZSI7CisvLyAgICAgIGNhc2UgT01YX1BvcnREb21haW5PdGhlcjogcmV0dXJuICJPdGhlciI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9DT01QT05FTlRfSAorCisjZW5kaWYgLy8gT01YX0NvbXBvbmVudF9oCisKKyNpZmRlZiBPTVhfQ29yZV9oCisvKiBhc1N0cmluZyBkZWZpbml0aW9ucyBpZiBtZWRpYS9vcGVubWF4L09NWF9Db3JlLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfQ09SRV9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX0NPUkVfSAorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9DT01NQU5EVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRTdGF0ZVNldDogICAgcmV0dXJuICJTdGF0ZVNldCI7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRGbHVzaDogICAgICAgcmV0dXJuICJGbHVzaCI7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRQb3J0RGlzYWJsZTogcmV0dXJuICJQb3J0RGlzYWJsZSI7CisgICAgICAgIGNhc2UgT01YX0NvbW1hbmRQb3J0RW5hYmxlOiAgcmV0dXJuICJQb3J0RW5hYmxlIjsKKy8vICAgICAgY2FzZSBPTVhfQ29tbWFuZE1hcmtCdWZmZXI6ICByZXR1cm4gIk1hcmtCdWZmZXIiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9TVEFURVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9TdGF0ZUludmFsaWQ6ICAgICAgICAgIHJldHVybiAiSW52YWxpZCI7CisgICAgICAgIGNhc2UgT01YX1N0YXRlTG9hZGVkOiAgICAgICAgICAgcmV0dXJuICJMb2FkZWQiOworICAgICAgICBjYXNlIE9NWF9TdGF0ZUlkbGU6ICAgICAgICAgICAgIHJldHVybiAiSWRsZSI7CisgICAgICAgIGNhc2UgT01YX1N0YXRlRXhlY3V0aW5nOiAgICAgICAgcmV0dXJuICJFeGVjdXRpbmciOworLy8gICAgICBjYXNlIE9NWF9TdGF0ZVBhdXNlOiAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOworLy8gICAgICBjYXNlIE9NWF9TdGF0ZVdhaXRGb3JSZXNvdXJjZXM6IHJldHVybiAiV2FpdEZvclJlc291cmNlcyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0VSUk9SVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0Vycm9yTm9uZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJOb25lIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JJbnN1ZmZpY2llbnRSZXNvdXJjZXM6ICAgICAgICAgICAgICByZXR1cm4gIkluc3VmZmljaWVudFJlc291cmNlcyI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yVW5kZWZpbmVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJVbmRlZmluZWQiOworICAgICAgICBjYXNlIE9NWF9FcnJvckludmFsaWRDb21wb25lbnROYW1lOiAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZENvbXBvbmVudE5hbWUiOworICAgICAgICBjYXNlIE9NWF9FcnJvckNvbXBvbmVudE5vdEZvdW5kOiAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29tcG9uZW50Tm90Rm91bmQiOworICAgICAgICBjYXNlIE9NWF9FcnJvckludmFsaWRDb21wb25lbnQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZENvbXBvbmVudCI7ICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckJhZFBhcmFtZXRlcjogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQmFkUGFyYW1ldGVyIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JOb3RJbXBsZW1lbnRlZDogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk5vdEltcGxlbWVudGVkIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JVbmRlcmZsb3c6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlVuZGVyZmxvdyI7ICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JPdmVyZmxvdzogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk92ZXJmbG93IjsgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JIYXJkd2FyZTogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkhhcmR3YXJlIjsgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JJbnZhbGlkU3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkludmFsaWRTdGF0ZSI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yU3RyZWFtQ29ycnVwdDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJTdHJlYW1Db3JydXB0IjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JQb3J0c05vdENvbXBhdGlibGU6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBvcnRzTm90Q29tcGF0aWJsZSI7ICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JSZXNvdXJjZXNMb3N0OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlJlc291cmNlc0xvc3QiOworICAgICAgICBjYXNlIE9NWF9FcnJvck5vTW9yZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiTm9Nb3JlIjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JWZXJzaW9uTWlzbWF0Y2g6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlZlcnNpb25NaXNtYXRjaCI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JOb3RSZWFkeTogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk5vdFJlYWR5IjsgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JUaW1lb3V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlRpbWVvdXQiOyAgICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JTYW1lU3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlNhbWVTdGF0ZSI7ICAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JSZXNvdXJjZXNQcmVlbXB0ZWQ6ICAgICAgICAgICAgICAgICByZXR1cm4gIlJlc291cmNlc1ByZWVtcHRlZCI7ICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JQb3J0VW5yZXNwb25zaXZlRHVyaW5nQWxsb2NhdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiUG9ydFVucmVzcG9uc2l2ZUR1cmluZ0FsbG9jYXRpb24iOyAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JQb3J0VW5yZXNwb25zaXZlRHVyaW5nRGVhbGxvY2F0aW9uOgorICAgICAgICAgICAgcmV0dXJuICJQb3J0VW5yZXNwb25zaXZlRHVyaW5nRGVhbGxvY2F0aW9uIjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvclBvcnRVbnJlc3BvbnNpdmVEdXJpbmdTdG9wOgorICAgICAgICAgICAgcmV0dXJuICJQb3J0VW5yZXNwb25zaXZlRHVyaW5nU3RvcCI7ICAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckluY29ycmVjdFN0YXRlVHJhbnNpdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiSW5jb3JyZWN0U3RhdGVUcmFuc2l0aW9uIjsgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JJbmNvcnJlY3RTdGF0ZU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiSW5jb3JyZWN0U3RhdGVPcGVyYXRpb24iOyAgICAgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JVbnN1cHBvcnRlZFNldHRpbmc6ICAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3VwcG9ydGVkU2V0dGluZyI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yVW5zdXBwb3J0ZWRJbmRleDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJVbnN1cHBvcnRlZEluZGV4IjsKKyAgICAgICAgY2FzZSBPTVhfRXJyb3JCYWRQb3J0SW5kZXg6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkJhZFBvcnRJbmRleCI7CisgICAgICAgIGNhc2UgT01YX0Vycm9yUG9ydFVucG9wdWxhdGVkOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQb3J0VW5wb3B1bGF0ZWQiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yQ29tcG9uZW50U3VzcGVuZGVkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJDb21wb25lbnRTdXNwZW5kZWQiOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yRHluYW1pY1Jlc291cmNlc1VuYXZhaWxhYmxlOgorICAgICAgICAgICAgcmV0dXJuICJEeW5hbWljUmVzb3VyY2VzVW5hdmFpbGFibGUiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvck1iRXJyb3JzSW5GcmFtZTogICAgICAgICAgICAgICAgICAgIHJldHVybiAiTWJFcnJvcnNJbkZyYW1lIjsgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckZvcm1hdE5vdERldGVjdGVkOiAgICAgICAgICAgICAgICAgIHJldHVybiAiRm9ybWF0Tm90RGV0ZWN0ZWQiOyAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckNvbnRlbnRQaXBlT3BlbkZhaWxlZDogICAgICAgICAgICAgIHJldHVybiAiQ29udGVudFBpcGVPcGVuRmFpbGVkIjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9FcnJvckNvbnRlbnRQaXBlQ3JlYXRpb25GYWlsZWQ6CisgICAgICAgICAgICByZXR1cm4gIkNvbnRlbnRQaXBlQ3JlYXRpb25GYWlsZWQiOyAgICAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yU2VwZXJhdGVUYWJsZXNVc2VkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJTZXBlcmF0ZVRhYmxlc1VzZWQiOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0Vycm9yVHVubmVsaW5nVW5zdXBwb3J0ZWQ6ICAgICAgICAgICAgICAgcmV0dXJuICJUdW5uZWxpbmdVbnN1cHBvcnRlZCI7ICAgLy8gdW51c2VkCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0VWRU5UVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0V2ZW50Q21kQ29tcGxldGU6ICAgICAgICAgICAgICAgcmV0dXJuICJDbWRDb21wbGV0ZSI7CisgICAgICAgIGNhc2UgT01YX0V2ZW50RXJyb3I6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJFcnJvciI7CisvLyAgICAgIGNhc2UgT01YX0V2ZW50TWFyazogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJNYXJrIjsKKyAgICAgICAgY2FzZSBPTVhfRXZlbnRQb3J0U2V0dGluZ3NDaGFuZ2VkOiAgICAgICByZXR1cm4gIlBvcnRTZXR0aW5nc0NoYW5nZWQiOworICAgICAgICBjYXNlIE9NWF9FdmVudEJ1ZmZlckZsYWc6ICAgICAgICAgICAgICAgIHJldHVybiAiQnVmZmVyRmxhZyI7CisvLyAgICAgIGNhc2UgT01YX0V2ZW50UmVzb3VyY2VzQWNxdWlyZWQ6ICAgICAgICAgcmV0dXJuICJSZXNvdXJjZXNBY3F1aXJlZCI7CisvLyAgICAgIGNhc2UgT01YX0V2ZW50Q29tcG9uZW50UmVzdW1lZDogICAgICAgICAgcmV0dXJuICJDb21wb25lbnRSZXN1bWVkIjsKKy8vICAgICAgY2FzZSBPTVhfRXZlbnREeW5hbWljUmVzb3VyY2VzQXZhaWxhYmxlOiByZXR1cm4gIkR5bmFtaWNSZXNvdXJjZXNBdmFpbGFibGUiOworLy8gICAgICBjYXNlIE9NWF9FdmVudFBvcnRGb3JtYXREZXRlY3RlZDogICAgICAgIHJldHVybiAiUG9ydEZvcm1hdERldGVjdGVkIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX0NPUkVfSAorCisjZW5kaWYgLy8gT01YX0NvcmVfaAorCisjaWZkZWYgT01YX0ltYWdlX2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX0ltYWdlLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfSU1BR0VfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9JTUFHRV9ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0lNQUdFX0NPRElOR1RZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9JTUFHRV9Db2RpbmdVbnVzZWQ6ICAgICByZXR1cm4gIlVudXNlZCI7CisgICAgICAgIGNhc2UgT01YX0lNQUdFX0NvZGluZ0F1dG9EZXRlY3Q6IHJldHVybiAiQXV0b0RldGVjdCI7ICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nSlBFRzogICAgICAgcmV0dXJuICJKUEVHIjsKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nSlBFRzJLOiAgICAgcmV0dXJuICJKUEVHMksiOyAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9JTUFHRV9Db2RpbmdFWElGOiAgICAgICByZXR1cm4gIkVYSUYiOyAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0lNQUdFX0NvZGluZ1RJRkY6ICAgICAgIHJldHVybiAiVElGRiI7ICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nR0lGOiAgICAgICAgcmV0dXJuICJHSUYiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9JTUFHRV9Db2RpbmdQTkc6ICAgICAgICByZXR1cm4gIlBORyI7ICAgICAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX0lNQUdFX0NvZGluZ0xaVzogICAgICAgIHJldHVybiAiTFpXIjsgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfSU1BR0VfQ29kaW5nQk1QOiAgICAgICAgcmV0dXJuICJCTVAiOyAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX0lNQUdFX0gKKworI2VuZGlmIC8vIE9NWF9JbWFnZV9oCisKKyNpZmRlZiBPTVhfSW5kZXhfaAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfSW5kZXguaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9JTkRFWF9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX0lOREVYX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfSU5ERVhUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVByaW9yaXR5TWdtdDogICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1Qcmlvcml0eU1nbXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9Jbml0OiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvSW5pdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1JbWFnZUluaXQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtSW1hZ2VJbml0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvSW5pdDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0luaXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtT3RoZXJJbml0OiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbU90aGVySW5pdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1OdW1BdmFpbGFibGVTdHJlYW1zOiAgICAgICAgICAgICByZXR1cm4gIlBhcmFtTnVtQXZhaWxhYmxlU3RyZWFtcyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BY3RpdmVTdHJlYW06ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQWN0aXZlU3RyZWFtIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVN1c3BlbnNpb25Qb2xpY3k6ICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1TdXNwZW5zaW9uUG9saWN5IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUNvbXBvbmVudFN1c3BlbmRlZDogICAgICAgICAgICAgIHJldHVybiAiUGFyYW1Db21wb25lbnRTdXNwZW5kZWQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NhcHR1cmluZzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDYXB0dXJpbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NhcHR1cmVNb2RlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDYXB0dXJlTW9kZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4QXV0b1BhdXNlQWZ0ZXJDYXB0dXJlOiAgICAgICAgICAgICAgICByZXR1cm4gIkF1dG9QYXVzZUFmdGVyQ2FwdHVyZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db250ZW50VVJJOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29udGVudFVSSSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1DdXN0b21Db250ZW50UGlwZTogICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ3VzdG9tQ29udGVudFBpcGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtRGlzYWJsZVJlc291cmNlQ29uY2VhbG1lbnQ6CisvLyAgICAgICAgICByZXR1cm4gIlBhcmFtRGlzYWJsZVJlc291cmNlQ29uY2VhbG1lbnQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ01ldGFkYXRhSXRlbUNvdW50OiAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdNZXRhZGF0YUl0ZW1Db3VudCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29udGFpbmVyTm9kZUNvdW50OiAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbnRhaW5lck5vZGVDb3VudCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnTWV0YWRhdGFJdGVtOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ01ldGFkYXRhSXRlbSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ291bnRlck5vZGVJRDogICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvdW50ZXJOb2RlSUQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtTWV0YWRhdGFGaWx0ZXJUeXBlOiAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbU1ldGFkYXRhRmlsdGVyVHlwZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1NZXRhZGF0YUtleUZpbHRlcjogICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtTWV0YWRhdGFLZXlGaWx0ZXIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1ByaW9yaXR5TWdtdDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdQcmlvcml0eU1nbXQiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtU3RhbmRhcmRDb21wb25lbnRSb2xlOiAgICAgICAgICAgcmV0dXJuICJQYXJhbVN0YW5kYXJkQ29tcG9uZW50Um9sZSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Qb3J0RGVmaW5pdGlvbjogICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtUG9ydERlZmluaXRpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQ29tcEJ1ZmZlclN1cHBsaWVyOiAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUNvbXBCdWZmZXJTdXBwbGllciI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1BvcnRGb3JtYXQ6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9Qb3J0Rm9ybWF0IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUGNtOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1BjbSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0FhYzogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9BYWMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9SYTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvUmEiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9NcDM6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvTXAzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvQWRwY206ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0FkcGNtIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvRzcyMzogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0c3MjMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9HNzI5OiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvRzcyOSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0FtcjogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9BbXIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9XbWE6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvV21hIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvU2JjOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1NiYyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb01pZGk6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9NaWRpIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvR3NtX0ZSOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0dzbV9GUiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb01pZGlMb2FkVXNlclNvdW5kOiAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9NaWRpTG9hZFVzZXJTb3VuZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0c3MjY6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9HNzI2IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvR3NtX0VGUjogICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0dzbV9FRlIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9Hc21fSFI6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvR3NtX0hSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUGRjX0ZSOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1BkY19GUiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1BkY19FRlI6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9QZGNfRUZSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUGRjX0hSOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1BkY19IUiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1RkbWFfRlI6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9UZG1hX0ZSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvVGRtYV9FRlI6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1RkbWFfRUZSIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvUWNlbHA4OiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1FjZWxwOCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb1FjZWxwMTM6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9RY2VscDEzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvRXZyYzogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb0V2cmMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9TbXY6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvU212IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvVm9yYmlzOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1BdWRpb1ZvcmJpcyI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1BdWRpb0ZsYWM6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9GbGFjIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlJbW1lZGlhdGVFdmVudDogICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpSW1tZWRpYXRlRXZlbnQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvTWlkaUNvbnRyb2w6ICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb01pZGlDb250cm9sIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlTb3VuZEJhbmtQcm9ncmFtOgorLy8gICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb01pZGlTb3VuZEJhbmtQcm9ncmFtIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlTdGF0dXM6ICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpU3RhdHVzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlNZXRhRXZlbnQ6ICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpTWV0YUV2ZW50IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb01pZGlNZXRhRXZlbnREYXRhOiAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9NaWRpTWV0YUV2ZW50RGF0YSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9Wb2x1bWU6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvVm9sdW1lIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb0JhbGFuY2U6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9CYWxhbmNlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb0NoYW5uZWxNdXRlOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9DaGFubmVsTXV0ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9NdXRlOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvTXV0ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9Mb3VkbmVzczogICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvTG91ZG5lc3MiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvRWNob0NhbmNlbGF0aW9uOiAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb0VjaG9DYW5jZWxhdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9Ob2lzZVJlZHVjdGlvbjogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvTm9pc2VSZWR1Y3Rpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvQmFzczogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb0Jhc3MiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvVHJlYmxlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb1RyZWJsZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9TdGVyZW9XaWRlbmluZzogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvU3RlcmVvV2lkZW5pbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0F1ZGlvQ2hvcnVzOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdBdWRpb0Nob3J1cyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQXVkaW9FcXVhbGl6ZXI6ICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0F1ZGlvRXF1YWxpemVyIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb1JldmVyYmVyYXRpb246ICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9SZXZlcmJlcmF0aW9uIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdWRpb0NoYW5uZWxWb2x1bWU6ICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQXVkaW9DaGFubmVsVm9sdW1lIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUltYWdlUG9ydEZvcm1hdDogICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1JbWFnZVBvcnRGb3JtYXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtRmxhc2hDb250cm9sOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUZsYXNoQ29udHJvbCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnRm9jdXNDb250cm9sOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0ZvY3VzQ29udHJvbCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1RRmFjdG9yOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtUUZhY3RvciI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1RdWFudGl6YXRpb25UYWJsZTogICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtUXVhbnRpemF0aW9uVGFibGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtSHVmZm1hblRhYmxlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbUh1ZmZtYW5UYWJsZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnRmxhc2hDb250cm9sOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0ZsYXNoQ29udHJvbCI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb1BvcnRGb3JtYXQ6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9Qb3J0Rm9ybWF0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvUXVhbnRpemF0aW9uOiAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb1F1YW50aXphdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0Zhc3RVcGRhdGU6ICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9GYXN0VXBkYXRlIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvQml0cmF0ZTogICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0JpdHJhdGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9Nb3Rpb25WZWN0b3I6ICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTW90aW9uVmVjdG9yIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvSW50cmFSZWZyZXNoOiAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0ludHJhUmVmcmVzaCI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0Vycm9yQ29ycmVjdGlvbjogICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9FcnJvckNvcnJlY3Rpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9WQlNNQzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvVkJTTUMiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9NcGVnMjogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTXBlZzIiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9NcGVnNDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTXBlZzQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9XbXY6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvV212IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvUnY6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb1J2IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvQXZjOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb0F2YyI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0gyNjM6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9IMjYzIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvUHJvZmlsZUxldmVsUXVlcnlTdXBwb3J0ZWQ6CisgICAgICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxRdWVyeVN1cHBvcnRlZCI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb1Byb2ZpbGVMZXZlbEN1cnJlbnQ6ICAgICAgICByZXR1cm4gIlBhcmFtVmlkZW9Qcm9maWxlTGV2ZWxDdXJyZW50IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb0JpdHJhdGU6ICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVmlkZW9CaXRyYXRlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb0ZyYW1lcmF0ZTogICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVmlkZW9GcmFtZXJhdGUiOworICAgICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1ZpZGVvSW50cmFWT1BSZWZyZXNoOiAgICAgICAgICAgcmV0dXJuICJDb25maWdWaWRlb0ludHJhVk9QUmVmcmVzaCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVmlkZW9JbnRyYU1CUmVmcmVzaDogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1ZpZGVvSW50cmFNQlJlZnJlc2giOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1ZpZGVvTUJFcnJvclJlcG9ydGluZzogICAgICAgICAgcmV0dXJuICJDb25maWdWaWRlb01CRXJyb3JSZXBvcnRpbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtVmlkZW9NYWNyb2Jsb2Nrc1BlckZyYW1lOiAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvTWFjcm9ibG9ja3NQZXJGcmFtZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVmlkZW9NYWNyb0Jsb2NrRXJyb3JNYXA6ICAgICAgICByZXR1cm4gIkNvbmZpZ1ZpZGVvTWFjcm9CbG9ja0Vycm9yTWFwIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvU2xpY2VGTU86ICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1WaWRlb1NsaWNlRk1PIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb0FWQ0ludHJhUGVyaW9kOiAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVmlkZW9BVkNJbnRyYVBlcmlvZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVmlkZW9OYWxTaXplOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1ZpZGVvTmFsU2l6ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db21tb25EZWJsb2NraW5nOiAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29tbW9uRGVibG9ja2luZyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db21tb25TZW5zb3JNb2RlOiAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29tbW9uU2Vuc29yTW9kZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1Db21tb25JbnRlcmxlYXZlOiAgICAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQ29tbW9uSW50ZXJsZWF2ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29sb3JGb3JtYXRDb252ZXJzaW9uOgorLy8gICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25Db2xvckZvcm1hdENvbnZlcnNpb24iOworICAgICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vblNjYWxlOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25TY2FsZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uSW1hZ2VGaWx0ZXI6ICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkltYWdlRmlsdGVyIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25Db2xvckVuaGFuY2VtZW50OiAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uQ29sb3JFbmhhbmNlbWVudCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29sb3JLZXk6ICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkNvbG9yS2V5IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25Db2xvckJsZW5kOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uQ29sb3JCbGVuZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uRnJhbWVTdGFiaWxpc2F0aW9uOiAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkZyYW1lU3RhYmlsaXNhdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uUm90YXRlOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vblJvdGF0ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uTWlycm9yOiAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbk1pcnJvciI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uT3V0cHV0UG9zaXRpb246ICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbk91dHB1dFBvc2l0aW9uIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25JbnB1dENyb3A6ICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uSW5wdXRDcm9wIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25PdXRwdXRDcm9wOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uT3V0cHV0Q3JvcCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uRGlnaXRhbFpvb206ICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkRpZ2l0YWxab29tIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25PcHRpY2FsWm9vbTogICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uT3B0aWNhbFpvb20iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbldoaXRlQmFsYW5jZTogICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25XaGl0ZUJhbGFuY2UiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbkV4cG9zdXJlOiAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25FeHBvc3VyZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQ29udHJhc3Q6ICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkNvbnRyYXN0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25CcmlnaHRuZXNzOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uQnJpZ2h0bmVzcyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uQmFja2xpZ2h0OiAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkJhY2tsaWdodCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uR2FtbWE6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkdhbW1hIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25TYXR1cmF0aW9uOiAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uU2F0dXJhdGlvbiI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uTGlnaHRuZXNzOiAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkxpZ2h0bmVzcyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uRXhjbHVzaW9uUmVjdDogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbkV4Y2x1c2lvblJlY3QiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbkRpdGhlcmluZzogICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25EaXRoZXJpbmciOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vblBsYW5lQmxlbmQ6ICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25QbGFuZUJsZW5kIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25FeHBvc3VyZVZhbHVlOiAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uRXhwb3N1cmVWYWx1ZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uT3V0cHV0U2l6ZTogICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vbk91dHB1dFNpemUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQ29tbW9uRXh0cmFRdWFudERhdGE6ICAgICAgICAgICAgcmV0dXJuICJQYXJhbUNvbW1vbkV4dHJhUXVhbnREYXRhIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21tb25Gb2N1c1JlZ2lvbjogICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ29tbW9uRm9jdXNSZWdpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ0NvbW1vbkZvY3VzU3RhdHVzOiAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21tb25Gb2N1c1N0YXR1cyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ29tbW9uVHJhbnNpdGlvbkVmZmVjdDogICAgICAgICByZXR1cm4gIkNvbmZpZ0NvbW1vblRyYW5zaXRpb25FZmZlY3QiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtT3RoZXJQb3J0Rm9ybWF0OiAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbU90aGVyUG9ydEZvcm1hdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnT3RoZXJQb3dlcjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbmZpZ090aGVyUG93ZXIiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ090aGVyU3RhdHM6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdPdGhlclN0YXRzIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdUaW1lU2NhbGU6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVGltZVNjYWxlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdUaW1lQ2xvY2tTdGF0ZTogICAgICAgICAgICAgICAgIHJldHVybiAiQ29uZmlnVGltZUNsb2NrU3RhdGUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVBY3RpdmVSZWZDbG9jazogICAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lQWN0aXZlUmVmQ2xvY2siOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50TWVkaWFUaW1lOiAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lQ3VycmVudE1lZGlhVGltZSI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRXYWxsVGltZTogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDdXJyZW50V2FsbFRpbWUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2U6CisvLyAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2UiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2U6CisvLyAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2UiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVNZWRpYVRpbWVSZXF1ZXN0OiAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lTWVkaWFUaW1lUmVxdWVzdCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnVGltZUNsaWVudFN0YXJ0VGltZTogICAgICAgICAgICByZXR1cm4gIkNvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWUiOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVQb3NpdGlvbjogICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lUG9zaXRpb24iOworLy8gICAgICBjYXNlIE9NWF9JbmRleENvbmZpZ1RpbWVTZWVrTW9kZTogICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdUaW1lU2Vla01vZGUiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9JTkRFWF9ICisKKyNlbmRpZiAvLyBPTVhfSW5kZXhfaAorCisjaWZkZWYgT01YX0luZGV4RXh0X2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX0luZGV4RXh0Lmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfSU5ERVhFWFRfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9JTkRFWEVYVF9ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0lOREVYRVhUVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisvLyAgICAgIGNhc2UgT01YX0luZGV4Q29uZmlnQ2FsbGJhY2tSZXF1ZXN0OiAgICAgICAgICAgIHJldHVybiAiQ29uZmlnQ2FsbGJhY2tSZXF1ZXN0IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21taXRNb2RlOiAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21taXRNb2RlIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdDb21taXQ6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb25maWdDb21taXQiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9BbmRyb2lkQWMzOiAgICAgICAgICAgICByZXR1cm4gIlBhcmFtQXVkaW9BbmRyb2lkQWMzIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbUF1ZGlvQW5kcm9pZE9wdXM6ICAgICAgICAgICAgcmV0dXJuICJQYXJhbUF1ZGlvQW5kcm9pZE9wdXMiOworICAgICAgICBjYXNlIE9NWF9JbmRleFBhcmFtQXVkaW9BbmRyb2lkQWFjUHJlc2VudGF0aW9uOiByZXR1cm4gIlBhcmFtQXVkaW9BbmRyb2lkQWFjUHJlc2VudGF0aW9uIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbU5hbFN0cmVhbUZvcm1hdFN1cHBvcnRlZDogICAgcmV0dXJuICJQYXJhbU5hbFN0cmVhbUZvcm1hdFN1cHBvcnRlZCI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1OYWxTdHJlYW1Gb3JtYXQ6ICAgICAgICAgICAgIHJldHVybiAiUGFyYW1OYWxTdHJlYW1Gb3JtYXQiOworLy8gICAgICBjYXNlIE9NWF9JbmRleFBhcmFtTmFsU3RyZWFtRm9ybWF0U2VsZWN0OiAgICAgICByZXR1cm4gIlBhcmFtTmFsU3RyZWFtRm9ybWF0U2VsZWN0IjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvVnA4OiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvVnA4IjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lOiAgICAgcmV0dXJuICJDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lIjsKKy8vICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lVHlwZTogcmV0dXJuICJDb25maWdWaWRlb1ZwOFJlZmVyZW5jZUZyYW1lVHlwZSI7CisgICAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1WaWRlb0FuZHJvaWRWcDhFbmNvZGVyOiAgICAgIHJldHVybiAiUGFyYW1WaWRlb0FuZHJvaWRWcDhFbmNvZGVyIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhQYXJhbVZpZGVvSGV2YzogICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXJhbVZpZGVvSGV2YyI7CisvLyAgICAgIGNhc2UgT01YX0luZGV4UGFyYW1TbGljZVNlZ21lbnRzOiAgICAgICAgICAgICAgIHJldHVybiAiUGFyYW1TbGljZVNlZ21lbnRzIjsKKyAgICAgICAgY2FzZSBPTVhfSW5kZXhDb25maWdBdXRvRnJhbWVyYXRlQ29udmVyc2lvbjogICAgcmV0dXJuICJDb25maWdBdXRvRnJhbWVyYXRlQ29udmVyc2lvbiI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZygoT01YX0lOREVYVFlQRSlpLCBkZWYpOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX0lOREVYRVhUX0gKKworI2VuZGlmIC8vIE9NWF9JbmRleEV4dF9oCisKKyNpZmRlZiBPTVhfSVZDb21tb25faAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfSVZDb21tb24uaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9JVkNPTU1PTl9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX0lWQ09NTU9OX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfQ09MT1JfRk9STUFUVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFVudXNlZDoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0VW51c2VkIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TW9ub2Nocm9tZToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0TW9ub2Nocm9tZSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDhiaXRSR0IzMzI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDhiaXRSR0IzMzIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxMmJpdFJHQjQ0NDoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MTJiaXRSR0I0NDQiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxNmJpdEFSR0I0NDQ0OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxNmJpdEFSR0I0NDQ0IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MTZiaXRBUkdCMTU1NToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MTZiaXRBUkdCMTU1NSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE2Yml0UkdCNTY1OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxNmJpdFJHQjU2NSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE2Yml0QkdSNTY1OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxNmJpdEJHUjU2NSI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE4Yml0UkdCNjY2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxOGJpdFJHQjY2NiI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDE4Yml0QVJHQjE2NjU6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDE4Yml0QVJHQjE2NjUiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxOWJpdEFSR0IxNjY2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQxOWJpdEFSR0IxNjY2IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRiaXRSR0I4ODg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDI0Yml0UkdCODg4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRiaXRCR1I4ODg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDI0Yml0QkdSODg4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRiaXRBUkdCMTg4NzoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MjRiaXRBUkdCMTg4NyI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdDI1Yml0QVJHQjE4ODg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdDI1Yml0QVJHQjE4ODgiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQzMmJpdEJHUkE4ODg4OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQzMmJpdEJHUkE4ODg4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MzJiaXRBUkdCODg4ODoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MzJiaXRBUkdCODg4OCI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQxMVBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDExUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDExUGFja2VkUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZVVY0MTFQYWNrZWRQbGFuYXIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMlBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIyUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIyUGFja2VkUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZVVY0MjJQYWNrZWRQbGFuYXIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjJTZW1pUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZVVY0MjJTZW1pUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WUNiWUNyOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRZQ2JZQ3IiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZQ3JZQ2I6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFlDcllDYiI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdENiWUNyWToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0Q2JZQ3JZIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0Q3JZQ2JZOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRDcllDYlkiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0NDRJbnRlcmxlYXZlZDoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDQ0SW50ZXJsZWF2ZWQiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRSYXdCYXllcjhiaXQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFJhd0JheWVyOGJpdCI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFJhd0JheWVyMTBiaXQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFJhd0JheWVyMTBiaXQiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRSYXdCYXllcjhiaXRjb21wcmVzc2VkOgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRSYXdCYXllcjhiaXRjb21wcmVzc2VkIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEwyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEw0IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDg6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEw4IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0TDE2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXRMMTYiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRMMjQ6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEwyNCI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdEwzMjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0TDMyIjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hcjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwUGFja2VkU2VtaVBsYW5hciI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdFlVVjQyMlBhY2tlZFNlbWlQbGFuYXI6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdFlVVjQyMlBhY2tlZFNlbWlQbGFuYXIiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQxOEJpdEJHUjY2NjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MThCaXRCR1I2NjYiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXQyNEJpdEFSR0I2NjY2OgorICAgICAgICAgICAgcmV0dXJuICJDT0xPUl9Gb3JtYXQyNEJpdEFSR0I2NjY2IjsKKyAgICAgICAgY2FzZSBPTVhfQ09MT1JfRm9ybWF0MjRCaXRBQkdSNjY2NjoKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0MjRCaXRBQkdSNjY2NiI7CisgICAgICAgIGNhc2UgT01YX0NPTE9SX0Zvcm1hdEFuZHJvaWRPcGFxdWU6CisgICAgICAgICAgICByZXR1cm4gIkNPTE9SX0Zvcm1hdEFuZHJvaWRPcGFxdWUiOworICAgICAgICBjYXNlIE9NWF9DT0xPUl9Gb3JtYXRZVVY0MjBGbGV4aWJsZToKKyAgICAgICAgICAgIHJldHVybiAiQ09MT1JfRm9ybWF0WVVWNDIwRmxleGlibGUiOworICAgICAgICBjYXNlIE9NWF9USV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJUSV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyIjsKKyAgICAgICAgY2FzZSBPTVhfUUNPTV9DT0xPUl9Gb3JtYXRZVlU0MjBTZW1pUGxhbmFyOgorICAgICAgICAgICAgcmV0dXJuICJRQ09NX0NPTE9SX0Zvcm1hdFlWVTQyMFNlbWlQbGFuYXIiOworLy8gICAgICBjYXNlIE9NWF9RQ09NX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYToKKy8vICAgICAgICAgIHJldHVybiAiUUNPTV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyNjR4MzJUaWxlMm04a2EiOworLy8gICAgICBjYXNlIE9NWF9TRUNfQ09MT1JfRm9ybWF0TlYxMlRpbGVkOgorLy8gICAgICAgICAgcmV0dXJuICJTRUNfQ09MT1JfRm9ybWF0TlYxMlRpbGVkIjsKKy8vICAgICAgY2FzZSBPTVhfUUNPTV9DT0xPUl9Gb3JtYXRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtOgorLy8gICAgICAgICAgcmV0dXJuICJRQ09NX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0iOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBBU19TVFJJTkdfRk9SX09NWF9JVkNPTU1PTl9ICisKKyNlbmRpZiAvLyBPTVhfSVZDb21tb25faAorCisjaWZkZWYgT01YX1R5cGVzX2gKKy8qIGFzU3RyaW5nIGRlZmluaXRpb25zIGlmIG1lZGlhL29wZW5tYXgvT01YX1R5cGVzLmggd2FzIGluY2x1ZGVkICovCisKKyNpZm5kZWYgQVNfU1RSSU5HX0ZPUl9PTVhfVFlQRVNfSAorI2RlZmluZSBBU19TVFJJTkdfRk9SX09NWF9UWVBFU19ICisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0JPT0wgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9GQUxTRTogcmV0dXJuICJGQUxTRSI7CisgICAgICAgIGNhc2UgT01YX1RSVUU6ICByZXR1cm4gIlRSVUUiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX0RJUlRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9EaXJJbnB1dDogIHJldHVybiAiSW5wdXQiOworICAgICAgICBjYXNlIE9NWF9EaXJPdXRwdXQ6IHJldHVybiAiT3V0cHV0IjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfRU5ESUFOVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX0VuZGlhbkJpZzogICAgcmV0dXJuICJCaWciOworLy8gICAgICBjYXNlIE9NWF9FbmRpYW5MaXR0bGU6IHJldHVybiAiTGl0dGxlIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfTlVNRVJJQ0FMREFUQVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9OdW1lcmljYWxEYXRhU2lnbmVkOiAgIHJldHVybiAiU2lnbmVkIjsKKy8vICAgICAgY2FzZSBPTVhfTnVtZXJpY2FsRGF0YVVuc2lnbmVkOiByZXR1cm4gIlVuc2lnbmVkIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX1RZUEVTX0gKKworI2VuZGlmIC8vIE9NWF9UeXBlc19oCisKKyNpZmRlZiBPTVhfVmlkZW9faAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfVmlkZW8uaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9WSURFT19ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX1ZJREVPX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fQ09ESU5HVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ1VudXNlZDogICAgIHJldHVybiAiVW51c2VkIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nQXV0b0RldGVjdDogcmV0dXJuICJBdXRvRGV0ZWN0IjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9WSURFT19Db2RpbmdNUEVHMjogICAgICByZXR1cm4gIk1QRUcyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nSDI2MzogICAgICAgcmV0dXJuICJIMjYzIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nTVBFRzQ6ICAgICAgcmV0dXJuICJNUEVHNCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ1dNVjogICAgICAgIHJldHVybiAiV01WIjsgICAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nUlY6ICAgICAgICAgcmV0dXJuICJSViI7ICAgICAgICAgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9WSURFT19Db2RpbmdBVkM6ICAgICAgICByZXR1cm4gIkFWQyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ01KUEVHOiAgICAgIHJldHVybiAiTUpQRUciOyAgICAgICAvLyB1bnVzZWQKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQ29kaW5nVlA4OiAgICAgICAgcmV0dXJuICJWUDgiOworICAgICAgICBjYXNlIE9NWF9WSURFT19Db2RpbmdWUDk6ICAgICAgICByZXR1cm4gIlZQOSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0NvZGluZ0hFVkM6ICAgICAgIHJldHVybiAiSEVWQyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworLy8gICAgICBjYXNlIE9NWF9WaWRlb19Db250cm9sUmF0ZURpc2FibGU6ICAgICAgICAgICAgcmV0dXJuICJEaXNhYmxlIjsKKyAgICAgICAgY2FzZSBPTVhfVmlkZW9fQ29udHJvbFJhdGVWYXJpYWJsZTogICAgICAgICAgIHJldHVybiAiVmFyaWFibGUiOworICAgICAgICBjYXNlIE9NWF9WaWRlb19Db250cm9sUmF0ZUNvbnN0YW50OiAgICAgICAgICAgcmV0dXJuICJDb25zdGFudCI7CisvLyAgICAgIGNhc2UgT01YX1ZpZGVvX0NvbnRyb2xSYXRlVmFyaWFibGVTa2lwRnJhbWVzOiByZXR1cm4gIlZhcmlhYmxlU2tpcEZyYW1lcyI7CisvLyAgICAgIGNhc2UgT01YX1ZpZGVvX0NvbnRyb2xSYXRlQ29uc3RhbnRTa2lwRnJhbWVzOiByZXR1cm4gIkNvbnN0YW50U2tpcEZyYW1lcyI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fSU5UUkFSRUZSRVNIVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiPz8iKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0ludHJhUmVmcmVzaEN5Y2xpYzogICByZXR1cm4gIkN5Y2xpYyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0ludHJhUmVmcmVzaEFkYXB0aXZlOiByZXR1cm4gIkFkYXB0aXZlIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSW50cmFSZWZyZXNoQm90aDogICAgIHJldHVybiAiQm90aCI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fSDI2M1BST0ZJTEVUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVCYXNlbGluZTogICAgICAgICAgIHJldHVybiAiQmFzZWxpbmUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzUHJvZmlsZUgzMjBDb2Rpbmc6ICAgICAgICAgcmV0dXJuICJIMzIwQ29kaW5nIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVCYWNrd2FyZENvbXBhdGlibGU6IHJldHVybiAiQmFja3dhcmRDb21wYXRpYmxlIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVJU1dWMjogICAgICAgICAgICAgIHJldHVybiAiSVNXVjIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzUHJvZmlsZUlTV1YzOiAgICAgICAgICAgICAgcmV0dXJuICJJU1dWMyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNQcm9maWxlSGlnaENvbXByZXNzaW9uOiAgICByZXR1cm4gIkhpZ2hDb21wcmVzc2lvbiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNQcm9maWxlSW50ZXJuZXQ6ICAgICAgICAgICByZXR1cm4gIkludGVybmV0IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcmxhY2U6ICAgICAgICAgIHJldHVybiAiSW50ZXJsYWNlIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M1Byb2ZpbGVIaWdoTGF0ZW5jeTogICAgICAgIHJldHVybiAiSGlnaExhdGVuY3kiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX0gyNjNMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzTGV2ZWwxMDogcmV0dXJuICJMZXZlbDEwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M0xldmVsMjA6IHJldHVybiAiTGV2ZWwyMCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNMZXZlbDMwOiByZXR1cm4gIkxldmVsMzAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzTGV2ZWw0MDogcmV0dXJuICJMZXZlbDQwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M0xldmVsNDU6IHJldHVybiAiTGV2ZWw0NSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0gyNjNMZXZlbDUwOiByZXR1cm4gIkxldmVsNTAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IMjYzTGV2ZWw2MDogcmV0dXJuICJMZXZlbDYwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSDI2M0xldmVsNzA6IHJldHVybiAiTGV2ZWw3MCI7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fUElDVFVSRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZUk6ICByZXR1cm4gIkkiOworICAgICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZVA6ICByZXR1cm4gIlAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZUI6ICByZXR1cm4gIkIiOworLy8gICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZVNJOiByZXR1cm4gIlNJIjsKKy8vICAgICAgY2FzZSBPTVhfVklERU9fUGljdHVyZVR5cGVTUDogcmV0dXJuICJTUCI7CisvLyAgICAgIGNhc2UgT01YX1ZJREVPX1BpY3R1cmVUeXBlRUk6IHJldHVybiAiRUkiOworLy8gICAgICBjYXNlIE9NWF9WSURFT19QaWN0dXJlVHlwZUVQOiByZXR1cm4gIkVQIjsKKy8vICAgICAgY2FzZSBPTVhfVklERU9fUGljdHVyZVR5cGVTOiAgcmV0dXJuICJTIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX01QRUc0UFJPRklMRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGU6ICAgICAgICAgICByZXR1cm4gIlNpbXBsZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZVNjYWxhYmxlOiAgIHJldHVybiAiU2ltcGxlU2NhbGFibGUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVDb3JlOiAgICAgICAgICAgICByZXR1cm4gIkNvcmUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVNYWluOiAgICAgICAgICAgICByZXR1cm4gIk1haW4iOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVOYml0OiAgICAgICAgICAgICByZXR1cm4gIk5iaXQiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTY2FsYWJsZVRleHR1cmU6ICByZXR1cm4gIlNjYWxhYmxlVGV4dHVyZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZhY2U6ICAgICAgIHJldHVybiAiU2ltcGxlRmFjZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZCQTogICAgICAgIHJldHVybiAiU2ltcGxlRkJBIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRQcm9maWxlQmFzaWNBbmltYXRlZDogICAgcmV0dXJuICJCYXNpY0FuaW1hdGVkIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRQcm9maWxlSHlicmlkOiAgICAgICAgICAgcmV0dXJuICJIeWJyaWQiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZFJlYWxUaW1lOiByZXR1cm4gIkFkdmFuY2VkUmVhbFRpbWUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVDb3JlU2NhbGFibGU6ICAgICByZXR1cm4gIkNvcmVTY2FsYWJsZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkQ29kaW5nOiAgIHJldHVybiAiQWR2YW5jZWRDb2RpbmciOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZENvcmU6ICAgICByZXR1cm4gIkFkdmFuY2VkQ29yZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkU2NhbGFibGU6IHJldHVybiAiQWR2YW5jZWRTY2FsYWJsZSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkU2ltcGxlOiAgIHJldHVybiAiQWR2YW5jZWRTaW1wbGUiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fTVBFRzRMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsMDogIHJldHVybiAiTGV2ZWwwIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRMZXZlbDBiOiByZXR1cm4gIkxldmVsMGIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsMTogIHJldHVybiAiTGV2ZWwxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRMZXZlbDI6ICByZXR1cm4gIkxldmVsMiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX01QRUc0TGV2ZWwzOiAgcmV0dXJuICJMZXZlbDMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsNDogIHJldHVybiAiTGV2ZWw0IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fTVBFRzRMZXZlbDRhOiByZXR1cm4gIkxldmVsNGEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19NUEVHNExldmVsNTogIHJldHVybiAiTGV2ZWw1IjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fQVZDUFJPRklMRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNQcm9maWxlQmFzZWxpbmU6IHJldHVybiAiQmFzZWxpbmUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNQcm9maWxlTWFpbjogICAgIHJldHVybiAiTWFpbiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ1Byb2ZpbGVFeHRlbmRlZDogcmV0dXJuICJFeHRlbmRlZCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoOiAgICAgcmV0dXJuICJIaWdoIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2gxMDogICByZXR1cm4gIkhpZ2gxMCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoNDIyOiAgcmV0dXJuICJIaWdoNDIyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2g0NDQ6ICByZXR1cm4gIkhpZ2g0NDQiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19BVkNMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIj8/IikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDE6ICByZXR1cm4gIkxldmVsMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMWI6IHJldHVybiAiTGV2ZWwxYiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMTE6IHJldHVybiAiTGV2ZWwxMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMTI6IHJldHVybiAiTGV2ZWwxMiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMTM6IHJldHVybiAiTGV2ZWwxMyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsMjogIHJldHVybiAiTGV2ZWwyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWwyMTogcmV0dXJuICJMZXZlbDIxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWwyMjogcmV0dXJuICJMZXZlbDIyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWwzOiAgcmV0dXJuICJMZXZlbDMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDMxOiByZXR1cm4gIkxldmVsMzEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDMyOiByZXR1cm4gIkxldmVsMzIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19BVkNMZXZlbDQ6ICByZXR1cm4gIkxldmVsNCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsNDE6IHJldHVybiAiTGV2ZWw0MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsNDI6IHJldHVybiAiTGV2ZWw0MiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xldmVsNTogIHJldHVybiAiTGV2ZWw1IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWw1MTogcmV0dXJuICJMZXZlbDUxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTGV2ZWw1MjogcmV0dXJuICJMZXZlbDUyIjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX0FWQ0xPT1BGSUxURVJUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fQVZDTG9vcEZpbHRlckVuYWJsZTogICAgICAgICAgICAgICByZXR1cm4gIkVuYWJsZSI7CisvLyAgICAgIGNhc2UgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJEaXNhYmxlOiAgICAgICAgICAgICAgcmV0dXJuICJEaXNhYmxlIjsKKy8vICAgICAgY2FzZSBPTVhfVklERU9fQVZDTG9vcEZpbHRlckRpc2FibGVTbGljZUJvdW5kYXJ5OiByZXR1cm4gIkRpc2FibGVTbGljZUJvdW5kYXJ5IjsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX1ZJREVPX0gKKworI2VuZGlmIC8vIE9NWF9WaWRlb19oCisKKyNpZmRlZiBPTVhfVmlkZW9FeHRfaAorLyogYXNTdHJpbmcgZGVmaW5pdGlvbnMgaWYgbWVkaWEvb3Blbm1heC9PTVhfVmlkZW9FeHQuaCB3YXMgaW5jbHVkZWQgKi8KKworI2lmbmRlZiBBU19TVFJJTkdfRk9SX09NWF9WSURFT0VYVF9ICisjZGVmaW5lIEFTX1NUUklOR19GT1JfT01YX1ZJREVPRVhUX0gKKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZyhPTVhfVklERU9fVlA4UFJPRklMRVRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIiEhIikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhQcm9maWxlTWFpbjogICAgcmV0dXJuICJNYWluIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fVlA4UHJvZmlsZVVua25vd246IHJldHVybiAiVW5rbm93biI7ICAvLyB1bnVzZWQKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19WUDhMRVZFTFRZUEUgaSwgY29uc3QgY2hhciAqZGVmID0gIiEhIikgeworICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMDogcmV0dXJuICJfVmVyc2lvbjAiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMTogcmV0dXJuICJfVmVyc2lvbjEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMjogcmV0dXJuICJfVmVyc2lvbjIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbF9WZXJzaW9uMzogcmV0dXJuICJfVmVyc2lvbjMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19WUDhMZXZlbFVua25vd246ICAgcmV0dXJuICJVbmtub3duIjsgICAgLy8gdW51c2VkCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBjaGFyICphc1N0cmluZygKKyAgICAgICAgT01YX1ZJREVPX0FORFJPSURfVlBYVEVNUE9SQUxMQVlFUlBBVFRFUk5UWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICI/PyIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fVlBYVGVtcG9yYWxMYXllclBhdHRlcm5Ob25lOiAgIHJldHVybiAiVlBYVGVtcG9yYWxMYXllclBhdHRlcm5Ob25lIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fVlBYVGVtcG9yYWxMYXllclBhdHRlcm5XZWJSVEM6IHJldHVybiAiVlBYVGVtcG9yYWxMYXllclBhdHRlcm5XZWJSVEMiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgY2hhciAqYXNTdHJpbmcoT01YX1ZJREVPX0hFVkNQUk9GSUxFVFlQRSBpLCBjb25zdCBjaGFyICpkZWYgPSAiISEiKSB7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNQcm9maWxlVW5rbm93bjogcmV0dXJuICJVbmtub3duIjsgIC8vIHVudXNlZAorICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDUHJvZmlsZU1haW46ICAgIHJldHVybiAiTWFpbiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNQcm9maWxlTWFpbjEwOiAgcmV0dXJuICJNYWluMTAiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IGNoYXIgKmFzU3RyaW5nKE9NWF9WSURFT19IRVZDTEVWRUxUWVBFIGksIGNvbnN0IGNoYXIgKmRlZiA9ICIhISIpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ0xldmVsVW5rbm93bjogICAgcmV0dXJuICJMZXZlbFVua25vd24iOyAgICAgLy8gdW51c2VkCisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNNYWluVGllckxldmVsMTogIHJldHVybiAiTWFpblRpZXJMZXZlbDEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDE6ICByZXR1cm4gIkhpZ2hUaWVyTGV2ZWwxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWwyOiAgcmV0dXJuICJNYWluVGllckxldmVsMiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMjogIHJldHVybiAiSGlnaFRpZXJMZXZlbDIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDIxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWwyMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMjE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDIxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWwzOiAgcmV0dXJuICJNYWluVGllckxldmVsMyI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMzogIHJldHVybiAiSGlnaFRpZXJMZXZlbDMiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDMxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWwzMSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsMzE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDMxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw0OiAgcmV0dXJuICJNYWluVGllckxldmVsNCI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNDogIHJldHVybiAiSGlnaFRpZXJMZXZlbDQiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDQxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWw0MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNDE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDQxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw1OiAgcmV0dXJuICJNYWluVGllckxldmVsNSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNTogIHJldHVybiAiSGlnaFRpZXJMZXZlbDUiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDTWFpblRpZXJMZXZlbDUxOiByZXR1cm4gIk1haW5UaWVyTGV2ZWw1MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNIaWdoVGllckxldmVsNTE6IHJldHVybiAiSGlnaFRpZXJMZXZlbDUxIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw1MjogcmV0dXJuICJNYWluVGllckxldmVsNTIiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDUyOiByZXR1cm4gIkhpZ2hUaWVyTGV2ZWw1MiI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNNYWluVGllckxldmVsNjogIHJldHVybiAiTWFpblRpZXJMZXZlbDYiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDY6ICByZXR1cm4gIkhpZ2hUaWVyTGV2ZWw2IjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ01haW5UaWVyTGV2ZWw2MTogcmV0dXJuICJNYWluVGllckxldmVsNjEiOworICAgICAgICBjYXNlIE9NWF9WSURFT19IRVZDSGlnaFRpZXJMZXZlbDYxOiByZXR1cm4gIkhpZ2hUaWVyTGV2ZWw2MSI7CisgICAgICAgIGNhc2UgT01YX1ZJREVPX0hFVkNNYWluVGllckxldmVsNjI6IHJldHVybiAiTWFpblRpZXJMZXZlbDYyIjsKKyAgICAgICAgY2FzZSBPTVhfVklERU9fSEVWQ0hpZ2hUaWVyTGV2ZWw2MjogcmV0dXJuICJIaWdoVGllckxldmVsNjIiOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KK30KKworI2VuZGlmIC8vIEFTX1NUUklOR19GT1JfT01YX1ZJREVPRVhUX0gKKworI2VuZGlmIC8vIE9NWF9WaWRlb0V4dF9oCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0F1ZGlvLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0F1ZGlvLmgKaW5kZXggZjRjYjY0My4uYTBjYmQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9BdWRpby5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQXVkaW8uaApAQCAtMTYsMjUgKzE2LDI1IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKLSAqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKLSAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAotICogCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgogICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKgogICovCiAKQEAgLTUwLDEwICs1MCw5IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwogCi0KIC8qIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKICAqICBoZWFkZXIgdG8gY29tcGlsZSB3aXRob3V0IGVycm9ycy4gIFRoZSBpbmNsdWRlcyBiZWxvdyBhcmUgcmVxdWlyZWQKLSAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseSAKKyAqICBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseQogICovCiAKICNpbmNsdWRlIDxPTVhfQ29yZS5oPgpAQCAtNjEsNyArNjAsNyBAQAogLyoqIEBkZWZncm91cCBtaWRpIE1JREkKICAqIEBpbmdyb3VwIGF1ZGlvCiAgKi8KLSAKKwogLyoqIEBkZWZncm91cCBlZmZlY3RzIEF1ZGlvIGVmZmVjdHMKICAqIEBpbmdyb3VwIGF1ZGlvCiAgKi8KQEAgLTcxLDEwICs3MCwxMCBAQAogICogQHsKICAqLwogCi0vKiogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIGF1ZGlvIGNvZGluZ3MuICAKLSAqICBJZiAiT01YX0FVRElPX0NvZGluZ1VudXNlZCIgaXMgc2VsZWN0ZWQsIHRoZSBjb2Rpbmcgc2VsZWN0aW9uIG11c3QgCi0gKiAgYmUgZG9uZSBpbiBhIHZlbmRvciBzcGVjaWZpYyB3YXkuICBTaW5jZSB0aGlzIGlzIGZvciBhbiBhdWRpbyAKLSAqICBwcm9jZXNzaW5nIGVsZW1lbnQgdGhpcyBlbnVtIGlzIHJlbGV2YW50LiAgSG93ZXZlciwgZm9yIGFub3RoZXIgCisvKiogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIGF1ZGlvIGNvZGluZ3MuCisgKiAgSWYgIk9NWF9BVURJT19Db2RpbmdVbnVzZWQiIGlzIHNlbGVjdGVkLCB0aGUgY29kaW5nIHNlbGVjdGlvbiBtdXN0CisgKiAgYmUgZG9uZSBpbiBhIHZlbmRvciBzcGVjaWZpYyB3YXkuICBTaW5jZSB0aGlzIGlzIGZvciBhbiBhdWRpbworICogIHByb2Nlc3NpbmcgZWxlbWVudCB0aGlzIGVudW0gaXMgcmVsZXZhbnQuICBIb3dldmVyLCBmb3IgYW5vdGhlcgogICogIHR5cGUgb2YgY29tcG9uZW50IG90aGVyIGVudW1zIHdvdWxkIGJlIGluIHRoaXMgYXJlYS4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19DT0RJTkdUWVBFIHsKQEAgLTEwNywxNCArMTA2LDE0IEBACiAgICAgT01YX0FVRElPX0NvZGluZ1JBLCAgICAgICAgICAvKio8IEFueSB2YXJpYW50IG9mIFJBIGVuY29kZWQgZGF0YSAqLwogICAgIE9NWF9BVURJT19Db2RpbmdNSURJLCAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBNSURJIGVuY29kZWQgZGF0YSAqLwogICAgIE9NWF9BVURJT19Db2RpbmdGTEFDLCAgICAgICAgLyoqPCBBbnkgdmFyaWFudCBvZiBGTEFDIGVuY29kZWQgZGF0YSAqLwotICAgIE9NWF9BVURJT19Db2RpbmdLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0NvZGluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19Db2RpbmdWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19Db2RpbmdNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19DT0RJTkdUWVBFOwogCiAKLS8qKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKLSAqICBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dCBhdWRpbyAKKy8qKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycworICogIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IGF1ZGlvCiAgKiAgcGF0aC4gIElmIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgbmVlZGVkIHRvIGRlZmluZSB0aGUgcGFyYW1ldGVycyBvZiB0aGUKICAqICBwb3J0IChzdWNoIGFzIGZyZXF1ZW5jeSksIGFkZGl0aW9uYWwgc3RydWN0dXJlcyBtdXN0IGJlIHNlbnQgc3VjaCBhcyB0aGUKICAqICBPTVhfQVVESU9fUEFSQU1fUENNTU9ERVRZUEUgc3RydWN0dXJlIHRvIHN1cHBseSB0aGUgZXh0cmEgcGFyYW1ldGVycyBmb3IgdGhlIHBvcnQuCkBAIC0xMjIsMTEgKzEyMSwxMSBAQAogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BPUlRERUZJTklUSU9OVFlQRSB7CiAgICAgT01YX1NUUklORyBjTUlNRVR5cGU7ICAgICAgICAgICAgLyoqPCBNSU1FIHR5cGUgb2YgZGF0YSBmb3IgdGhlIHBvcnQgKi8KICAgICBPTVhfTkFUSVZFX0RFVklDRVRZUEUgcE5hdGl2ZVJlbmRlcjsgLyoqIDwgcGxhdGZvcm0gc3BlY2lmaWMgcmVmZXJlbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBvdXRwdXQgZGV2aWNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIG91dHB1dCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIDAgKi8KLSAgICBPTVhfQk9PTCBiRmxhZ0Vycm9yQ29uY2VhbG1lbnQ7ICAvKio8IFR1cm5zIG9uIGVycm9yIGNvbmNlYWxtZW50IGlmIGl0IGlzIAorICAgIE9NWF9CT09MIGJGbGFnRXJyb3JDb25jZWFsbWVudDsgIC8qKjwgVHVybnMgb24gZXJyb3IgY29uY2VhbG1lbnQgaWYgaXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGUgT01YIGNvbXBvbmVudCAqLwotICAgIE9NWF9BVURJT19DT0RJTkdUWVBFIGVFbmNvZGluZzsgIC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIAorICAgIE9NWF9BVURJT19DT0RJTkdUWVBFIGVFbmNvZGluZzsgIC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0IChlLmcuIFBDTSwgQU1SLCBNUDMsIGV0YykgKi8KIH0gT01YX0FVRElPX1BPUlRERUZJTklUSU9OVFlQRTsKIApAQCAtMTQzLDE1ICsxNDIsMTUgQEAKIH0gT01YX0FVRElPX1BBUkFNX1BPUlRGT1JNQVRUWVBFOwogCiAKLS8qKiBQQ00gbW9kZSB0eXBlICAqLyAKLXR5cGVkZWYgZW51bSBPTVhfQVVESU9fUENNTU9ERVRZUEUgeyAKLSAgICBPTVhfQVVESU9fUENNTW9kZUxpbmVhciA9IDAsICAvKio8IExpbmVhciBQQ00gZW5jb2RlZCBkYXRhICovIAotICAgIE9NWF9BVURJT19QQ01Nb2RlQUxhdywgICAgICAgIC8qKjwgQSBsYXcgUENNIGVuY29kZWQgZGF0YSAoRy43MTEpICovIAotICAgIE9NWF9BVURJT19QQ01Nb2RlTVVMYXcsICAgICAgIC8qKjwgTXUgbGF3IFBDTSBlbmNvZGVkIGRhdGEgKEcuNzExKSAgKi8gCi0gICAgT01YX0FVRElPX1BDTU1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisvKiogUENNIG1vZGUgdHlwZSAgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fUENNTU9ERVRZUEUgeworICAgIE9NWF9BVURJT19QQ01Nb2RlTGluZWFyID0gMCwgIC8qKjwgTGluZWFyIFBDTSBlbmNvZGVkIGRhdGEgKi8KKyAgICBPTVhfQVVESU9fUENNTW9kZUFMYXcsICAgICAgICAvKio8IEEgbGF3IFBDTSBlbmNvZGVkIGRhdGEgKEcuNzExKSAqLworICAgIE9NWF9BVURJT19QQ01Nb2RlTVVMYXcsICAgICAgIC8qKjwgTXUgbGF3IFBDTSBlbmNvZGVkIGRhdGEgKEcuNzExKSAgKi8KKyAgICBPTVhfQVVESU9fUENNTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19QQ01Nb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfQVVESU9fUENNTW9kZU1heCA9IDB4N0ZGRkZGRkYgCi19IE9NWF9BVURJT19QQ01NT0RFVFlQRTsgCisgICAgT01YX0FVRElPX1BDTU1vZGVNYXggPSAweDdGRkZGRkZGCit9IE9NWF9BVURJT19QQ01NT0RFVFlQRTsKIAogCiB0eXBlZGVmIGVudW0gT01YX0FVRElPX0NIQU5ORUxUWVBFIHsKQEAgLTE2NSw0NSArMTY0LDQ1IEBACiAgICAgT01YX0FVRElPX0NoYW5uZWxDUyAgID0gMHg3LCAgICAvKio8IEJhY2sgc3Vycm91bmQgKi8KICAgICBPTVhfQVVESU9fQ2hhbm5lbExSICAgPSAweDgsICAgIC8qKjwgTGVmdCByZWFyLiAqLwogICAgIE9NWF9BVURJT19DaGFubmVsUlIgICA9IDB4OSwgICAgLyoqPCBSaWdodCByZWFyLiAqLwotICAgIE9NWF9BVURJT19DaGFubmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19DaGFubmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0NoYW5uZWxWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9BVURJT19DaGFubmVsTWF4ICA9IDB4N0ZGRkZGRkYgCisgICAgT01YX0FVRElPX0NoYW5uZWxNYXggID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fQ0hBTk5FTFRZUEU7CiAKICNkZWZpbmUgT01YX0FVRElPX01BWENIQU5ORUxTIDE2ICAvKio8IG1heGltdW0gbnVtYmVyIGRpc3RpbmN0IGF1ZGlvIGNoYW5uZWxzIHRoYXQgYSBidWZmZXIgbWF5IGNvbnRhaW4gKi8KICNkZWZpbmUgT01YX01JTl9QQ01QQVlMT0FEX01TRUMgNSAvKio8IE1pbmltdW0gYXVkaW8gYnVmZmVyIHBheWxvYWQgc2l6ZSBmb3IgdW5jb21wcmVzc2VkIChQQ00pIGF1ZGlvICovCiAKLS8qKiBQQ00gZm9ybWF0IGRlc2NyaXB0aW9uICovIAotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1BDTU1PREVUWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSwgaW4gQnl0ZXMgKi8gCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLyAKLSAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgKGUuZy4gMiBmb3Igc3RlcmVvKSAqLyAKLSAgICBPTVhfTlVNRVJJQ0FMREFUQVRZUEUgZU51bURhdGE7ICAgLyoqPCBpbmRpY2F0ZXMgUENNIGRhdGEgYXMgc2lnbmVkIG9yIHVuc2lnbmVkICovIAotICAgIE9NWF9FTkRJQU5UWVBFIGVFbmRpYW47ICAgICAgICAgICAvKio8IGluZGljYXRlcyBQQ00gZGF0YSBhcyBsaXR0bGUgb3IgYmlnIGVuZGlhbiAqLyAKLSAgICBPTVhfQk9PTCBiSW50ZXJsZWF2ZWQ7ICAgICAgICAgICAgLyoqPCBUcnVlIGZvciBub3JtYWwgaW50ZXJsZWF2ZWQgZGF0YTsgZmFsc2UgZm9yIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1pbnRlcmxlYXZlZCBkYXRhIChlLmcuIGJsb2NrIGRhdGEpICovIAotICAgIE9NWF9VMzIgbkJpdFBlclNhbXBsZTsgICAgICAgICAgICAvKio8IEJpdCBwZXIgc2FtcGxlICovIAotICAgIE9NWF9VMzIgblNhbXBsaW5nUmF0ZTsgICAgICAgICAgICAvKio8IFNhbXBsaW5nIHJhdGUgb2YgdGhlIHNvdXJjZSBkYXRhLiAgVXNlIDAgZm9yIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9yIHVua25vd24gc2FtcGxpbmcgcmF0ZS4gKi8gCi0gICAgT01YX0FVRElPX1BDTU1PREVUWVBFIGVQQ01Nb2RlOyAgIC8qKjwgUENNIG1vZGUgZW51bWVyYXRpb24gKi8gCisvKiogUENNIGZvcm1hdCBkZXNjcmlwdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1BDTU1PREVUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoaXMgc3RydWN0dXJlLCBpbiBCeXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkNoYW5uZWxzOyAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBjaGFubmVscyAoZS5nLiAyIGZvciBzdGVyZW8pICovCisgICAgT01YX05VTUVSSUNBTERBVEFUWVBFIGVOdW1EYXRhOyAgIC8qKjwgaW5kaWNhdGVzIFBDTSBkYXRhIGFzIHNpZ25lZCBvciB1bnNpZ25lZCAqLworICAgIE9NWF9FTkRJQU5UWVBFIGVFbmRpYW47ICAgICAgICAgICAvKio8IGluZGljYXRlcyBQQ00gZGF0YSBhcyBsaXR0bGUgb3IgYmlnIGVuZGlhbiAqLworICAgIE9NWF9CT09MIGJJbnRlcmxlYXZlZDsgICAgICAgICAgICAvKio8IFRydWUgZm9yIG5vcm1hbCBpbnRlcmxlYXZlZCBkYXRhOyBmYWxzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24taW50ZXJsZWF2ZWQgZGF0YSAoZS5nLiBibG9jayBkYXRhKSAqLworICAgIE9NWF9VMzIgbkJpdFBlclNhbXBsZTsgICAgICAgICAgICAvKio8IEJpdCBwZXIgc2FtcGxlICovCisgICAgT01YX1UzMiBuU2FtcGxpbmdSYXRlOyAgICAgICAgICAgIC8qKjwgU2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIGRhdGEuICBVc2UgMCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvciB1bmtub3duIHNhbXBsaW5nIHJhdGUuICovCisgICAgT01YX0FVRElPX1BDTU1PREVUWVBFIGVQQ01Nb2RlOyAgIC8qKjwgUENNIG1vZGUgZW51bWVyYXRpb24gKi8KICAgICBPTVhfQVVESU9fQ0hBTk5FTFRZUEUgZUNoYW5uZWxNYXBwaW5nW09NWF9BVURJT19NQVhDSEFOTkVMU107IC8qKjwgU2xvdCBpIGNvbnRhaW5zIGNoYW5uZWwgZGVmaW5lZCBieSBlQ2hhbm5lbE1hcFtpXSAqLwogCi19IE9NWF9BVURJT19QQVJBTV9QQ01NT0RFVFlQRTsgCit9IE9NWF9BVURJT19QQVJBTV9QQ01NT0RFVFlQRTsKIAogCiAvKiogQXVkaW8gY2hhbm5lbCBtb2RlLiAgVGhpcyBpcyB1c2VkIGJ5IGJvdGggQUFDIGFuZCBNUDMsIGFsdGhvdWdoIHRoZSBuYW1lcyBhcmUgbW9yZSBhcHByb3ByaWF0ZQotICogZm9yIHRoZSBNUDMuICBGb3IgZXhhbXBsZSwgSm9pbnRTdGVyZW8gZm9yIE1QMyBpcyBDb3VwbGluZ0NoYW5uZWxzIGZvciBBQUMuIAorICogZm9yIHRoZSBNUDMuICBGb3IgZXhhbXBsZSwgSm9pbnRTdGVyZW8gZm9yIE1QMyBpcyBDb3VwbGluZ0NoYW5uZWxzIGZvciBBQUMuCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfQVVESU9fQ0hBTk5FTE1PREVUWVBFIHsKLSAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVTdGVyZW8gPSAwLCAgLyoqPCAyIGNoYW5uZWxzLCB0aGUgYml0cmF0ZSBhbGxvY2F0aW9uIGJldHdlZW4gdGhvc2UgCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlU3RlcmVvID0gMCwgIC8qKjwgMiBjaGFubmVscywgdGhlIGJpdHJhdGUgYWxsb2NhdGlvbiBiZXR3ZWVuIHRob3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d28gY2hhbm5lbHMgY2hhbmdlcyBhY2NvcmRpbmdseSB0byBlYWNoIGNoYW5uZWwgaW5mb3JtYXRpb24gKi8KLSAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVKb2ludFN0ZXJlbywgLyoqPCBtb2RlIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIHdoYXQgaXMgY29tbW9uIGJldHdlZW4gCisgICAgT01YX0FVRElPX0NoYW5uZWxNb2RlSm9pbnRTdGVyZW8sIC8qKjwgbW9kZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB3aGF0IGlzIGNvbW1vbiBiZXR3ZWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBjaGFubmVscyBmb3IgaGlnaGVyIGNvbXByZXNzaW9uIGdhaW4gKi8KLSAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVEdWFsLCAgICAgICAgLyoqPCAyIG1vbm8tY2hhbm5lbHMsIGVhY2ggY2hhbm5lbCBpcyBlbmNvZGVkIHdpdGggaGFsZiAKKyAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVEdWFsLCAgICAgICAgLyoqPCAyIG1vbm8tY2hhbm5lbHMsIGVhY2ggY2hhbm5lbCBpcyBlbmNvZGVkIHdpdGggaGFsZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiaXRyYXRlIG9mIHRoZSBvdmVyYWxsIGJpdHJhdGUgKi8KICAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVNb25vLCAgICAgICAgLyoqPCBNb25vIGNoYW5uZWwgbW9kZSAqLwotICAgIE9NWF9BVURJT19DaGFubmVsTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQ2hhbm5lbE1vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19DaGFubmVsTW9kZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0NIQU5ORUxNT0RFVFlQRTsKQEAgLTIxMyw3ICsyMTIsNyBAQAogICAgIE9NWF9BVURJT19NUDNTdHJlYW1Gb3JtYXRNUDFMYXllcjMgPSAwLCAvKio8IE1QMyBBdWRpbyBNUEVHIDEgTGF5ZXIgMyBTdHJlYW0gZm9ybWF0ICovCiAgICAgT01YX0FVRElPX01QM1N0cmVhbUZvcm1hdE1QMkxheWVyMywgICAgIC8qKjwgTVAzIEF1ZGlvIE1QRUcgMiBMYXllciAzIFN0cmVhbSBmb3JtYXQgKi8KICAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0TVAyXzVMYXllcjMsICAgLyoqPCBNUDMgQXVkaW8gTVBFRzIuNSBMYXllciAzIFN0cmVhbSBmb3JtYXQgKi8KLSAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19NUDNTdHJlYW1Gb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fTVAzU3RyZWFtRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fTVAzU1RSRUFNRk9STUFUVFlQRTsKQEAgLTI0Myw3ICsyNDIsNyBAQAogICAgIE9NWF9BVURJT19BQUNTdHJlYW1Gb3JtYXRBRElGLCAgICAgICAgLyoqPCBBQUMgQXVkaW8gRGF0YSBJbnRlcmNoYW5nZSBGb3JtYXQgKi8KICAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0TVA0RkYsICAgICAgIC8qKjwgQUFDIGluc2lkZSBNUEVHLTQvSVNPIEZpbGUgRm9ybWF0ICovCiAgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdFJBVywgICAgICAgICAvKio8IEFBQyBSYXcgRm9ybWF0ICovCi0gICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQUFDU3RyZWFtRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0FBQ1N0cmVhbUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0FBQ1NUUkVBTUZPUk1BVFRZUEU7CkBAIC0zMjksMTYgKzMyOCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvciB1bmtub3duIHNhbXBsaW5nIHJhdGUuICovCiAgICAgT01YX1UzMiBuQXVkaW9CYW5kV2lkdGg7ICAvKio8IEF1ZGlvIGJhbmQgd2lkdGggKGluIEh6KSB0byB3aGljaCBhbiBlbmNvZGVyIHNob3VsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCB0aGUgYXVkaW8gc2lnbmFsLiBVc2UgMCB0byBsZXQgZW5jb2RlciBkZWNpZGUgKi8KLSAgICBPTVhfUzMyIG5RdWFsaXR5OwkJICAvKio8IFNldHMgZW5jb2RpbmcgcXVhbGl0eSB0byBuLCBiZXR3ZWVuIC0xIChsb3cpIGFuZCAxMCAoaGlnaCkuCisgICAgT01YX1MzMiBuUXVhbGl0eTsgICAgICAgICAvKio8IFNldHMgZW5jb2RpbmcgcXVhbGl0eSB0byBuLCBiZXR3ZWVuIC0xIChsb3cpIGFuZCAxMCAoaGlnaCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBkZWZhdWx0IG1vZGUgb2Ygb3BlcmF0aW9uLCB0ZWggcXVhbGl0eSBsZXZlbCBpcyAzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgcXVhbGl0eSByYW5nZSBpcyAwIC0gMTAuICovCi0gICAgT01YX0JPT0wgYk1hbmFnZWQ7CQkgIC8qKjwgU2V0ICBiaXRyYXRlICBtYW5hZ2VtZW50ICBtb2RlLiBUaGlzIHR1cm5zIG9mZiB0aGUKKyAgICBPTVhfQk9PTCBiTWFuYWdlZDsgICAgICAgIC8qKjwgU2V0ICBiaXRyYXRlICBtYW5hZ2VtZW50ICBtb2RlLiBUaGlzIHR1cm5zIG9mZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIFZCUiBlbmNvZGluZywgYnV0IGFsbG93cyBoYXJkIG9yIHNvZnQgYml0cmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cyB0byBiZSBlbmZvcmNlZCBieSB0aGUgZW5jb2Rlci4gVGhpcyBtb2RlIGNhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzbG93ZXIsIGFuZCBtYXkgYWxzbyBiZSBsb3dlciBxdWFsaXR5LiBJdCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJpbHkgdXNlZnVsIGZvciBzdHJlYW1pbmcuICovCi0gICAgT01YX0JPT0wgYkRvd25taXg7CQkgIC8qKjwgRG93bm1peCBpbnB1dCBmcm9tIHN0ZXJlbyB0byBtb25vIChoYXMgbm8gZWZmZWN0IG9uIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub24tc3RlcmVvIHN0cmVhbXMpLiBVc2VmdWwgZm9yIGxvd2VyLWJpdHJhdGUgZW5jb2RpbmcuICovICAgICAKKyAgICBPTVhfQk9PTCBiRG93bm1peDsgICAgICAgIC8qKjwgRG93bm1peCBpbnB1dCBmcm9tIHN0ZXJlbyB0byBtb25vIChoYXMgbm8gZWZmZWN0IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1zdGVyZW8gc3RyZWFtcykuIFVzZWZ1bCBmb3IgbG93ZXItYml0cmF0ZSBlbmNvZGluZy4gKi8KIH0gT01YX0FVRElPX1BBUkFNX1ZPUkJJU1RZUEU7CiAKIApAQCAtMzYxLDcgKzM2MCw3IEBACiAgIE9NWF9BVURJT19XTUFGb3JtYXQ3LCAgICAgICAgICAvKio8IFdpbmRvd3MgTWVkaWEgQXVkaW8gZm9ybWF0IDcgKi8KICAgT01YX0FVRElPX1dNQUZvcm1hdDgsICAgICAgICAgIC8qKjwgV2luZG93cyBNZWRpYSBBdWRpbyBmb3JtYXQgOCAqLwogICBPTVhfQVVESU9fV01BRm9ybWF0OSwgICAgICAgICAgLyoqPCBXaW5kb3dzIE1lZGlhIEF1ZGlvIGZvcm1hdCA5ICovCi0gIE9NWF9BVURJT19XTUFGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgIE9NWF9BVURJT19XTUFGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgT01YX0FVRElPX1dNQUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19XTUFGb3JtYXRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19XTUFGT1JNQVRUWVBFOwpAQCAtMzczLDcgKzM3Miw3IEBACiAgIE9NWF9BVURJT19XTUFQcm9maWxlTDEsICAgICAgICAgIC8qKjwgV2luZG93cyBNZWRpYSBhdWRpbyB2ZXJzaW9uIDkgcHJvZmlsZSBMMSAqLwogICBPTVhfQVVESU9fV01BUHJvZmlsZUwyLCAgICAgICAgICAvKio8IFdpbmRvd3MgTWVkaWEgYXVkaW8gdmVyc2lvbiA5IHByb2ZpbGUgTDIgKi8KICAgT01YX0FVRElPX1dNQVByb2ZpbGVMMywgICAgICAgICAgLyoqPCBXaW5kb3dzIE1lZGlhIGF1ZGlvIHZlcnNpb24gOSBwcm9maWxlIEwzICovCi0gIE9NWF9BVURJT19XTUFQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICBPTVhfQVVESU9fV01BUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICBPTVhfQVVESU9fV01BUHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19XTUFQcm9maWxlTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fV01BUFJPRklMRVRZUEU7CkBAIC0zODgsMTQgKzM4NywxNCBAQAogICAgIE9NWF9VMzIgbkJpdFJhdGU7ICAgICAgICAgLyoqPCBCaXQgcmF0ZSBvZiB0aGUgaW5wdXQgZGF0YS4gIFVzZSAwIGZvciB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlIG9yIHVua25vd24gYml0IHJhdGVzICovCiAgICAgT01YX0FVRElPX1dNQUZPUk1BVFRZUEUgZUZvcm1hdDsgLyoqPCBWZXJzaW9uIG9mIFdNQSBzdHJlYW0gLyBkYXRhICovCi0JT01YX0FVRElPX1dNQVBST0ZJTEVUWVBFIGVQcm9maWxlOyAgLyoqPCBQcm9maWxlIG9mIFdNQSBzdHJlYW0gLyBkYXRhICovCisgICAgT01YX0FVRElPX1dNQVBST0ZJTEVUWVBFIGVQcm9maWxlOyAgLyoqPCBQcm9maWxlIG9mIFdNQSBzdHJlYW0gLyBkYXRhICovCiAgICAgT01YX1UzMiBuU2FtcGxpbmdSYXRlOyAgICAvKio8IFNhbXBsaW5nIHJhdGUgb2YgdGhlIHNvdXJjZSBkYXRhICovCiAgICAgT01YX1UxNiBuQmxvY2tBbGlnbjsgICAgICAvKio8IGlzIHRoZSBibG9jayBhbGlnbm1lbnQsIG9yIGJsb2NrIHNpemUsIGluIGJ5dGVzIG9mIHRoZSBhdWRpbyBjb2RlYyAqLwogICAgIE9NWF9VMTYgbkVuY29kZU9wdGlvbnM7ICAgLyoqPCBXTUEgVHlwZS1zcGVjaWZpYyBkYXRhICovCiAgICAgT01YX1UzMiBuU3VwZXJCbG9ja0FsaWduOyAvKio8IFdNQSBUeXBlLXNwZWNpZmljIGRhdGEgKi8KIH0gT01YX0FVRElPX1BBUkFNX1dNQVRZUEU7CiAKLS8qKiAKKy8qKgogICogUmVhbEF1ZGlvIGZvcm1hdAogICovCiB0eXBlZGVmIGVudW0gT01YX0FVRElPX1JBRk9STUFUVFlQRSB7CkBAIC00MDcsMzIgKzQwNiwzMiBAQAogICAgIE9NWF9BVURJT19SQTEwX0xPU1NMRVNTLCAgICAgIC8qKjwgUmVhbEF1ZGlvIExvc3NsZXNzICovCiAgICAgT01YX0FVRElPX1JBMTBfTVVMVElDSEFOTkVMLCAgLyoqPCBSZWFsQXVkaW8gTXVsdGljaGFubmVsICovCiAgICAgT01YX0FVRElPX1JBMTBfVk9JQ0UsICAgICAgICAgLyoqPCBSZWFsQXVkaW8gVm9pY2UgZm9yIGJpdHJhdGVzIGJlbG93IDE1IGticHMgKi8KLSAgICBPTVhfQVVESU9fUkFGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX1JBRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX1JBRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fUkFGb3JtYXRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19SQUZPUk1BVFRZUEU7CiAKLS8qKiBSQSAoUmVhbCBBdWRpbykgcGFyYW1zICovIAotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1JBVFlQRSB7IAotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIGluIEJ5dGVzICovIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8gCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzICovIAotICAgIE9NWF9VMzIgblNhbXBsaW5nUmF0ZTsgICAgICAvKio8IGlzIHRoZSBzYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YSAqLyAKLSAgICBPTVhfVTMyIG5CaXRzUGVyRnJhbWU7ICAgICAgLyoqPCBpcyB0aGUgdmFsdWUgZm9yIGJpdHMgcGVyIGZyYW1lICAqLyAKLSAgICBPTVhfVTMyIG5TYW1wbGVQZXJGcmFtZTsgICAgLyoqPCBpcyB0aGUgdmFsdWUgZm9yIHNhbXBsZXMgcGVyIGZyYW1lICovIAotICAgIE9NWF9VMzIgbkNvdXBsaW5nUXVhbnRCaXRzOyAvKio8IGlzIHRoZSBudW1iZXIgb2YgY291cGxpbmcgcXVhbnRpemF0aW9uIGJpdHMgaW4gdGhlIHN0cmVhbSAqLyAKLSAgICBPTVhfVTMyIG5Db3VwbGluZ1N0YXJ0UmVnaW9uOyAgIC8qKjwgaXMgdGhlIGNvdXBsaW5nIHN0YXJ0IHJlZ2lvbiBpbiB0aGUgc3RyZWFtICAqLyAKLSAgICBPTVhfVTMyIG5OdW1SZWdpb25zOyAgICAgICAgLyoqPCBpcyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdmFsdWUgKi8gCisvKiogUkEgKFJlYWwgQXVkaW8pIHBhcmFtcyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX1JBVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSwgaW4gQnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgKi8KKyAgICBPTVhfVTMyIG5TYW1wbGluZ1JhdGU7ICAgICAgLyoqPCBpcyB0aGUgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIGRhdGEgKi8KKyAgICBPTVhfVTMyIG5CaXRzUGVyRnJhbWU7ICAgICAgLyoqPCBpcyB0aGUgdmFsdWUgZm9yIGJpdHMgcGVyIGZyYW1lICAqLworICAgIE9NWF9VMzIgblNhbXBsZVBlckZyYW1lOyAgICAvKio8IGlzIHRoZSB2YWx1ZSBmb3Igc2FtcGxlcyBwZXIgZnJhbWUgKi8KKyAgICBPTVhfVTMyIG5Db3VwbGluZ1F1YW50Qml0czsgLyoqPCBpcyB0aGUgbnVtYmVyIG9mIGNvdXBsaW5nIHF1YW50aXphdGlvbiBiaXRzIGluIHRoZSBzdHJlYW0gKi8KKyAgICBPTVhfVTMyIG5Db3VwbGluZ1N0YXJ0UmVnaW9uOyAgIC8qKjwgaXMgdGhlIGNvdXBsaW5nIHN0YXJ0IHJlZ2lvbiBpbiB0aGUgc3RyZWFtICAqLworICAgIE9NWF9VMzIgbk51bVJlZ2lvbnM7ICAgICAgICAvKio8IGlzIHRoZSBudW1iZXIgb2YgcmVnaW9ucyB2YWx1ZSAqLwogICAgIE9NWF9BVURJT19SQUZPUk1BVFRZUEUgZUZvcm1hdDsgLyoqPCBpcyB0aGUgUmVhbEF1ZGlvIGF1ZGlvIGZvcm1hdCAqLwotfSBPTVhfQVVESU9fUEFSQU1fUkFUWVBFOyAKK30gT01YX0FVRElPX1BBUkFNX1JBVFlQRTsKIAogCiAvKiogU0JDIEFsbG9jYXRpb24gTWV0aG9kIFR5cGUgKi8KIHR5cGVkZWYgZW51bSBPTVhfQVVESU9fU0JDQUxMT0NNRVRIT0RUWVBFIHsKICAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kTG91ZG5lc3MsIC8qKjwgTG91ZG5lc3MgYWxsb2NhdGlvbiBtZXRob2QgKi8KICAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kU05SLCAgICAgIC8qKjwgU05SIGFsbG9jYXRpb24gbWV0aG9kICovCi0gIE9NWF9BVURJT19TQkNBbGxvY01ldGhvZEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgT01YX0FVRElPX1NCQ0FsbG9jTWV0aG9kS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19TQkNBbGxvY01ldGhvZFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgIE9NWF9BVURJT19TQkNBbGxvY01ldGhvZE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX1NCQ0FMTE9DTUVUSE9EVFlQRTsKQEAgLTQ1NywxOCArNDU2LDE4IEBACiB9IE9NWF9BVURJT19QQVJBTV9TQkNUWVBFOwogCiAKLS8qKiBBRFBDTSBzdHJlYW0gZm9ybWF0IHBhcmFtZXRlcnMgKi8gCi10eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fQURQQ01UWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8gCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovIAotICAgIE9NWF9VMzIgbkJpdHNQZXJTYW1wbGU7ICAgICAvKio8IE51bWJlciBvZiBiaXRzIGluIGVhY2ggc2FtcGxlICovIAotICAgIE9NWF9VMzIgblNhbXBsZVJhdGU7ICAgICAgICAvKio8IFNhbXBsaW5nIHJhdGUgb2YgdGhlIHNvdXJjZSBkYXRhLiAgVXNlIDAgZm9yIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgdW5rbm93biBzYW1wbGluZyByYXRlLiAqLyAKLX0gT01YX0FVRElPX1BBUkFNX0FEUENNVFlQRTsgCisvKiogQURQQ00gc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzICovCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fQURQQ01UWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovCisgICAgT01YX1UzMiBuQml0c1BlclNhbXBsZTsgICAgIC8qKjwgTnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBzYW1wbGUgKi8KKyAgICBPTVhfVTMyIG5TYW1wbGVSYXRlOyAgICAgICAgLyoqPCBTYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgZGF0YS4gIFVzZSAwIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb3IgdW5rbm93biBzYW1wbGluZyByYXRlLiAqLworfSBPTVhfQVVESU9fUEFSQU1fQURQQ01UWVBFOwogCiAKIC8qKiBHNzIzIHJhdGUgKi8KQEAgLTQ3NiwyNSArNDc1LDI1IEBACiAgICAgT01YX0FVRElPX0c3MjNNb2RlVW51c2VkID0gMCwgIC8qKjwgQU1STkIgTW9kZSB1bnVzZWQgLyB1bmtub3duICovCiAgICAgT01YX0FVRElPX0c3MjNNb2RlTG93LCAgICAgICAgIC8qKjwgNTMwMCBicHMgKi8KICAgICBPTVhfQVVESU9fRzcyM01vZGVIaWdoLCAgICAgICAgLyoqPCA2MzAwIGJwcyAqLwotICAgIE9NWF9BVURJT19HNzIzTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fRzcyM01vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fRzcyM01vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19HNzIzTW9kZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0c3MjNSQVRFOwogCiAKIC8qKiBHNzIzIC0gU2FtcGxlIHJhdGUgbXVzdCBiZSA4IEtIeiAqLwotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0c3MjNUWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8gCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovIAotICAgIE9NWF9CT09MIGJEVFg7ICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzc2lvbiAqLyAKK3R5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9HNzIzVFlQRSB7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlbmRlcmVkLiAqLworICAgIE9NWF9CT09MIGJEVFg7ICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzc2lvbiAqLwogICAgIE9NWF9BVURJT19HNzIzUkFURSBlQml0UmF0ZTsgIC8qKjwgdG9kbzogU2hvdWxkIHRoaXMgYmUgbW92ZWQgdG8gYSBjb25maWc/ICovCi0gICAgT01YX0JPT0wgYkhpUGFzc0ZpbHRlcjsgICAgICAgLyoqPCBFbmFibGUgSGlnaCBQYXNzIEZpbHRlciAqLyAKLSAgICBPTVhfQk9PTCBiUG9zdEZpbHRlcjsgICAgICAgICAvKio8IEVuYWJsZSBQb3N0IEZpbHRlciAqLyAKLX0gT01YX0FVRElPX1BBUkFNX0c3MjNUWVBFOyAKKyAgICBPTVhfQk9PTCBiSGlQYXNzRmlsdGVyOyAgICAgICAvKio8IEVuYWJsZSBIaWdoIFBhc3MgRmlsdGVyICovCisgICAgT01YX0JPT0wgYlBvc3RGaWx0ZXI7ICAgICAgICAgLyoqPCBFbmFibGUgUG9zdCBGaWx0ZXIgKi8KK30gT01YX0FVRElPX1BBUkFNX0c3MjNUWVBFOwogCiAKIC8qKiBJVFUgRzcyNiAoQURQQ00pIHJhdGUgKi8KQEAgLTUwNCwyMiArNTAzLDIyIEBACiAgICAgT01YX0FVRElPX0c3MjZNb2RlMjQsICAgICAgICAgIC8qKjwgMjQga2JwcyAqLwogICAgIE9NWF9BVURJT19HNzI2TW9kZTMyLCAgICAgICAgICAvKio8IDMyIGticHMsIG1vc3QgY29tbW9uIHJhdGUsIGFsc28gRzcyMSAqLwogICAgIE9NWF9BVURJT19HNzI2TW9kZTQwLCAgICAgICAgICAvKio8IDQwIGticHMgKi8KLSAgICBPTVhfQVVESU9fRzcyNk1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0c3MjZNb2RlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0c3MjZNb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fRzcyNk1vZGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19HNzI2TU9ERTsKIAogCi0vKiogRy43MjYgc3RyZWFtIGZvcm1hdCBwYXJhbWV0ZXJzIC0gbXVzdCBiZSBhdCA4S0h6ICovIAotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0c3MjZUWVBFIHsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8gCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBkYXRhIHN0cmVhbSAobm90IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovIAorLyoqIEcuNzI2IHN0cmVhbSBmb3JtYXQgcGFyYW1ldGVycyAtIG11c3QgYmUgYXQgOEtIeiAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX0c3MjZUWVBFIHsKKyAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVTMyIG5DaGFubmVsczsgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gdGhlIGRhdGEgc3RyZWFtIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVuZGVyZWQuICovCiAgICAgIE9NWF9BVURJT19HNzI2TU9ERSBlRzcyNk1vZGU7Ci19IE9NWF9BVURJT19QQVJBTV9HNzI2VFlQRTsgCit9IE9NWF9BVURJT19QQVJBTV9HNzI2VFlQRTsKIAogCiAvKiogRzcyOSBjb2RlciB0eXBlICovCkBAIC01MjgsNyArNTI3LDcgQEAKICAgICBPTVhfQVVESU9fRzcyOUEsICAgICAgICAgICAgICAvKio8IElUVSBHLjcyOSBhbm5leCBBICBlbmNvZGVkIGRhdGEgKi8KICAgICBPTVhfQVVESU9fRzcyOUIsICAgICAgICAgICAgICAvKio8IElUVSBHLjcyOSB3aXRoIGFubmV4IEIgZW5jb2RlZCBkYXRhICovCiAgICAgT01YX0FVRElPX0c3MjlBQiwgICAgICAgICAgICAgLyoqPCBJVFUgRy43MjkgYW5uZXhlcyBBIGFuZCBCIGVuY29kZWQgZGF0YSAqLwotICAgIE9NWF9BVURJT19HNzI5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19HNzI5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX0c3MjlWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19HNzI5TWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fRzcyOVRZUEU7CkBAIC01NDcsMjMgKzU0NiwyMyBAQAogfSBPTVhfQVVESU9fUEFSQU1fRzcyOVRZUEU7CiAKIAotLyoqIEFNUiBGcmFtZSBmb3JtYXQgKi8gCi10eXBlZGVmIGVudW0gT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRSB7IAotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdENvbmZvcm1hbmNlID0gMCwgIC8qKjwgRnJhbWUgRm9ybWF0IGlzIEFNUiBDb25mb3JtYW5jZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdGFuZGFyZCkgRm9ybWF0ICovIAotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdElGMSwgICAgICAgICAgICAgIC8qKjwgRnJhbWUgRm9ybWF0IGlzIEFNUiBJbnRlcmZhY2UgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQgMSAqLyAKLSAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRJRjIsICAgICAgICAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgSW50ZXJmYWNlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0IDIqLyAKLSAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRGU0YsICAgICAgICAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgRmlsZSBTdG9yYWdlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0ICovIAotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdFJUUFBheWxvYWQsICAgICAgIC8qKjwgRnJhbWUgRm9ybWF0IGlzIEFNUiBSZWFsLVRpbWUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgUHJvdG9jb2wgUGF5bG9hZCBGb3JtYXQgKi8gCi0gICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SVRVLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgSVRVIEZvcm1hdCAoYWRkZWQgYXQgTW90b3JvbGEgcmVxdWVzdCkgKi8gCi0gICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorLyoqIEFNUiBGcmFtZSBmb3JtYXQgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fQU1SRlJBTUVGT1JNQVRUWVBFIHsKKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRDb25mb3JtYW5jZSA9IDAsICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgQ29uZm9ybWFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdGFuZGFyZCkgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SUYxLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0IDEgKi8KKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRJRjIsICAgICAgICAgICAgICAvKio8IEZyYW1lIEZvcm1hdCBpcyBBTVIgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQgMiovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0RlNGLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIEZpbGUgU3RvcmFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0UlRQUGF5bG9hZCwgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgQU1SIFJlYWwtVGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IFByb3RvY29sIFBheWxvYWQgRm9ybWF0ICovCisgICAgT01YX0FVRElPX0FNUkZyYW1lRm9ybWF0SVRVLCAgICAgICAgICAgICAgLyoqPCBGcmFtZSBGb3JtYXQgaXMgSVRVIEZvcm1hdCAoYWRkZWQgYXQgTW90b3JvbGEgcmVxdWVzdCkgKi8KKyAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQU1SRnJhbWVGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYgCi19IE9NWF9BVURJT19BTVJGUkFNRUZPUk1BVFRZUEU7IAorICAgIE9NWF9BVURJT19BTVJGcmFtZUZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKK30gT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRTsKIAogCiAvKiogQU1SIGJhbmQgbW9kZSAqLwpAQCAtNTcxLDcgKzU3MCw3IEBACiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlVW51c2VkID0gMCwgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIHVudXNlZCAvIHVua25vd24gKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVOQjAsICAgICAgICAgICAgICAgICAvKio8IEFNUk5CIE1vZGUgMCA9ICA0NzUwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CMSwgICAgICAgICAgICAgICAgIC8qKjwgQU1STkIgTW9kZSAxID0gIDUxNTAgYnBzICovCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkIyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDIgPSAgNTkwMCBicHMgKi8gCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkIyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDIgPSAgNTkwMCBicHMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVOQjMsICAgICAgICAgICAgICAgICAvKio8IEFNUk5CIE1vZGUgMyA9ICA2NzAwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU5CNCwgICAgICAgICAgICAgICAgIC8qKjwgQU1STkIgTW9kZSA0ID0gIDc0MDAgYnBzICovCiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkI1LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDUgPSAgNzk1MCBicHMgKi8KQEAgLTU3OSwzNiArNTc4LDM2IEBACiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlTkI3LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJOQiBNb2RlIDcgPSAxMjIwMCBicHMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjAsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgMCA9ICA2NjAwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCMSwgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSAxID0gIDg4NTAgYnBzICovCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0IyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDIgPSAxMjY1MCBicHMgKi8gCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0IzLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDMgPSAxNDI1MCBicHMgKi8gCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0IyLCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDIgPSAxMjY1MCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjMsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgMyA9IDE0MjUwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNCwgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSA0ID0gMTU4NTAgYnBzICovCiAgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0I1LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDUgPSAxODI1MCBicHMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVXQjYsICAgICAgICAgICAgICAgICAvKio8IEFNUldCIE1vZGUgNiA9IDE5ODUwIGJwcyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZVdCNywgICAgICAgICAgICAgICAgIC8qKjwgQU1SV0IgTW9kZSA3ID0gMjMwNTAgYnBzICovCi0gICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0I4LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDggPSAyMzg1MCBicHMgKi8gICAgICAKLSAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0FNUkJhbmRNb2RlV0I4LCAgICAgICAgICAgICAgICAgLyoqPCBBTVJXQiBNb2RlIDggPSAyMzg1MCBicHMgKi8KKyAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQU1SQmFuZE1vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19BTVJCYW5kTW9kZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0FNUkJBTkRNT0RFVFlQRTsKLSAgICAgCiAKLS8qKiBBTVIgRGlzY29udGludW91cyBUcmFuc21pc3Npb24gbW9kZSAqLyAKLXR5cGVkZWYgZW51bSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEUgeyAKLSAgICBPTVhfQVVESU9fQU1SRFRYTW9kZU9mZiA9IDAsICAgICAgICAvKio8IEFNUiBEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbiBNb2RlIGlzIGRpc2FibGVkICovIAotICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25WQUQxLCAgICAgICAgIC8qKjwgQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIE1vZGUgdXNpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2ljZSBBY3Rpdml0eSBEZXRlY3RvciAxIChWQUQxKSBpcyBlbmFibGVkICovIAotICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25WQUQyLCAgICAgICAgIC8qKjwgQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIE1vZGUgdXNpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2ljZSBBY3Rpdml0eSBEZXRlY3RvciAyIChWQUQyKSBpcyBlbmFibGVkICovICAgICAgIAotICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25BdXRvLCAgICAgICAgIC8qKjwgVGhlIGNvZGVjIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgYmV0d2VlbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZiwgVkFEMSBvciBWQUQyIG1vZGVzICovIAorCisvKiogQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIG1vZGUgKi8KK3R5cGVkZWYgZW51bSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEUgeworICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT2ZmID0gMCwgICAgICAgIC8qKjwgQU1SIERpc2NvbnRpbnVvdXMgVHJhbnNtaXNzaW9uIE1vZGUgaXMgZGlzYWJsZWQgKi8KKyAgICBPTVhfQVVESU9fQU1SRFRYTW9kZU9uVkFEMSwgICAgICAgICAvKio8IEFNUiBEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbiBNb2RlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2ljZSBBY3Rpdml0eSBEZXRlY3RvciAxIChWQUQxKSBpcyBlbmFibGVkICovCisgICAgT01YX0FVRElPX0FNUkRUWE1vZGVPblZBRDIsICAgICAgICAgLyoqPCBBTVIgRGlzY29udGludW91cyBUcmFuc21pc3Npb24gTW9kZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVm9pY2UgQWN0aXZpdHkgRGV0ZWN0b3IgMiAoVkFEMikgaXMgZW5hYmxlZCAqLworICAgIE9NWF9BVURJT19BTVJEVFhNb2RlT25BdXRvLCAgICAgICAgIC8qKjwgVGhlIGNvZGVjIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2ZmLCBWQUQxIG9yIFZBRDIgbW9kZXMgKi8KIAogICAgIE9NWF9BVURJT19BTVJEVFhhc0VGUiwgICAgICAgICAgICAgLyoqPCBEVFggYXMgRUZSIGluc3RlYWQgb2YgQU1SIHN0YW5kYXJkICgzR1BQIDI2LjEwMSwgZnJhbWUgdHlwZSA9OCw5LDEwKSAqLwogCi0gICAgT01YX0FVRElPX0FNUkRUWE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX0FNUkRUWE1vZGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQU1SRFRYTW9kZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCi0gICAgT01YX0FVRElPX0FNUkRUWE1vZGVNYXggPSAweDdGRkZGRkZGIAotfSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEU7IAotIAorICAgIE9NWF9BVURJT19BTVJEVFhNb2RlTWF4ID0gMHg3RkZGRkZGRgorfSBPTVhfQVVESU9fQU1SRFRYTU9ERVRZUEU7CisKIAogLyoqIEFNUiBwYXJhbXMgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19QQVJBTV9BTVJUWVBFIHsKQEAgLTYxNyw3ICs2MTYsNyBAQAogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCiAgICAgT01YX1UzMiBuQ2hhbm5lbHM7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIGNoYW5uZWxzICovCiAgICAgT01YX1UzMiBuQml0UmF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgQml0IHJhdGUgcmVhZCBvbmx5IGZpZWxkICovCi0gICAgT01YX0FVRElPX0FNUkJBTkRNT0RFVFlQRSBlQU1SQmFuZE1vZGU7IC8qKjwgQU1SIEJhbmQgTW9kZSBlbnVtZXJhdGlvbiAqLyAKKyAgICBPTVhfQVVESU9fQU1SQkFORE1PREVUWVBFIGVBTVJCYW5kTW9kZTsgLyoqPCBBTVIgQmFuZCBNb2RlIGVudW1lcmF0aW9uICovCiAgICAgT01YX0FVRElPX0FNUkRUWE1PREVUWVBFICBlQU1SRFRYTW9kZTsgIC8qKjwgQU1SIERUWCBNb2RlIGVudW1lcmF0aW9uICovCiAgICAgT01YX0FVRElPX0FNUkZSQU1FRk9STUFUVFlQRSBlQU1SRnJhbWVGb3JtYXQ7IC8qKjwgQU1SIGZyYW1lIGZvcm1hdCBlbnVtZXJhdGlvbiAqLwogfSBPTVhfQVVESU9fUEFSQU1fQU1SVFlQRTsKQEAgLTcyNSw3ICs3MjQsNyBAQAogICAgIE9NWF9BVURJT19DRE1BUmF0ZVF1YXJ0ZXIsICAgICAgICAgICAgLyoqPCBDRE1BIGVuY29kZWQgZnJhbWUgaW4gcXVhcnRlciByYXRlICovCiAgICAgT01YX0FVRElPX0NETUFSYXRlRWlnaHRoLCAgICAgICAgICAgICAvKio8IENETUEgZW5jb2RlZCBmcmFtZSBpbiBlaWdodGggcmF0ZSAoRFRYKSovCiAgICAgT01YX0FVRElPX0NETUFSYXRlRXJhc3VyZSwgICAgICAgICAgICAvKio8IENETUEgZXJhc3VyZSBmcmFtZSAqLwotICAgIE9NWF9BVURJT19DRE1BUmF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfQVVESU9fQ0RNQVJhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fQ0RNQVJhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19DRE1BUmF0ZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0NETUFSQVRFVFlQRTsKQEAgLTc5Nyw3ICs3OTYsNyBAQAogfSBPTVhfQVVESU9fUEFSQU1fU01WVFlQRTsKIAogCi0vKiogTUlESSBGb3JtYXQgCisvKiogTUlESSBGb3JtYXQKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19NSURJRk9STUFUVFlQRQpAQCAtODEwLDMzICs4MDksMzMgQEAKICAgICBPTVhfQVVESU9fTUlESUZvcm1hdFhNRjAsICAgICAgICAvKio8IGVYdGVuc2libGUgTXVzaWMgRm9ybWF0IHR5cGUgMCAqLwogICAgIE9NWF9BVURJT19NSURJRm9ybWF0WE1GMSwgICAgICAgIC8qKjwgZVh0ZW5zaWJsZSBNdXNpYyBGb3JtYXQgdHlwZSAxICovCiAgICAgT01YX0FVRElPX01JRElGb3JtYXRNb2JpbGVYTUYsICAgLyoqPCBNb2JpbGUgWE1GIChlWHRlbnNpYmxlIE11c2ljIEZvcm1hdCB0eXBlIDIpICovCi0gICAgT01YX0FVRElPX01JRElGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0FVRElPX01JRElGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQVVESU9fTUlESUZvcm1hdFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX01JRElGb3JtYXRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19NSURJRk9STUFUVFlQRTsKIAogCi0vKiogTUlESSBwYXJhbXMgCisvKiogTUlESSBwYXJhbXMKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX1BBUkFNX01JRElUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KLSAgICBPTVhfVTMyIG5GaWxlU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBNSURJIGZpbGUgaW4gYnl0ZXMsIHdoZXJlIHRoZSBlbnRpcmUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlESSBmaWxlIHBhc3NlZCBpbiwgb3RoZXJ3aXNlIGlmIDB4MCwgdGhlIE1JREkgZGF0YSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBtZXJnZWQgYW5kIHN0cmVhbWVkIChpbnN0ZWFkIG9mIHBhc3NlZCBhcyBhbiAKKyAgICBPTVhfVTMyIG5GaWxlU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBNSURJIGZpbGUgaW4gYnl0ZXMsIHdoZXJlIHRoZSBlbnRpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSURJIGZpbGUgcGFzc2VkIGluLCBvdGhlcndpc2UgaWYgMHgwLCB0aGUgTUlESSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbWVyZ2VkIGFuZCBzdHJlYW1lZCAoaW5zdGVhZCBvZiBwYXNzZWQgYXMgYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpcmUgTUlESSBmaWxlKSAqLwotICAgIE9NWF9CVTMyIHNNYXhQb2x5cGhvbnk7ICAgICAgICAvKio8IFNwZWNpZmllcyB0aGUgbWF4aW11bSBzaW11bHRhbmVvdXMgcG9seXBob25pYyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2ljZXMuIEEgdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVmYXVsdCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2x5cGhvbnkgb2YgdGhlIGRldmljZSBpcyB1c2VkICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9CT09MIGJMb2FkRGVmYXVsdFNvdW5kOyAgICAvKio8IFdoZXRoZXIgdG8gbG9hZCBkZWZhdWx0IHNvdW5kIAorICAgIE9NWF9CVTMyIHNNYXhQb2x5cGhvbnk7ICAgICAgICAvKio8IFNwZWNpZmllcyB0aGUgbWF4aW11bSBzaW11bHRhbmVvdXMgcG9seXBob25pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWNlcy4gQSB2YWx1ZSBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9seXBob255IG9mIHRoZSBkZXZpY2UgaXMgdXNlZCAgKi8KKyAgICBPTVhfQk9PTCBiTG9hZERlZmF1bHRTb3VuZDsgICAgLyoqPCBXaGV0aGVyIHRvIGxvYWQgZGVmYXVsdCBzb3VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmsgYXQgaW5pdGlhbGl6YXRpb24gKi8KLSAgICBPTVhfQVVESU9fTUlESUZPUk1BVFRZUEUgZU1pZGlGb3JtYXQ7IC8qKjwgVmVyc2lvbiBvZiB0aGUgTUlESSBmaWxlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgT01YX0FVRElPX01JRElGT1JNQVRUWVBFIGVNaWRpRm9ybWF0OyAvKio8IFZlcnNpb24gb2YgdGhlIE1JREkgZmlsZSAqLwogfSBPTVhfQVVESU9fUEFSQU1fTUlESVRZUEU7CiAKIAotLyoqIFR5cGUgb2YgdGhlIE1JREkgc291bmQgYmFuayAKKy8qKiBUeXBlIG9mIHRoZSBNSURJIHNvdW5kIGJhbmsKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19NSURJU09VTkRCQU5LVFlQRSB7CkBAIC04NDUsMTMgKzg0NCwxMyBAQAogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rRExTMiwgICAgICAgICAgICAgICAgIC8qKjwgRExTIHZlcnNpb24gMiAqLwogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTW9iaWxlRExTQmFzZSwgICAgICAgIC8qKjwgTW9iaWxlIERMUywgdXNpbmcgdGhlIGJhc2UgZnVuY3Rpb25hbGl0eSAqLwogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTW9iaWxlRExTUGx1c09wdGlvbnMsIC8qKjwgTW9iaWxlIERMUywgdXNpbmcgdGhlIHNwZWNpZmljYXRpb24tZGVmaW5lZCBvcHRpb25hbCBmZWF0dXJlIHNldCAqLwotICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fTUlESVNPVU5EQkFOS1RZUEU7CiAKIAotLyoqIEJhbmsgTGF5b3V0IGRlc2NyaWJlcyBob3cgYmFuayBNU0IgJiBMU0IgYXJlIHVzZWQgaW4gdGhlIERMUyBpbnN0cnVtZW50IGRlZmluaXRpb25zIHNvdW5kIGJhbmsgCisvKiogQmFuayBMYXlvdXQgZGVzY3JpYmVzIGhvdyBiYW5rIE1TQiAmIExTQiBhcmUgdXNlZCBpbiB0aGUgRExTIGluc3RydW1lbnQgZGVmaW5pdGlvbnMgc291bmQgYmFuawogICogQGluZ3JvdXAgbWlkaQogICovCiB0eXBlZGVmIGVudW0gT01YX0FVRElPX01JRElTT1VOREJBTktMQVlPVVRUWVBFIHsKQEAgLTg1OSwxMyArODU4LDEzIEBACiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dEdNLCAgICAgICAgICAgLyoqPCBHUyBsYXlvdXQgKGJhc2VkIG9uIGJhbmsgTVNCIDB4MDApICovCiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dEdNMiwgICAgICAgICAgLyoqPCBHZW5lcmFsIE1JREkgMiBsYXlvdXQgKHVzaW5nIE1TQiAweDc4LzB4NzksIExTQiAweDAwKSAqLwogICAgT01YX0FVRElPX01JRElTb3VuZEJhbmtMYXlvdXRVc2VyLCAgICAgICAgIC8qKjwgRG9lcyBub3QgY29uZm9ybSB0byBhbnkgYmFuayBudW1iZXJpbmcgc3RhbmRhcmRzICovCi0gICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgIE9NWF9BVURJT19NSURJU291bmRCYW5rTGF5b3V0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fTUlESVNvdW5kQmFua0xheW91dE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX01JRElTT1VOREJBTktMQVlPVVRUWVBFOwogCiAKLS8qKiBNSURJIHBhcmFtcyB0byBsb2FkL3VubG9hZCB1c2VyIHNvdW5kYmFuayAKKy8qKiBNSURJIHBhcmFtcyB0byBsb2FkL3VubG9hZCB1c2VyIHNvdW5kYmFuawogICogQGluZ3JvdXAgbWlkaQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fUEFSQU1fTUlESUxPQURVU0VSU09VTkRUWVBFIHsKQEAgLTg4MCw4ICs4NzksOCBAQAogfSBPTVhfQVVESU9fUEFSQU1fTUlESUxPQURVU0VSU09VTkRUWVBFOwogCiAKLS8qKiBTdHJ1Y3R1cmUgZm9yIExpdmUgTUlESSBldmVudHMgYW5kIE1JUCBtZXNzYWdlcy4gCi0gKiAoTUlQID0gTWF4aW11bSBJbnN0YW50YW5lb3VzIFBvbHlwaG9ueTsgcGFydCBvZiB0aGUgU1AtTUlESSBzdGFuZGFyZC4pIAorLyoqIFN0cnVjdHVyZSBmb3IgTGl2ZSBNSURJIGV2ZW50cyBhbmQgTUlQIG1lc3NhZ2VzLgorICogKE1JUCA9IE1heGltdW0gSW5zdGFudGFuZW91cyBQb2x5cGhvbnk7IHBhcnQgb2YgdGhlIFNQLU1JREkgc3RhbmRhcmQuKQogICogQGluZ3JvdXAgbWlkaQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElJTU1FRElBVEVFVkVOVFRZUEUgewpAQCAtODkwLDEyICs4ODksMTIgQEAKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KICAgICBPTVhfVTMyIG5NaWRpRXZlbnRTaXplOyAgIC8qKjwgU2l6ZSBvZiBpbW1lZGlhdGUgTUlESSBldmVudHMgb3IgTUlQIG1lc3NhZ2UgaW4gYnl0ZXMgICovCiAgICAgT01YX1U4IG5NaWRpRXZlbnRzWzFdOyAgICAvKio8IE1JREkgZXZlbnQgYXJyYXkgdG8gYmUgcmVuZGVyZWQgaW1tZWRpYXRlbHksIG9yIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGZvciB0aGUgTUlQIG1lc3NhZ2UgYnVmZmVyLCB3aGVyZSB0aGUgc2l6ZSBpcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgZm9yIHRoZSBNSVAgbWVzc2FnZSBidWZmZXIsIHdoZXJlIHRoZSBzaXplIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlZCBieSBuTWlkaUV2ZW50U2l6ZSAqLwogfSBPTVhfQVVESU9fQ09ORklHX01JRElJTU1FRElBVEVFVkVOVFRZUEU7CiAKIAotLyoqIE1JREkgc291bmQgYmFuay8gcHJvZ3JhbSBwYWlyIGluIGEgZ2l2ZW4gY2hhbm5lbCAKKy8qKiBNSURJIHNvdW5kIGJhbmsvIHByb2dyYW0gcGFpciBpbiBhIGdpdmVuIGNoYW5uZWwKICAqIEBpbmdyb3VwIG1pZGkKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NSURJU09VTkRCQU5LUFJPR1JBTVRZUEUgewpAQCAtOTA1LDI5ICs5MDQsMjkgQEAKICAgICBPTVhfVTMyIG5DaGFubmVsOyAgICAgICAgICAgLyoqPCBWYWxpZCBjaGFubmVsIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gMTYgKi8KICAgICBPTVhfVTE2IG5JRFByb2dyYW07ICAgICAgICAgLyoqPCBWYWxpZCBwcm9ncmFtIElEIHJhbmdlIGlzIDEgdG8gMTI4ICovCiAgICAgT01YX1UxNiBuSURTb3VuZEJhbms7ICAgICAgIC8qKjwgU291bmQgYmFuayBJRCAqLwotICAgIE9NWF9VMzIgblVzZXJTb3VuZEJhbmtJbmRleDsvKio8IFVzZXIgc291bmRiYW5rIGluZGV4LCBlYXNpZXIgdG8gYWNjZXNzIHNvdW5kYmFua3MgCisgICAgT01YX1UzMiBuVXNlclNvdW5kQmFua0luZGV4Oy8qKjwgVXNlciBzb3VuZGJhbmsgaW5kZXgsIGVhc2llciB0byBhY2Nlc3Mgc291bmRiYW5rcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGluZGV4IGlmIG11bHRpcGxlIGJhbmtzIGFyZSBwcmVzZW50ICovCiB9IE9NWF9BVURJT19DT05GSUdfTUlESVNPVU5EQkFOS1BST0dSQU1UWVBFOwogCiAKLS8qKiBNSURJIGNvbnRyb2wgCisvKiogTUlESSBjb250cm9sCiAgKiBAaW5ncm91cCBtaWRpCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfTUlESUNPTlRST0xUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KLSAgICBPTVhfQlMzMiBzUGl0Y2hUcmFuc3Bvc2l0aW9uOyAvKio8IFBpdGNoIHRyYW5zcG9zaXRpb24gaW4gc2VtaXRvbmVzLCBzdG9yZWQgYXMgUTIyLjEwIAorICAgIE9NWF9CUzMyIHNQaXRjaFRyYW5zcG9zaXRpb247IC8qKjwgUGl0Y2ggdHJhbnNwb3NpdGlvbiBpbiBzZW1pdG9uZXMsIHN0b3JlZCBhcyBRMjIuMTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBiYXNlZCBvbiBKQVZBIE1NQVBJIChKU1ItMTM1KSByZXF1aXJlbWVudCAqLwogICAgIE9NWF9CVTMyIHNQbGF5QmFja1JhdGU7ICAgICAgIC8qKjwgUmVsYXRpdmUgcGxheWJhY2sgcmF0ZSwgc3RvcmVkIGFzIFExNC4xNyBmaXhlZC1wb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJhc2VkIG9uIEpTUi0xMzUgcmVxdWlyZW1lbnQgKi8KLSAgICBPTVhfQlUzMiBzVGVtcG8gOyAgICAgICAgICAgICAvKio8IFRlbXBvIGluIGJlYXRzIHBlciBtaW51dGUgKEJQTSksIHN0b3JlZCBhcyBRMjIuMTAgCisgICAgT01YX0JVMzIgc1RlbXBvIDsgICAgICAgICAgICAgLyoqPCBUZW1wbyBpbiBiZWF0cyBwZXIgbWludXRlIChCUE0pLCBzdG9yZWQgYXMgUTIyLjEwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZC1wb2ludCBudW1iZXIgYmFzZWQgb24gSlNSLTEzNSByZXF1aXJlbWVudCAqLwotICAgIE9NWF9VMzIgbk1heFBvbHlwaG9ueTsgICAgICAgIC8qKjwgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpbXVsdGFuZW91cyBwb2x5cGhvbmljIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pY2VzLiBBIHZhbHVlIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGRlZmF1bHQgCisgICAgT01YX1UzMiBuTWF4UG9seXBob255OyAgICAgICAgLyoqPCBTcGVjaWZpZXMgdGhlIG1heGltdW0gc2ltdWx0YW5lb3VzIHBvbHlwaG9uaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWNlcy4gQSB2YWx1ZSBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2x5cGhvbnkgb2YgdGhlIGRldmljZSBpcyB1c2VkICAqLwogICAgIE9NWF9VMzIgbk51bVJlcGVhdDsgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCBwbGF5YmFjayAqLwotICAgIE9NWF9VMzIgblN0b3BUaW1lOyAgICAgICAgICAgIC8qKjwgVGltZSBpbiBtaWxsaXNlY29uZHMgdG8gaW5kaWNhdGUgd2hlbiBwbGF5YmFjayAKKyAgICBPTVhfVTMyIG5TdG9wVGltZTsgICAgICAgICAgICAvKio8IFRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIGluZGljYXRlIHdoZW4gcGxheWJhY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgc3RvcCBhdXRvbWF0aWNhbGx5LiAgU2V0IHRvIHplcm8gaWYgbm90IHVzZWQgKi8KICAgICBPTVhfVTE2IG5DaGFubmVsTXV0ZU1hc2s7ICAgICAvKio8IDE2IGJpdCBtYXNrIGZvciBjaGFubmVsIG11dGUgc3RhdHVzICovCiAgICAgT01YX1UxNiBuQ2hhbm5lbFNvbG9NYXNrOyAgICAgLyoqPCAxNiBiaXQgbWFzayBmb3IgY2hhbm5lbCBzb2xvIHN0YXR1cyAqLwpAQCAtOTM5LDIyICs5MzgsMjIgQEAKIH0gT01YX0FVRElPX0NPTkZJR19NSURJQ09OVFJPTFRZUEU7CiAKIAotLyoqIE1JREkgUGxheWJhY2sgU3RhdGVzIAorLyoqIE1JREkgUGxheWJhY2sgU3RhdGVzCiAgKiBAaW5ncm91cCBtaWRpCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfQVVESU9fTUlESVBMQVlCQUNLU1RBVEVUWVBFIHsKLSAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlVW5rbm93biA9IDAsICAgICAgLyoqPCBVbmtub3duIHN0YXRlIG9yIHN0YXRlIGRvZXMgbm90IG1hcCB0byAKLSAgCQkJCQkJCQkJCQkJCW90aGVyIGRlZmluZWQgc3RhdGVzICovCi0gIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZUNsb3NlZEVuZ2FnZWQsICAgIC8qKjwgTm8gTUlESSByZXNvdXJjZSBpcyBjdXJyZW50bHkgb3Blbi4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE1JREkgZW5naW5lIGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nIAorICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVVbmtub3duID0gMCwgICAgICAvKio8IFVua25vd24gc3RhdGUgb3Igc3RhdGUgZG9lcyBub3QgbWFwIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgZGVmaW5lZCBzdGF0ZXMgKi8KKyAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlQ2xvc2VkRW5nYWdlZCwgICAgLyoqPCBObyBNSURJIHJlc291cmNlIGlzIGN1cnJlbnRseSBvcGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBNSURJIGVuZ2luZSBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JREkgZXZlbnRzLiAqLwotICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVQYXJzaW5nLCAgICAgICAgICAvKio8IEEgTUlESSByZXNvdXJjZSBpcyBvcGVuIGFuZCBpcyBiZWluZyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltZWQuIFRoZSBNSURJIGVuZ2luZSBpcyBjdXJyZW50bHkgCisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZVBhcnNpbmcsICAgICAgICAgIC8qKjwgQSBNSURJIHJlc291cmNlIGlzIG9wZW4gYW5kIGlzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWVkLiBUaGUgTUlESSBlbmdpbmUgaXMgY3VycmVudGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBNSURJIGV2ZW50cy4gKi8KLSAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlT3BlbkVuZ2FnZWQsICAgICAgLyoqPCBBIE1JREkgcmVzb3VyY2UgaXMgb3BlbiBhbmQgcHJpbWVkIGJ1dCAKKyAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlT3BlbkVuZ2FnZWQsICAgICAgLyoqPCBBIE1JREkgcmVzb3VyY2UgaXMgb3BlbiBhbmQgcHJpbWVkIGJ1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwbGF5aW5nLiBUaGUgTUlESSBlbmdpbmUgaXMgY3VycmVudGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBNSURJIGV2ZW50cy4gVGhlIHRyYW5zaXRpb24gdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHN0YXRlIGlzIG9ubHkgcG9zc2libGUgZnJvbSB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzdGF0ZSBpcyBvbmx5IHBvc3NpYmxlIGZyb20gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT01YX0FVRElPX01JRElQbGF5QmFja1N0YXRlUGxheWluZyBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSAncGxheWJhY2sgaGVhZCcgcmVhY2hlcyB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbWVkaWEgZGF0YSBvciB0aGUgcGxheWJhY2sgc3RvcHMgZHVlCkBAIC05NjksOTUgKzk2OCw5NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGF1ZGlibGUgTUlESSBjb250ZW50IGR1cmluZyBwbGF5YmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseS4gVGhlIHNpdHVhdGlvbiBtYXkgY2hhbmdlIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzIGFyZSBmcmVlZCBsYXRlci4qLwotICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgIE9NWF9BVURJT19NSURJUGxheUJhY2tTdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICBPTVhfQVVESU9fTUlESVBsYXlCYWNrU3RhdGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9BVURJT19NSURJUExBWUJBQ0tTVEFURVRZUEU7CiAKIAotLyoqIE1JREkgc3RhdHVzIAorLyoqIE1JREkgc3RhdHVzCiAgKiBAaW5ncm91cCBtaWRpCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfTUlESVNUQVRVU1RZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwotICAgIE9NWF9VMTYgbk51bVRyYWNrczsgICAgICAgICAvKio8IE51bWJlciBvZiBNSURJIHRyYWNrcyBpbiB0aGUgZmlsZSwgcmVhZCBvbmx5IGZpZWxkLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUgdW50aWwgdGhlIGVudGlyZSAKKyAgICBPTVhfVTE2IG5OdW1UcmFja3M7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgTUlESSB0cmFja3MgaW4gdGhlIGZpbGUsIHJlYWQgb25seSBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUgdW50aWwgdGhlIGVudGlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gICovCi0gICAgT01YX1UzMiBuRHVyYXRpb247ICAgICAgICAgIC8qKjwgVGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudGx5IG9wZW4gTUlESSByZXNvdXJjZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBtaWxsaXNlY29uZHMuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgZW50aXJlIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gICovICAKLSAgICBPTVhfVTMyIG5Qb3NpdGlvbjsgICAgICAgICAgLyoqPCBDdXJyZW50IFBvc2l0aW9uIG9mIHRoZSBNSURJIHJlc291cmNlIGJlaW5nIHBsYXllZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBtaWxsaXNlY29uZHMgKi8KLSAgICBPTVhfQk9PTCBiVmlicmE7ICAgICAgICAgICAgLyoqPCBEb2VzIFZpYnJhIHRyYWNrIGV4aXN0PyBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdW50aWwgdGhlIGVudGlyZSBmaWxlIGlzIHBhcnNlZCBhbmQgYnVmZmVyZWQuICovCi0gICAgT01YX1UzMiBuTnVtTWV0YUV2ZW50czsgICAgIC8qKjwgVG90YWwgbnVtYmVyIG9mIE1JREkgTWV0YSBFdmVudHMgaW4gdGhlIGN1cnJlbnRseSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuIE1JREkgcmVzb3VyY2UuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZSAKKyAgICBPTVhfVTMyIG5EdXJhdGlvbjsgICAgICAgICAgLyoqPCBUaGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50bHkgb3BlbiBNSURJIHJlc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbWlsbGlzZWNvbmRzLiBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgZW50aXJlIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gICovCi0gICAgT01YX1UzMiBuTnVtQWN0aXZlVm9pY2VzOyAgIC8qKjwgTnVtYmVyIG9mIGFjdGl2ZSB2b2ljZXMgaW4gdGhlIGN1cnJlbnRseSBwbGF5aW5nIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JREkgcmVzb3VyY2UuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZSB1bnRpbCAKKyAgICBPTVhfVTMyIG5Qb3NpdGlvbjsgICAgICAgICAgLyoqPCBDdXJyZW50IFBvc2l0aW9uIG9mIHRoZSBNSURJIHJlc291cmNlIGJlaW5nIHBsYXllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG1pbGxpc2Vjb25kcyAqLworICAgIE9NWF9CT09MIGJWaWJyYTsgICAgICAgICAgICAvKio8IERvZXMgVmlicmEgdHJhY2sgZXhpc3Q/IE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHVudGlsIHRoZSBlbnRpcmUgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAqLworICAgIE9NWF9VMzIgbk51bU1ldGFFdmVudHM7ICAgICAvKio8IFRvdGFsIG51bWJlciBvZiBNSURJIE1ldGEgRXZlbnRzIGluIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuIE1JREkgcmVzb3VyY2UuIE5PVEU6IE1heSBub3QgcmV0dXJuIGEgbWVhbmluZ2Z1bCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBlbnRpcmUgZmlsZSBpcyBwYXJzZWQgYW5kIGJ1ZmZlcmVkLiAgKi8KKyAgICBPTVhfVTMyIG5OdW1BY3RpdmVWb2ljZXM7ICAgLyoqPCBOdW1iZXIgb2YgYWN0aXZlIHZvaWNlcyBpbiB0aGUgY3VycmVudGx5IHBsYXlpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSURJIHJlc291cmNlLiBOT1RFOiBNYXkgbm90IHJldHVybiBhIG1lYW5pbmdmdWwgdmFsdWUgdW50aWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIGZpbGUgaXMgcGFyc2VkIGFuZCBidWZmZXJlZC4gKi8KICAgICBPTVhfQVVESU9fTUlESVBMQVlCQUNLU1RBVEVUWVBFIGVNSURJUGxheUJhY2tTdGF0ZTsgIC8qKjwgTUlESSBwbGF5YmFjayBzdGF0ZSBlbnVtZXJhdGlvbiwgcmVhZCBvbmx5IGZpZWxkICovCiB9IE9NWF9BVURJT19DT05GSUdfTUlESVNUQVRVU1RZUEU7CiAKIAogLyoqIE1JREkgTWV0YSBFdmVudCBzdHJ1Y3R1cmUgb25lIHBlciBNZXRhIEV2ZW50LgotICogIE1JREkgTWV0YSBFdmVudHMgYXJlIGxpa2UgYXVkaW8gbWV0YWRhdGEsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIGludGVyc3BlcnNlZCAKLSAqICB3aXRoIHRoZSBNSURJIGNvbnRlbnQgdGhyb3VnaG91dCB0aGUgZmlsZSBhbmQgYXJlIG5vdCBsb2NhbGl6ZWQgaW4gdGhlIGhlYWRlci4gCi0gKiAgQXMgc3VjaCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIE1ldGEgRXZlbnRzIGZyb20gCi0gKiAgdGhlIGVuZ2luZSwgYXMgaXQgZW5jb3VudGVycyB0aGVzZSBNZXRhIEV2ZW50cyB3aXRoaW4gdGhlIE1JREkgY29udGVudC4gCi0gKiAgRm9yIGV4YW1wbGUsIFNNRiBmaWxlcyBjYW4gaGF2ZSB1cCB0byAxNCB0eXBlcyBvZiBNSURJIE1ldGEgRXZlbnRzIChjb3B5cmlnaHQsIAotICogIGF1dGhvciwgZGVmYXVsdCB0ZW1wbywgZXRjLikgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIGZpbGUuIAorICogIE1JREkgTWV0YSBFdmVudHMgYXJlIGxpa2UgYXVkaW8gbWV0YWRhdGEsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIGludGVyc3BlcnNlZAorICogIHdpdGggdGhlIE1JREkgY29udGVudCB0aHJvdWdob3V0IHRoZSBmaWxlIGFuZCBhcmUgbm90IGxvY2FsaXplZCBpbiB0aGUgaGVhZGVyLgorICogIEFzIHN1Y2gsIGl0IGlzIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBNZXRhIEV2ZW50cyBmcm9tCisgKiAgdGhlIGVuZ2luZSwgYXMgaXQgZW5jb3VudGVycyB0aGVzZSBNZXRhIEV2ZW50cyB3aXRoaW4gdGhlIE1JREkgY29udGVudC4KKyAqICBGb3IgZXhhbXBsZSwgU01GIGZpbGVzIGNhbiBoYXZlIHVwIHRvIDE0IHR5cGVzIG9mIE1JREkgTWV0YSBFdmVudHMgKGNvcHlyaWdodCwKKyAqICBhdXRob3IsIGRlZmF1bHQgdGVtcG8sIGV0Yy4pIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBmaWxlLgogICogIEBpbmdyb3VwIG1pZGkKICAqLwotdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UVFlQRXsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuSW5kZXg7ICAgICAgICAgICAvKio8IEluZGV4IG9mIE1ldGEgRXZlbnQgKi8gCi0gICAgT01YX1U4IG5NZXRhRXZlbnRUeXBlOyAgICAvKio8IE1ldGEgRXZlbnQgVHlwZSwgN2JpdHMgKGkuZS4gMCAtIDEyNykgKi8gCi0gICAgT01YX1UzMiBuTWV0YUV2ZW50U2l6ZTsgICAvKio8IHNpemUgb2YgdGhlIE1ldGEgRXZlbnQgaW4gYnl0ZXMgKi8gCit0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlRUWVBFeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLworICAgIE9NWF9VMzIgbkluZGV4OyAgICAgICAgICAgLyoqPCBJbmRleCBvZiBNZXRhIEV2ZW50ICovCisgICAgT01YX1U4IG5NZXRhRXZlbnRUeXBlOyAgICAvKio8IE1ldGEgRXZlbnQgVHlwZSwgN2JpdHMgKGkuZS4gMCAtIDEyNykgKi8KKyAgICBPTVhfVTMyIG5NZXRhRXZlbnRTaXplOyAgIC8qKjwgc2l6ZSBvZiB0aGUgTWV0YSBFdmVudCBpbiBieXRlcyAqLwogICAgIE9NWF9VMzIgblRyYWNrOyAgICAgICAgICAgLyoqPCB0cmFjayBudW1iZXIgZm9yIHRoZSBtZXRhIGV2ZW50ICovCiAgICAgT01YX1UzMiBuUG9zaXRpb247ICAgICAgICAvKio8IFBvc2l0aW9uIG9mIHRoZSBtZXRhLWV2ZW50IGluIG1pbGxpc2Vjb25kcyAqLwotfSBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlRUWVBFOyAKK30gT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UVFlQRTsKIAogCi0vKiogTUlESSBNZXRhIEV2ZW50IERhdGEgc3RydWN0dXJlIC0gb25lIHBlciBNZXRhIEV2ZW50LiAKKy8qKiBNSURJIE1ldGEgRXZlbnQgRGF0YSBzdHJ1Y3R1cmUgLSBvbmUgcGVyIE1ldGEgRXZlbnQuCiAgKiBAaW5ncm91cCBtaWRpCi0gKi8gCi10eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX01JRElNRVRBRVZFTlREQVRBVFlQRXsgCi0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8gCi0gICAgT01YX1UzMiBuSW5kZXg7ICAgICAgICAgICAvKio8IEluZGV4IG9mIE1ldGEgRXZlbnQgKi8gCi0gICAgT01YX1UzMiBuTWV0YUV2ZW50U2l6ZTsgICAvKio8IHNpemUgb2YgdGhlIE1ldGEgRXZlbnQgaW4gYnl0ZXMgKi8gCi0gICAgT01YX1U4IG5EYXRhWzFdOyAgICAgICAgICAvKio8IGFycmF5IG9mIG9uZSBvciBtb3JlIGJ5dGVzIG9mIG1ldGEgZGF0YSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW5kaWNhdGVkIGJ5IHRoZSBuTWV0YUV2ZW50U2l6ZSBmaWVsZCAqLyAKLX0gT01YX0FVRElPX0NPTkZJR19fTUlESU1FVEFFVkVOVERBVEFUWVBFOyAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NSURJTUVUQUVWRU5UREFUQVRZUEV7CisgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCisgICAgT01YX1UzMiBuSW5kZXg7ICAgICAgICAgICAvKio8IEluZGV4IG9mIE1ldGEgRXZlbnQgKi8KKyAgICBPTVhfVTMyIG5NZXRhRXZlbnRTaXplOyAgIC8qKjwgc2l6ZSBvZiB0aGUgTWV0YSBFdmVudCBpbiBieXRlcyAqLworICAgIE9NWF9VOCBuRGF0YVsxXTsgICAgICAgICAgLyoqPCBhcnJheSBvZiBvbmUgb3IgbW9yZSBieXRlcyBvZiBtZXRhIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW5kaWNhdGVkIGJ5IHRoZSBuTWV0YUV2ZW50U2l6ZSBmaWVsZCAqLworfSBPTVhfQVVESU9fQ09ORklHX19NSURJTUVUQUVWRU5UREFUQVRZUEU7CiAKIAogLyoqIEF1ZGlvIFZvbHVtZSBhZGp1c3RtZW50IGZvciBhIHBvcnQgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfVk9MVU1FVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyB2b2x1bWUuICBTZWxlY3QgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwb3J0IHRvIGFkanVzdCB0aGUgbWFzdGVyIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3QgdGhhdCBwb3J0J3Mgdm9sdW1lLiAgU2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwb3J0IHRvIGFkanVzdCB0aGUgbWFzdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lLiAqLwotICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIAorICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgbG9nYXJpdGhtaWMgc2NhbGUgKG1CKSAqLwogICAgIE9NWF9CUzMyIHNWb2x1bWU7ICAgICAgICAgICAvKio8IFZvbHVtZSBsaW5lYXIgc2V0dGluZyBpbiB0aGUgMC4uMTAwIHJhbmdlLCBPUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZSBsb2dhcml0aG1pYyBzZXR0aW5nIGZvciB0aGlzIHBvcnQuICBUaGUgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZvbHVtZSBhcmUgaW4gbUIgKG1pbGxpYmVscyA9IDEvMTAwIGRCKSByZWxhdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgZ2FpbiBvZiAxIChlLmcuIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxldmVsKS4gIFZhbHVlcyBhcmUgaW4gbUIgZnJvbSBuTWF4IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgZ2FpbiBvZiAxIChlLmcuIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbGV2ZWwpLiAgVmFsdWVzIGFyZSBpbiBtQiBmcm9tIG5NYXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4aW11bSB2b2x1bWUpIHRvIG5NaW4gbUIgKHR5cGljYWxseSBuZWdhdGl2ZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2UgdGhlIHZvbHVtZSBpcyAidm9sdGFnZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGEgInBvd2VyIiwgaXQgdGFrZXMgYSBzZXR0aW5nIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYwMCBtQiB0byBkZWNyZWFzZSB0aGUgdm9sdW1lIGJ5IDEvMi4gIElmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wb25lbnQgY2Fubm90IGFjY3VyYXRlbHkgc2V0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBvbmVudCBjYW5ub3QgYWNjdXJhdGVseSBzZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lIHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIGl0IG11c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIHZvbHVtZSB0byB0aGUgY2xvc2VzdCB2YWx1ZSBCRUxPVwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgdmFsdWUuICBXaGVuIGdldHRpbmcgdGhlCkBAIC0xMDcwLDI3ICsxMDY5LDI3IEBACiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0NIQU5ORUxWT0xVTUVUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgdG8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHRoYXQgcG9ydCdzIHZvbHVtZS4gIFNlbGVjdCB0aGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBvcnQgdG8gYWRqdXN0IHRoZSBtYXN0ZXIgCisgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuICBTZWxlY3QgdGhlIGlucHV0IHBvcnQgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyB2b2x1bWUuICBTZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBvcnQgdG8gYWRqdXN0IHRoZSBtYXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWUuICovCi0gICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwgCisgICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBPTVhfQUxMIHRvIGFwcGx5IHZvbHVtZSBzZXR0aW5ncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbCBjaGFubmVscyAqLwotICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIG9yIAorICAgIE9NWF9CT09MIGJMaW5lYXI7ICAgICAgICAgICAvKio8IElzIHRoZSB2b2x1bWUgdG8gYmUgc2V0IGluIGxpbmVhciAoMC4xMDApIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nYXJpdGhtaWMgc2NhbGUgKG1CKSAqLwogICAgIE9NWF9CUzMyIHNWb2x1bWU7ICAgICAgICAgICAvKio8IFZvbHVtZSBsaW5lYXIgc2V0dGluZyBpbiB0aGUgMC4uMTAwIHJhbmdlLCBPUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZSBsb2dhcml0aG1pYyBzZXR0aW5nIGZvciB0aGlzIHBvcnQuICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWVzIGZvciB2b2x1bWUgYXJlIGluIG1CIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZSBsb2dhcml0aG1pYyBzZXR0aW5nIGZvciB0aGlzIHBvcnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyBmb3Igdm9sdW1lIGFyZSBpbiBtQgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaWxsaWJlbHMgPSAxLzEwMCBkQikgcmVsYXRpdmUgdG8gYSBnYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgMSAoZS5nLiB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzIHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsZXZlbCkuICBWYWx1ZXMgYXJlIGluIG1CIGZyb20gbk1heCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4aW11bSB2b2x1bWUpIHRvIG5NaW4gbUIgKHR5cGljYWxseSBuZWdhdGl2ZSkuICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiAxIChlLmcuIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbGV2ZWwpLiAgVmFsdWVzIGFyZSBpbiBtQiBmcm9tIG5NYXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4aW11bSB2b2x1bWUpIHRvIG5NaW4gbUIgKHR5cGljYWxseSBuZWdhdGl2ZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2UgdGhlIHZvbHVtZSBpcyAidm9sdGFnZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGEgInBvd2VyIiwgaXQgdGFrZXMgYSBzZXR0aW5nIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYwMCBtQiB0byBkZWNyZWFzZSB0aGUgdm9sdW1lIGJ5IDEvMi4gIElmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wb25lbnQgY2Fubm90IGFjY3VyYXRlbHkgc2V0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBvbmVudCBjYW5ub3QgYWNjdXJhdGVseSBzZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lIHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIGl0IG11c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIHZvbHVtZSB0byB0aGUgY2xvc2VzdCB2YWx1ZSBCRUxPVwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgdmFsdWUuICBXaGVuIGdldHRpbmcgdGhlCkBAIC0xMTA1LDEyICsxMTA0LDEyIEBACiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0JBTEFOQ0VUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgUG9ydCBpbmRleCBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgdG8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHRoYXQgcG9ydCdzIGJhbGFuY2UuICBTZWxlY3QgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwb3J0IHRvIGFkanVzdCB0aGUgbWFzdGVyIAorICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LiAgU2VsZWN0IHRoZSBpbnB1dCBwb3J0IHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3QgdGhhdCBwb3J0J3MgYmFsYW5jZS4gIFNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgcG9ydCB0byBhZGp1c3QgdGhlIG1hc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbGFuY2UuICovCi0gICAgT01YX1MzMiBuQmFsYW5jZTsgICAgICAgICAgIC8qKjwgYmFsYW5jZSBzZXR0aW5nIGZvciB0aGlzIHBvcnQgCisgICAgT01YX1MzMiBuQmFsYW5jZTsgICAgICAgICAgIC8qKjwgYmFsYW5jZSBzZXR0aW5nIGZvciB0aGlzIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEwMCB0byAxMDAsIHdoZXJlIC0xMDAgaW5kaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIGxlZnQsIGFuZCBubyByaWdodCAqLwogfSBPTVhfQVVESU9fQ09ORklHX0JBTEFOQ0VUWVBFOwpAQCAtMTEyMCwxMCArMTExOSwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgT01YX0FVRElPX0NPTkZJR19NVVRFVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IFBvcnQgaW5kZXggaW5kaWNhdGluZyB3aGljaCBwb3J0IHRvIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCB0aGF0IHBvcnQncyBtdXRlLiAgU2VsZWN0IHRoZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgcG9ydCB0byBhZGp1c3QgdGhlIG1hc3RlciAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBQb3J0IGluZGV4IGluZGljYXRpbmcgd2hpY2ggcG9ydCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC4gIFNlbGVjdCB0aGUgaW5wdXQgcG9ydCB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHRoYXQgcG9ydCdzIG11dGUuICBTZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBvcnQgdG8gYWRqdXN0IHRoZSBtYXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRlLiAqLwogICAgIE9NWF9CT09MIGJNdXRlOyAgICAgICAgICAgICAvKio8IE11dGUgc2V0dGluZyBmb3IgdGhpcyBwb3J0ICovCiB9IE9NWF9BVURJT19DT05GSUdfTVVURVRZUEU7CkBAIC0xMTM0LDIwICsxMTMzLDIwIEBACiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCi0gICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwgCisgICAgT01YX1UzMiBuQ2hhbm5lbDsgICAgICAgICAgIC8qKjwgY2hhbm5lbCB0byBzZWxlY3QgZnJvbSAwIHRvIE4tMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBPTVhfQUxMIHRvIGFwcGx5IG11dGUgc2V0dGluZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhbGwgY2hhbm5lbHMgKi8KICAgICBPTVhfQk9PTCBiTXV0ZTsgICAgICAgICAgICAgLyoqPCBNdXRlIHNldHRpbmcgZm9yIHRoaXMgY2hhbm5lbCAqLwogICAgIE9NWF9CT09MIGJJc01JREk7ICAgICAgICAgICAvKio8IFRSVUUgaWYgbkNoYW5uZWwgcmVmZXJzIHRvIGEgTUlESSBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIG90aGVyd2lzZSAqLyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBvdGhlcndpc2UgKi8KIH0gT01YX0FVRElPX0NPTkZJR19DSEFOTkVMTVVURVRZUEU7CiAKIAogCi0vKiogRW5hYmxlIC8gRGlzYWJsZSBmb3IgbG91ZG5lc3MgY29udHJvbCwgd2hpY2ggYm9vc3RzIGJhc3MgYW5kIHRvIGEgCisvKiogRW5hYmxlIC8gRGlzYWJsZSBmb3IgbG91ZG5lc3MgY29udHJvbCwgd2hpY2ggYm9vc3RzIGJhc3MgYW5kIHRvIGEKICAqICBzbWFsbGVyIGV4dGVudCBoaWdoIGVuZCBmcmVxdWVuY2llcyB0byBjb21wZW5zYXRlIGZvciBoZWFyaW5nCiAgKiAgYWJpbGl0eSBhdCB0aGUgZXh0cmVtZSBlbmRzIG9mIHRoZSBhdWRpbyBzcGVjdHJ1bQotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0xPVURORVNTVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KQEAgLTExNTcsMzMgKzExNTYsMzMgQEAKIAogCiAvKiogRW5hYmxlIC8gRGlzYWJsZSBmb3IgYmFzcywgd2hpY2ggY29udHJvbHMgbG93IGZyZXF1ZW5jaWVzCi0gKi8gCisgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfQkFTU1RZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIGJhc3MgY29udHJvbCAqLwotICAgIE9NWF9TMzIgbkJhc3M7ICAgICAgICAgICAgIC8qKjwgYmFzcyBzZXR0aW5nIGZvciB0aGUgcG9ydCwgYXMgYSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXMgdmFsdWUgZnJvbSAtMTAwIHRvIDEwMCAgCisgICAgT01YX1MzMiBuQmFzczsgICAgICAgICAgICAgLyoqPCBiYXNzIHNldHRpbmcgZm9yIHRoZSBwb3J0LCBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzIHZhbHVlIGZyb20gLTEwMCB0byAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIG1lYW5zIG5vIGNoYW5nZSBpbiBiYXNzIGxldmVsKSovCiB9IE9NWF9BVURJT19DT05GSUdfQkFTU1RZUEU7CiAKIAogLyoqIEVuYWJsZSAvIERpc2FibGUgZm9yIHRyZWJsZSwgd2hpY2ggY29udHJvbHMgaGlnaCBmcmVxdWVuY2llcyB0b25lcwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX1RSRUJMRVRZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIHRyZWJsZSBjb250cm9sICovCiAgICAgT01YX1MzMiAgblRyZWJsZTsgICAgICAgICAgLyoqPCB0cmVibGUgc2V0dGluZyBmb3IgdGhlIHBvcnQsIGFzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXMgdmFsdWUgZnJvbSAtMTAwIHRvIDEwMCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzIHZhbHVlIGZyb20gLTEwMCB0byAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIG1lYW5zIG5vIGNoYW5nZSBpbiB0cmVibGUgbGV2ZWwpICovCiB9IE9NWF9BVURJT19DT05GSUdfVFJFQkxFVFlQRTsKIAogCi0vKiogQW4gZXF1YWxpemVyIGlzIHR5cGljYWxseSB1c2VkIGZvciB0d28gcmVhc29uczogdG8gY29tcGVuc2F0ZSBmb3IgYW4gCi0gKiAgc3ViLW9wdGltYWwgZnJlcXVlbmN5IHJlc3BvbnNlIG9mIGEgc3lzdGVtIHRvIG1ha2UgaXQgc291bmQgbW9yZSBuYXR1cmFsIAorLyoqIEFuIGVxdWFsaXplciBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgdHdvIHJlYXNvbnM6IHRvIGNvbXBlbnNhdGUgZm9yIGFuCisgKiAgc3ViLW9wdGltYWwgZnJlcXVlbmN5IHJlc3BvbnNlIG9mIGEgc3lzdGVtIHRvIG1ha2UgaXQgc291bmQgbW9yZSBuYXR1cmFsCiAgKiAgb3IgdG8gY3JlYXRlIGludGVudGlvbmFsbHkgc29tZSB1bm5hdHVyYWwgY29sb3JpbmcgdG8gdGhlIHNvdW5kIHRvIGNyZWF0ZQogICogIGFuIGVmZmVjdC4KICAqICBAaW5ncm91cCBlZmZlY3RzCkBAIC0xMTkzLDMzICsxMTkyLDMzIEBACiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogICAgIE9NWF9CT09MIGJFbmFibGU7ICAgICAgICAgIC8qKjwgRW5hYmxlL2Rpc2FibGUgZm9yIGVxdWFsaXplciAqLwotICAgIE9NWF9CVTMyIHNCYW5kSW5kZXg7ICAgICAgIC8qKjwgQmFuZCBudW1iZXIgdG8gYmUgc2V0LiAgVXBwZXIgTGltaXQgaXMgCisgICAgT01YX0JVMzIgc0JhbmRJbmRleDsgICAgICAgLyoqPCBCYW5kIG51bWJlciB0byBiZSBzZXQuICBVcHBlciBMaW1pdCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTi0xLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgYmFuZHMsIGxvd2VyIGxpbWl0IGlzIDAgKi8KICAgICBPTVhfQlUzMiBzQ2VudGVyRnJlcTsgICAgICAvKio8IENlbnRlciBmcmVxdWVjaWVzIGluIEh6LiAgVGhpcyBpcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkIG9ubHkgZWxlbWVudCBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG93ZXIsIGNlbnRlciBhbmQgdXBwZXIgZnJlcXVlbmN5IG9mIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCBvbmx5IGVsZW1lbnQgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG93ZXIsIGNlbnRlciBhbmQgdXBwZXIgZnJlcXVlbmN5IG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJhbmQuICAqLwogICAgIE9NWF9CUzMyIHNCYW5kTGV2ZWw7ICAgICAgIC8qKjwgYmFuZCBsZXZlbCBpbiBtaWxsaWJlbHMgKi8KIH0gT01YX0FVRElPX0NPTkZJR19FUVVBTElaRVJUWVBFOwogCiAKLS8qKiBTdGVyZW8gd2lkZW5pbmcgbW9kZSB0eXBlIAorLyoqIFN0ZXJlbyB3aWRlbmluZyBtb2RlIHR5cGUKICAqIEBpbmdyb3VwIGVmZmVjdHMKLSAqLyAKKyAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19TVEVSRU9XSURFTklOR1RZUEUgewogICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ0hlYWRwaG9uZXMsICAgIC8qKjwgU3RlcmVvIHdpZGVuaW5nIGZvciBsb3Vkc3BlYWtlcnMgKi8KICAgICBPTVhfQVVESU9fU3RlcmVvV2lkZW5pbmdMb3Vkc3BlYWtlcnMsICAvKio8IFN0ZXJlbyB3aWRlbmluZyBmb3IgY2xvc2VseSBzcGFjZWQgbG91ZHNwZWFrZXJzICovCi0gICAgT01YX0FVRElPX1N0ZXJlb1dpZGVuaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9BVURJT19TdGVyZW9XaWRlbmluZ1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0FVRElPX1N0ZXJlb1dpZGVuaW5nTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQVVESU9fU1RFUkVPV0lERU5JTkdUWVBFOwogCiAKIC8qKiBDb250cm9sIGZvciBzdGVyZW8gd2lkZW5pbmcsIHdoaWNoIGlzIGEgc3BlY2lhbCAyLWNoYW5uZWwKLSAqICBjYXNlIG9mIHRoZSBhdWRpbyB2aXJ0dWFsaXplciBlZmZlY3QuIEZvciBleGFtcGxlLCBmb3IgNS4xLWNoYW5uZWwgCi0gKiAgb3V0cHV0LCBpdCB0cmFuc2xhdGVzIHRvIHZpcnR1YWwgc3Vycm91bmQgc291bmQuIAorICogIGNhc2Ugb2YgdGhlIGF1ZGlvIHZpcnR1YWxpemVyIGVmZmVjdC4gRm9yIGV4YW1wbGUsIGZvciA1LjEtY2hhbm5lbAorICogIG91dHB1dCwgaXQgdHJhbnNsYXRlcyB0byB2aXJ0dWFsIHN1cnJvdW5kIHNvdW5kLgogICogQGluZ3JvdXAgZWZmZWN0cwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX1NURVJFT1dJREVOSU5HVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KQEAgLTEyMzIsMTAgKzEyMzEsMTAgQEAKIAogCiAvKiogVGhlIGNob3J1cyBlZmZlY3QgKG9yIGBgY2hvcmFsaXplcicnKSBpcyBhbnkgc2lnbmFsIHByb2Nlc3NvciB3aGljaCBtYWtlcwotICogIG9uZSBzb3VuZCBzb3VyY2UgKHN1Y2ggYXMgYSB2b2ljZSkgc291bmQgbGlrZSBtYW55IHN1Y2ggc291cmNlcyBzaW5naW5nIAotICogIChvciBwbGF5aW5nKSBpbiB1bmlzb24uIFNpbmNlIHBlcmZvcm1hbmNlIGluIHVuaXNvbiBpcyBuZXZlciBleGFjdCwgY2hvcnVzIAotICogIGVmZmVjdHMgc2ltdWxhdGUgdGhpcyBieSBtYWtpbmcgaW5kZXBlbmRlbnRseSBtb2RpZmllZCBjb3BpZXMgb2YgdGhlIGlucHV0IAotICogIHNpZ25hbC4gTW9kaWZpY2F0aW9ucyBtYXkgaW5jbHVkZSAoMSkgZGVsYXksICgyKSBmcmVxdWVuY3kgc2hpZnQsIGFuZCAKKyAqICBvbmUgc291bmQgc291cmNlIChzdWNoIGFzIGEgdm9pY2UpIHNvdW5kIGxpa2UgbWFueSBzdWNoIHNvdXJjZXMgc2luZ2luZworICogIChvciBwbGF5aW5nKSBpbiB1bmlzb24uIFNpbmNlIHBlcmZvcm1hbmNlIGluIHVuaXNvbiBpcyBuZXZlciBleGFjdCwgY2hvcnVzCisgKiAgZWZmZWN0cyBzaW11bGF0ZSB0aGlzIGJ5IG1ha2luZyBpbmRlcGVuZGVudGx5IG1vZGlmaWVkIGNvcGllcyBvZiB0aGUgaW5wdXQKKyAqICBzaWduYWwuIE1vZGlmaWNhdGlvbnMgbWF5IGluY2x1ZGUgKDEpIGRlbGF5LCAoMikgZnJlcXVlbmN5IHNoaWZ0LCBhbmQKICAqICAoMykgYW1wbGl0dWRlIG1vZHVsYXRpb24uCiAgKiBAaW5ncm91cCBlZmZlY3RzCiAgKi8KQEAgLTEyNDYsMTYgKzEyNDUsMTYgQEAKICAgICBPTVhfQk9PTCBiRW5hYmxlOyAgICAgICAgICAvKio8IEVuYWJsZS9kaXNhYmxlIGZvciBjaG9ydXMgKi8KICAgICBPTVhfQlUzMiBzRGVsYXk7ICAgICAgICAgICAvKio8IGF2ZXJhZ2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzICovCiAgICAgT01YX0JVMzIgc01vZHVsYXRpb25SYXRlOyAgLyoqPCByYXRlIG9mIG1vZHVsYXRpb24gaW4gbWlsbGloZXJ0eiAqLwotICAgIE9NWF9VMzIgbk1vZHVsYXRpb25EZXB0aDsgIC8qKjwgZGVwdGggb2YgbW9kdWxhdGlvbiBhcyBhIHBlcmNlbnRhZ2Ugb2YgCisgICAgT01YX1UzMiBuTW9kdWxhdGlvbkRlcHRoOyAgLyoqPCBkZXB0aCBvZiBtb2R1bGF0aW9uIGFzIGEgcGVyY2VudGFnZSBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgKGkuZS4gMCB0byAxMDApICovCiAgICAgT01YX0JVMzIgbkZlZWRiYWNrOyAgICAgICAgLyoqPCBGZWVkYmFjayBmcm9tIGNob3J1cyBvdXRwdXQgdG8gaW5wdXQgaW4gcGVyY2VudGFnZSAqLwogfSBPTVhfQVVESU9fQ09ORklHX0NIT1JVU1RZUEU7CiAKIAotLyoqIFJldmVyYmVyYXRpb24gaXMgcGFydCBvZiB0aGUgcmVmbGVjdGVkIHNvdW5kIHRoYXQgZm9sbG93cyB0aGUgZWFybHkgCi0gKiAgcmVmbGVjdGlvbnMuIEluIGEgdHlwaWNhbCByb29tLCB0aGlzIGNvbnNpc3RzIG9mIGEgZGVuc2Ugc3VjY2Vzc2lvbiBvZiAKLSAqICBlY2hvZXMgd2hvc2UgZW5lcmd5IGRlY2F5cyBleHBvbmVudGlhbGx5LiBUaGUgcmV2ZXJiZXJhdGlvbiBlZmZlY3Qgc3RydWN0dXJlIAotICogIGFzIGRlZmluZWQgaGVyZSBpbmNsdWRlcyBib3RoIChlYXJseSkgcmVmbGVjdGlvbnMgYXMgd2VsbCBhcyAobGF0ZSkgcmV2ZXJiZXJhdGlvbnMuIAorLyoqIFJldmVyYmVyYXRpb24gaXMgcGFydCBvZiB0aGUgcmVmbGVjdGVkIHNvdW5kIHRoYXQgZm9sbG93cyB0aGUgZWFybHkKKyAqICByZWZsZWN0aW9ucy4gSW4gYSB0eXBpY2FsIHJvb20sIHRoaXMgY29uc2lzdHMgb2YgYSBkZW5zZSBzdWNjZXNzaW9uIG9mCisgKiAgZWNob2VzIHdob3NlIGVuZXJneSBkZWNheXMgZXhwb25lbnRpYWxseS4gVGhlIHJldmVyYmVyYXRpb24gZWZmZWN0IHN0cnVjdHVyZQorICogIGFzIGRlZmluZWQgaGVyZSBpbmNsdWRlcyBib3RoIChlYXJseSkgcmVmbGVjdGlvbnMgYXMgd2VsbCBhcyAobGF0ZSkgcmV2ZXJiZXJhdGlvbnMuCiAgKiBAaW5ncm91cCBlZmZlY3RzCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9BVURJT19DT05GSUdfUkVWRVJCRVJBVElPTlRZUEUgewpAQCAtMTI2Myw0OCArMTI2Miw0OCBAQAogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KICAgICBPTVhfQk9PTCBiRW5hYmxlOyAgICAgICAgICAgICAvKio8IEVuYWJsZS9kaXNhYmxlIGZvciByZXZlcmJlcmF0aW9uIGNvbnRyb2wgKi8KLSAgICBPTVhfQlMzMiBzUm9vbUxldmVsOyAgICAgICAgICAvKio8IEludGVuc2l0eSBsZXZlbCBmb3IgdGhlIHdob2xlIHJvb20gZWZmZWN0IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gYm90aCBlYXJseSByZWZsZWN0aW9ucyBhbmQgbGF0ZSAKKyAgICBPTVhfQlMzMiBzUm9vbUxldmVsOyAgICAgICAgICAvKio8IEludGVuc2l0eSBsZXZlbCBmb3IgdGhlIHdob2xlIHJvb20gZWZmZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiBib3RoIGVhcmx5IHJlZmxlY3Rpb25zIGFuZCBsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcmJlcmF0aW9uKSBpbiBtaWxsaWJlbHMgKi8KICAgICBPTVhfQlMzMiBzUm9vbUhpZ2hGcmVxTGV2ZWw7ICAvKio8IEF0dGVudWF0aW9uIGF0IGhpZ2ggZnJlcXVlbmNpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSBpbnRlbnNpdHkgYXQgbG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY2llcyBpbiBtaWxsaWJlbHMgKi8KICAgICBPTVhfQlMzMiBzUmVmbGVjdGlvbnNMZXZlbDsgICAvKio8IEludGVuc2l0eSBsZXZlbCBvZiBlYXJseSByZWZsZWN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbGF0aXZlIHRvIHJvb20gdmFsdWUpLCBpbiBtaWxsaWJlbHMgKi8KLSAgICBPTVhfQlUzMiBzUmVmbGVjdGlvbnNEZWxheTsgICAvKio8IERlbGF5IHRpbWUgb2YgdGhlIGZpcnN0IHJlZmxlY3Rpb24gcmVsYXRpdmUgCisgICAgT01YX0JVMzIgc1JlZmxlY3Rpb25zRGVsYXk7ICAgLyoqPCBEZWxheSB0aW1lIG9mIHRoZSBmaXJzdCByZWZsZWN0aW9uIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZGlyZWN0IHBhdGgsIGluIG1pbGxpc2Vjb25kcyAqLwogICAgIE9NWF9CUzMyIHNSZXZlcmJMZXZlbDsgICAgICAgIC8qKjwgSW50ZW5zaXR5IGxldmVsIG9mIGxhdGUgcmV2ZXJiZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUgdG8gcm9vbSBsZXZlbCwgaW4gbWlsbGliZWxzICovCi0gICAgT01YX0JVMzIgc1JldmVyYkRlbGF5OyAgICAgICAgLyoqPCBUaW1lIGRlbGF5IGZyb20gdGhlIGZpcnN0IGVhcmx5IHJlZmxlY3Rpb24gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsYXRlIHJldmVyYmVyYXRpb24gCisgICAgT01YX0JVMzIgc1JldmVyYkRlbGF5OyAgICAgICAgLyoqPCBUaW1lIGRlbGF5IGZyb20gdGhlIGZpcnN0IGVhcmx5IHJlZmxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxhdGUgcmV2ZXJiZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgaW4gbWlsbGlzZWNvbmRzICovCiAgICAgT01YX0JVMzIgc0RlY2F5VGltZTsgICAgICAgICAgLyoqPCBMYXRlIHJldmVyYmVyYXRpb24gZGVjYXkgdGltZSBhdCBsb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jaWVzLCBpbiBtaWxsaXNlY29uZHMgKi8KLSAgICBPTVhfQlUzMiBuRGVjYXlIaWdoRnJlcVJhdGlvOyAvKio8IFJhdGlvIG9mIGhpZ2ggZnJlcXVlbmN5IGRlY2F5IHRpbWUgcmVsYXRpdmUgCisgICAgT01YX0JVMzIgbkRlY2F5SGlnaEZyZXFSYXRpbzsgLyoqPCBSYXRpbyBvZiBoaWdoIGZyZXF1ZW5jeSBkZWNheSB0aW1lIHJlbGF0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBsb3cgZnJlcXVlbmN5IGRlY2F5IHRpbWUgaW4gcGVyY2VudCAgKi8KICAgICBPTVhfVTMyIG5EZW5zaXR5OyAgICAgICAgICAgICAvKio8IE1vZGFsIGRlbnNpdHkgaW4gdGhlIGxhdGUgcmV2ZXJiZXJhdGlvbiBkZWNheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHBlcmNlbnQgKGkuZS4gMCAtIDEwMCkgKi8KICAgICBPTVhfVTMyIG5EaWZmdXNpb247ICAgICAgICAgICAvKio8IEVjaG8gZGVuc2l0eSBpbiB0aGUgbGF0ZSByZXZlcmJlcmF0aW9uIGRlY2F5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gcGVyY2VudCAoaS5lLiAwIC0gMTAwKSAqLwotICAgIE9NWF9CVTMyIHNSZWZlcmVuY2VIaWdoRnJlcTsgIC8qKjwgUmVmZXJlbmNlIGhpZ2ggZnJlcXVlbmN5IGluIEhlcnR6LiBUaGlzIGlzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyZXF1ZW5jeSB1c2VkIGFzIHRoZSByZWZlcmVuY2UgZm9yIGFsbCAKKyAgICBPTVhfQlUzMiBzUmVmZXJlbmNlSGlnaEZyZXE7ICAvKio8IFJlZmVyZW5jZSBoaWdoIGZyZXF1ZW5jeSBpbiBIZXJ0ei4gVGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyZXF1ZW5jeSB1c2VkIGFzIHRoZSByZWZlcmVuY2UgZm9yIGFsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGhpZ2gtZnJlcXVlbmN5IHNldHRpbmdzIGFib3ZlICovCiAKIH0gT01YX0FVRElPX0NPTkZJR19SRVZFUkJFUkFUSU9OVFlQRTsKIAogCi0vKiogUG9zc2libGUgc2V0dGluZ3MgZm9yIHRoZSBFY2hvIENhbmNlbGF0aW9uIHN0cnVjdHVyZSB0byB1c2UgCisvKiogUG9zc2libGUgc2V0dGluZ3MgZm9yIHRoZSBFY2hvIENhbmNlbGF0aW9uIHN0cnVjdHVyZSB0byB1c2UKICAqIEBpbmdyb3VwIGVmZmVjdHMKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9BVURJT19FQ0hPQ0FOVFlQRSB7CiAgICBPTVhfQVVESU9fRWNob0Nhbk9mZiA9IDAsICAgIC8qKjwgRWNobyBDYW5jZWxsYXRpb24gaXMgZGlzYWJsZWQgKi8KLSAgIE9NWF9BVURJT19FY2hvQ2FuTm9ybWFsLCAgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBub3JtYWwgb3BlcmF0aW9uIC0gCisgICBPTVhfQVVESU9fRWNob0Nhbk5vcm1hbCwgICAgIC8qKjwgRWNobyBDYW5jZWxsYXRpb24gbm9ybWFsIG9wZXJhdGlvbiAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBmcm9tIHBsYXN0aWNzIGFuZCBmYWNlICovCi0gICBPTVhfQVVESU9fRWNob0NhbkhGcmVlLCAgICAgIC8qKjwgRWNobyBDYW5jZWxsYXRpb24gb3B0aW1pemVkIGZvciAKKyAgIE9NWF9BVURJT19FY2hvQ2FuSEZyZWUsICAgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBvcHRpbWl6ZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZHMgRnJlZSBvcGVyYXRpb24gKi8KLSAgIE9NWF9BVURJT19FY2hvQ2FuQ2FyS2l0LCAgICAvKio8IEVjaG8gQ2FuY2VsbGF0aW9uIG9wdGltaXplZCBmb3IgCisgICBPTVhfQVVESU9fRWNob0NhbkNhcktpdCwgICAgLyoqPCBFY2hvIENhbmNlbGxhdGlvbiBvcHRpbWl6ZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyIEtpdCAobG9uZ2VyIGVjaG8pICovCi0gICBPTVhfQVVESU9fRWNob0Nhbktocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgIE9NWF9BVURJT19FY2hvQ2FuS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fRWNob0NhblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICBPTVhfQVVESU9fRWNob0Nhbk1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0FVRElPX0VDSE9DQU5UWVBFOwpAQCAtMTMxMyw3ICsxMzEyLDcgQEAKIC8qKiBFbmFibGUgLyBEaXNhYmxlIGZvciBlY2hvIGNhbmNlbGF0aW9uLCB3aGljaCByZW1vdmVzIHVuZGVzaXJlZCBlY2hvJ3MKICAqICBmcm9tIHRoZSBhdWRpbwogICogQGluZ3JvdXAgZWZmZWN0cwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX0VDSE9DQU5DRUxBVElPTlRZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCkBAIC0xMzI1LDcgKzEzMjQsNyBAQAogLyoqIEVuYWJsZSAvIERpc2FibGUgZm9yIG5vaXNlIHJlZHVjdGlvbiwgd2hpY2ggdW5kZXNpcmVkIG5vaXNlIGZyb20KICAqIHRoZSBhdWRpbwogICogQGluZ3JvdXAgZWZmZWN0cwotICovIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQVVESU9fQ09ORklHX05PSVNFUkVEVUNUSU9OVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29tcG9uZW50LmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvbXBvbmVudC5oCmluZGV4IGI1Yjc4NGUuLjBkYzJjNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29tcG9uZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db21wb25lbnQuaApAQCAtMTYsMjUgKzE2LDI1IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKLSAqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKLSAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAotICogCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgogICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKgogICovCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogLyogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQogICogIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAotICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5CiAgKi8KIAogI2luY2x1ZGUgPE9NWF9BdWRpby5oPgpAQCAtNjQsMTIgKzY0LDEyIEBACiAjaW5jbHVkZSA8T01YX090aGVyLmg+CiAKIC8qKiBAaW5ncm91cCBjb21wICovCi10eXBlZGVmIGVudW0gT01YX1BPUlRET01BSU5UWVBFIHsgCi0gICAgT01YX1BvcnREb21haW5BdWRpbywgCi0gICAgT01YX1BvcnREb21haW5WaWRlbywgCi0gICAgT01YX1BvcnREb21haW5JbWFnZSwgCit0eXBlZGVmIGVudW0gT01YX1BPUlRET01BSU5UWVBFIHsKKyAgICBPTVhfUG9ydERvbWFpbkF1ZGlvLAorICAgIE9NWF9Qb3J0RG9tYWluVmlkZW8sCisgICAgT01YX1BvcnREb21haW5JbWFnZSwKICAgICBPTVhfUG9ydERvbWFpbk90aGVyLAotICAgIE9NWF9Qb3J0RG9tYWluS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9Qb3J0RG9tYWluS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1BvcnREb21haW5WZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9Qb3J0RG9tYWluTWF4ID0gMHg3ZmZmZmZmCiB9IE9NWF9QT1JURE9NQUlOVFlQRTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGRpc2FibGVkIGEgcG9ydCBpcyB1bnBvcHVsYXRlZC4gQSBkaXNhYmxlZCBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IHBvcHVsYXRlZCB3aXRoIGJ1ZmZlcnMgb24gYSB0cmFuc2l0aW9uIHRvIElETEUuICovCiAgICAgT01YX0JPT0wgYlBvcHVsYXRlZDsgICAgICAgICAgIC8qKjwgUG9ydCBpcyBwb3B1bGF0ZWQgd2l0aCBhbGwgb2YgaXRzIGJ1ZmZlcnMgYXMgaW5kaWNhdGVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbkJ1ZmZlckNvdW50QWN0dWFsLiBBIGRpc2FibGVkIHBvcnQgaXMgYWx3YXlzIHVucG9wdWxhdGVkLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQnVmZmVyQ291bnRBY3R1YWwuIEEgZGlzYWJsZWQgcG9ydCBpcyBhbHdheXMgdW5wb3B1bGF0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gZW5hYmxlZCBwb3J0IGlzIHBvcHVsYXRlZCBvbiBhIHRyYW5zaXRpb24gdG8gT01YX1N0YXRlSWRsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1bnBvcHVsYXRlZCBvbiBhIHRyYW5zaXRpb24gdG8gbG9hZGVkLiAqLwogICAgIE9NWF9QT1JURE9NQUlOVFlQRSBlRG9tYWluOyAgICAvKio8IERvbWFpbiBvZiB0aGUgcG9ydC4gRGV0ZXJtaW5lcyB0aGUgY29udGVudHMgb2YgbWV0YWRhdGEgYmVsb3cuICovCkBAIC0xMDMsMjYgKzEwMywyNiBAQAogfSBPTVhfUEFSQU1fUE9SVERFRklOSVRJT05UWVBFOwogCiAvKiogQGluZ3JvdXAgY29tcCAqLwotdHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1UzMlRZUEUgeyAKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgLyoqPCBTaXplIG9mIHRoaXMgc3RydWN0dXJlLCBpbiBCeXRlcyAqLyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovIAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovIAordHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1UzMlRZUEUgeworICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgICAvKio8IFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUsIGluIEJ5dGVzICovCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCiAgICAgT01YX1UzMiBuVTMyOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgVTMyIHZhbHVlICovCiB9IE9NWF9QQVJBTV9VMzJUWVBFOwogCiAvKiogQGluZ3JvdXAgcnBtICovCiB0eXBlZGVmIGVudW0gT01YX1NVU1BFTlNJT05QT0xJQ1lUWVBFIHsKICAgICBPTVhfU3VzcGVuc2lvbkRpc2FibGVkLCAvKio8IE5vIHN1c3BlbnNpb247IHYxLjAgYmVoYXZpb3IgKi8KLSAgICBPTVhfU3VzcGVuc2lvbkVuYWJsZWQsICAvKio8IFN1c3BlbnNpb24gYWxsb3dlZCAqLyAgIAotICAgIE9NWF9TdXNwZW5zaW9uUG9saWN5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9TdXNwZW5zaW9uRW5hYmxlZCwgIC8qKjwgU3VzcGVuc2lvbiBhbGxvd2VkICovCisgICAgT01YX1N1c3BlbnNpb25Qb2xpY3lLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfU3VzcGVuc2lvblBvbGljeVN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1N1c3BlbnNpb25Qb2xpY3lNYXggPSAweDdmZmZmZmZmCiB9IE9NWF9TVVNQRU5TSU9OUE9MSUNZVFlQRTsKIAogLyoqIEBpbmdyb3VwIHJwbSAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1NVU1BFTlNJT05QT0xJQ1lUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgIAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9TVVNQRU5TSU9OUE9MSUNZVFlQRSBlUG9saWN5OwogfSBPTVhfUEFSQU1fU1VTUEVOU0lPTlBPTElDWVRZUEU7CiAKQEAgLTEzMCwyMiArMTMwLDIyIEBACiB0eXBlZGVmIGVudW0gT01YX1NVU1BFTlNJT05UWVBFIHsKICAgICBPTVhfTm90U3VzcGVuZGVkLCAvKio8IGNvbXBvbmVudCBpcyBub3Qgc3VzcGVuZGVkICovCiAgICAgT01YX1N1c3BlbmRlZCwgICAgLyoqPCBjb21wb25lbnQgaXMgc3VzcGVuZGVkICovCi0gICAgT01YX1N1c3BlbnNpb25LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1N1c3BlbnNpb25LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfU3VzcGVuc2lvblZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1N1c3BlbmRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9TVVNQRU5TSU9OVFlQRTsKIAogLyoqIEBpbmdyb3VwIHJwbSAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1BBUkFNX1NVU1BFTlNJT05UWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgCi0gICAgT01YX1NVU1BFTlNJT05UWVBFIGVUeXBlOyAgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfU1VTUEVOU0lPTlRZUEUgZVR5cGU7CiB9IE9NWF9QQVJBTV9TVVNQRU5TSU9OVFlQRSA7CiAKIHR5cGVkZWYgc3RydWN0IE9NWF9DT05GSUdfQk9PTEVBTlRZUEUgewogICAgIE9NWF9VMzIgblNpemU7CiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwotICAgIE9NWF9CT09MIGJFbmFibGVkOyAgICAKKyAgICBPTVhfQk9PTCBiRW5hYmxlZDsKIH0gT01YX0NPTkZJR19CT09MRUFOVFlQRTsKIAogLyogUGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIGNvbnRlbnQgdXJpIHRvIHVzZS4gKi8KQEAgLTE3MSw5ICsxNzEsOSBAQAogdHlwZWRlZiBzdHJ1Y3QgT01YX1JFU09VUkNFQ09OQ0VBTE1FTlRUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9CT09MIGJSZXNvdXJjZUNvbmNlYWxtZW50Rm9yYmlkZGVuOyAvKio8IGRpc2FsbG93IHRoZSB1c2Ugb2YgcmVzb3VyY2UgY29uY2VhbG1lbnQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgKGxpa2UgZGVncmFkaW5nIGFsZ29yaXRobSBxdWFsaXR5IHRvIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlciByZXNvdXJjZSBjb25zdW1wdGlvbiBvciBmdW5jdGlvbmFsIGJ5cGFzcykgCisgICAgT01YX0JPT0wgYlJlc291cmNlQ29uY2VhbG1lbnRGb3JiaWRkZW47IC8qKjwgZGlzYWxsb3cgdGhlIHVzZSBvZiByZXNvdXJjZSBjb25jZWFsbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzIChsaWtlIGRlZ3JhZGluZyBhbGdvcml0aG0gcXVhbGl0eSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlciByZXNvdXJjZSBjb25zdW1wdGlvbiBvciBmdW5jdGlvbmFsIGJ5cGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gYSBjb21wb25lbnQgYXMgYSByZXNvbHV0aW9uIHRvIHJlc291cmNlIGNvbmZsaWN0cy4gKi8KIH0gT01YX1JFU09VUkNFQ09OQ0VBTE1FTlRUWVBFOwogCkBAIC0xODgsNyArMTg4LDcgQEAKICAgICBPTVhfTWV0YWRhdGFDaGFyc2V0SmF2YUNvbmZvcm1hbnRVVEY4LAogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRVVEY3LAogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRJbWFwVVRGNywKLSAgICBPTVhfTWV0YWRhdGFDaGFyc2V0VVRGMTZMRSwgCisgICAgT01YX01ldGFkYXRhQ2hhcnNldFVURjE2TEUsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldFVURjE2QkUsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldEdCMTIzNDUsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldEhaR0IyMzEyLApAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgT01YX01ldGFkYXRhQ2hhcnNldElTTzIwMjJKUDEsCiAgICAgT01YX01ldGFkYXRhQ2hhcnNldElTT0VVQ0pQLAogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRTTVM3Qml0LAotICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX01ldGFkYXRhQ2hhcnNldEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9NZXRhZGF0YUNoYXJzZXRUeXBlTWF4PSAweDdGRkZGRkZGCiB9IE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFOwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgT01YX01ldGFkYXRhU2NvcGVUb3BMZXZlbCwKICAgICBPTVhfTWV0YWRhdGFTY29wZVBvcnRMZXZlbCwKICAgICBPTVhfTWV0YWRhdGFTY29wZU5vZGVMZXZlbCwKLSAgICBPTVhfTWV0YWRhdGFTY29wZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfTWV0YWRhdGFTY29wZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9NZXRhZGF0YVNjb3BlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfTWV0YWRhdGFTY29wZVR5cGVNYXggPSAweDdmZmZmZmZmCiB9IE9NWF9NRVRBREFUQVNDT1BFVFlQRTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgIE9NWF9NZXRhZGF0YVNlYXJjaFZhbHVlU2l6ZUJ5SW5kZXgsCiAgICAgT01YX01ldGFkYXRhU2VhcmNoSXRlbUJ5SW5kZXgsCiAgICAgT01YX01ldGFkYXRhU2VhcmNoTmV4dEl0ZW1CeUtleSwKLSAgICBPTVhfTWV0YWRhdGFTZWFyY2hLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX01ldGFkYXRhU2VhcmNoS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX01ldGFkYXRhU2VhcmNoVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfTWV0YWRhdGFTZWFyY2hUeXBlTWF4ID0gMHg3ZmZmZmZmZgogfSBPTVhfTUVUQURBVEFTRUFSQ0hNT0RFVFlQRTsKQEAgLTI1OCw3ICsyNTgsNyBAQAogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfTUVUQURBVEFTQ09QRVRZUEUgZVNjb3BlTW9kZTsKICAgICBPTVhfVTMyIG5TY29wZVNwZWNpZmllcjsKLSAgICBPTVhfVTMyIG5NZXRhZGF0YUl0ZW1JbmRleDsgIAorICAgIE9NWF9VMzIgbk1ldGFkYXRhSXRlbUluZGV4OwogICAgIE9NWF9NRVRBREFUQVNFQVJDSE1PREVUWVBFIGVTZWFyY2hNb2RlOwogICAgIE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFIGVLZXlDaGFyc2V0OwogICAgIE9NWF9VOCBuS2V5U2l6ZVVzZWQ7CkBAIC0yODcsMzAgKzI4NywzMCBAQAogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfQk9PTCBiQWxsS2V5czsKICAgICBPTVhfVTMyIG5QYXJlbnROb2RlSUQ7Ci0gICAgT01YX1UzMiBuTm9kZUluZGV4OyAKLSAgICBPTVhfVTMyIG5Ob2RlSUQ7IAorICAgIE9NWF9VMzIgbk5vZGVJbmRleDsKKyAgICBPTVhfVTMyIG5Ob2RlSUQ7CiAgICAgT01YX1NUUklORyBjTm9kZU5hbWU7CiAgICAgT01YX0JPT0wgYklzTGVhZlR5cGU7CiB9IE9NWF9DT05GSUdfQ09OVEFJTkVSTk9ERUlEVFlQRTsKIAogLyoqIEBpbmdyb3VwIG1ldGFkYXRhICovCi10eXBlZGVmIHN0cnVjdCBPTVhfUEFSQU1fTUVUQURBVEFGSUxURVJUWVBFIAoteyAKLSAgICBPTVhfVTMyIG5TaXplOyAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IAotICAgIE9NWF9CT09MIGJBbGxLZXlzOwkvKiBpZiB0cnVlIHRoZW4gdGhpcyBzdHJ1Y3R1cmUgcmVmZXJzIHRvIGFsbCBrZXlzIGFuZCAKK3R5cGVkZWYgc3RydWN0IE9NWF9QQVJBTV9NRVRBREFUQUZJTFRFUlRZUEUKK3sKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfQk9PTCBiQWxsS2V5czsgIC8qIGlmIHRydWUgdGhlbiB0aGlzIHN0cnVjdHVyZSByZWZlcnMgdG8gYWxsIGtleXMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgdGhyZWUga2V5IGZpZWxkcyBiZWxvdyBhcmUgaWdub3JlZCAqLwogICAgIE9NWF9NRVRBREFUQUNIQVJTRVRUWVBFIGVLZXlDaGFyc2V0OwotICAgIE9NWF9VMzIgbktleVNpemVVc2VkOyAKLSAgICBPTVhfVTggICBuS2V5IFsxMjhdOyAKKyAgICBPTVhfVTMyIG5LZXlTaXplVXNlZDsKKyAgICBPTVhfVTggICBuS2V5IFsxMjhdOwogICAgIE9NWF9VMzIgbkxhbmd1YWdlQ291bnRyeVNpemVVc2VkOwogICAgIE9NWF9VOCBuTGFuZ3VhZ2VDb3VudHJ5WzEyOF07Ci0gICAgT01YX0JPT0wgYkVuYWJsZWQ7CS8qIGlmIHRydWUgdGhlbiBrZXkgaXMgcGFydCBvZiBmaWx0ZXIgKGUuZy4gCisgICAgT01YX0JPT0wgYkVuYWJsZWQ7ICAvKiBpZiB0cnVlIHRoZW4ga2V5IGlzIHBhcnQgb2YgZmlsdGVyIChlLmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXRhaW5lZCBmb3IgcXVlcnkgbGF0ZXIpLiBJZiBmYWxzZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBrZXkgaXMgbm90IHBhcnQgb2YgZmlsdGVyICovCi19IE9NWF9QQVJBTV9NRVRBREFUQUZJTFRFUlRZUEU7IAorfSBPTVhfUEFSQU1fTUVUQURBVEFGSUxURVJUWVBFOwogCi0vKiogVGhlIE9NWF9IQU5ETEVUWVBFIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBjb21wb25lbnQgaGFuZGxlLiAgVGhlIGNvbXBvbmVudCAKKy8qKiBUaGUgT01YX0hBTkRMRVRZUEUgc3RydWN0dXJlIGRlZmluZXMgdGhlIGNvbXBvbmVudCBoYW5kbGUuICBUaGUgY29tcG9uZW50CiAgKiAgaGFuZGxlIGlzIHVzZWQgdG8gYWNjZXNzIGFsbCBvZiB0aGUgY29tcG9uZW50J3MgcHVibGljIG1ldGhvZHMgYW5kIGFsc28KICAqICBjb250YWlucyBwb2ludGVycyB0byB0aGUgY29tcG9uZW50J3MgcHJpdmF0ZSBkYXRhIGFyZWEuICBUaGUgY29tcG9uZW50CiAgKiAgaGFuZGxlIGlzIGluaXRpYWxpemVkIGJ5IHRoZSBPTVggY29yZSAod2l0aCBoZWxwIGZyb20gdGhlIGNvbXBvbmVudCkKQEAgLTMxOCw3ICszMTgsNyBAQAogICogIHN1Y2Nlc3NmdWxseSBsb2FkZWQsIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2FmZWx5IGFjY2VzcyBhbnkgb2YgdGhlCiAgKiAgY29tcG9uZW50J3MgcHVibGljIGZ1bmN0aW9ucyAoYWx0aG91Z2ggc29tZSBtYXkgcmV0dXJuIGFuIGVycm9yIGJlY2F1c2UKICAqICB0aGUgc3RhdGUgaXMgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIGFjY2VzcykuCi0gKiAKKyAqCiAgKiAgQGluZ3JvdXAgY29tcAogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfQ09NUE9ORU5UVFlQRQpAQCAtMzI5LDI2ICszMjksMjYgQEAKICAgICAgICAgZnVuY3Rpb24gd2lsbCBmaWxsIGluIHRoaXMgdmFsdWUuICovCiAgICAgT01YX1UzMiBuU2l6ZTsKIAotICAgIC8qKiBuVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgT01YIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgc3RydWN0dXJlIAotICAgICAgICBpcyBidWlsdCBhZ2FpbnN0LiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjcmVhdG9yIG9mIHRoaXMgCi0gICAgICAgIHN0cnVjdHVyZSB0byBpbml0aWFsaXplIHRoaXMgdmFsdWUgYW5kIGV2ZXJ5IHVzZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgCi0gICAgICAgIHNob3VsZCB2ZXJpZnkgdGhhdCBpdCBrbm93cyBob3cgdG8gdXNlIHRoZSBleGFjdCB2ZXJzaW9uIG9mIAorICAgIC8qKiBuVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgT01YIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgc3RydWN0dXJlCisgICAgICAgIGlzIGJ1aWx0IGFnYWluc3QuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNyZWF0b3Igb2YgdGhpcworICAgICAgICBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhbHVlIGFuZCBldmVyeSB1c2VyIG9mIHRoaXMgc3RydWN0dXJlCisgICAgICAgIHNob3VsZCB2ZXJpZnkgdGhhdCBpdCBrbm93cyBob3cgdG8gdXNlIHRoZSBleGFjdCB2ZXJzaW9uIG9mCiAgICAgICAgIHRoaXMgc3RydWN0dXJlIGZvdW5kIGhlcmVpbi4gKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAKLSAgICAvKiogcENvbXBvbmVudFByaXZhdGUgaXMgYSBwb2ludGVyIHRvIHRoZSBjb21wb25lbnQgcHJpdmF0ZSBkYXRhIGFyZWEuICAKLSAgICAgICAgVGhpcyBtZW1iZXIgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY29tcG9uZW50IHdoZW4gdGhlIAotICAgICAgICBjb21wb25lbnQgaXMgZmlyc3QgbG9hZGVkLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYWNjZXNzIHRoaXMgCisgICAgLyoqIHBDb21wb25lbnRQcml2YXRlIGlzIGEgcG9pbnRlciB0byB0aGUgY29tcG9uZW50IHByaXZhdGUgZGF0YSBhcmVhLgorICAgICAgICBUaGlzIG1lbWJlciBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjb21wb25lbnQgd2hlbiB0aGUKKyAgICAgICAgY29tcG9uZW50IGlzIGZpcnN0IGxvYWRlZC4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGFjY2VzcyB0aGlzCiAgICAgICAgIGRhdGEgYXJlYS4gKi8KICAgICBPTVhfUFRSIHBDb21wb25lbnRQcml2YXRlOwogCi0gICAgLyoqIHBBcHBsaWNhdGlvblByaXZhdGUgaXMgYSBwb2ludGVyIHRoYXQgaXMgYSBwYXJhbWV0ZXIgdG8gdGhlIAotICAgICAgICBPTVhfR2V0SGFuZGxlIG1ldGhvZCwgYW5kIGNvbnRhaW5zIGFuIGFwcGxpY2F0aW9uIHByaXZhdGUgdmFsdWUgCi0gICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBJTCBjbGllbnQuICBUaGlzIGFwcGxpY2F0aW9uIHByaXZhdGUgZGF0YSBpcyAKKyAgICAvKiogcEFwcGxpY2F0aW9uUHJpdmF0ZSBpcyBhIHBvaW50ZXIgdGhhdCBpcyBhIHBhcmFtZXRlciB0byB0aGUKKyAgICAgICAgT01YX0dldEhhbmRsZSBtZXRob2QsIGFuZCBjb250YWlucyBhbiBhcHBsaWNhdGlvbiBwcml2YXRlIHZhbHVlCisgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBJTCBjbGllbnQuICBUaGlzIGFwcGxpY2F0aW9uIHByaXZhdGUgZGF0YSBpcwogICAgICAgICByZXR1cm5lZCB0byB0aGUgSUwgQ2xpZW50IGJ5IE9NWCBpbiBhbGwgY2FsbGJhY2tzICovCiAgICAgT01YX1BUUiBwQXBwbGljYXRpb25Qcml2YXRlOwogCi0gICAgLyoqIHJlZmVyIHRvIE9NWF9HZXRDb21wb25lbnRWZXJzaW9uIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX0dldENvbXBvbmVudFZlcnNpb24gaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldENvbXBvbmVudFZlcnNpb24gbWV0aG9kLgogICAgICAqLwogICAgIE9NWF9FUlJPUlRZUEUgKCpHZXRDb21wb25lbnRWZXJzaW9uKSgKQEAgLTM1OCw3ICszNTgsNyBAQAogICAgICAgICAgICAgT01YX09VVCBPTVhfVkVSU0lPTlRZUEUqIHBTcGVjVmVyc2lvbiwKICAgICAgICAgICAgIE9NWF9PVVQgT01YX1VVSURUWVBFKiBwQ29tcG9uZW50VVVJRCk7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX1NlbmRDb21tYW5kIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX1NlbmRDb21tYW5kIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBTZW5kQ29tbWFuZCBtZXRob2QuCiAgICAgICovCiAgICAgT01YX0VSUk9SVFlQRSAoKlNlbmRDb21tYW5kKSgKQEAgLTM2Nyw0MyArMzY3LDQzIEBACiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblBhcmFtMSwKICAgICAgICAgICAgIE9NWF9JTiAgT01YX1BUUiBwQ21kRGF0YSk7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX0dldFBhcmFtZXRlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgLyoqIHJlZmVyIHRvIE9NWF9HZXRQYXJhbWV0ZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldFBhcmFtZXRlciBtZXRob2QuCiAgICAgICovCiAgICAgT01YX0VSUk9SVFlQRSAoKkdldFBhcmFtZXRlcikoCi0gICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsIAotICAgICAgICAgICAgT01YX0lOICBPTVhfSU5ERVhUWVBFIG5QYXJhbUluZGV4LCAgCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsCisgICAgICAgICAgICBPTVhfSU4gIE9NWF9JTkRFWFRZUEUgblBhcmFtSW5kZXgsCiAgICAgICAgICAgICBPTVhfSU5PVVQgT01YX1BUUiBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlKTsKIAogCi0gICAgLyoqIHJlZmVyIHRvIE9NWF9TZXRQYXJhbWV0ZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfU2V0UGFyYW1ldGVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBTZXRQYXJhbWV0ZXIgbWV0aG9kLgogICAgICAqLwogICAgIE9NWF9FUlJPUlRZUEUgKCpTZXRQYXJhbWV0ZXIpKAotICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LCAKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKICAgICAgICAgICAgIE9NWF9JTiAgT01YX0lOREVYVFlQRSBuSW5kZXgsCiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9QVFIgcENvbXBvbmVudFBhcmFtZXRlclN0cnVjdHVyZSk7CiAKIAotICAgIC8qKiByZWZlciB0byBPTVhfR2V0Q29uZmlnIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX0dldENvbmZpZyBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwKICAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgR2V0Q29uZmlnIG1ldGhvZC4KICAgICAgKi8KICAgICBPTVhfRVJST1JUWVBFICgqR2V0Q29uZmlnKSgKICAgICAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaENvbXBvbmVudCwKLSAgICAgICAgICAgIE9NWF9JTiAgT01YX0lOREVYVFlQRSBuSW5kZXgsIAorICAgICAgICAgICAgT01YX0lOICBPTVhfSU5ERVhUWVBFIG5JbmRleCwKICAgICAgICAgICAgIE9NWF9JTk9VVCBPTVhfUFRSIHBDb21wb25lbnRDb25maWdTdHJ1Y3R1cmUpOwogCiAKLSAgICAvKiogcmVmZXIgdG8gT01YX1NldENvbmZpZyBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwgCisgICAgLyoqIHJlZmVyIHRvIE9NWF9TZXRDb25maWcgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIFNldENvbmZpZyBtZXRob2QuCiAgICAgICovCiAgICAgT01YX0VSUk9SVFlQRSAoKlNldENvbmZpZykoCiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhDb21wb25lbnQsCi0gICAgICAgICAgICBPTVhfSU4gIE9NWF9JTkRFWFRZUEUgbkluZGV4LCAKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0lOREVYVFlQRSBuSW5kZXgsCiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9QVFIgcENvbXBvbmVudENvbmZpZ1N0cnVjdHVyZSk7CiAKIAotICAgIC8qKiByZWZlciB0byBPTVhfR2V0RXh0ZW5zaW9uSW5kZXggaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfR2V0RXh0ZW5zaW9uSW5kZXggaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldEV4dGVuc2lvbkluZGV4IG1ldGhvZC4KICAgICAgKi8KICAgICBPTVhfRVJST1JUWVBFICgqR2V0RXh0ZW5zaW9uSW5kZXgpKApAQCAtNDEyLDUwICs0MTIsNTAgQEAKICAgICAgICAgICAgIE9NWF9PVVQgT01YX0lOREVYVFlQRSogcEluZGV4VHlwZSk7CiAKIAotICAgIC8qKiByZWZlciB0byBPTVhfR2V0U3RhdGUgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfR2V0U3RhdGUgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEdldFN0YXRlIG1ldGhvZC4KICAgICAgKi8KICAgICBPTVhfRVJST1JUWVBFICgqR2V0U3RhdGUpKAogICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAogICAgICAgICAgICAgT01YX09VVCBPTVhfU1RBVEVUWVBFKiBwU3RhdGUpOwogCi0gICAgCisKICAgICAvKiogVGhlIENvbXBvbmVudFR1bm5lbFJlcXVlc3QgbWV0aG9kIHdpbGwgaW50ZXJhY3Qgd2l0aCBhbm90aGVyIE9NWAogICAgICAgICBjb21wb25lbnQgdG8gZGV0ZXJtaW5lIGlmIHR1bm5lbGluZyBpcyBwb3NzaWJsZSBhbmQgdG8gc2V0dXAgdGhlCi0gICAgICAgIHR1bm5lbGluZy4gIFRoZSByZXR1cm4gY29kZXMgZm9yIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIAorICAgICAgICB0dW5uZWxpbmcuICBUaGUgcmV0dXJuIGNvZGVzIGZvciB0aGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0bwogICAgICAgICBkZXRlcm1pbmUgaWYgdHVubmVsaW5nIGlzIG5vdCBwb3NzaWJsZSwgb3IgaWYgdHVubmVsaW5nIGlzIG5vdAotICAgICAgICBzdXBwb3J0ZWQuICAKLSAgICAgICAgCi0gICAgICAgIEJhc2UgcHJvZmlsZSBjb21wb25lbnRzIChpLmUuIG5vbi1pbnRlcm9wKSBkbyBub3Qgc3VwcG9ydCB0aGlzCi0gICAgICAgIG1ldGhvZCBhbmQgc2hvdWxkIHJldHVybiBPTVhfRXJyb3JOb3RJbXBsZW1lbnRlZCAKKyAgICAgICAgc3VwcG9ydGVkLgogCi0gICAgICAgIFRoZSBpbnRlcm9wIHByb2ZpbGUgY29tcG9uZW50IE1VU1Qgc3VwcG9ydCB0dW5uZWxpbmcgdG8gYW5vdGhlciAKLSAgICAgICAgaW50ZXJvcCBwcm9maWxlIGNvbXBvbmVudCB3aXRoIGEgY29tcGF0aWJsZSBwb3J0IHBhcmFtZXRlcnMuICAKKyAgICAgICAgQmFzZSBwcm9maWxlIGNvbXBvbmVudHMgKGkuZS4gbm9uLWludGVyb3ApIGRvIG5vdCBzdXBwb3J0IHRoaXMKKyAgICAgICAgbWV0aG9kIGFuZCBzaG91bGQgcmV0dXJuIE9NWF9FcnJvck5vdEltcGxlbWVudGVkCisKKyAgICAgICAgVGhlIGludGVyb3AgcHJvZmlsZSBjb21wb25lbnQgTVVTVCBzdXBwb3J0IHR1bm5lbGluZyB0byBhbm90aGVyCisgICAgICAgIGludGVyb3AgcHJvZmlsZSBjb21wb25lbnQgd2l0aCBhIGNvbXBhdGlibGUgcG9ydCBwYXJhbWV0ZXJzLgogICAgICAgICBBIGNvbXBvbmVudCBtYXkgYWxzbyBzdXBwb3J0IHByb3ByaWV0YXJ5IGNvbW11bmljYXRpb24uCi0gICAgICAgIAotICAgICAgICBJZiBwcm9wcmlldGFyeSBjb21tdW5pY2F0aW9uIGlzIHN1cHBvcnRlZCB0aGUgbmVnb3RpYXRpb24gb2YgCi0gICAgICAgIHByb3ByaWV0YXJ5IGNvbW11bmljYXRpb24gaXMgZG9uZSBvdXRzaWRlIG9mIE9NWCBpbiBhIHZlbmRvciAKLSAgICAgICAgc3BlY2lmaWMgd2F5LiBJdCBpcyBvbmx5IHJlcXVpcmVkIHRoYXQgdGhlIHByb3BlciByZXN1bHQgYmUgCi0gICAgICAgIHJldHVybmVkIGFuZCB0aGUgZGV0YWlscyBvZiBob3cgdGhlIHNldHVwIGlzIGRvbmUgaXMgbGVmdCAKLSAgICAgICAgdG8gdGhlIGNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbi4gIAotICAgIAorCisgICAgICAgIElmIHByb3ByaWV0YXJ5IGNvbW11bmljYXRpb24gaXMgc3VwcG9ydGVkIHRoZSBuZWdvdGlhdGlvbiBvZgorICAgICAgICBwcm9wcmlldGFyeSBjb21tdW5pY2F0aW9uIGlzIGRvbmUgb3V0c2lkZSBvZiBPTVggaW4gYSB2ZW5kb3IKKyAgICAgICAgc3BlY2lmaWMgd2F5LiBJdCBpcyBvbmx5IHJlcXVpcmVkIHRoYXQgdGhlIHByb3BlciByZXN1bHQgYmUKKyAgICAgICAgcmV0dXJuZWQgYW5kIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgc2V0dXAgaXMgZG9uZSBpcyBsZWZ0CisgICAgICAgIHRvIHRoZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24uCisKICAgICAgICAgV2hlbiB0aGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gblBvcnQgaW4gYW4gb3V0cHV0IHBvcnQsIHRoZQogICAgICAgICBjb21wb25lbnQgd2lsbDoKLSAgICAgICAgMS4gIFBvcHVsYXRlIHRoZSBwVHVubmVsU2V0dXAgc3RydWN0dXJlIHdpdGggdGhlIG91dHB1dCBwb3J0J3MgCisgICAgICAgIDEuICBQb3B1bGF0ZSB0aGUgcFR1bm5lbFNldHVwIHN0cnVjdHVyZSB3aXRoIHRoZSBvdXRwdXQgcG9ydCdzCiAgICAgICAgICAgICByZXF1aXJlbWVudHMgYW5kIGNvbnN0cmFpbnRzIGZvciB0aGUgdHVubmVsLgogCiAgICAgICAgIFdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCB3aGVuIG5Qb3J0IGluIGFuIGlucHV0IHBvcnQsIHRoZQogICAgICAgICBjb21wb25lbnQgd2lsbDoKLSAgICAgICAgMS4gIFF1ZXJ5IHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBvdXRwdXQgcG9ydCB0byAKKyAgICAgICAgMS4gIFF1ZXJ5IHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBvdXRwdXQgcG9ydCB0bwogICAgICAgICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBwb3J0cyBhcmUgY29tcGF0aWJsZSBmb3IgdHVubmVsaW5nCiAgICAgICAgIDIuICBJZiB0aGUgcG9ydHMgYXJlIGNvbXBhdGlibGUsIHRoZSBjb21wb25lbnQgc2hvdWxkIHN0b3JlCiAgICAgICAgICAgICB0aGUgdHVubmVsIHN0ZXAgcHJvdmlkZWQgYnkgdGhlIG91dHB1dCBwb3J0CiAgICAgICAgIDMuICBEZXRlcm1pbmUgd2hpY2ggcG9ydCAoZWl0aGVyIGlucHV0IG9yIG91dHB1dCkgaXMgdGhlIGJ1ZmZlcgogICAgICAgICAgICAgc3VwcGxpZXIsIGFuZCBjYWxsIE9NWF9TZXRQYXJhbWV0ZXIgb24gdGhlIG91dHB1dCBwb3J0IHRvCiAgICAgICAgICAgICBpbmRpY2F0ZSB0aGlzIHNlbGVjdGlvbi4KLSAgICAgICAgCisKICAgICAgICAgVGhlIGNvbXBvbmVudCB3aWxsIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgotICAgIAorCiAgICAgICAgIEBwYXJhbSBbaW5dIGhDb21wCiAgICAgICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIG1ldGhvZC4KQEAgLTQ2Myw3ICs0NjMsNyBAQAogICAgICAgICAgICAgblBvcnQgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHBvcnQgb24gdGhlIGNvbXBvbmVudCB0byBiZSB1c2VkCiAgICAgICAgICAgICBmb3IgdHVubmVsaW5nLgogICAgICAgICBAcGFyYW0gW2luXSBoVHVubmVsZWRDb21wCi0gICAgICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byB0dW5uZWwgd2l0aC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCAKKyAgICAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIHR1bm5lbCB3aXRoLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgbWV0aG9kLiAgV2hlbgogICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgaXMgMHgwIHRoZSBjb21wb25lbnQgc2hvdWxkIHNldHVwIHRoZSBwb3J0IGZvcgogICAgICAgICAgICAgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIENsaWVudC4KQEAgLTQ4Niw5ICs0ODYsOSBAQAogICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnQsCiAgICAgICAgIE9NWF9JTiAgT01YX0hBTkRMRVRZUEUgaFR1bm5lbGVkQ29tcCwKICAgICAgICAgT01YX0lOICBPTVhfVTMyIG5UdW5uZWxlZFBvcnQsCi0gICAgICAgIE9NWF9JTk9VVCAgT01YX1RVTk5FTFNFVFVQVFlQRSogcFR1bm5lbFNldHVwKTsgCisgICAgICAgIE9NWF9JTk9VVCAgT01YX1RVTk5FTFNFVFVQVFlQRSogcFR1bm5lbFNldHVwKTsKIAotICAgIC8qKiByZWZlciB0byBPTVhfVXNlQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX1VzZUJ1ZmZlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwKICAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgVXNlQnVmZmVyIG1ldGhvZC4KICAgICAgICAgQGluZ3JvdXAgYnVmCiAgICAgICovCkBAIC01MDAsNyArNTAwLDcgQEAKICAgICAgICAgICAgIE9NWF9JTiBPTVhfVTMyIG5TaXplQnl0ZXMsCiAgICAgICAgICAgICBPTVhfSU4gT01YX1U4KiBwQnVmZmVyKTsKIAotICAgIC8qKiByZWZlciB0byBPTVhfQWxsb2NhdGVCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfQWxsb2NhdGVCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMCiAgICAgICAgIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgb24gdGhlIEFsbG9jYXRlQnVmZmVyIG1ldGhvZC4KICAgICAgICAgQGluZ3JvdXAgYnVmCiAgICAgICovCkBAIC01MTEsNyArNTExLDcgQEAKICAgICAgICAgICAgIE9NWF9JTiBPTVhfUFRSIHBBcHBQcml2YXRlLAogICAgICAgICAgICAgT01YX0lOIE9NWF9VMzIgblNpemVCeXRlcyk7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX0ZyZWVCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfRnJlZUJ1ZmZlciBpbiBPTVhfY29yZS5oIG9yIHRoZSBPTVggSUwKICAgICAgICAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGUgRnJlZUJ1ZmZlciBtZXRob2QuCiAgICAgICAgIEBpbmdyb3VwIGJ1ZgogICAgICAqLwpAQCAtNTIwLDcgKzUyMCw3IEBACiAgICAgICAgICAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnRJbmRleCwKICAgICAgICAgICAgIE9NWF9JTiAgT01YX0JVRkZFUkhFQURFUlRZUEUqIHBCdWZmZXIpOwogCi0gICAgLyoqIHJlZmVyIHRvIE9NWF9FbXB0eVRoaXNCdWZmZXIgaW4gT01YX2NvcmUuaCBvciB0aGUgT01YIElMIAorICAgIC8qKiByZWZlciB0byBPTVhfRW1wdHlUaGlzQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBFbXB0eVRoaXNCdWZmZXIgbWV0aG9kLgogICAgICAgICBAaW5ncm91cCBidWYKICAgICAgKi8KQEAgLTUyOCw3ICs1MjgsNyBAQAogICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAogICAgICAgICAgICAgT01YX0lOICBPTVhfQlVGRkVSSEVBREVSVFlQRSogcEJ1ZmZlcik7CiAKLSAgICAvKiogcmVmZXIgdG8gT01YX0ZpbGxUaGlzQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTCAKKyAgICAvKiogcmVmZXIgdG8gT01YX0ZpbGxUaGlzQnVmZmVyIGluIE9NWF9jb3JlLmggb3IgdGhlIE9NWCBJTAogICAgICAgICBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIG9uIHRoZSBGaWxsVGhpc0J1ZmZlciBtZXRob2QuCiAgICAgICAgIEBpbmdyb3VwIGJ1ZgogICAgICAqLwpAQCAtNTQzLDEwICs1NDMsMTAgQEAKICAgICAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIEdldEhhbmRsZSBmdW5jdGlvbi4KICAgICAgICAgQHBhcmFtIFtpbl0gcENhbGxiYWNrcwotICAgICAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQ0FMTEJBQ0tUWVBFIHN0cnVjdHVyZSB1c2VkIHRvIHByb3ZpZGUgdGhlIAorICAgICAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQ0FMTEJBQ0tUWVBFIHN0cnVjdHVyZSB1c2VkIHRvIHByb3ZpZGUgdGhlCiAgICAgICAgICAgICBjYWxsYmFjayBpbmZvcm1hdGlvbiB0byB0aGUgY29tcG9uZW50CiAgICAgICAgIEBwYXJhbSBbaW5dIHBBcHBEYXRhCi0gICAgICAgICAgICBwb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUuICBJdCBpcyBhbnRpY2lwYXRlZCB0aGF0IAorICAgICAgICAgICAgcG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlLiAgSXQgaXMgYW50aWNpcGF0ZWQgdGhhdAogICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcGFzcyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSBvciBhICJ0aGlzCiAgICAgICAgICAgICBwb2ludGVyIiBpbiB0aGlzIGFyZWEgdG8gYWxsb3cgdGhlIGNhbGxiYWNrIChpbiB0aGUgYXBwbGljYXRpb24pCiAgICAgICAgICAgICB0byBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhlIGNhbGwKQEAgLTU1Niw3ICs1NTYsNyBAQAogICAgICAqLwogICAgIE9NWF9FUlJPUlRZUEUgKCpTZXRDYWxsYmFja3MpKAogICAgICAgICAgICAgT01YX0lOICBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAotICAgICAgICAgICAgT01YX0lOICBPTVhfQ0FMTEJBQ0tUWVBFKiBwQ2FsbGJhY2tzLCAKKyAgICAgICAgICAgIE9NWF9JTiAgT01YX0NBTExCQUNLVFlQRSogcENhbGxiYWNrcywKICAgICAgICAgICAgIE9NWF9JTiAgT01YX1BUUiBwQXBwRGF0YSk7CiAKICAgICAvKiogQ29tcG9uZW50RGVJbml0IG1ldGhvZCBpcyB1c2VkIHRvIGRlaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50CkBAIC01ODMsOCArNTgzLDggQEAKIAogICAgIE9NWF9FUlJPUlRZUEUgKCpDb21wb25lbnRSb2xlRW51bSkoCiAgICAgICAgIE9NWF9JTiBPTVhfSEFORExFVFlQRSBoQ29tcG9uZW50LAotCQlPTVhfT1VUIE9NWF9VOCAqY1JvbGUsCi0JCU9NWF9JTiBPTVhfVTMyIG5JbmRleCk7CisgICAgICAgIE9NWF9PVVQgT01YX1U4ICpjUm9sZSwKKyAgICAgICAgT01YX0lOIE9NWF9VMzIgbkluZGV4KTsKIAogfSBPTVhfQ09NUE9ORU5UVFlQRTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db250ZW50UGlwZS5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9Db250ZW50UGlwZS5oCmluZGV4IGVlOWU0ZGIuLjAyMjRjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29udGVudFBpcGUuaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvbnRlbnRQaXBlLmgKQEAgLTE2LDI1ICsxNiwyNSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqLwogCkBAIC04MSw4MyArODEsODMgQEAKIAogLyoqIE1hcCB0eXBlcyBmcm9tIE9NWCBzdGFuZGFyZCB0eXBlcyBvbmx5IGhlcmUgc28gaW50ZXJmYWNlIGlzIGFzIGdlbmVyaWMgYXMgcG9zc2libGUuICovCiB0eXBlZGVmIE9NWF9VMzIgICAgQ1ByZXN1bHQ7Ci10eXBlZGVmIGNoYXIgKiAgICAgQ1BzdHJpbmc7ICAKK3R5cGVkZWYgY2hhciAqICAgICBDUHN0cmluZzsKIHR5cGVkZWYgdm9pZCAqICAgICBDUGhhbmRsZTsKIHR5cGVkZWYgT01YX1UzMiAgICBDUHVpbnQ7Ci10eXBlZGVmIE9NWF9TMzIgICAgQ1BpbnQ7ICAKLXR5cGVkZWYgY2hhciAgICAgICBDUGJ5dGU7ICAKK3R5cGVkZWYgT01YX1MzMiAgICBDUGludDsKK3R5cGVkZWYgY2hhciAgICAgICBDUGJ5dGU7CiB0eXBlZGVmIE9NWF9CT09MICAgQ1Bib29sOwogCi0vKiogZW51bWVyYXRpb24gb2Ygb3JpZ2luIHR5cGVzIHVzZWQgaW4gdGhlIENQX1BJUEVUWVBFJ3MgU2VlayBmdW5jdGlvbiAKKy8qKiBlbnVtZXJhdGlvbiBvZiBvcmlnaW4gdHlwZXMgdXNlZCBpbiB0aGUgQ1BfUElQRVRZUEUncyBTZWVrIGZ1bmN0aW9uCiAgKiBAaW5ncm91cCBjcAogICovCiB0eXBlZGVmIGVudW0gQ1BfT1JJR0lOVFlQRSB7Ci0gICAgQ1BfT3JpZ2luQmVnaW4sICAgICAgCi0gICAgQ1BfT3JpZ2luQ3VyLCAgICAgIAotICAgIENQX09yaWdpbkVuZCwgICAgICAKLSAgICBDUF9PcmlnaW5LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgQ1BfT3JpZ2luQmVnaW4sCisgICAgQ1BfT3JpZ2luQ3VyLAorICAgIENQX09yaWdpbkVuZCwKKyAgICBDUF9PcmlnaW5LaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBDUF9PcmlnaW5WZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIENQX09yaWdpbk1heCA9IDBYN0ZGRkZGRkYKIH0gQ1BfT1JJR0lOVFlQRTsKIAotLyoqIGVudW1lcmF0aW9uIG9mIGNvbnRhY3QgYWNjZXNzIHR5cGVzIHVzZWQgaW4gdGhlIENQX1BJUEVUWVBFJ3MgT3BlbiBmdW5jdGlvbiAKKy8qKiBlbnVtZXJhdGlvbiBvZiBjb250YWN0IGFjY2VzcyB0eXBlcyB1c2VkIGluIHRoZSBDUF9QSVBFVFlQRSdzIE9wZW4gZnVuY3Rpb24KICAqIEBpbmdyb3VwIGNwCiAgKi8KIHR5cGVkZWYgZW51bSBDUF9BQ0NFU1NUWVBFIHsKLSAgICBDUF9BY2Nlc3NSZWFkLCAgICAgIAotICAgIENQX0FjY2Vzc1dyaXRlLCAgCi0gICAgQ1BfQWNjZXNzUmVhZFdyaXRlICwgIAotICAgIENQX0FjY2Vzc0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBDUF9BY2Nlc3NSZWFkLAorICAgIENQX0FjY2Vzc1dyaXRlLAorICAgIENQX0FjY2Vzc1JlYWRXcml0ZSwKKyAgICBDUF9BY2Nlc3NLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBDUF9BY2Nlc3NWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIENQX0FjY2Vzc01heCA9IDBYN0ZGRkZGRkYKIH0gQ1BfQUNDRVNTVFlQRTsKIAotLyoqIGVudW1lcmF0aW9uIG9mIHJlc3VsdHMgcmV0dXJuZWQgYnkgdGhlIENQX1BJUEVUWVBFJ3MgQ2hlY2tBdmFpbGFibGVCeXRlcyBmdW5jdGlvbiAKKy8qKiBlbnVtZXJhdGlvbiBvZiByZXN1bHRzIHJldHVybmVkIGJ5IHRoZSBDUF9QSVBFVFlQRSdzIENoZWNrQXZhaWxhYmxlQnl0ZXMgZnVuY3Rpb24KICAqIEBpbmdyb3VwIGNwCiAgKi8KIHR5cGVkZWYgZW51bSBDUF9DSEVDS0JZVEVTUkVTVUxUVFlQRQogewotICAgIENQX0NoZWNrQnl0ZXNPaywgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlcmUgYXJlIGF0IGxlYXN0IHRoZSByZXF1ZXN0IG51bWJlciAKKyAgICBDUF9DaGVja0J5dGVzT2ssICAgICAgICAgICAgICAgICAgICAvKio8IFRoZXJlIGFyZSBhdCBsZWFzdCB0aGUgcmVxdWVzdCBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBieXRlcyBhdmFpbGFibGUgKi8KLSAgICBDUF9DaGVja0J5dGVzTm90UmVhZHksICAgICAgICAgICAgICAvKio8IFRoZSBwaXBlIGlzIHN0aWxsIHJldHJpZXZpbmcgYnl0ZXMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHByZXNlbnRseSBsYWNrcyBzdWZmaWNpZW50IGJ5dGVzLiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGV5IGFyZSAKKyAgICBDUF9DaGVja0J5dGVzTm90UmVhZHksICAgICAgICAgICAgICAvKio8IFRoZSBwaXBlIGlzIHN0aWxsIHJldHJpZXZpbmcgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJlc2VudGx5IGxhY2tzIHN1ZmZpY2llbnQgYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpZW50IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhleSBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUuICovCi0gICAgQ1BfQ2hlY2tCeXRlc0luc3VmZmljaWVudEJ5dGVzICAsICAgICAvKio8IFRoZSBwaXBlIGhhcyByZXRyaWV2ZWQgYWxsIGJ5dGVzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCB0aG9zZSBhdmFpbGFibGUgYXJlIGxlc3MgdGhhbiB0aG9zZSAKKyAgICBDUF9DaGVja0J5dGVzSW5zdWZmaWNpZW50Qnl0ZXMsICAgICAvKio8IFRoZSBwaXBlIGhhcyByZXRyaWV2ZWQgYWxsIGJ5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRob3NlIGF2YWlsYWJsZSBhcmUgbGVzcyB0aGFuIHRob3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkICovCiAgICAgQ1BfQ2hlY2tCeXRlc0F0RW5kT2ZTdHJlYW0sICAgICAgICAgLyoqPCBUaGUgcGlwZSBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHN0cmVhbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubyBtb3JlIGJ5dGVzIGFyZSBhdmFpbGFibGUuICovCiAgICAgQ1BfQ2hlY2tCeXRlc091dE9mQnVmZmVycywgICAgICAgICAgLyoqPCBBbGwgcmVhZC93cml0ZSBidWZmZXJzIGFyZSBjdXJyZW50bHkgaW4gdXNlLiAqLwotICAgIENQX0NoZWNrQnl0ZXNLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgQ1BfQ2hlY2tCeXRlc0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIENQX0NoZWNrQnl0ZXNWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIENQX0NoZWNrQnl0ZXNNYXggPSAwWDdGRkZGRkZGCiB9IENQX0NIRUNLQllURVNSRVNVTFRUWVBFOwogCi0vKiogZW51bWVyYXRpb24gb2YgY29udGVudCBwaXBlIGV2ZW50cyBzZW50IHRvIHRoZSBjbGllbnQgY2FsbGJhY2suIAorLyoqIGVudW1lcmF0aW9uIG9mIGNvbnRlbnQgcGlwZSBldmVudHMgc2VudCB0byB0aGUgY2xpZW50IGNhbGxiYWNrLgogICogQGluZ3JvdXAgY3AKICAqLwogdHlwZWRlZiBlbnVtIENQX0VWRU5UVFlQRXsKLSAgICBDUF9CeXRlc0F2YWlsYWJsZSwgICAgICAJICAgIC8qKiBieXRlcyByZXF1ZXN0ZWQgaW4gYSBDaGVja0F2YWlsYWJsZUJ5dGVzIGNhbGwgYXJlIG5vdyBhdmFpbGFibGUqLwotICAgIENQX092ZXJmbG93LCAgCQkgICAgICAgICAgIC8qKiBlbnVtZXJhdGlvbiBvZiBjb250ZW50IHBpcGUgZXZlbnRzIHNlbnQgdG8gdGhlIGNsaWVudCBjYWxsYmFjayovCi0gICAgQ1BfUGlwZURpc2Nvbm5lY3RlZCAgLCAgCQkgICAgLyoqIGVudW1lcmF0aW9uIG9mIGNvbnRlbnQgcGlwZSBldmVudHMgc2VudCB0byB0aGUgY2xpZW50IGNhbGxiYWNrKi8KLSAgICBDUF9FdmVudEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBDUF9CeXRlc0F2YWlsYWJsZSwgICAgICAgICAgICAgICAgICAgICAgLyoqIGJ5dGVzIHJlcXVlc3RlZCBpbiBhIENoZWNrQXZhaWxhYmxlQnl0ZXMgY2FsbCBhcmUgbm93IGF2YWlsYWJsZSovCisgICAgQ1BfT3ZlcmZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBlbnVtZXJhdGlvbiBvZiBjb250ZW50IHBpcGUgZXZlbnRzIHNlbnQgdG8gdGhlIGNsaWVudCBjYWxsYmFjayovCisgICAgQ1BfUGlwZURpc2Nvbm5lY3RlZCwgICAgICAgICAgICAgICAgICAgIC8qKiBlbnVtZXJhdGlvbiBvZiBjb250ZW50IHBpcGUgZXZlbnRzIHNlbnQgdG8gdGhlIGNsaWVudCBjYWxsYmFjayovCisgICAgQ1BfRXZlbnRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBDUF9FdmVudFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgQ1BfRXZlbnRNYXggPSAwWDdGRkZGRkZGCiB9IENQX0VWRU5UVFlQRTsKIAotLyoqIGNvbnRlbnQgcGlwZSBkZWZpbml0aW9uIAorLyoqIGNvbnRlbnQgcGlwZSBkZWZpbml0aW9uCiAgKiBAaW5ncm91cCBjcAogICovCiB0eXBlZGVmIHN0cnVjdCBDUF9QSVBFVFlQRQogewotICAgIC8qKiBPcGVuIGEgY29udGVudCBzdHJlYW0gZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gKi8gCisgICAgLyoqIE9wZW4gYSBjb250ZW50IHN0cmVhbSBmb3IgcmVhZGluZyBvciB3cml0aW5nLiAqLwogICAgIENQcmVzdWx0ICgqT3BlbikoIENQaGFuZGxlKiBoQ29udGVudCwgQ1BzdHJpbmcgc3pVUkksIENQX0FDQ0VTU1RZUEUgZUFjY2VzcyApOwogCi0gICAgLyoqIENsb3NlIGEgY29udGVudCBzdHJlYW0uICovIAorICAgIC8qKiBDbG9zZSBhIGNvbnRlbnQgc3RyZWFtLiAqLwogICAgIENQcmVzdWx0ICgqQ2xvc2UpKCBDUGhhbmRsZSBoQ29udGVudCApOwogCi0gICAgLyoqIENyZWF0ZSBhIGNvbnRlbnQgc291cmNlIGFuZCBvcGVuIGl0IGZvciB3cml0aW5nLiAqLyAKKyAgICAvKiogQ3JlYXRlIGEgY29udGVudCBzb3VyY2UgYW5kIG9wZW4gaXQgZm9yIHdyaXRpbmcuICovCiAgICAgQ1ByZXN1bHQgKCpDcmVhdGUpKCBDUGhhbmRsZSAqaENvbnRlbnQsIENQc3RyaW5nIHN6VVJJICk7CiAKICAgICAvKiogQ2hlY2sgdGhlIHRoYXQgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgKGRlcGVuZGluZyBvbiBhY2Nlc3MgdHlwZSkuKi8KQEAgLTE3MSwxOSArMTcxLDE5IEBACiAKICAgICAvKiogUmV0cmlldmUgZGF0YSBvZiB0aGUgc3BlY2lmaWVkIHNpemUgZnJvbSB0aGUgY29udGVudCBzdHJlYW0gKGFkdmFuY2UgY29udGVudCBwb2ludGVyIGJ5IHNpemUgb2YgZGF0YSkuCiAgICAgICAgTm90ZTogcGlwZSBjbGllbnQgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3Igc21hbGwgaGlnaCBmcmVxdWVuY3kgcmVhZHMuICovCi0gICAgQ1ByZXN1bHQgKCpSZWFkKSggQ1BoYW5kbGUgaENvbnRlbnQsIENQYnl0ZSAqcERhdGEsIENQdWludCBuU2l6ZSk7IAorICAgIENQcmVzdWx0ICgqUmVhZCkoIENQaGFuZGxlIGhDb250ZW50LCBDUGJ5dGUgKnBEYXRhLCBDUHVpbnQgblNpemUpOwogCi0gICAgLyoqIFJldHJpZXZlIGEgYnVmZmVyIGFsbG9jYXRlZCBieSB0aGUgcGlwZSB0aGF0IGNvbnRhaW5zIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLiAKKyAgICAvKiogUmV0cmlldmUgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHRoZSBwaXBlIHRoYXQgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCiAgICAgICAgQnVmZmVyIGNvbnRhaW5zIHRoZSBuZXh0IGJsb2NrIG9mIGJ5dGVzLCBhcyBzcGVjaWZpZWQgYnkgblNpemUsIG9mIHRoZSBjb250ZW50LiBuU2l6ZSBhbHNvCi0gICAgICAgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgYWN0dWFsbHkgcmVhZC4gQ29udGVudCBwb2ludGVyIGFkdmFuY2VzIHRoZSBieSB0aGUgcmV0dXJuZWQgc2l6ZS4gCi0gICAgICAgTm90ZTogcGlwZSBwcm92aWRlcyBwb2ludGVyLiBUaGlzIGZ1bmN0aW9uIGlzIGFwcHJvcHJpYXRlIGZvciBsYXJnZSByZWFkcy4gVGhlIGNsaWVudCBtdXN0IGNhbGwgCi0gICAgICAgUmVsZWFzZVJlYWRCdWZmZXIgd2hlbiBkb25lIHdpdGggYnVmZmVyLiAKKyAgICAgICByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBibG9jayBhY3R1YWxseSByZWFkLiBDb250ZW50IHBvaW50ZXIgYWR2YW5jZXMgdGhlIGJ5IHRoZSByZXR1cm5lZCBzaXplLgorICAgICAgIE5vdGU6IHBpcGUgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3IgbGFyZ2UgcmVhZHMuIFRoZSBjbGllbnQgbXVzdCBjYWxsCisgICAgICAgUmVsZWFzZVJlYWRCdWZmZXIgd2hlbiBkb25lIHdpdGggYnVmZmVyLgogCiAgICAgICAgSW4gc29tZSBjYXNlcyB0aGUgcmVxdWVzdGVkIGJsb2NrIG1heSBub3QgcmVzaWRlIGluIGNvbnRpZ3VvdXMgbWVtb3J5IHdpdGhpbiB0aGUKLSAgICAgICBwaXBlIGltcGxlbWVudGF0aW9uLiBGb3IgaW5zdGFuY2UgaWYgdGhlIHBpcGUgbGV2ZXJhZ2VzIGEgY2lyY3VsYXIgYnVmZmVyIHRoZW4gdGhlIHJlcXVlc3RlZCAKLSAgICAgICBibG9jayBtYXkgc3RyYWRkbGUgdGhlIGJvdW5kYXJ5IG9mIHRoZSBjaXJjdWxhciBidWZmZXIuIEJ5IGRlZmF1bHQgYSBwaXBlIGltcGxlbWVudGF0aW9uIAorICAgICAgIHBpcGUgaW1wbGVtZW50YXRpb24uIEZvciBpbnN0YW5jZSBpZiB0aGUgcGlwZSBsZXZlcmFnZXMgYSBjaXJjdWxhciBidWZmZXIgdGhlbiB0aGUgcmVxdWVzdGVkCisgICAgICAgYmxvY2sgbWF5IHN0cmFkZGxlIHRoZSBib3VuZGFyeSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyLiBCeSBkZWZhdWx0IGEgcGlwZSBpbXBsZW1lbnRhdGlvbgogICAgICAgIHBlcmZvcm1zIGEgY29weSBpbiB0aGlzIGNhc2UgdG8gcHJvdmlkZSB0aGUgYmxvY2sgdG8gdGhlIHBpcGUgY2xpZW50IGluIG9uZSBjb250aWd1b3VzIGJ1ZmZlci4KLSAgICAgICBJZiwgaG93ZXZlciwgdGhlIGNsaWVudCBzZXRzIGJGb3JiaWRDb3B5LCB0aGVuIHRoZSBwaXBlIHJldHVybnMgb25seSB0aG9zZSBieXRlcyBwcmVjZWRpbmcgdGhlIG1lbW9yeSAKKyAgICAgICBJZiwgaG93ZXZlciwgdGhlIGNsaWVudCBzZXRzIGJGb3JiaWRDb3B5LCB0aGVuIHRoZSBwaXBlIHJldHVybnMgb25seSB0aG9zZSBieXRlcyBwcmVjZWRpbmcgdGhlIG1lbW9yeQogICAgICAgIGJvdW5kYXJ5LiBIZXJlIHRoZSBjbGllbnQgbWF5IHJldHJpZXZlIHRoZSBkYXRhIGluIHNlZ21lbnRzIG92ZXIgc3VjY2Vzc2l2ZSBjYWxscy4gKi8KICAgICBDUHJlc3VsdCAoKlJlYWRCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICoqcHBCdWZmZXIsIENQdWludCAqblNpemUsIENQYm9vbCBiRm9yYmlkQ29weSk7CiAKQEAgLTE5MiwxNCArMTkyLDE0IEBACiAKICAgICAvKiogV3JpdGUgZGF0YSBvZiB0aGUgc3BlY2lmaWVkIHNpemUgdG8gdGhlIGNvbnRlbnQgKGFkdmFuY2UgY29udGVudCBwb2ludGVyIGJ5IHNpemUgb2YgZGF0YSkuCiAgICAgICAgTm90ZTogcGlwZSBjbGllbnQgcHJvdmlkZXMgcG9pbnRlci4gVGhpcyBmdW5jdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3Igc21hbGwgaGlnaCBmcmVxdWVuY3kgd3JpdGVzLiAqLwotICAgIENQcmVzdWx0ICgqV3JpdGUpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICpkYXRhLCBDUHVpbnQgblNpemUpOyAKKyAgICBDUHJlc3VsdCAoKldyaXRlKSggQ1BoYW5kbGUgaENvbnRlbnQsIENQYnl0ZSAqZGF0YSwgQ1B1aW50IG5TaXplKTsKIAotICAgIC8qKiBSZXRyaWV2ZSBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdGhlIHBpcGUgdXNlZCB0byB3cml0ZSBkYXRhIHRvIHRoZSBjb250ZW50LiAKKyAgICAvKiogUmV0cmlldmUgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHRoZSBwaXBlIHVzZWQgdG8gd3JpdGUgZGF0YSB0byB0aGUgY29udGVudC4KICAgICAgICBDbGllbnQgd2lsbCBmaWxsIGJ1ZmZlciB3aXRoIG91dHB1dCBkYXRhLiBOb3RlOiBwaXBlIHByb3ZpZGVzIHBvaW50ZXIuIFRoaXMgZnVuY3Rpb24gaXMgYXBwcm9wcmlhdGUKICAgICAgICBmb3IgbGFyZ2Ugd3JpdGVzLiBUaGUgY2xpZW50IG11c3QgY2FsbCBXcml0ZUJ1ZmZlciB3aGVuIGRvbmUgaXQgaGFzIGZpbGxlZCB0aGUgYnVmZmVyIHdpdGggZGF0YS4qLwogICAgIENQcmVzdWx0ICgqR2V0V3JpdGVCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICoqcHBCdWZmZXIsIENQdWludCBuU2l6ZSk7CiAKLSAgICAvKiogRGVsaXZlciBhIGJ1ZmZlciBvYnRhaW5lZCB2aWEgR2V0V3JpdGVCdWZmZXIgdG8gdGhlIHBpcGUuIFBpcGUgd2lsbCB3cml0ZSB0aGUgCisgICAgLyoqIERlbGl2ZXIgYSBidWZmZXIgb2J0YWluZWQgdmlhIEdldFdyaXRlQnVmZmVyIHRvIHRoZSBwaXBlLiBQaXBlIHdpbGwgd3JpdGUgdGhlCiAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgdG8gY29udGVudCBhbmQgYWR2YW5jZSBjb250ZW50IHBvaW50ZXIgYnkgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAqLwogICAgIENQcmVzdWx0ICgqV3JpdGVCdWZmZXIpKCBDUGhhbmRsZSBoQ29udGVudCwgQ1BieXRlICpwQnVmZmVyLCBDUHVpbnQgbkZpbGxlZFNpemUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0NvcmUuaCBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oCmluZGV4IDlmYjBmNmYuLjEyZjJiM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfQ29yZS5oCkBAIC0xNiwyNSArMTYsMjUgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuIAotICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCiAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAotICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKKyAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0gKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCi0gKiAKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQogICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCi0gKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCiAgKi8KIApAQCAtNTMsMTQgKzUzLDE0IEBACiAKIC8qIEVhY2ggT01YIGhlYWRlciBzaGFsbCBpbmNsdWRlIGFsbCByZXF1aXJlZCBoZWFkZXIgZmlsZXMgdG8gYWxsb3cgdGhlCiAgKiAgaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkCi0gKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkgCisgKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkKICAqLwogCiAjaW5jbHVkZSA8T01YX0luZGV4Lmg+CiAKIAogLyoqIFRoZSBPTVhfQ09NTUFORFRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBhY3Rpb24gaW4gdGhlCi0gKiAgT01YX1NlbmRDb21tYW5kIG1hY3JvLiAgCisgKiAgT01YX1NlbmRDb21tYW5kIG1hY3JvLgogICogIEBpbmdyb3VwIGNvcmUKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9DT01NQU5EVFlQRQpAQCAtNzAsNyArNzAsNyBAQAogICAgIE9NWF9Db21tYW5kUG9ydERpc2FibGUsIC8qKjwgRGlzYWJsZSBhIHBvcnQgb24gYSBjb21wb25lbnQuICovCiAgICAgT01YX0NvbW1hbmRQb3J0RW5hYmxlLCAgLyoqPCBFbmFibGUgYSBwb3J0IG9uIGEgY29tcG9uZW50LiAqLwogICAgIE9NWF9Db21tYW5kTWFya0J1ZmZlciwgIC8qKjwgTWFyayBhIGNvbXBvbmVudC9idWZmZXIgZm9yIG9ic2VydmF0aW9uICovCi0gICAgT01YX0NvbW1hbmRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0NvbW1hbmRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQ29tbWFuZFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0NvbW1hbmRNYXggPSAwWDdGRkZGRkZGCiB9IE9NWF9DT01NQU5EVFlQRTsKQEAgLTkzLDI4ICs5MywyOCBAQAogICogIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGFuZCB3aWxsIHRyYW5zaXRpb24gdG8gdGhlIGlkbGUgc3RhdGUgaWYgdGhlCiAgKiAgYWxsb2NhdGlvbiBpcyBzdWNjZXNzZnVsLiAgSWYgdGhlIGNvbXBvbmVudCBjYW5ub3Qgc3VjY2Vzc2Z1bGx5CiAgKiAgdHJhbnNpdGlvbiB0byB0aGUgaWRsZSBzdGF0ZSBmb3IgYW55IHJlYXNvbiwgdGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQKLSAqICBzaGFsbCBiZSBmdWxseSByb2xsZWQgYmFjayB0byB0aGUgTG9hZGVkIHN0YXRlIChlLmcuIGFsbCBhbGxvY2F0ZWQgCisgKiAgc2hhbGwgYmUgZnVsbHkgcm9sbGVkIGJhY2sgdG8gdGhlIExvYWRlZCBzdGF0ZSAoZS5nLiBhbGwgYWxsb2NhdGVkCiAgKiAgcmVzb3VyY2VzIHNoYWxsIGJlIHJlbGVhc2VkKS4gIFdoZW4gdGhlIGNvbXBvbmVudCByZWNlaXZlcyB0aGUgY29tbWFuZAogICogIHRvIGdvIHRvIHRoZSBFeGVjdXRpbmcgc3RhdGUsIGl0IHNoYWxsIGJlZ2luIHByb2Nlc3NpbmcgYnVmZmVycyBieQogICogIHNlbmRpbmcgYWxsIGlucHV0IGJ1ZmZlcnMgaXQgaG9sZHMgdG8gdGhlIGFwcGxpY2F0aW9uLiAgV2hpbGUKICAqICB0aGUgY29tcG9uZW50IGlzIGluIHRoZSBJZGxlIHN0YXRlLCB0aGUgYXBwbGljYXRpb24gbWF5IGFsc28gc2VuZCB0aGUKICAqICBQYXVzZSBjb21tYW5kLiAgSWYgdGhlIGNvbXBvbmVudCByZWNlaXZlcyB0aGUgcGF1c2UgY29tbWFuZCB3aGlsZSBpbiB0aGUKLSAqICBJZGxlIHN0YXRlLCB0aGUgY29tcG9uZW50IHNoYWxsIHNlbmQgYWxsIGlucHV0IGJ1ZmZlcnMgaXQgaG9sZHMgdG8gdGhlIAorICogIElkbGUgc3RhdGUsIHRoZSBjb21wb25lbnQgc2hhbGwgc2VuZCBhbGwgaW5wdXQgYnVmZmVycyBpdCBob2xkcyB0byB0aGUKICAqICBhcHBsaWNhdGlvbiwgYnV0IHNoYWxsIG5vdCBiZWdpbiBwcm9jZXNzaW5nIGJ1ZmZlcnMuICBUaGlzIHdpbGwgYWxsb3cgdGhlCiAgKiAgYXBwbGljYXRpb24gdG8gcHJlZmlsbCBidWZmZXJzLgotICogCisgKgogICogIEBpbmdyb3VwIGNvbXAKICAqLwogCiB0eXBlZGVmIGVudW0gT01YX1NUQVRFVFlQRQogewotICAgIE9NWF9TdGF0ZUludmFsaWQsICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIHRoYXQgaXQncyBpbnRlcm5hbCBkYXRhIAorICAgIE9NWF9TdGF0ZUludmFsaWQsICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIHRoYXQgaXQncyBpbnRlcm5hbCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYXJlIGNvcnJ1cHRlZCB0byB0aGUgcG9pbnQgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYW5ub3QgZGV0ZXJtaW5lIGl0J3Mgc3RhdGUgcHJvcGVybHkgKi8KICAgICBPTVhfU3RhdGVMb2FkZWQsICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGJlZW4gbG9hZGVkIGJ1dCBoYXMgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4gIFRoZSBPTVhfU2V0UGFyYW1ldGVyIG1hY3JvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgT01YX0dldFBhcmFtZXRlciBtYWNybyBhcmUgdGhlIG9ubHkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG1hY3JvcyBhbGxvd2VkIHRvIGJlIHNlbnQgdG8gdGhlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIE9NWF9HZXRQYXJhbWV0ZXIgbWFjcm8gYXJlIHRoZSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG1hY3JvcyBhbGxvd2VkIHRvIGJlIHNlbnQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCBpbiB0aGlzIHN0YXRlLiAqLwogICAgIE9NWF9TdGF0ZUlkbGUsICAgICAgICAvKio8IGNvbXBvbmVudCBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGFuZCB0aGUgY29tcG9uZW50IGlzIHJlYWR5IHRvCkBAIC0xMjIsMTcgKzEyMiwxNyBAQAogICAgIE9NWF9TdGF0ZUV4ZWN1dGluZywgICAvKio8IGNvbXBvbmVudCBoYXMgYWNjZXB0ZWQgdGhlIHN0YXJ0IGNvbW1hbmQgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHByb2Nlc3NpbmcgZGF0YSAoaWYgZGF0YSBpcyBhdmFpbGFibGUpICovCiAgICAgT01YX1N0YXRlUGF1c2UsICAgICAgIC8qKjwgY29tcG9uZW50IGhhcyByZWNlaXZlZCBwYXVzZSBjb21tYW5kICovCi0gICAgT01YX1N0YXRlV2FpdEZvclJlc291cmNlcywgLyoqPCBjb21wb25lbnQgaXMgd2FpdGluZyBmb3IgcmVzb3VyY2VzLCBlaXRoZXIgYWZ0ZXIgCisgICAgT01YX1N0YXRlV2FpdEZvclJlc291cmNlcywgLyoqPCBjb21wb25lbnQgaXMgd2FpdGluZyBmb3IgcmVzb3VyY2VzLCBlaXRoZXIgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdGlvbiBvciBiZWZvcmUgaXQgZ2V0cyB0aGUgcmVzb3VyY2VzIHJlcXVlc3RlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHNwZWNpZmljYXRpb24gZm9yIGNvbXBsZXRlIGRldGFpbHMuICovCi0gICAgT01YX1N0YXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9TdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9TdGF0ZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1N0YXRlTWF4ID0gMFg3RkZGRkZGRgogfSBPTVhfU1RBVEVUWVBFOwogCi0vKiogVGhlIE9NWF9FUlJPUlRZUEUgZW51bWVyYXRpb24gZGVmaW5lcyB0aGUgc3RhbmRhcmQgT01YIEVycm9ycy4gIFRoZXNlIAotICogIGVycm9ycyBzaG91bGQgY292ZXIgbW9zdCBvZiB0aGUgY29tbW9uIGZhaWx1cmUgY2FzZXMuICBIb3dldmVyLCAKLSAqICB2ZW5kb3JzIGFyZSBmcmVlIHRvIGFkZCBhZGRpdGlvbmFsIGVycm9yIG1lc3NhZ2VzIG9mIHRoZWlyIG93biBhcyAKKy8qKiBUaGUgT01YX0VSUk9SVFlQRSBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGFuZGFyZCBPTVggRXJyb3JzLiAgVGhlc2UKKyAqICBlcnJvcnMgc2hvdWxkIGNvdmVyIG1vc3Qgb2YgdGhlIGNvbW1vbiBmYWlsdXJlIGNhc2VzLiAgSG93ZXZlciwKKyAqICB2ZW5kb3JzIGFyZSBmcmVlIHRvIGFkZCBhZGRpdGlvbmFsIGVycm9yIG1lc3NhZ2VzIG9mIHRoZWlyIG93biBhcwogICogIGxvbmcgYXMgdGhleSBmb2xsb3cgdGhlc2UgcnVsZXM6CiAgKiAgMS4gIFZlbmRvciBlcnJvciBtZXNzYWdlcyBzaGFsbCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMHg5MDAwMDAwMCB0bwogICogICAgICAweDkwMDBGRkZGLgpAQCAtMjAzLDI1ICsyMDMsMjUgQEAKICAgLyoqIFRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gdHJ5aW5nIHRvIHRyYW5zaXRpb24gaW50byB0aGUgc3RhdGUgeW91IGFyZSBhbHJlYWR5IGluICovCiAgIE9NWF9FcnJvclNhbWVTdGF0ZSA9IChPTVhfUzMyKSAweDgwMDAxMDEyLAogCi0gIC8qKiBSZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGFuIGV4ZWN1dGluZyBvciBwYXVzZWQgY29tcG9uZW50IGhhdmUgYmVlbiAKKyAgLyoqIFJlc291cmNlcyBhbGxvY2F0ZWQgdG8gYW4gZXhlY3V0aW5nIG9yIHBhdXNlZCBjb21wb25lbnQgaGF2ZSBiZWVuCiAgICAgICBwcmVlbXB0ZWQsIGNhdXNpbmcgdGhlIGNvbXBvbmVudCB0byByZXR1cm4gdG8gdGhlIGlkbGUgc3RhdGUgKi8KLSAgT01YX0Vycm9yUmVzb3VyY2VzUHJlZW1wdGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMTMsIAorICBPTVhfRXJyb3JSZXNvdXJjZXNQcmVlbXB0ZWQgPSAoT01YX1MzMikgMHg4MDAwMTAxMywKIAotICAvKiogQSBub24tc3VwcGxpZXIgcG9ydCBzZW5kcyB0aGlzIGVycm9yIHRvIHRoZSBJTCBjbGllbnQgKHZpYSB0aGUgRXZlbnRIYW5kbGVyIGNhbGxiYWNrKSAKKyAgLyoqIEEgbm9uLXN1cHBsaWVyIHBvcnQgc2VuZHMgdGhpcyBlcnJvciB0byB0aGUgSUwgY2xpZW50ICh2aWEgdGhlIEV2ZW50SGFuZGxlciBjYWxsYmFjaykKICAgICAgIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBvZiBidWZmZXJzIChvbiBhIHRyYW5zaXRpb24gZnJvbSB0aGUgTE9BREVEIHRvIHRoZSBJRExFIHN0YXRlIG9yCi0gICAgICBvbiBhIHBvcnQgcmVzdGFydCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IgdGhlIHN1cHBsaWVyIAorICAgICAgb24gYSBwb3J0IHJlc3RhcnQpIHdoZW4gaXQgZGVlbXMgdGhhdCBpdCBoYXMgd2FpdGVkIGFuIHVudXN1YWxseSBsb25nIHRpbWUgZm9yIHRoZSBzdXBwbGllcgogICAgICAgdG8gc2VuZCBpdCBhbiBhbGxvY2F0ZWQgYnVmZmVyIHZpYSBhIFVzZUJ1ZmZlciBjYWxsLiAqLwogICBPTVhfRXJyb3JQb3J0VW5yZXNwb25zaXZlRHVyaW5nQWxsb2NhdGlvbiA9IChPTVhfUzMyKSAweDgwMDAxMDE0LAogCi0gIC8qKiBBIG5vbi1zdXBwbGllciBwb3J0IHNlbmRzIHRoaXMgZXJyb3IgdG8gdGhlIElMIGNsaWVudCAodmlhIHRoZSBFdmVudEhhbmRsZXIgY2FsbGJhY2spIAotICAgICAgZHVyaW5nIHRoZSBkZWFsbG9jYXRpb24gb2YgYnVmZmVycyAob24gYSB0cmFuc2l0aW9uIGZyb20gdGhlIElETEUgdG8gTE9BREVEIHN0YXRlIG9yIAotICAgICAgb24gYSBwb3J0IHN0b3ApIHdoZW4gaXQgZGVlbXMgdGhhdCBpdCBoYXMgd2FpdGVkIGFuIHVudXN1YWxseSBsb25nIHRpbWUgZm9yIHRoZSBzdXBwbGllciAKKyAgLyoqIEEgbm9uLXN1cHBsaWVyIHBvcnQgc2VuZHMgdGhpcyBlcnJvciB0byB0aGUgSUwgY2xpZW50ICh2aWEgdGhlIEV2ZW50SGFuZGxlciBjYWxsYmFjaykKKyAgICAgIGR1cmluZyB0aGUgZGVhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgKG9uIGEgdHJhbnNpdGlvbiBmcm9tIHRoZSBJRExFIHRvIExPQURFRCBzdGF0ZSBvcgorICAgICAgb24gYSBwb3J0IHN0b3ApIHdoZW4gaXQgZGVlbXMgdGhhdCBpdCBoYXMgd2FpdGVkIGFuIHVudXN1YWxseSBsb25nIHRpbWUgZm9yIHRoZSBzdXBwbGllcgogICAgICAgdG8gcmVxdWVzdCB0aGUgZGVhbGxvY2F0aW9uIG9mIGEgYnVmZmVyIGhlYWRlciB2aWEgYSBGcmVlQnVmZmVyIGNhbGwuICovCiAgIE9NWF9FcnJvclBvcnRVbnJlc3BvbnNpdmVEdXJpbmdEZWFsbG9jYXRpb24gPSAoT01YX1MzMikgMHg4MDAwMTAxNSwKIAotICAvKiogQSBzdXBwbGllciBwb3J0IHNlbmRzIHRoaXMgZXJyb3IgdG8gdGhlIElMIGNsaWVudCAodmlhIHRoZSBFdmVudEhhbmRsZXIgY2FsbGJhY2spIAotICAgICAgZHVyaW5nIHRoZSBzdG9wcGluZyBvZiBhIHBvcnQgKGVpdGhlciBvbiBhIHRyYW5zaXRpb24gZnJvbSB0aGUgSURMRSB0byBMT0FERUQgCi0gICAgICBzdGF0ZSBvciBhIHBvcnQgc3RvcCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IgCisgIC8qKiBBIHN1cHBsaWVyIHBvcnQgc2VuZHMgdGhpcyBlcnJvciB0byB0aGUgSUwgY2xpZW50ICh2aWEgdGhlIEV2ZW50SGFuZGxlciBjYWxsYmFjaykKKyAgICAgIGR1cmluZyB0aGUgc3RvcHBpbmcgb2YgYSBwb3J0IChlaXRoZXIgb24gYSB0cmFuc2l0aW9uIGZyb20gdGhlIElETEUgdG8gTE9BREVECisgICAgICBzdGF0ZSBvciBhIHBvcnQgc3RvcCkgd2hlbiBpdCBkZWVtcyB0aGF0IGl0IGhhcyB3YWl0ZWQgYW4gdW51c3VhbGx5IGxvbmcgdGltZSBmb3IKICAgICAgIHRoZSBub24tc3VwcGxpZXIgdG8gcmV0dXJuIGEgYnVmZmVyIHZpYSBhbiBFbXB0eVRoaXNCdWZmZXIgb3IgRmlsbFRoaXNCdWZmZXIgY2FsbC4gKi8KICAgT01YX0Vycm9yUG9ydFVucmVzcG9uc2l2ZUR1cmluZ1N0b3AgPSAoT01YX1MzMikgMHg4MDAwMTAxNiwKIApAQCAtMjI5LDcgKzIyOSw3IEBACiAgIE9NWF9FcnJvckluY29ycmVjdFN0YXRlVHJhbnNpdGlvbiA9IChPTVhfUzMyKSAweDgwMDAxMDE3LAogCiAgIC8qIEF0dGVtcHRpbmcgYSBjb21tYW5kIHRoYXQgaXMgbm90IGFsbG93ZWQgZHVyaW5nIHRoZSBwcmVzZW50IHN0YXRlLiAqLwotICBPTVhfRXJyb3JJbmNvcnJlY3RTdGF0ZU9wZXJhdGlvbiA9IChPTVhfUzMyKSAweDgwMDAxMDE4LCAKKyAgT01YX0Vycm9ySW5jb3JyZWN0U3RhdGVPcGVyYXRpb24gPSAoT01YX1MzMikgMHg4MDAwMTAxOCwKIAogICAvKiogVGhlIHZhbHVlcyBlbmNhcHN1bGF0ZWQgaW4gdGhlIHBhcmFtZXRlciBvciBjb25maWcgc3RydWN0dXJlIGFyZSBub3Qgc3VwcG9ydGVkLiAqLwogICBPTVhfRXJyb3JVbnN1cHBvcnRlZFNldHRpbmcgPSAoT01YX1MzMikgMHg4MDAwMTAxOSwKQEAgLTI0OSwxMiArMjQ5LDEyIEBACiAgIC8qKiBDb21wb25lbnQgc3VzcGVuZGVkIGR1ZSB0byBhbiBpbmFiaWxpdHkgdG8gYWNxdWlyZSBkeW5hbWljIHJlc291cmNlcyAqLwogICBPTVhfRXJyb3JEeW5hbWljUmVzb3VyY2VzVW5hdmFpbGFibGUgPSAoT01YX1MzMikgMHg4MDAwMTAxRSwKIAotICAvKiogV2hlbiB0aGUgbWFjcm9ibG9jayBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCB0aGUgY29tcG9uZW50IHJldHVybnMgbmV3IGVycm9yIAorICAvKiogV2hlbiB0aGUgbWFjcm9ibG9jayBlcnJvciByZXBvcnRpbmcgaXMgZW5hYmxlZCB0aGUgY29tcG9uZW50IHJldHVybnMgbmV3IGVycm9yCiAgIGZvciBldmVyeSBmcmFtZSB0aGF0IGhhcyBlcnJvcnMgKi8KICAgT01YX0Vycm9yTWJFcnJvcnNJbkZyYW1lID0gKE9NWF9TMzIpIDB4ODAwMDEwMUYsCiAKICAgLyoqIEEgY29tcG9uZW50IHJlcG9ydHMgdGhpcyBlcnJvciB3aGVuIGl0IGNhbm5vdCBwYXJzZSBvciBkZXRlcm1pbmUgdGhlIGZvcm1hdCBvZiBhbiBpbnB1dCBzdHJlYW0uICovCi0gIE9NWF9FcnJvckZvcm1hdE5vdERldGVjdGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMjAsIAorICBPTVhfRXJyb3JGb3JtYXROb3REZXRlY3RlZCA9IChPTVhfUzMyKSAweDgwMDAxMDIwLAogCiAgIC8qKiBUaGUgY29udGVudCBvcGVuIG9wZXJhdGlvbiBmYWlsZWQuICovCiAgIE9NWF9FcnJvckNvbnRlbnRQaXBlT3BlbkZhaWxlZCA9IChPTVhfUzMyKSAweDgwMDAxMDIxLApAQCAtMjY4LDcgKzI2OCw3IEBACiAgIC8qKiBUdW5uZWxpbmcgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudCovCiAgIE9NWF9FcnJvclR1bm5lbGluZ1Vuc3VwcG9ydGVkID0gKE9NWF9TMzIpIDB4ODAwMDEwMjQsCiAKLSAgT01YX0Vycm9yS2hyb25vc0V4dGVuc2lvbnMgPSAoT01YX1MzMikweDhGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICBPTVhfRXJyb3JLaHJvbm9zRXh0ZW5zaW9ucyA9IChPTVhfUzMyKTB4OEYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgT01YX0Vycm9yVmVuZG9yU3RhcnRVbnVzZWQgPSAoT01YX1MzMikweDkwMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgT01YX0Vycm9yTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfRVJST1JUWVBFOwpAQCAtMzA0LDY5ICszMDQsNjkgQEAKICAgICBPTVhfVTggY1JvbGVbT01YX01BWF9TVFJJTkdOQU1FX1NJWkVdOyAgLyoqPCBuYW1lIG9mIHN0YW5kYXJkIGNvbXBvbmVudCB3aGljaCBkZWZpbmVzIGNvbXBvbmVudCByb2xlICovCiB9IE9NWF9QQVJBTV9DT01QT05FTlRST0xFVFlQRTsKIAotLyoqIEVuZCBvZiBTdHJlYW0gQnVmZmVyIEZsYWc6IAorLyoqIEVuZCBvZiBTdHJlYW0gQnVmZmVyIEZsYWc6CiAgICoKLSAgKiBBIGNvbXBvbmVudCBzZXRzIEVPUyB3aGVuIGl0IGhhcyBubyBtb3JlIGRhdGEgdG8gZW1pdCBvbiBhIHBhcnRpY3VsYXIgCi0gICogb3V0cHV0IHBvcnQuIFRodXMgYW4gb3V0cHV0IHBvcnQgc2hhbGwgc2V0IEVPUyBvbiB0aGUgbGFzdCBidWZmZXIgaXQgCi0gICogZW1pdHMuIEEgY29tcG9uZW50J3MgZGV0ZXJtaW5hdGlvbiBvZiB3aGVuIGFuIG91dHB1dCBwb3J0IHNob3VsZCAKKyAgKiBBIGNvbXBvbmVudCBzZXRzIEVPUyB3aGVuIGl0IGhhcyBubyBtb3JlIGRhdGEgdG8gZW1pdCBvbiBhIHBhcnRpY3VsYXIKKyAgKiBvdXRwdXQgcG9ydC4gVGh1cyBhbiBvdXRwdXQgcG9ydCBzaGFsbCBzZXQgRU9TIG9uIHRoZSBsYXN0IGJ1ZmZlciBpdAorICAqIGVtaXRzLiBBIGNvbXBvbmVudCdzIGRldGVybWluYXRpb24gb2Ygd2hlbiBhbiBvdXRwdXQgcG9ydCBzaG91bGQKICAgKiBjZWFzZSBzZW5kaW5nIGRhdGEgaXMgaW1wbGVtZW5hdGlvbiBzcGVjaWZpYy4KICAgKiBAaW5ncm91cCBidWYKICAgKi8KIAotI2RlZmluZSBPTVhfQlVGRkVSRkxBR19FT1MgMHgwMDAwMDAwMSAKKyNkZWZpbmUgT01YX0JVRkZFUkZMQUdfRU9TIDB4MDAwMDAwMDEKIAotLyoqIFN0YXJ0IFRpbWUgQnVmZmVyIEZsYWc6IAorLyoqIFN0YXJ0IFRpbWUgQnVmZmVyIEZsYWc6CiAgKgogICogVGhlIHNvdXJjZSBvZiBhIHN0cmVhbSAoZS5nLiBhIGRlbXV4IGNvbXBvbmVudCkgc2V0cyB0aGUgU1RBUlRUSU1FCiAgKiBmbGFnIG9uIHRoZSBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgc3RhcnRpbmcgdGltZXN0YW1wIGZvciB0aGUKICAqIHN0cmVhbS4gVGhlIHN0YXJ0aW5nIHRpbWVzdGFtcCBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgZGF0YSB0aGF0CiAgKiBzaG91bGQgYmUgZGlzcGxheWVkIGF0IHN0YXJ0dXAgb3IgYWZ0ZXIgYSBzZWVrLgogICogVGhlIGZpcnN0IHRpbWVzdGFtcCBvZiB0aGUgc3RyZWFtIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc3RhcnQgdGltZS4KLSAqIEZvciBpbnN0YW5jZSwgaW4gdGhlIGNhc2Ugb2YgYSBzZWVrIHRvIGEgcGFydGljdWxhciB2aWRlbyBmcmFtZSwgCi0gKiB0aGUgdGFyZ2V0IGZyYW1lIG1heSBiZSBhbiBpbnRlcmZyYW1lLiBUaHVzIHRoZSBmaXJzdCBidWZmZXIgb2YgCisgKiBGb3IgaW5zdGFuY2UsIGluIHRoZSBjYXNlIG9mIGEgc2VlayB0byBhIHBhcnRpY3VsYXIgdmlkZW8gZnJhbWUsCisgKiB0aGUgdGFyZ2V0IGZyYW1lIG1heSBiZSBhbiBpbnRlcmZyYW1lLiBUaHVzIHRoZSBmaXJzdCBidWZmZXIgb2YKICAqIHRoZSBzdHJlYW0gd2lsbCBiZSB0aGUgaW50cmEtZnJhbWUgcHJlY2VkaW5nIHRoZSB0YXJnZXQgZnJhbWUgYW5kCiAgKiB0aGUgc3RhcnR0aW1lIHdpbGwgb2NjdXIgd2l0aCB0aGUgdGFyZ2V0IGZyYW1lICh3aXRoIGFueSBvdGhlcgogICogcmVxdWlyZWQgZnJhbWVzIHJlcXVpcmVkIHRvIHJlY29uc3RydWN0IHRoZSB0YXJnZXQgaW50ZXJ2ZW5pbmcpLgogICoKLSAqIFRoZSBTVEFSVFRJTUUgZmxhZyBpcyBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcidzIAotICogdGltZXN0YW1wICcgdGh1cyBpdHMgYXNzb2NpYXRpb24gdG8gYnVmZmVyIGRhdGEgYW5kIGl0cyAKKyAqIFRoZSBTVEFSVFRJTUUgZmxhZyBpcyBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIGJ1ZmZlcidzCisgKiB0aW1lc3RhbXAgJyB0aHVzIGl0cyBhc3NvY2lhdGlvbiB0byBidWZmZXIgZGF0YSBhbmQgaXRzCiAgKiBwcm9wYWdhdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIHRpbWVzdGFtcCdzLgogICoKLSAqIFdoZW4gYSBTeW5jIENvbXBvbmVudCBjbGllbnQgcmVjZWl2ZXMgYSBidWZmZXIgd2l0aCB0aGUgCi0gKiBTVEFSVFRJTUUgZmxhZyBpdCBzaGFsbCBwZXJmb3JtIGEgU2V0Q29uZmlnIG9uIGl0cyBzeW5jIHBvcnQgCisgKiBXaGVuIGEgU3luYyBDb21wb25lbnQgY2xpZW50IHJlY2VpdmVzIGEgYnVmZmVyIHdpdGggdGhlCisgKiBTVEFSVFRJTUUgZmxhZyBpdCBzaGFsbCBwZXJmb3JtIGEgU2V0Q29uZmlnIG9uIGl0cyBzeW5jIHBvcnQKICAqIHVzaW5nIE9NWF9Db25maWdUaW1lQ2xpZW50U3RhcnRUaW1lIGFuZCBwYXNzaW5nIHRoZSBidWZmZXIncwogICogdGltZXN0YW1wLgotICogCisgKgogICogQGluZ3JvdXAgYnVmCiAgKi8KIAogI2RlZmluZSBPTVhfQlVGRkVSRkxBR19TVEFSVFRJTUUgMHgwMDAwMDAwMgogCi0gCiAKLS8qKiBEZWNvZGUgT25seSBCdWZmZXIgRmxhZzogCisKKy8qKiBEZWNvZGUgT25seSBCdWZmZXIgRmxhZzoKICAqCiAgKiBUaGUgc291cmNlIG9mIGEgc3RyZWFtIChlLmcuIGEgZGVtdXggY29tcG9uZW50KSBzZXRzIHRoZSBERUNPREVPTkxZCiAgKiBmbGFnIG9uIGFueSBidWZmZXIgdGhhdCBzaG91bGQgc2hhbGwgYmUgZGVjb2RlZCBidXQgc2hvdWxkIG5vdCBiZQotICogZGlzcGxheWVkLiBUaGlzIGZsYWcgaXMgdXNlZCwgZm9yIGluc3RhbmNlLCB3aGVuIGEgc291cmNlIHNlZWtzIHRvIAotICogYSB0YXJnZXQgaW50ZXJmcmFtZSB0aGF0IHJlcXVpcmVzIHRoZSBkZWNvZGUgb2YgZnJhbWVzIHByZWNlZGluZyB0aGUgCi0gKiB0YXJnZXQgdG8gZmFjaWxpdGF0ZSB0aGUgdGFyZ2V0J3MgcmVjb25zdHJ1Y3Rpb24uIEluIHRoaXMgY2FzZSB0aGUgCi0gKiBzb3VyY2Ugd291bGQgZW1pdCB0aGUgZnJhbWVzIHByZWNlZGluZyB0aGUgdGFyZ2V0IGRvd25zdHJlYW0gCisgKiBkaXNwbGF5ZWQuIFRoaXMgZmxhZyBpcyB1c2VkLCBmb3IgaW5zdGFuY2UsIHdoZW4gYSBzb3VyY2Ugc2Vla3MgdG8KKyAqIGEgdGFyZ2V0IGludGVyZnJhbWUgdGhhdCByZXF1aXJlcyB0aGUgZGVjb2RlIG9mIGZyYW1lcyBwcmVjZWRpbmcgdGhlCisgKiB0YXJnZXQgdG8gZmFjaWxpdGF0ZSB0aGUgdGFyZ2V0J3MgcmVjb25zdHJ1Y3Rpb24uIEluIHRoaXMgY2FzZSB0aGUKKyAqIHNvdXJjZSB3b3VsZCBlbWl0IHRoZSBmcmFtZXMgcHJlY2VkaW5nIHRoZSB0YXJnZXQgZG93bnN0cmVhbQogICogYnV0IG1hcmsgdGhlbSBhcyBkZWNvZGUgb25seS4KICAqCi0gKiBUaGUgREVDT0RFT05MWSBpcyBhc3NvY2lhdGVkIHdpdGggYnVmZmVyIGRhdGEgYW5kIHByb3BhZ2F0ZWQgaW4gYSAKKyAqIFRoZSBERUNPREVPTkxZIGlzIGFzc29jaWF0ZWQgd2l0aCBidWZmZXIgZGF0YSBhbmQgcHJvcGFnYXRlZCBpbiBhCiAgKiBtYW5uZXIgaWRlbnRpY2FsIHRvIHRoZSBidWZmZXIgdGltZXN0YW1wLgogICoKLSAqIEEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBkYXRhIHNob3VsZCBpZ25vcmUgYWxsIGJ1ZmZlcnMgd2l0aCAKKyAqIEEgY29tcG9uZW50IHRoYXQgcmVuZGVycyBkYXRhIHNob3VsZCBpZ25vcmUgYWxsIGJ1ZmZlcnMgd2l0aAogICogdGhlIERFQ09ERU9OTFkgZmxhZyBzZXQuCi0gKiAKKyAqCiAgKiBAaW5ncm91cCBidWYKICAqLwogCiAjZGVmaW5lIE9NWF9CVUZGRVJGTEFHX0RFQ09ERU9OTFkgMHgwMDAwMDAwNAogCiAKLS8qIERhdGEgQ29ycnVwdCBGbGFnOiBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIElMIGNsaWVudCBiZWxpZXZlcyB0aGUgZGF0YSBpbiB0aGUgYXNzb2NpYXRlZCBidWZmZXIgaXMgY29ycnVwdCAKKy8qIERhdGEgQ29ycnVwdCBGbGFnOiBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIElMIGNsaWVudCBiZWxpZXZlcyB0aGUgZGF0YSBpbiB0aGUgYXNzb2NpYXRlZCBidWZmZXIgaXMgY29ycnVwdAogICogQGluZ3JvdXAgYnVmCiAgKi8KIApAQCAtMzc0LDI5ICszNzQsMjkgQEAKIAogLyogRW5kIG9mIEZyYW1lOiBUaGUgYnVmZmVyIGNvbnRhaW5zIGV4YWN0bHkgb25lIGVuZCBvZiBmcmFtZSBhbmQgbm8gZGF0YQogICogIG9jY3VycyBhZnRlciB0aGUgZW5kIG9mIGZyYW1lLiBUaGlzIGZsYWcgaXMgYW4gb3B0aW9uYWwgaGludC4gVGhlIGFic2VuY2UKLSAqICBvZiB0aGlzIGZsYWcgZG9lcyBub3QgaW1wbHkgdGhlIGFic2VuY2Ugb2YgYW4gZW5kIG9mIGZyYW1lIHdpdGhpbiB0aGUgYnVmZmVyLiAKKyAqICBvZiB0aGlzIGZsYWcgZG9lcyBub3QgaW1wbHkgdGhlIGFic2VuY2Ugb2YgYW4gZW5kIG9mIGZyYW1lIHdpdGhpbiB0aGUgYnVmZmVyLgogICogQGluZ3JvdXAgYnVmCiAqLwogI2RlZmluZSBPTVhfQlVGRkVSRkxBR19FTkRPRkZSQU1FIDB4MDAwMDAwMTAKIAotLyogU3luYyBGcmFtZSBGbGFnOiBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gdGhlIGJ1ZmZlciBjb250ZW50IGNvbnRhaW5zIGEgY29kZWQgc3luYyBmcmFtZSAnIAotICogIGEgZnJhbWUgdGhhdCBoYXMgbm8gZGVwZW5kZW5jeSBvbiBhbnkgb3RoZXIgZnJhbWUgaW5mb3JtYXRpb24gCisvKiBTeW5jIEZyYW1lIEZsYWc6IFRoaXMgZmxhZyBpcyBzZXQgd2hlbiB0aGUgYnVmZmVyIGNvbnRlbnQgY29udGFpbnMgYSBjb2RlZCBzeW5jIGZyYW1lICcKKyAqICBhIGZyYW1lIHRoYXQgaGFzIG5vIGRlcGVuZGVuY3kgb24gYW55IG90aGVyIGZyYW1lIGluZm9ybWF0aW9uCiAgKiAgQGluZ3JvdXAgYnVmCiAgKi8KICNkZWZpbmUgT01YX0JVRkZFUkZMQUdfU1lOQ0ZSQU1FIDB4MDAwMDAwMjAKIAogLyogRXh0cmEgZGF0YSBwcmVzZW50IGZsYWc6IHRoZXJlIGlzIGV4dHJhIGRhdGEgYXBwZW5kZWQgdG8gdGhlIGRhdGEgc3RyZWFtCi0gKiByZXNpZGluZyBpbiB0aGUgYnVmZmVyIAotICogQGluZ3JvdXAgYnVmICAKKyAqIHJlc2lkaW5nIGluIHRoZSBidWZmZXIKKyAqIEBpbmdyb3VwIGJ1ZgogICovCiAjZGVmaW5lIE9NWF9CVUZGRVJGTEFHX0VYVFJBREFUQSAweDAwMDAwMDQwCiAKLS8qKiBDb2RlYyBDb25maWcgQnVmZmVyIEZsYWc6IAorLyoqIENvZGVjIENvbmZpZyBCdWZmZXIgRmxhZzoKICogT01YX0JVRkZFUkZMQUdfQ09ERUNDT05GSUcgaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IGlzIHNldCBieSBhbgogKiBvdXRwdXQgcG9ydCB3aGVuIGFsbCBieXRlcyBpbiB0aGUgYnVmZmVyIGZvcm0gcGFydCBvciBhbGwgb2YgYSBzZXQgb2YKICogY29kZWMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkYXRhLiAgRXhhbXBsZXMgaW5jbHVkZSBTUFMvUFBTIG5hbCB1bml0cwogKiBmb3IgT01YX1ZJREVPX0NvZGluZ0FWQyBvciBBdWRpb1NwZWNpZmljQ29uZmlnIGRhdGEgZm9yCi0qIE9NWF9BVURJT19Db2RpbmdBQUMuICBBbnkgY29tcG9uZW50IHRoYXQgZm9yIGEgZ2l2ZW4gc3RyZWFtIHNldHMgCisqIE9NWF9BVURJT19Db2RpbmdBQUMuICBBbnkgY29tcG9uZW50IHRoYXQgZm9yIGEgZ2l2ZW4gc3RyZWFtIHNldHMKICogT01YX0JVRkZFUkZMQUdfQ09ERUNDT05GSUcgc2hhbGwgbm90IG1peCBjb2RlYyBjb25maWd1cmF0aW9uIGJ5dGVzCiAqIHdpdGggZnJhbWUgZGF0YSBpbiB0aGUgc2FtZSBidWZmZXIsIGFuZCBzaGFsbCBzZW5kIGFsbCBidWZmZXJzCiAqIGNvbnRhaW5pbmcgY29kZWMgY29uZmlndXJhdGlvbiBieXRlcyBiZWZvcmUgYW55IGJ1ZmZlcnMgY29udGFpbmluZwpAQCAtNDE2LDUwICs0MTYsNTAgQEAKIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0gICAgT01YX1U4KiBwQnVmZmVyOyAgICAgICAgICAgIC8qKjwgUG9pbnRlciB0byBhY3R1YWwgYmxvY2sgb2YgbWVtb3J5IAorICAgIE9NWF9VOCogcEJ1ZmZlcjsgICAgICAgICAgICAvKio8IFBvaW50ZXIgdG8gYWN0dWFsIGJsb2NrIG9mIG1lbW9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgYWN0aW5nIGFzIHRoZSBidWZmZXIgKi8KICAgICBPTVhfVTMyIG5BbGxvY0xlbjsgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBidWZmZXIgYWxsb2NhdGVkLCBpbiBieXRlcyAqLwotICAgIE9NWF9VMzIgbkZpbGxlZExlbjsgICAgICAgICAvKio8IG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIAorICAgIE9NWF9VMzIgbkZpbGxlZExlbjsgICAgICAgICAvKio8IG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICovCiAgICAgT01YX1UzMiBuT2Zmc2V0OyAgICAgICAgICAgIC8qKjwgc3RhcnQgb2Zmc2V0IG9mIHZhbGlkIGRhdGEgaW4gYnl0ZXMgZnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyICovCiAgICAgT01YX1BUUiBwQXBwUHJpdmF0ZTsgICAgICAgIC8qKjwgcG9pbnRlciB0byBhbnkgZGF0YSB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50cyB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGJ1ZmZlciAqLwogICAgIE9NWF9QVFIgcFBsYXRmb3JtUHJpdmF0ZTsgICAvKio8IHBvaW50ZXIgdG8gYW55IGRhdGEgdGhlIHBsYXRmb3JtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8KICAgICBPTVhfUFRSIHBJbnB1dFBvcnRQcml2YXRlOyAgLyoqPCBwb2ludGVyIHRvIGFueSBkYXRhIHRoZSBpbnB1dCBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBidWZmZXIgKi8KICAgICBPTVhfUFRSIHBPdXRwdXRQb3J0UHJpdmF0ZTsgLyoqPCBwb2ludGVyIHRvIGFueSBkYXRhIHRoZSBvdXRwdXQgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgYnVmZmVyICovCi0gICAgT01YX0hBTkRMRVRZUEUgaE1hcmtUYXJnZXRDb21wb25lbnQ7IC8qKjwgVGhlIGNvbXBvbmVudCB0aGF0IHdpbGwgZ2VuZXJhdGUgYSAKKyAgICBPTVhfSEFORExFVFlQRSBoTWFya1RhcmdldENvbXBvbmVudDsgLyoqPCBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCBnZW5lcmF0ZSBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyayBldmVudCB1cG9uIHByb2Nlc3NpbmcgdGhpcyBidWZmZXIuICovCi0gICAgT01YX1BUUiBwTWFya0RhdGE7ICAgICAgICAgIC8qKjwgQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGVkIHdpdGggCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmsgc2VudCBvbiBhIG1hcmsgZXZlbnQgdG8gZGlzYW1iaWd1YXRlIAorICAgIE9NWF9QVFIgcE1hcmtEYXRhOyAgICAgICAgICAvKio8IEFwcGxpY2F0aW9uIHNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmsgc2VudCBvbiBhIG1hcmsgZXZlbnQgdG8gZGlzYW1iaWd1YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYXJrIGZyb20gb3RoZXJzLiAqLwogICAgIE9NWF9VMzIgblRpY2tDb3VudDsgICAgICAgICAvKio8IE9wdGlvbmFsIGVudHJ5IHRoYXQgdGhlIGNvbXBvbmVudCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBjYW4gdXBkYXRlIHdpdGggYSB0aWNrIGNvdW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGV5IGFjY2VzcyB0aGUgY29tcG9uZW50LiAgVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHNob3VsZCBiZSBpbiBtaWNyb3NlY29uZHMuICBTaW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgYSB2YWx1ZSByZWxhdGl2ZSB0byBhbiBhcmJpdHJhcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBwb2ludCwgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgdXNlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBwb2ludCwgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRldGVybWluZSBhYnNvbHV0ZSB0aW1lLiAgVGhpcyBpcyBhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGVudHJ5IGFuZCBub3QgYWxsIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHVwZGF0ZSBpdC4qLwotIE9NWF9USUNLUyBuVGltZVN0YW1wOyAgICAgICAgICAvKio8IFRpbWVzdGFtcCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzYW1wbGUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGxvZ2ljYWwgc2FtcGxlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5IGluIHRoZSBidWZmZXIuIFRpbWVzdGFtcHMgb2YgCisgT01YX1RJQ0tTIG5UaW1lU3RhbXA7ICAgICAgICAgIC8qKjwgVGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBsb2dpY2FsIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5IGluIHRoZSBidWZmZXIuIFRpbWVzdGFtcHMgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlIHNhbXBsZXMgd2l0aGluIHRoZSBidWZmZXIgbWF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5mZXJyZWQgYnkgYWRkaW5nIHRoZSBkdXJhdGlvbiBvZiB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5mZXJyZWQgYnkgYWRkaW5nIHRoZSBkdXJhdGlvbiBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcHJlY2VkaW5nIGJ1ZmZlciB0byB0aGUgdGltZXN0YW1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHByZWNlZGluZyBidWZmZXIuKi8KICAgT01YX1UzMiAgICAgbkZsYWdzOyAgICAgICAgICAgLyoqPCBidWZmZXIgc3BlY2lmaWMgZmxhZ3MgKi8KLSAgT01YX1UzMiBuT3V0cHV0UG9ydEluZGV4OyAgICAgLyoqPCBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCBwb3J0IChpZiBhbnkpIHVzaW5nIAorICBPTVhfVTMyIG5PdXRwdXRQb3J0SW5kZXg7ICAgICAvKio8IFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IHBvcnQgKGlmIGFueSkgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJ1ZmZlciAqLwogICBPTVhfVTMyIG5JbnB1dFBvcnRJbmRleDsgICAgICAvKio8IFRoZSBpbmRleCBvZiB0aGUgaW5wdXQgcG9ydCAoaWYgYW55KSB1c2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgYnVmZmVyICovCiB9IE9NWF9CVUZGRVJIRUFERVJUWVBFOwogCi0vKiogVGhlIE9NWF9FWFRSQURBVEFUWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSAKKy8qKiBUaGUgT01YX0VYVFJBREFUQVRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBkZWZpbmUgdGhlCiAgKiBwb3NzaWJsZSBleHRyYSBkYXRhIHBheWxvYWQgdHlwZXMuCiAgKiBOQjogdGhpcyBlbnVtIGlzIGJpbmFyeSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cwogICogT01YX0VYVFJBREFUQV9RVUFOVCBkZWZpbmUuICBUaGlzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCkBAIC00NjcsOSArNDY3LDkgQEAKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9FWFRSQURBVEFUWVBFCiB7Ci0gICBPTVhfRXh0cmFEYXRhTm9uZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKio8IEluZGljYXRlcyB0aGF0IG5vIG1vcmUgZXh0cmEgZGF0YSBzZWN0aW9ucyBmb2xsb3cgKi8gICAgICAgIAorICAgT01YX0V4dHJhRGF0YU5vbmUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbmRpY2F0ZXMgdGhhdCBubyBtb3JlIGV4dHJhIGRhdGEgc2VjdGlvbnMgZm9sbG93ICovCiAgICBPTVhfRXh0cmFEYXRhUXVhbnRpemF0aW9uLCAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBkYXRhIHBheWxvYWQgY29udGFpbnMgcXVhbnRpemF0aW9uIGRhdGEgKi8KLSAgIE9NWF9FeHRyYURhdGFLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICBPTVhfRXh0cmFEYXRhS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICBPTVhfRXh0cmFEYXRhVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgIE9NWF9FeHRyYURhdGFNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9FWFRSQURBVEFUWVBFOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAKIHR5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9FWFRSQURBVEFUWVBFICB7CiAgICAgT01YX1UzMiBuU2l6ZTsKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgICAgICAgICAgCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgICBPTVhfRVhUUkFEQVRBVFlQRSBlVHlwZTsgICAgICAgLyogRXh0cmEgRGF0YSB0eXBlICovCiAgICAgT01YX1UzMiBuRGF0YVNpemU7ICAgLyogU2l6ZSBvZiB0aGUgc3VwcG9ydGluZyBkYXRhIHRvIGZvbGxvdyAqLwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgIE9NWF9VMzIgblBvcnRzOyAgICAgICAgICAgICAvKio8IFRoZSBudW1iZXIgb2YgcG9ydHMgZm9yIHRoaXMgY29tcG9uZW50ICovCiAgICAgT01YX1UzMiBuU3RhcnRQb3J0TnVtYmVyOyAgIC8qKiBmaXJzdCBwb3J0IG51bWJlciBmb3IgdGhpcyB0eXBlIG9mIHBvcnQgKi8KLX0gT01YX1BPUlRfUEFSQU1fVFlQRTsgCit9IE9NWF9QT1JUX1BBUkFNX1RZUEU7CiAKIC8qKiBAaW5ncm91cCBjb21wICovCiB0eXBlZGVmIGVudW0gT01YX0VWRU5UVFlQRQpAQCAtNDk5LDE0ICs0OTksMTQgQEAKICAgICBPTVhfRXZlbnRFcnJvciwgICAgICAgICAgICAgICAvKio8IGNvbXBvbmVudCBoYXMgZGV0ZWN0ZWQgYW4gZXJyb3IgY29uZGl0aW9uICovCiAgICAgT01YX0V2ZW50TWFyaywgICAgICAgICAgICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIGEgYnVmZmVyIG1hcmsgKi8KICAgICBPTVhfRXZlbnRQb3J0U2V0dGluZ3NDaGFuZ2VkLCAvKio8IGNvbXBvbmVudCBpcyByZXBvcnRlZCBhIHBvcnQgc2V0dGluZ3MgY2hhbmdlICovCi0gICAgT01YX0V2ZW50QnVmZmVyRmxhZywgICAgICAgICAgLyoqPCBjb21wb25lbnQgaGFzIGRldGVjdGVkIGFuIEVPUyAqLyAKKyAgICBPTVhfRXZlbnRCdWZmZXJGbGFnLCAgICAgICAgICAvKio8IGNvbXBvbmVudCBoYXMgZGV0ZWN0ZWQgYW4gRU9TICovCiAgICAgT01YX0V2ZW50UmVzb3VyY2VzQWNxdWlyZWQsICAgLyoqPCBjb21wb25lbnQgaGFzIGJlZW4gZ3JhbnRlZCByZXNvdXJjZXMgYW5kIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHN0YXJ0aW5nIHRoZSBzdGF0ZSBjaGFuZ2UgZnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT01YX1N0YXRlV2FpdEZvclJlc291cmNlcyB0byBPTVhfU3RhdGVJZGxlLiAqLwogICAgT01YX0V2ZW50Q29tcG9uZW50UmVzdW1lZCwgICAgIC8qKjwgQ29tcG9uZW50IHJlc3VtZWQgZHVlIHRvIHJlYWNxdWlzaXRpb24gb2YgcmVzb3VyY2VzICovCiAgICBPTVhfRXZlbnREeW5hbWljUmVzb3VyY2VzQXZhaWxhYmxlLCAvKio8IENvbXBvbmVudCBoYXMgYWNxdWlyZWQgcHJldmlvdXNseSB1bmF2YWlsYWJsZSBkeW5hbWljIHJlc291cmNlcyAqLwogICAgT01YX0V2ZW50UG9ydEZvcm1hdERldGVjdGVkLCAgICAgIC8qKjwgQ29tcG9uZW50IGhhcyBkZXRlY3RlZCBhIHN1cHBvcnRlZCBmb3JtYXQuICovCi0gICBPTVhfRXZlbnRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICBPTVhfRXZlbnRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgIE9NWF9FdmVudFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICBPTVhfRXZlbnRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9FVkVOVFRZUEU7CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgZXZlbnQgb2YgaW50ZXJlc3Qgb2NjdXJzLiAgRXZlbnRzIGFyZSBkZWZpbmVkIGluIHRoZSBPTVhfRVZFTlRUWVBFCiAgICAgICAgIGVudW1lcmF0aW9uLiAgUGxlYXNlIHNlZSB0aGF0IGVudW1lcmF0aW9uIGZvciBkZXRhaWxzIG9mIHdoYXQgd2lsbAogICAgICAgICBiZSByZXR1cm5lZCBmb3IgZWFjaCB0eXBlIG9mIGV2ZW50LiBDYWxsYmFja3Mgc2hvdWxkIG5vdCByZXR1cm4KLSAgICAgICAgYW4gZXJyb3IgdG8gdGhlIGNvbXBvbmVudCwgc28gaWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgYXBwbGljYXRpb24gCisgICAgICAgIGFuIGVycm9yIHRvIHRoZSBjb21wb25lbnQsIHNvIGlmIGFuIGVycm9yIG9jY3VycywgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIHNoYWxsIGhhbmRsZSBpdCBpbnRlcm5hbGx5LiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCiAKICAgICAgICAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYyB0byBhdm9pZApAQCAtNTI3LDE0ICs1MjcsMTQgQEAKICAgICAgICAgICAgIGhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGFjY2Vzcy4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgICAgIEBwYXJhbSBwQXBwRGF0YQotICAgICAgICAgICAgcG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIHRoYXQgd2FzIHByb3ZpZGVkIGluIHRoZSAKKyAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUKICAgICAgICAgICAgIHBBcHBEYXRhIHBhcmFtZXRlciB0byB0aGUgT01YX0dldEhhbmRsZSBtZXRob2QgZm9yIHRoZSBjb21wb25lbnQuCi0gICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gCisgICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgIGNhbiBoYXZlIGEgY29tcG9uZW50IHNwZWNpZmljIGNvbnRleHQgd2hlbiByZWNlaXZpbmcgdGhlIGNhbGxiYWNrLgogICAgICAgICBAcGFyYW0gZUV2ZW50CiAgICAgICAgICAgICBFdmVudCB0aGF0IHRoZSBjb21wb25lbnQgd2FudHMgdG8gbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiBhYm91dC4KICAgICAgICAgQHBhcmFtIG5EYXRhMQotICAgICAgICAgICAgbkRhdGEgd2lsbCBiZSB0aGUgT01YX0VSUk9SVFlQRSBmb3IgYW4gZXJyb3IgZXZlbnQgYW5kIHdpbGwgYmUgCisgICAgICAgICAgICBuRGF0YSB3aWxsIGJlIHRoZSBPTVhfRVJST1JUWVBFIGZvciBhbiBlcnJvciBldmVudCBhbmQgd2lsbCBiZQogICAgICAgICAgICAgYW4gT01YX0NPTU1BTkRUWVBFIGZvciBhIGNvbW1hbmQgY29tcGxldGUgZXZlbnQgYW5kIE9NWF9JTkRFWFRZUEUgZm9yIGEgT01YX1BvcnRTZXR0aW5nc0NoYW5nZWQgZXZlbnQuCiAgICAgICAgICBAcGFyYW0gbkRhdGEyCiAgICAgICAgICAgICBuRGF0YTIgd2lsbCBob2xkIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZXZlbnQuIENhbiBiZSBPTVhfU1RBVEVUWVBFIGZvcgpAQCAtNTUzLDIxICs1NTMsMjEgQEAKICAgICAgICAgT01YX0lOIE9NWF9QVFIgcEV2ZW50RGF0YSk7CiAKICAgICAvKiogVGhlIEVtcHR5QnVmZmVyRG9uZSBtZXRob2QgaXMgdXNlZCB0byByZXR1cm4gZW1wdGllZCBidWZmZXJzIGZyb20gYW4KLSAgICAgICAgaW5wdXQgcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBmb3IgcmV1c2UuICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbCAKKyAgICAgICAgaW5wdXQgcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBmb3IgcmV1c2UuICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbAogICAgICAgICBzbyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHJlZmlsbCB0aGUgYnVmZmVycyBkdXJpbmcgdGhpcwogICAgICAgICBjYWxsLCBidXQgc2hvdWxkIHF1ZXVlIHRoZW0gYW5kIHJlZmlsbCB0aGVtIGluIGFub3RoZXIgdGhyZWFkLiAgVGhlcmUKICAgICAgICAgaXMgbm8gZXJyb3IgcmV0dXJuLCBzbyB0aGUgYXBwbGljYXRpb24gc2hhbGwgaGFuZGxlIGFueSBlcnJvcnMgZ2VuZXJhdGVkCi0gICAgICAgIGludGVybmFsbHkuICAKLSAgICAgICAgCisgICAgICAgIGludGVybmFsbHkuCisKICAgICAgICAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAgICAgCisKICAgICAgICAgQHBhcmFtIGhDb21wb25lbnQKICAgICAgICAgICAgIGhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGFjY2Vzcy4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgICAgIEBwYXJhbSBwQXBwRGF0YQotICAgICAgICAgICAgcG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIHRoYXQgd2FzIHByb3ZpZGVkIGluIHRoZSAKKyAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUKICAgICAgICAgICAgIHBBcHBEYXRhIHBhcmFtZXRlciB0byB0aGUgT01YX0dldEhhbmRsZSBtZXRob2QgZm9yIHRoZSBjb21wb25lbnQuCi0gICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gCisgICAgICAgICAgICBUaGlzIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgaXMgcHJvdmlkZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24KICAgICAgICAgICAgIGNhbiBoYXZlIGEgY29tcG9uZW50IHNwZWNpZmljIGNvbnRleHQgd2hlbiByZWNlaXZpbmcgdGhlIGNhbGxiYWNrLgogICAgICAgICBAcGFyYW0gcEJ1ZmZlcgogICAgICAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQlVGRkVSSEVBREVSVFlQRSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIHdpdGggVXNlQnVmZmVyCkBAIC01ODAsMjMgKzU4MCwyMyBAQAogICAgICAgICBPTVhfSU4gT01YX0JVRkZFUkhFQURFUlRZUEUqIHBCdWZmZXIpOwogCiAgICAgLyoqIFRoZSBGaWxsQnVmZmVyRG9uZSBtZXRob2QgaXMgdXNlZCB0byByZXR1cm4gZmlsbGVkIGJ1ZmZlcnMgZnJvbSBhbgotICAgICAgICBvdXRwdXQgcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBmb3IgZW1wdHlpbmcgYW5kIHRoZW4gcmV1c2UuICAKLSAgICAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwgc28gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYXR0ZW1wdCB0byAKLSAgICAgICAgZW1wdHkgdGhlIGJ1ZmZlcnMgZHVyaW5nIHRoaXMgY2FsbCwgYnV0IHNob3VsZCBxdWV1ZSB0aGUgYnVmZmVycyAKLSAgICAgICAgYW5kIGVtcHR5IHRoZW0gaW4gYW5vdGhlciB0aHJlYWQuICBUaGVyZSBpcyBubyBlcnJvciByZXR1cm4sIHNvIAotICAgICAgICB0aGUgYXBwbGljYXRpb24gc2hhbGwgaGFuZGxlIGFueSBlcnJvcnMgZ2VuZXJhdGVkIGludGVybmFsbHkuICBUaGUgCisgICAgICAgIG91dHB1dCBwb3J0IGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIGZvciBlbXB0eWluZyBhbmQgdGhlbiByZXVzZS4KKyAgICAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwgc28gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgYXR0ZW1wdCB0bworICAgICAgICBlbXB0eSB0aGUgYnVmZmVycyBkdXJpbmcgdGhpcyBjYWxsLCBidXQgc2hvdWxkIHF1ZXVlIHRoZSBidWZmZXJzCisgICAgICAgIGFuZCBlbXB0eSB0aGVtIGluIGFub3RoZXIgdGhyZWFkLiAgVGhlcmUgaXMgbm8gZXJyb3IgcmV0dXJuLCBzbworICAgICAgICB0aGUgYXBwbGljYXRpb24gc2hhbGwgaGFuZGxlIGFueSBlcnJvcnMgZ2VuZXJhdGVkIGludGVybmFsbHkuICBUaGUKICAgICAgICAgYXBwbGljYXRpb24gc2hhbGwgYWxzbyB1cGRhdGUgdGhlIGJ1ZmZlciBoZWFkZXIgdG8gaW5kaWNhdGUgdGhlCi0gICAgICAgIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW50byB0aGUgYnVmZmVyLiAgCisgICAgICAgIG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW50byB0aGUgYnVmZmVyLgogCiAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgICAgIAorCiAgICAgICAgIEBwYXJhbSBoQ29tcG9uZW50CiAgICAgICAgICAgICBoYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBhY2Nlc3MuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgR2V0SGFuZGxlIGZ1bmN0aW9uLgogICAgICAgICBAcGFyYW0gcEFwcERhdGEKLSAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUgCisgICAgICAgICAgICBwb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgdmFsdWUgdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlCiAgICAgICAgICAgICBwQXBwRGF0YSBwYXJhbWV0ZXIgdG8gdGhlIE9NWF9HZXRIYW5kbGUgbWV0aG9kIGZvciB0aGUgY29tcG9uZW50LgotICAgICAgICAgICAgVGhpcyBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIGlzIHByb3ZpZGVkIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIAorICAgICAgICAgICAgVGhpcyBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlIGlzIHByb3ZpZGVkIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICBjYW4gaGF2ZSBhIGNvbXBvbmVudCBzcGVjaWZpYyBjb250ZXh0IHdoZW4gcmVjZWl2aW5nIHRoZSBjYWxsYmFjay4KICAgICAgICAgQHBhcmFtIHBCdWZmZXIKICAgICAgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIGFsbG9jYXRlZCB3aXRoIFVzZUJ1ZmZlcgpAQCAtNjIwLDEzICs2MjAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBkb24ndCBjYXJlICovCiAgICAgT01YX0J1ZmZlclN1cHBseUlucHV0LCAgICAgICAgICAgICAvKio8IGlucHV0IHBvcnQgc3VwcGxpZXMgdGhlIGJ1ZmZlcnMgKi8KICAgICBPTVhfQnVmZmVyU3VwcGx5T3V0cHV0LCAgICAgICAgICAgIC8qKjwgb3V0cHV0IHBvcnQgc3VwcGxpZXMgdGhlIGJ1ZmZlcnMgKi8KLSAgICBPTVhfQnVmZmVyU3VwcGx5S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9CdWZmZXJTdXBwbHlLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQnVmZmVyU3VwcGx5VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfQnVmZmVyU3VwcGx5TWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfQlVGRkVSU1VQUExJRVJUWVBFOwogCiAKLS8qKiBidWZmZXIgc3VwcGxpZXIgcGFyYW1ldGVyIAorLyoqIGJ1ZmZlciBzdXBwbGllciBwYXJhbWV0ZXIKICAqIEBpbmdyb3VwIHR1bgogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfUEFSQU1fQlVGRkVSU1VQUExJRVJUWVBFIHsKQEAgLTYzNyw2MSArNjM3LDYxIEBACiB9IE9NWF9QQVJBTV9CVUZGRVJTVVBQTElFUlRZUEU7CiAKIAotLyoqPCBpbmRpY2F0ZXMgdGhhdCBidWZmZXJzIHJlY2VpdmVkIGJ5IGFuIGlucHV0IHBvcnQgb2YgYSB0dW5uZWwgCi0gICAgIG1heSBub3QgbW9kaWZ5IHRoZSBkYXRhIGluIHRoZSBidWZmZXJzIAorLyoqPCBpbmRpY2F0ZXMgdGhhdCBidWZmZXJzIHJlY2VpdmVkIGJ5IGFuIGlucHV0IHBvcnQgb2YgYSB0dW5uZWwKKyAgICAgbWF5IG5vdCBtb2RpZnkgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlcnMKICAgICAgQGluZ3JvdXAgdHVuCiAgKi8KLSNkZWZpbmUgT01YX1BPUlRUVU5ORUxGTEFHX1JFQURPTkxZIDB4MDAwMDAwMDEgCisjZGVmaW5lIE9NWF9QT1JUVFVOTkVMRkxBR19SRUFET05MWSAweDAwMDAwMDAxCiAKIAogLyoqIFRoZSBPTVhfVFVOTkVMU0VUVVBUWVBFIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgZGF0YSBmcm9tIGFuIG91dHB1dAogICAgIHBvcnQgdG8gYW4gaW5wdXQgcG9ydCBhcyBwYXJ0IHRoZSB0d28gQ29tcG9uZW50VHVubmVsUmVxdWVzdCBjYWxscwotICAgIHJlc3VsdGluZyBmcm9tIGEgT01YX1NldHVwVHVubmVsIGNhbGwgZnJvbSB0aGUgSUwgQ2xpZW50LiAKKyAgICByZXN1bHRpbmcgZnJvbSBhIE9NWF9TZXR1cFR1bm5lbCBjYWxsIGZyb20gdGhlIElMIENsaWVudC4KICAgICBAaW5ncm91cCB0dW4KLSAqLyAgIAorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVFVOTkVMU0VUVVBUWVBFCiB7CiAgICAgT01YX1UzMiBuVHVubmVsRmxhZ3M7ICAgICAgICAgICAgIC8qKjwgYml0IGZsYWdzIGZvciB0dW5uZWxpbmcgKi8KICAgICBPTVhfQlVGRkVSU1VQUExJRVJUWVBFIGVTdXBwbGllcjsgLyoqPCBzdXBwbGllciBwcmVmZXJlbmNlICovCi19IE9NWF9UVU5ORUxTRVRVUFRZUEU7IAorfSBPTVhfVFVOTkVMU0VUVVBUWVBFOwogCiAvKiBPTVggQ29tcG9uZW50IGhlYWRlcnMgaXMgaW5jbHVkZWQgdG8gZW5hYmxlIHRoZSBjb3JlIHRvIHVzZQotICAgbWFjcm9zIGZvciBmdW5jdGlvbnMgaW50byB0aGUgY29tcG9uZW50IGZvciBPTVggcmVsZWFzZSAxLjAuICAKKyAgIG1hY3JvcyBmb3IgZnVuY3Rpb25zIGludG8gdGhlIGNvbXBvbmVudCBmb3IgT01YIHJlbGVhc2UgMS4wLgogICAgRGV2ZWxvcGVycyBzaG91bGQgbm90IGFjY2VzcyBhbnkgc3RydWN0dXJlcyBvciBkYXRhIGZyb20gd2l0aGluCiAgICB0aGUgY29tcG9uZW50IGhlYWRlciBkaXJlY3RseSAqLwogLyogVE8gQkUgUkVNT1ZFRCAtICNpbmNsdWRlIDxPTVhfQ29tcG9uZW50Lmg+ICovCiAKLS8qKiBHZXRDb21wb25lbnRWZXJzaW9uIHdpbGwgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21wb25lbnQuICAKKy8qKiBHZXRDb21wb25lbnRWZXJzaW9uIHdpbGwgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21wb25lbnQuCiAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICBUaGlzIG1hY3JvIHdpbGwgZ28gZGlyZWN0bHkgZnJvbSB0aGUKICAgICBhcHBsaWNhdGlvbiB0byB0aGUgY29tcG9uZW50ICh2aWEgYSBjb3JlIG1hY3JvKS4gIFRoZQogICAgIGNvbXBvbmVudCB3aWxsIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgaGFuZGxlIG9mIGNvbXBvbmVudCB0byBleGVjdXRlIHRoZSBjb21tYW5kCiAgICAgQHBhcmFtIFtvdXRdIHBDb21wb25lbnROYW1lCi0gICAgICAgIHBvaW50ZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9mIGxlbmd0aCAxMjggYnl0ZXMuICBUaGUgY29tcG9uZW50IAotICAgICAgICB3aWxsIHdyaXRlIGl0cyBuYW1lIGludG8gdGhpcyBzdHJpbmcuICBUaGUgbmFtZSB3aWxsIGJlIAotICAgICAgICB0ZXJtaW5hdGVkIGJ5IGEgc2luZ2xlIHplcm8gYnl0ZS4gIFRoZSBuYW1lIG9mIGEgY29tcG9uZW50IHdpbGwgCi0gICAgICAgIGJlIDEyNyBieXRlcyBvciBsZXNzIHRvIGxlYXZlIHJvb20gZm9yIHRoZSB0cmFpbGluZyB6ZXJvIGJ5dGUuICAKKyAgICAgICAgcG9pbnRlciB0byBhbiBlbXB0eSBzdHJpbmcgb2YgbGVuZ3RoIDEyOCBieXRlcy4gIFRoZSBjb21wb25lbnQKKyAgICAgICAgd2lsbCB3cml0ZSBpdHMgbmFtZSBpbnRvIHRoaXMgc3RyaW5nLiAgVGhlIG5hbWUgd2lsbCBiZQorICAgICAgICB0ZXJtaW5hdGVkIGJ5IGEgc2luZ2xlIHplcm8gYnl0ZS4gIFRoZSBuYW1lIG9mIGEgY29tcG9uZW50IHdpbGwKKyAgICAgICAgYmUgMTI3IGJ5dGVzIG9yIGxlc3MgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIHRyYWlsaW5nIHplcm8gYnl0ZS4KICAgICAgICAgQW4gZXhhbXBsZSBvZiBhIHZhbGlkIGNvbXBvbmVudCBuYW1lIGlzICJPTVguQUJDLkNoYW5uZWxNaXhlclwwIi4KICAgICBAcGFyYW0gW291dF0gcENvbXBvbmVudFZlcnNpb24KLSAgICAgICAgcG9pbnRlciB0byBhbiBPTVggVmVyc2lvbiBzdHJ1Y3R1cmUgdGhhdCB0aGUgY29tcG9uZW50IHdpbGwgZmlsbCAKLSAgICAgICAgaW4uICBUaGUgY29tcG9uZW50IHdpbGwgZmlsbCBpbiBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZSAKLSAgICAgICAgY29tcG9uZW50IHZlcnNpb24uICBOT1RFOiB0aGUgY29tcG9uZW50IHZlcnNpb24gaXMgTk9UIHRoZSBzYW1lIAotICAgICAgICBhcyB0aGUgT01YIFNwZWNpZmljYXRpb24gdmVyc2lvbiAoZm91bmQgaW4gYWxsIHN0cnVjdHVyZXMpLiAgVGhlIAotICAgICAgICBjb21wb25lbnQgdmVyc2lvbiBpcyBkZWZpbmVkIGJ5IHRoZSB2ZW5kb3Igb2YgdGhlIGNvbXBvbmVudCBhbmQgCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YIFZlcnNpb24gc3RydWN0dXJlIHRoYXQgdGhlIGNvbXBvbmVudCB3aWxsIGZpbGwKKyAgICAgICAgaW4uICBUaGUgY29tcG9uZW50IHdpbGwgZmlsbCBpbiBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZQorICAgICAgICBjb21wb25lbnQgdmVyc2lvbi4gIE5PVEU6IHRoZSBjb21wb25lbnQgdmVyc2lvbiBpcyBOT1QgdGhlIHNhbWUKKyAgICAgICAgYXMgdGhlIE9NWCBTcGVjaWZpY2F0aW9uIHZlcnNpb24gKGZvdW5kIGluIGFsbCBzdHJ1Y3R1cmVzKS4gIFRoZQorICAgICAgICBjb21wb25lbnQgdmVyc2lvbiBpcyBkZWZpbmVkIGJ5IHRoZSB2ZW5kb3Igb2YgdGhlIGNvbXBvbmVudCBhbmQKICAgICAgICAgaXRzIHZhbHVlIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBjb21wb25lbnQgdmVuZG9yLgogICAgIEBwYXJhbSBbb3V0XSBwU3BlY1ZlcnNpb24KLSAgICAgICAgcG9pbnRlciB0byBhbiBPTVggVmVyc2lvbiBzdHJ1Y3R1cmUgdGhhdCB0aGUgY29tcG9uZW50IHdpbGwgZmlsbCAKLSAgICAgICAgaW4uICBUaGUgU3BlY1ZlcnNpb24gaXMgdGhlIHZlcnNpb24gb2YgdGhlIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgCi0gICAgICAgIGNvbXBvbmVudCB3YXMgYnVpbHQgYWdhaW5zdC4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcyB2YWx1ZSBtYXkgb3IgCi0gICAgICAgIG1heSBub3QgbWF0Y2ggdGhlIHN0cnVjdHVyZSdzIHZlcnNpb24uICBGb3IgZXhhbXBsZSwgaWYgdGhlIAotICAgICAgICBjb21wb25lbnQgd2FzIGJ1aWx0IGFnYWluc3QgdGhlIDIuMCBzcGVjaWZpY2F0aW9uLCBidXQgdGhlIAotICAgICAgICBhcHBsaWNhdGlvbiAod2hpY2ggY3JlYXRlcyB0aGUgc3RydWN0dXJlIGlzIGJ1aWx0IGFnYWluc3QgdGhlIAorICAgICAgICBwb2ludGVyIHRvIGFuIE9NWCBWZXJzaW9uIHN0cnVjdHVyZSB0aGF0IHRoZSBjb21wb25lbnQgd2lsbCBmaWxsCisgICAgICAgIGluLiAgVGhlIFNwZWNWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uIHRoYXQgdGhlCisgICAgICAgIGNvbXBvbmVudCB3YXMgYnVpbHQgYWdhaW5zdC4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcyB2YWx1ZSBtYXkgb3IKKyAgICAgICAgbWF5IG5vdCBtYXRjaCB0aGUgc3RydWN0dXJlJ3MgdmVyc2lvbi4gIEZvciBleGFtcGxlLCBpZiB0aGUKKyAgICAgICAgY29tcG9uZW50IHdhcyBidWlsdCBhZ2FpbnN0IHRoZSAyLjAgc3BlY2lmaWNhdGlvbiwgYnV0IHRoZQorICAgICAgICBhcHBsaWNhdGlvbiAod2hpY2ggY3JlYXRlcyB0aGUgc3RydWN0dXJlIGlzIGJ1aWx0IGFnYWluc3QgdGhlCiAgICAgICAgIDEuMCBzcGVjaWZpY2F0aW9uIHRoZSB2ZXJzaW9ucyB3b3VsZCBiZSBkaWZmZXJlbnQuCiAgICAgQHBhcmFtIFtvdXRdIHBDb21wb25lbnRVVUlECi0gICAgICAgIHBvaW50ZXIgdG8gdGhlIFVVSUQgb2YgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGJlIGZpbGxlZCBpbiBieSAKLSAgICAgICAgdGhlIGNvbXBvbmVudC4gIFRoZSBVVUlEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBpcyBzZXQgYXQgCi0gICAgICAgIFJVTiB0aW1lIGZvciB0aGUgY29tcG9uZW50IGFuZCBpcyB1bmlxdWUgdG8gZWFjaCBpbnN0YW50aW9uIG9mIAorICAgICAgICBwb2ludGVyIHRvIHRoZSBVVUlEIG9mIHRoZSBjb21wb25lbnQgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gYnkKKyAgICAgICAgdGhlIGNvbXBvbmVudC4gIFRoZSBVVUlEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBpcyBzZXQgYXQKKyAgICAgICAgUlVOIHRpbWUgZm9yIHRoZSBjb21wb25lbnQgYW5kIGlzIHVuaXF1ZSB0byBlYWNoIGluc3RhbnRpb24gb2YKICAgICAgICAgdGhlIGNvbXBvbmVudC4KICAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKICAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQpAQCAtNzE0LDQ2ICs3MTQsNDYgQEAKIAogLyoqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjb21wb25lbnQuICBUaGlzIGNhbGwgaXMgYSBub24tYmxvY2tpbmcgY2FsbC4KICAgICBUaGUgY29tcG9uZW50IHNob3VsZCBjaGVjayB0aGUgcGFyYW1ldGVycyBhbmQgdGhlbiBxdWV1ZSB0aGUgY29tbWFuZAotICAgIHRvIHRoZSBjb21wb25lbnQgdGhyZWFkIHRvIGJlIGV4ZWN1dGVkLiAgVGhlIGNvbXBvbmVudCB0aHJlYWQgc2hhbGwgCi0gICAgc2VuZCB0aGUgRXZlbnRIYW5kbGVyKCkgY2FsbGJhY2sgYXQgdGhlIGNvbmNsdXNpb24gb2YgdGhlIGNvbW1hbmQuIAorICAgIHRvIHRoZSBjb21wb25lbnQgdGhyZWFkIHRvIGJlIGV4ZWN1dGVkLiAgVGhlIGNvbXBvbmVudCB0aHJlYWQgc2hhbGwKKyAgICBzZW5kIHRoZSBFdmVudEhhbmRsZXIoKSBjYWxsYmFjayBhdCB0aGUgY29uY2x1c2lvbiBvZiB0aGUgY29tbWFuZC4KICAgICBUaGlzIG1hY3JvIHdpbGwgZ28gZGlyZWN0bHkgZnJvbSB0aGUgYXBwbGljYXRpb24gdG8gdGhlIGNvbXBvbmVudCAodmlhCiAgICAgYSBjb3JlIG1hY3JvKS4gIFRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIFdoZW4gdGhlIGNvbW1hbmQgaXMgIk9NWF9Db21tYW5kU3RhdGVTZXQiIHRoZSBjb21wb25lbnQgd2lsbCBxdWV1ZSBhCiAgICAgc3RhdGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IHN0YXRlIGlkZW5maWVkIGluIG5QYXJhbS4KLSAgICAKKwogICAgIFdoZW4gdGhlIGNvbW1hbmQgaXMgIk9NWF9Db21tYW5kRmx1c2giLCB0byBmbHVzaCBhIHBvcnQncyBidWZmZXIgcXVldWVzLAotICAgIHRoZSBjb21tYW5kIHdpbGwgZm9yY2UgdGhlIGNvbXBvbmVudCB0byByZXR1cm4gYWxsIGJ1ZmZlcnMgTk9UIENVUlJFTlRMWSAKLSAgICBCRUlORyBQUk9DRVNTRUQgdG8gdGhlIGFwcGxpY2F0aW9uLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGJ1ZmZlcnMgCisgICAgdGhlIGNvbW1hbmQgd2lsbCBmb3JjZSB0aGUgY29tcG9uZW50IHRvIHJldHVybiBhbGwgYnVmZmVycyBOT1QgQ1VSUkVOVExZCisgICAgQkVJTkcgUFJPQ0VTU0VEIHRvIHRoZSBhcHBsaWNhdGlvbiwgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBidWZmZXJzCiAgICAgd2VyZSByZWNlaXZlZC4KLSAgICAKLSAgICBXaGVuIHRoZSBjb21tYW5kIGlzICJPTVhfQ29tbWFuZFBvcnREaXNhYmxlIiBvciAKKworICAgIFdoZW4gdGhlIGNvbW1hbmQgaXMgIk9NWF9Db21tYW5kUG9ydERpc2FibGUiIG9yCiAgICAgIk9NWF9Db21tYW5kUG9ydEVuYWJsZSIsIHRoZSBjb21wb25lbnQncyBwb3J0IChnaXZlbiBieSB0aGUgdmFsdWUgb2YKLSAgICBuUGFyYW0pIHdpbGwgYmUgc3RvcHBlZCBvciByZXN0YXJ0ZWQuIAotICAgIAorICAgIG5QYXJhbSkgd2lsbCBiZSBzdG9wcGVkIG9yIHJlc3RhcnRlZC4KKwogICAgIFdoZW4gdGhlIGNvbW1hbmQgIk9NWF9Db21tYW5kTWFya0J1ZmZlciIgaXMgdXNlZCB0byBtYXJrIGEgYnVmZmVyLCB0aGUKICAgICBwQ21kRGF0YSB3aWxsIHBvaW50IHRvIGEgT01YX01BUktUWVBFIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBjb21wb25lbnQKICAgICBoYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBleGFtaW5lIHRoZSBidWZmZXIgY2hhaW4gZm9yIHRoZSBtYXJrLiAgblBhcmFtMQogICAgIGNvbnRhaW5zIHRoZSBpbmRleCBvZiB0aGUgcG9ydCBvbiB3aGljaCB0aGUgYnVmZmVyIG1hcmsgaXMgYXBwbGllZC4KIAotICAgIFNwZWNpZmljYXRpb24gdGV4dCBmb3IgbW9yZSBkZXRhaWxzLiAKLSAgICAKKyAgICBTcGVjaWZpY2F0aW9uIHRleHQgZm9yIG1vcmUgZGV0YWlscy4KKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgaGFuZGxlIG9mIGNvbXBvbmVudCB0byBleGVjdXRlIHRoZSBjb21tYW5kCiAgICAgQHBhcmFtIFtpbl0gQ21kCiAgICAgICAgIENvbW1hbmQgZm9yIHRoZSBjb21wb25lbnQgdG8gZXhlY3V0ZQogICAgIEBwYXJhbSBbaW5dIG5QYXJhbQotICAgICAgICBQYXJhbWV0ZXIgZm9yIHRoZSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkLiAgV2hlbiBDbWQgaGFzIHRoZSB2YWx1ZSAKLSAgICAgICAgT01YX0NvbW1hbmRTdGF0ZVNldCwgdmFsdWUgaXMgYSBtZW1iZXIgb2YgT01YX1NUQVRFVFlQRS4gIFdoZW4gQ21kIGhhcyAKLSAgICAgICAgdGhlIHZhbHVlIE9NWF9Db21tYW5kRmx1c2gsIHZhbHVlIG9mIG5QYXJhbSBpbmRpY2F0ZXMgd2hpY2ggcG9ydChzKSAKLSAgICAgICAgdG8gZmx1c2guIC0xIGlzIHVzZWQgdG8gZmx1c2ggYWxsIHBvcnRzIGEgc2luZ2xlIHBvcnQgaW5kZXggd2lsbCAKKyAgICAgICAgUGFyYW1ldGVyIGZvciB0aGUgY29tbWFuZCB0byBiZSBleGVjdXRlZC4gIFdoZW4gQ21kIGhhcyB0aGUgdmFsdWUKKyAgICAgICAgT01YX0NvbW1hbmRTdGF0ZVNldCwgdmFsdWUgaXMgYSBtZW1iZXIgb2YgT01YX1NUQVRFVFlQRS4gIFdoZW4gQ21kIGhhcworICAgICAgICB0aGUgdmFsdWUgT01YX0NvbW1hbmRGbHVzaCwgdmFsdWUgb2YgblBhcmFtIGluZGljYXRlcyB3aGljaCBwb3J0KHMpCisgICAgICAgIHRvIGZsdXNoLiAtMSBpcyB1c2VkIHRvIGZsdXNoIGFsbCBwb3J0cyBhIHNpbmdsZSBwb3J0IGluZGV4IHdpbGwKICAgICAgICAgb25seSBmbHVzaCB0aGF0IHBvcnQuICBXaGVuIENtZCBoYXMgdGhlIHZhbHVlICJPTVhfQ29tbWFuZFBvcnREaXNhYmxlIgotICAgICAgICBvciAiT01YX0NvbW1hbmRQb3J0RW5hYmxlIiwgdGhlIGNvbXBvbmVudCdzIHBvcnQgaXMgZ2l2ZW4gYnkgCisgICAgICAgIG9yICJPTVhfQ29tbWFuZFBvcnRFbmFibGUiLCB0aGUgY29tcG9uZW50J3MgcG9ydCBpcyBnaXZlbiBieQogICAgICAgICB0aGUgdmFsdWUgb2YgblBhcmFtLiAgV2hlbiBDbWQgaGFzIHRoZSB2YWx1ZSAiT01YX0NvbW1hbmRNYXJrQnVmZmVyIgogICAgICAgICB0aGUgY29tcG9uZW50cyBwb3QgaXMgZ2l2ZW4gYnkgdGhlIHZhbHVlIG9mIG5QYXJhbS4KICAgICBAcGFyYW0gW2luXSBwQ21kRGF0YQogICAgICAgICBQYXJhbWV0ZXIgcG9pbnRpbmcgdG8gdGhlIE9NWF9NQVJLVFlQRSBzdHJ1Y3R1cmUgd2hlbiBDbWQgaGFzIHRoZSB2YWx1ZQotICAgICAgICAiT01YX0NvbW1hbmRNYXJrQnVmZmVyIi4gICAgIAorICAgICAgICAiT01YX0NvbW1hbmRNYXJrQnVmZmVyIi4KICAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKICAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQogICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KQEAgLTc3MSwyMSArNzcxLDIxIEBACiAgICAgICAgICBwQ21kRGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIEVuZCAqLwogCiAKLS8qKiBUaGUgT01YX0dldFBhcmFtZXRlciBtYWNybyB3aWxsIGdldCBvbmUgb2YgdGhlIGN1cnJlbnQgcGFyYW1ldGVyIAotICAgIHNldHRpbmdzIGZyb20gdGhlIGNvbXBvbmVudC4gIFRoaXMgbWFjcm8gY2Fubm90IG9ubHkgYmUgaW52b2tlZCB3aGVuIAorLyoqIFRoZSBPTVhfR2V0UGFyYW1ldGVyIG1hY3JvIHdpbGwgZ2V0IG9uZSBvZiB0aGUgY3VycmVudCBwYXJhbWV0ZXIKKyAgICBzZXR0aW5ncyBmcm9tIHRoZSBjb21wb25lbnQuICBUaGlzIG1hY3JvIGNhbm5vdCBvbmx5IGJlIGludm9rZWQgd2hlbgogICAgIHRoZSBjb21wb25lbnQgaXMgaW4gdGhlIE9NWF9TdGF0ZUludmFsaWQgc3RhdGUuICBUaGUgblBhcmFtSW5kZXgKICAgICBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBzdHJ1Y3R1cmUgaXMgYmVpbmcgcmVxdWVzdGVkIGZyb20KLSAgICB0aGUgY29tcG9uZW50LiAgVGhlIGFwcGxpY2F0aW9uIHNoYWxsIGFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSAKLSAgICBhbmQgc2hhbGwgZmlsbCBpbiB0aGUgc3RydWN0dXJlIHNpemUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYmVmb3JlIAorICAgIHRoZSBjb21wb25lbnQuICBUaGUgYXBwbGljYXRpb24gc2hhbGwgYWxsb2NhdGUgdGhlIGNvcnJlY3Qgc3RydWN0dXJlCisgICAgYW5kIHNoYWxsIGZpbGwgaW4gdGhlIHN0cnVjdHVyZSBzaXplIGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGJlZm9yZQogICAgIGludm9raW5nIHRoaXMgbWFjcm8uICBXaGVuIHRoZSBwYXJhbWV0ZXIgYXBwbGllcyB0byBhIHBvcnQsIHRoZQogICAgIGNhbGxlciBzaGFsbCBmaWxsIGluIHRoZSBhcHByb3ByaWF0ZSBuUG9ydEluZGV4IHZhbHVlIGluZGljYXRpbmcgdGhlCi0gICAgcG9ydCBvbiB3aGljaCB0aGUgcGFyYW1ldGVyIGFwcGxpZXMuIElmIHRoZSBjb21wb25lbnQgaGFzIG5vdCBoYWQgCi0gICAgYW55IHNldHRpbmdzIGNoYW5nZWQsIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mIAotICAgIHZhbGlkIERFRkFVTFQgIHBhcmFtZXRlcnMgZm9yIHRoZSBjb21wb25lbnQuICBUaGlzIGlzIGEgYmxvY2tpbmcgCi0gICAgY2FsbC4gIAotICAgIAorICAgIHBvcnQgb24gd2hpY2ggdGhlIHBhcmFtZXRlciBhcHBsaWVzLiBJZiB0aGUgY29tcG9uZW50IGhhcyBub3QgaGFkCisgICAgYW55IHNldHRpbmdzIGNoYW5nZWQsIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mCisgICAgdmFsaWQgREVGQVVMVCAgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBvbmVudC4gIFRoaXMgaXMgYSBibG9ja2luZworICAgIGNhbGwuCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KQEAgLTc5Myw3ICs3OTMsNyBAQAogICAgICAgICBJbmRleCBvZiB0aGUgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gIFRoaXMgdmFsdWUgaXMgZnJvbSB0aGUKICAgICAgICAgT01YX0lOREVYVFlQRSBlbnVtZXJhdGlvbi4KICAgICBAcGFyYW0gW2luLG91dF0gcENvbXBvbmVudFBhcmFtZXRlclN0cnVjdHVyZQotICAgICAgICBQb2ludGVyIHRvIGFwcGxpY2F0aW9uIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGJ5IHRoZSAKKyAgICAgICAgUG9pbnRlciB0byBhcHBsaWNhdGlvbiBhbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBieSB0aGUKICAgICAgICAgY29tcG9uZW50LgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCkBAIC04MTQsMTcgKzgxNCwxNyBAQAogICAgIHN0cnVjdHVyZSB0byBhIGNvbXBvbmVudC4gIEVhY2ggc3RydWN0dXJlIHNoYWxsIGJlIHNlbnQgb25lIGF0IGEgdGltZSwKICAgICBpbiBhIHNlcGFyYXRlIGludm9jYXRpb24gb2YgdGhlIG1hY3JvLiAgVGhpcyBtYWNybyBjYW4gb25seSBiZQogICAgIGludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluIHRoZSBPTVhfU3RhdGVMb2FkZWQgc3RhdGUsIG9yIHRoZQotICAgIHBvcnQgaXMgZGlzYWJsZWQgKHdoZW4gdGhlIHBhcmFtZXRlciBhcHBsaWVzIHRvIGEgcG9ydCkuIFRoZSAKKyAgICBwb3J0IGlzIGRpc2FibGVkICh3aGVuIHRoZSBwYXJhbWV0ZXIgYXBwbGllcyB0byBhIHBvcnQpLiBUaGUKICAgICBuUGFyYW1JbmRleCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBzdHJ1Y3R1cmUgaXMgYmVpbmcKLSAgICBwYXNzZWQgdG8gdGhlIGNvbXBvbmVudC4gIFRoZSBhcHBsaWNhdGlvbiBzaGFsbCBhbGxvY2F0ZSB0aGUgCi0gICAgY29ycmVjdCBzdHJ1Y3R1cmUgYW5kIHNoYWxsIGZpbGwgaW4gdGhlIHN0cnVjdHVyZSBzaXplIGFuZCB2ZXJzaW9uIAorICAgIHBhc3NlZCB0byB0aGUgY29tcG9uZW50LiAgVGhlIGFwcGxpY2F0aW9uIHNoYWxsIGFsbG9jYXRlIHRoZQorICAgIGNvcnJlY3Qgc3RydWN0dXJlIGFuZCBzaGFsbCBmaWxsIGluIHRoZSBzdHJ1Y3R1cmUgc2l6ZSBhbmQgdmVyc2lvbgogICAgIGluZm9ybWF0aW9uIChhcyB3ZWxsIGFzIHRoZSBhY3R1YWwgZGF0YSkgYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uCiAgICAgVGhlIGFwcGxpY2F0aW9uIGlzIGZyZWUgdG8gZGlzcG9zZSBvZiB0aGlzIHN0cnVjdHVyZSBhZnRlciB0aGUgY2FsbAotICAgIGFzIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQgdG8gY29weSBhbnkgZGF0YSBpdCBzaGFsbCByZXRhaW4uICBUaGlzIAotICAgIGlzIGEgYmxvY2tpbmcgY2FsbC4gIAotICAgIAorICAgIGFzIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQgdG8gY29weSBhbnkgZGF0YSBpdCBzaGFsbCByZXRhaW4uICBUaGlzCisgICAgaXMgYSBibG9ja2luZyBjYWxsLgorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCkBAIC04NDksMTggKzg0OSwxOCBAQAogICAgICAgICBwQ29tcG9uZW50UGFyYW1ldGVyU3RydWN0dXJlKSAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9HZXRDb25maWcgbWFjcm8gd2lsbCBnZXQgb25lIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgCi0gICAgZnJvbSBhIGNvbXBvbmVudC4gIFRoaXMgbWFjcm8gY2FuIGJlIGludm9rZWQgYW55dGltZSBhZnRlciB0aGUgCi0gICAgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBuUGFyYW1JbmRleCBjYWxsIHBhcmFtZXRlciBpcyB1c2VkIHRvIAotICAgIGluZGljYXRlIHdoaWNoIHN0cnVjdHVyZSBpcyBiZWluZyByZXF1ZXN0ZWQgZnJvbSB0aGUgY29tcG9uZW50LiAgVGhlIAotICAgIGFwcGxpY2F0aW9uIHNoYWxsIGFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSBhbmQgc2hhbGwgZmlsbCBpbiB0aGUgCi0gICAgc3RydWN0dXJlIHNpemUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uICAKLSAgICBJZiB0aGUgY29tcG9uZW50IGhhcyBub3QgaGFkIHRoaXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgc2VudCBiZWZvcmUsIAotICAgIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mIHZhbGlkIERFRkFVTFQgdmFsdWVzIGZvciB0aGUgCi0gICAgY29tcG9uZW50LiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICAKLSAgICAKKy8qKiBUaGUgT01YX0dldENvbmZpZyBtYWNybyB3aWxsIGdldCBvbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcworICAgIGZyb20gYSBjb21wb25lbnQuICBUaGlzIG1hY3JvIGNhbiBiZSBpbnZva2VkIGFueXRpbWUgYWZ0ZXIgdGhlCisgICAgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBuUGFyYW1JbmRleCBjYWxsIHBhcmFtZXRlciBpcyB1c2VkIHRvCisgICAgaW5kaWNhdGUgd2hpY2ggc3RydWN0dXJlIGlzIGJlaW5nIHJlcXVlc3RlZCBmcm9tIHRoZSBjb21wb25lbnQuICBUaGUKKyAgICBhcHBsaWNhdGlvbiBzaGFsbCBhbGxvY2F0ZSB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUgYW5kIHNoYWxsIGZpbGwgaW4gdGhlCisgICAgc3RydWN0dXJlIHNpemUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gYmVmb3JlIGludm9raW5nIHRoaXMgbWFjcm8uCisgICAgSWYgdGhlIGNvbXBvbmVudCBoYXMgbm90IGhhZCB0aGlzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHNlbnQgYmVmb3JlLAorICAgIHRoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGEgc2V0IG9mIHZhbGlkIERFRkFVTFQgdmFsdWVzIGZvciB0aGUKKyAgICBjb21wb25lbnQuICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbC4KKwogICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCkBAIC04NjgsMTMgKzg2OCwxMyBAQAogICAgICAgICBJbmRleCBvZiB0aGUgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gIFRoaXMgdmFsdWUgaXMgZnJvbSB0aGUKICAgICAgICAgT01YX0lOREVYVFlQRSBlbnVtZXJhdGlvbi4KICAgICBAcGFyYW0gW2luLG91dF0gcENvbXBvbmVudENvbmZpZ1N0cnVjdHVyZQotICAgICAgICBwb2ludGVyIHRvIGFwcGxpY2F0aW9uIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkIGJ5IHRoZSAKKyAgICAgICAgcG9pbnRlciB0byBhcHBsaWNhdGlvbiBhbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZCBieSB0aGUKICAgICAgICAgY29tcG9uZW50LgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgogICAgIEBpbmdyb3VwIGNvbXAKLSovICAgICAgICAKKyovCiAjZGVmaW5lIE9NWF9HZXRDb25maWcoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGhDb21wb25lbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIG5Db25maWdJbmRleCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04ODUsMTggKzg4NSwxOCBAQAogICAgICAgICBwQ29tcG9uZW50Q29uZmlnU3RydWN0dXJlKSAgICAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9TZXRDb25maWcgbWFjcm8gd2lsbCBzZW5kIG9uZSBvZiB0aGUgY29uZmlndXJhdGlvbiAKKy8qKiBUaGUgT01YX1NldENvbmZpZyBtYWNybyB3aWxsIHNlbmQgb25lIG9mIHRoZSBjb25maWd1cmF0aW9uCiAgICAgc3RydWN0dXJlcyB0byBhIGNvbXBvbmVudC4gIEVhY2ggc3RydWN0dXJlIHNoYWxsIGJlIHNlbnQgb25lIGF0IGEgdGltZSwKLSAgICBlYWNoIGluIGEgc2VwYXJhdGUgaW52b2NhdGlvbiBvZiB0aGUgbWFjcm8uICBUaGlzIG1hY3JvIGNhbiBiZSBpbnZva2VkIAotICAgIGFueXRpbWUgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBsb2FkZWQuICBUaGUgYXBwbGljYXRpb24gc2hhbGwgCi0gICAgYWxsb2NhdGUgdGhlIGNvcnJlY3Qgc3RydWN0dXJlIGFuZCBzaGFsbCBmaWxsIGluIHRoZSBzdHJ1Y3R1cmUgc2l6ZSAKLSAgICBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoYXMgd2VsbCBhcyB0aGUgYWN0dWFsIGRhdGEpIGJlZm9yZSBpbnZva2luZyAKLSAgICB0aGlzIG1hY3JvLiAgVGhlIGFwcGxpY2F0aW9uIGlzIGZyZWUgdG8gZGlzcG9zZSBvZiB0aGlzIHN0cnVjdHVyZSBhZnRlciAKLSAgICB0aGUgY2FsbCBhcyB0aGUgY29tcG9uZW50IGlzIHJlcXVpcmVkIHRvIGNvcHkgYW55IGRhdGEgaXQgc2hhbGwgcmV0YWluLiAgCi0gICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuICAKLSAgICAKKyAgICBlYWNoIGluIGEgc2VwYXJhdGUgaW52b2NhdGlvbiBvZiB0aGUgbWFjcm8uICBUaGlzIG1hY3JvIGNhbiBiZSBpbnZva2VkCisgICAgYW55dGltZSBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGxvYWRlZC4gIFRoZSBhcHBsaWNhdGlvbiBzaGFsbAorICAgIGFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSBhbmQgc2hhbGwgZmlsbCBpbiB0aGUgc3RydWN0dXJlIHNpemUKKyAgICBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoYXMgd2VsbCBhcyB0aGUgYWN0dWFsIGRhdGEpIGJlZm9yZSBpbnZva2luZworICAgIHRoaXMgbWFjcm8uICBUaGUgYXBwbGljYXRpb24gaXMgZnJlZSB0byBkaXNwb3NlIG9mIHRoaXMgc3RydWN0dXJlIGFmdGVyCisgICAgdGhlIGNhbGwgYXMgdGhlIGNvbXBvbmVudCBpcyByZXF1aXJlZCB0byBjb3B5IGFueSBkYXRhIGl0IHNoYWxsIHJldGFpbi4KKyAgICBUaGlzIGlzIGEgYmxvY2tpbmcgY2FsbC4KKwogICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gNSBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCkBAIC05MjEsMjIgKzkyMSwyMiBAQAogICAgICAgICBwQ29tcG9uZW50Q29uZmlnU3RydWN0dXJlKSAgICAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9HZXRFeHRlbnNpb25JbmRleCBtYWNybyB3aWxsIGludm9rZSBhIGNvbXBvbmVudCB0byB0cmFuc2xhdGUgCi0gICAgYSB2ZW5kb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvciBwYXJhbWV0ZXIgc3RyaW5nIGludG8gYW4gT01YIAotICAgIHN0cnVjdHVyZSBpbmRleC4gIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGZvciB0aGUgdmVuZG9yIHRvIHN1cHBvcnQgCi0gICAgdGhpcyBjb21tYW5kIGZvciB0aGUgaW5kZXhlcyBhbHJlYWR5IGZvdW5kIGluIHRoZSBPTVhfSU5ERVhUWVBFIAotICAgIGVudW1lcmF0aW9uICh0aGlzIGlzIGRvbmUgdG8gc2F2ZSBzcGFjZSBpbiBzbWFsbCBjb21wb25lbnRzKS4gIFRoZSAKKy8qKiBUaGUgT01YX0dldEV4dGVuc2lvbkluZGV4IG1hY3JvIHdpbGwgaW52b2tlIGEgY29tcG9uZW50IHRvIHRyYW5zbGF0ZQorICAgIGEgdmVuZG9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgcGFyYW1ldGVyIHN0cmluZyBpbnRvIGFuIE9NWAorICAgIHN0cnVjdHVyZSBpbmRleC4gIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGZvciB0aGUgdmVuZG9yIHRvIHN1cHBvcnQKKyAgICB0aGlzIGNvbW1hbmQgZm9yIHRoZSBpbmRleGVzIGFscmVhZHkgZm91bmQgaW4gdGhlIE9NWF9JTkRFWFRZUEUKKyAgICBlbnVtZXJhdGlvbiAodGhpcyBpcyBkb25lIHRvIHNhdmUgc3BhY2UgaW4gc21hbGwgY29tcG9uZW50cykuICBUaGUKICAgICBjb21wb25lbnQgc2hhbGwgc3VwcG9ydCBhbGwgdmVuZG9yIHN1cHBsaWVkIGV4dGVuc2lvbiBpbmRleGVzIG5vdCBmb3VuZAotICAgIGluIHRoZSBtYXN0ZXIgT01YX0lOREVYVFlQRSBlbnVtZXJhdGlvbi4gIFRoaXMgaXMgYSBibG9ja2luZyBjYWxsLiAgCi0gICAgCisgICAgaW4gdGhlIG1hc3RlciBPTVhfSU5ERVhUWVBFIGVudW1lcmF0aW9uLiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBHZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgQHBhcmFtIFtpbl0gY1BhcmFtZXRlck5hbWUKICAgICAgICAgT01YX1NUUklORyB0aGF0IHNoYWxsIGJlIGxlc3MgdGhhbiAxMjggY2hhcmFjdGVycyBsb25nIGluY2x1ZGluZwotICAgICAgICB0aGUgdHJhaWxpbmcgbnVsbCBieXRlLiAgVGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBnZXQgCisgICAgICAgIHRoZSB0cmFpbGluZyBudWxsIGJ5dGUuICBUaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGdldAogICAgICAgICB0cmFuc2xhdGVkIGJ5IHRoZSBjb21wb25lbnQgaW50byBhIGNvbmZpZ3VyYXRpb24gaW5kZXguCiAgICAgQHBhcmFtIFtvdXRdIHBJbmRleFR5cGUKICAgICAgICAgYSBwb2ludGVyIHRvIGEgT01YX0lOREVYVFlQRSB0byByZWNlaXZlIHRoZSBpbmRleCB2YWx1ZS4KQEAgLTk1NSwxOCArOTU1LDE4IEBACiAgICAgICAgIHBJbmRleFR5cGUpICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gRW5kICovCiAKIAotLyoqIFRoZSBPTVhfR2V0U3RhdGUgbWFjcm8gd2lsbCBpbnZva2UgdGhlIGNvbXBvbmVudCB0byBnZXQgdGhlIGN1cnJlbnQgCisvKiogVGhlIE9NWF9HZXRTdGF0ZSBtYWNybyB3aWxsIGludm9rZSB0aGUgY29tcG9uZW50IHRvIGdldCB0aGUgY3VycmVudAogICAgIHN0YXRlIG9mIHRoZSBjb21wb25lbnQgYW5kIHBsYWNlIHRoZSBzdGF0ZSB2YWx1ZSBpbnRvIHRoZSBsb2NhdGlvbgotICAgIHBvaW50ZWQgdG8gYnkgcFN0YXRlLiAgCi0gICAgCisgICAgcG9pbnRlZCB0byBieSBwU3RhdGUuCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgogICAgIEBwYXJhbSBbb3V0XSBwU3RhdGUKICAgICAgICAgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gdG8gcmVjZWl2ZSB0aGUgc3RhdGUuICBUaGUgdmFsdWUgcmV0dXJuZWQKLSAgICAgICAgaXMgb25lIG9mIHRoZSBPTVhfU1RBVEVUWVBFIG1lbWJlcnMgCisgICAgICAgIGlzIG9uZSBvZiB0aGUgT01YX1NUQVRFVFlQRSBtZW1iZXJzCiAgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCiAgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKICAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCkBAIC05ODEsMTcgKzk4MSwxNyBAQAogCiAKIC8qKiBUaGUgT01YX1VzZUJ1ZmZlciBtYWNybyB3aWxsIHJlcXVlc3QgdGhhdCB0aGUgY29tcG9uZW50IHVzZQotICAgIGEgYnVmZmVyIChhbmQgYWxsb2NhdGUgaXRzIG93biBidWZmZXIgaGVhZGVyKSBhbHJlYWR5IGFsbG9jYXRlZCAKLSAgICBieSBhbm90aGVyIGNvbXBvbmVudCwgb3IgYnkgdGhlIElMIENsaWVudC4gVGhpcyBpcyBhIGJsb2NraW5nIAorICAgIGEgYnVmZmVyIChhbmQgYWxsb2NhdGUgaXRzIG93biBidWZmZXIgaGVhZGVyKSBhbHJlYWR5IGFsbG9jYXRlZAorICAgIGJ5IGFub3RoZXIgY29tcG9uZW50LCBvciBieSB0aGUgSUwgQ2xpZW50LiBUaGlzIGlzIGEgYmxvY2tpbmcKICAgICBjYWxsLgotICAgIAorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjLgotICAgIAorCiAgICAgQHBhcmFtIFtpbl0gaENvbXBvbmVudAogICAgICAgICBIYW5kbGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBhY2Nlc3NlZC4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudAogICAgICAgICBoYW5kbGUgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uCiAgICAgQHBhcmFtIFtvdXRdIHBwQnVmZmVyCi0gICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZSB0aGUgCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZSB0aGUKICAgICAgICAgcG9pbnRlciB0byB0aGUgYnVmZmVyIGhlYWRlcgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCkBAIC0xMDE1LDI1ICsxMDE1LDI1IEBACiAgICAgICAgICAgIHBCdWZmZXIpCiAKIAotLyoqIFRoZSBPTVhfQWxsb2NhdGVCdWZmZXIgbWFjcm8gd2lsbCByZXF1ZXN0IHRoYXQgdGhlIGNvbXBvbmVudCBhbGxvY2F0ZSAKLSAgICBhIG5ldyBidWZmZXIgYW5kIGJ1ZmZlciBoZWFkZXIuICBUaGUgY29tcG9uZW50IHdpbGwgYWxsb2NhdGUgdGhlIAotICAgIGJ1ZmZlciBhbmQgdGhlIGJ1ZmZlciBoZWFkZXIgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciAKKy8qKiBUaGUgT01YX0FsbG9jYXRlQnVmZmVyIG1hY3JvIHdpbGwgcmVxdWVzdCB0aGF0IHRoZSBjb21wb25lbnQgYWxsb2NhdGUKKyAgICBhIG5ldyBidWZmZXIgYW5kIGJ1ZmZlciBoZWFkZXIuICBUaGUgY29tcG9uZW50IHdpbGwgYWxsb2NhdGUgdGhlCisgICAgYnVmZmVyIGFuZCB0aGUgYnVmZmVyIGhlYWRlciBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyCiAgICAgaGVhZGVyLiAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCi0gICAgCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDUgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgogICAgIEBwYXJhbSBbb3V0XSBwcEJ1ZmZlcgotICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9CVUZGRVJIRUFERVJUWVBFIHN0cnVjdHVyZSB1c2VkIHRvIHJlY2VpdmUgCisgICAgICAgIHBvaW50ZXIgdG8gYW4gT01YX0JVRkZFUkhFQURFUlRZUEUgc3RydWN0dXJlIHVzZWQgdG8gcmVjZWl2ZQogICAgICAgICB0aGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIGhlYWRlcgogICAgIEBwYXJhbSBbaW5dIG5Qb3J0SW5kZXgKICAgICAgICAgblBvcnRJbmRleCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgcG9ydCBvbiB0aGUgY29tcG9uZW50IHRoZSBidWZmZXIgd2lsbAogICAgICAgICBiZSB1c2VkIHdpdGguICBUaGUgcG9ydCBjYW4gYmUgZm91bmQgYnkgdXNpbmcgdGhlIG5Qb3J0SW5kZXgKICAgICAgICAgdmFsdWUgYXMgYW4gaW5kZXggaW50byB0aGUgUG9ydCBEZWZpbml0aW9uIGFycmF5IG9mIHRoZSBjb21wb25lbnQuCiAgICAgQHBhcmFtIFtpbl0gcEFwcFByaXZhdGUKLSAgICAgICAgcEFwcFByaXZhdGUgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwQXBwUHJpdmF0ZSBtZW1iZXIgb2YgdGhlIAorICAgICAgICBwQXBwUHJpdmF0ZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBBcHBQcml2YXRlIG1lbWJlciBvZiB0aGUKICAgICAgICAgYnVmZmVyIGhlYWRlciBzdHJ1Y3R1cmUuCiAgICAgQHBhcmFtIFtpbl0gblNpemVCeXRlcwogICAgICAgICBzaXplIG9mIHRoZSBidWZmZXIgdG8gYWxsb2NhdGUuICBVc2VkIHdoZW4gYkFsbG9jYXRlTmV3IGlzIHRydWUuCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgogICAgIEBpbmdyb3VwIGNvbXAgYnVmCi0gKi8gICAgCisgKi8KICNkZWZpbmUgT01YX0FsbG9jYXRlQnVmZmVyKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaENvbXBvbmVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcHBCdWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwNTcsMTMgKzEwNTcsMTMgQEAKIAogCiAvKiogVGhlIE9NWF9GcmVlQnVmZmVyIG1hY3JvIHdpbGwgcmVsZWFzZSBhIGJ1ZmZlciBoZWFkZXIgZnJvbSB0aGUgY29tcG9uZW50Ci0gICAgd2hpY2ggd2FzIGFsbG9jYXRlZCB1c2luZyBlaXRoZXIgT01YX0FsbG9jYXRlQnVmZmVyIG9yIE9NWF9Vc2VCdWZmZXIuIElmICAKLSAgICB0aGUgY29tcG9uZW50IGFsbG9jYXRlZCB0aGUgYnVmZmVyIChzZWUgdGhlIE9NWF9Vc2VCdWZmZXIgbWFjcm8pIHRoZW4gCi0gICAgdGhlIGNvbXBvbmVudCBzaGFsbCBmcmVlIHRoZSBidWZmZXIgYW5kIGJ1ZmZlciBoZWFkZXIuIFRoaXMgaXMgYSAKLSAgICBibG9ja2luZyBjYWxsLiAKLSAgICAKKyAgICB3aGljaCB3YXMgYWxsb2NhdGVkIHVzaW5nIGVpdGhlciBPTVhfQWxsb2NhdGVCdWZmZXIgb3IgT01YX1VzZUJ1ZmZlci4gSWYKKyAgICB0aGUgY29tcG9uZW50IGFsbG9jYXRlZCB0aGUgYnVmZmVyIChzZWUgdGhlIE9NWF9Vc2VCdWZmZXIgbWFjcm8pIHRoZW4KKyAgICB0aGUgY29tcG9uZW50IHNoYWxsIGZyZWUgdGhlIGJ1ZmZlciBhbmQgYnVmZmVyIGhlYWRlci4gVGhpcyBpcyBhCisgICAgYmxvY2tpbmcgY2FsbC4KKwogICAgIFRoZSBjb21wb25lbnQgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KLSAgICAKKwogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKICAgICAgICAgSGFuZGxlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgYWNjZXNzZWQuICBUaGlzIGlzIHRoZSBjb21wb25lbnQKICAgICAgICAgaGFuZGxlIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLgpAQCAtMTA4OCwxNyArMTA4OCwxNyBAQAogICAgICAgICBwQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIEVuZCAqLwogCiAKLS8qKiBUaGUgT01YX0VtcHR5VGhpc0J1ZmZlciBtYWNybyB3aWxsIHNlbmQgYSBidWZmZXIgZnVsbCBvZiBkYXRhIHRvIGFuIAorLyoqIFRoZSBPTVhfRW1wdHlUaGlzQnVmZmVyIG1hY3JvIHdpbGwgc2VuZCBhIGJ1ZmZlciBmdWxsIG9mIGRhdGEgdG8gYW4KICAgICBpbnB1dCBwb3J0IG9mIGEgY29tcG9uZW50LiAgVGhlIGJ1ZmZlciB3aWxsIGJlIGVtcHRpZWQgYnkgdGhlIGNvbXBvbmVudAogICAgIGFuZCByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24gdmlhIHRoZSBFbXB0eUJ1ZmZlckRvbmUgY2FsbCBiYWNrLgogICAgIFRoaXMgaXMgYSBub24tYmxvY2tpbmcgY2FsbCBpbiB0aGF0IHRoZSBjb21wb25lbnQgd2lsbCByZWNvcmQgdGhlIGJ1ZmZlcgotICAgIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIHRoZW4gZW1wdHkgdGhlIGJ1ZmZlciwgbGF0ZXIsIGF0IHRoZSBwcm9wZXIgCi0gICAgdGltZS4gIEFzIGV4cGVjdGVkLCB0aGlzIG1hY3JvIG1heSBiZSBpbnZva2VkIG9ubHkgd2hpbGUgdGhlIGNvbXBvbmVudCAKKyAgICBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGVtcHR5IHRoZSBidWZmZXIsIGxhdGVyLCBhdCB0aGUgcHJvcGVyCisgICAgdGltZS4gIEFzIGV4cGVjdGVkLCB0aGlzIG1hY3JvIG1heSBiZSBpbnZva2VkIG9ubHkgd2hpbGUgdGhlIGNvbXBvbmVudAogICAgIGlzIGluIHRoZSBPTVhfU3RhdGVFeGVjdXRpbmcuICBJZiBuUG9ydEluZGV4IGRvZXMgbm90IHNwZWNpZnkgYW4gaW5wdXQKLSAgICBwb3J0LCB0aGUgY29tcG9uZW50IHNoYWxsIHJldHVybiBhbiBlcnJvci4gIAotICAgIAorICAgIHBvcnQsIHRoZSBjb21wb25lbnQgc2hhbGwgcmV0dXJuIGFuIGVycm9yLgorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KQEAgLTExMTgsMTcgKzExMTgsMTcgQEAKICAgICAgICAgcEJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBFbmQgKi8KIAogCi0vKiogVGhlIE9NWF9GaWxsVGhpc0J1ZmZlciBtYWNybyB3aWxsIHNlbmQgYW4gZW1wdHkgYnVmZmVyIHRvIGFuIAorLyoqIFRoZSBPTVhfRmlsbFRoaXNCdWZmZXIgbWFjcm8gd2lsbCBzZW5kIGFuIGVtcHR5IGJ1ZmZlciB0byBhbgogICAgIG91dHB1dCBwb3J0IG9mIGEgY29tcG9uZW50LiAgVGhlIGJ1ZmZlciB3aWxsIGJlIGZpbGxlZCBieSB0aGUgY29tcG9uZW50CiAgICAgYW5kIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbiB2aWEgdGhlIEZpbGxCdWZmZXJEb25lIGNhbGwgYmFjay4KICAgICBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGNhbGwgaW4gdGhhdCB0aGUgY29tcG9uZW50IHdpbGwgcmVjb3JkIHRoZSBidWZmZXIKLSAgICBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGZpbGwgdGhlIGJ1ZmZlciwgbGF0ZXIsIGF0IHRoZSBwcm9wZXIgCi0gICAgdGltZS4gIEFzIGV4cGVjdGVkLCB0aGlzIG1hY3JvIG1heSBiZSBpbnZva2VkIG9ubHkgd2hpbGUgdGhlIGNvbXBvbmVudCAKKyAgICBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGVuIGZpbGwgdGhlIGJ1ZmZlciwgbGF0ZXIsIGF0IHRoZSBwcm9wZXIKKyAgICB0aW1lLiAgQXMgZXhwZWN0ZWQsIHRoaXMgbWFjcm8gbWF5IGJlIGludm9rZWQgb25seSB3aGlsZSB0aGUgY29tcG9uZW50CiAgICAgaXMgaW4gdGhlIE9NWF9FeGVjdXRpbmdTdGF0ZS4gIElmIG5Qb3J0SW5kZXggZG9lcyBub3Qgc3BlY2lmeSBhbiBvdXRwdXQKLSAgICBwb3J0LCB0aGUgY29tcG9uZW50IHNoYWxsIHJldHVybiBhbiBlcnJvci4gIAotICAgIAorICAgIHBvcnQsIHRoZSBjb21wb25lbnQgc2hhbGwgcmV0dXJuIGFuIGVycm9yLgorCiAgICAgVGhlIGNvbXBvbmVudCBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KQEAgLTExNTIsMTQgKzExNTIsMTQgQEAKIC8qKiBUaGUgT01YX1VzZUVHTEltYWdlIG1hY3JvIHdpbGwgcmVxdWVzdCB0aGF0IHRoZSBjb21wb25lbnQgdXNlCiAgICAgYSBFR0xJbWFnZSBwcm92aWRlZCBieSBFR0wgKGFuZCBhbGxvY2F0ZSBpdHMgb3duIGJ1ZmZlciBoZWFkZXIpCiAgICAgVGhpcyBpcyBhIGJsb2NraW5nIGNhbGwuCi0gICAgCisKICAgICBUaGUgY29tcG9uZW50IHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoQ29tcG9uZW50CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgVGhpcyBpcyB0aGUgY29tcG9uZW50CiAgICAgICAgIGhhbmRsZSByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4KICAgICBAcGFyYW0gW291dF0gcHBCdWZmZXIKLSAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQlVGRkVSSEVBREVSVFlQRSBzdHJ1Y3R1cmUgdXNlZCB0byByZWNlaXZlIHRoZSAKKyAgICAgICAgcG9pbnRlciB0byBhbiBPTVhfQlVGRkVSSEVBREVSVFlQRSBzdHJ1Y3R1cmUgdXNlZCB0byByZWNlaXZlIHRoZQogICAgICAgICBwb2ludGVyIHRvIHRoZSBidWZmZXIgaGVhZGVyLiAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgbG9jYXRpb24gdXNlZAogICAgICAgICBmb3IgdGhpcyBidWZmZXIgaXMgTk9UIHZpc2libGUgdG8gdGhlIElMIENsaWVudC4KICAgICBAcGFyYW0gW2luXSBuUG9ydEluZGV4CkBAIC0xMTY3LDEzICsxMTY3LDEzIEBACiAgICAgICAgIGJlIHVzZWQgd2l0aC4gIFRoZSBwb3J0IGNhbiBiZSBmb3VuZCBieSB1c2luZyB0aGUgblBvcnRJbmRleAogICAgICAgICB2YWx1ZSBhcyBhbiBpbmRleCBpbnRvIHRoZSBQb3J0IERlZmluaXRpb24gYXJyYXkgb2YgdGhlIGNvbXBvbmVudC4KICAgICBAcGFyYW0gW2luXSBwQXBwUHJpdmF0ZQotICAgICAgICBwQXBwUHJpdmF0ZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHBBcHBQcml2YXRlIG1lbWJlciBvZiB0aGUgCisgICAgICAgIHBBcHBQcml2YXRlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcEFwcFByaXZhdGUgbWVtYmVyIG9mIHRoZQogICAgICAgICBidWZmZXIgaGVhZGVyIHN0cnVjdHVyZS4KICAgICBAcGFyYW0gW2luXSBlZ2xJbWFnZQogICAgICAgICBlZ2xJbWFnZSBjb250YWlucyB0aGUgaGFuZGxlIG9mIHRoZSBFR0xJbWFnZSB0byB1c2UgYXMgYSBidWZmZXIgb24gdGhlCi0gICAgICAgIHNwZWNpZmllZCBwb3J0LiAgVGhlIGNvbXBvbmVudCBpcyBleHBlY3RlZCB0byB2YWxpZGF0ZSBwcm9wZXJ0aWVzIG9mIAorICAgICAgICBzcGVjaWZpZWQgcG9ydC4gIFRoZSBjb21wb25lbnQgaXMgZXhwZWN0ZWQgdG8gdmFsaWRhdGUgcHJvcGVydGllcyBvZgogICAgICAgICB0aGUgRUdMSW1hZ2UgYWdhaW5zdCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCB0byBlbnN1cmUgdGhlIGNvbXBvbmVudAotICAgICAgICBjYW4gdXNlIHRoZSBFR0xJbWFnZSBhcyBhIGJ1ZmZlci4gICAgICAgICAgCisgICAgICAgIGNhbiB1c2UgdGhlIEVHTEltYWdlIGFzIGEgYnVmZmVyLgogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgpAQCAtMTE5NCw4ICsxMTk0LDggQEAKIAogLyoqIFRoZSBPTVhfSW5pdCBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBPTVggY29yZS4gIEl0IHNoYWxsIGJlIHRoZQogICAgIGZpcnN0IGNhbGwgbWFkZSBpbnRvIE9NWCBhbmQgaXQgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgb25lIHRpbWUgd2l0aG91dAotICAgIGFuIGludGVydmllbmluZyBPTVhfRGVpbml0IGNhbGwuICAKLSAgICAKKyAgICBhbiBpbnRlcnZpZW5pbmcgT01YX0RlaW5pdCBjYWxsLgorCiAgICAgVGhlIGNvcmUgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KIAogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQpAQCAtMTIwNiwxMyArMTIwNiwxMyBAQAogT01YX0FQSSBPTVhfRVJST1JUWVBFIE9NWF9BUElFTlRSWSBPTVhfSW5pdCh2b2lkKTsKIAogCi0vKiogVGhlIE9NWF9EZWluaXQgbWV0aG9kIGlzIHVzZWQgdG8gZGVpbml0aWFsaXplIHRoZSBPTVggY29yZS4gIEl0IHNoYWxsIGJlIAotICAgIHRoZSBsYXN0IGNhbGwgbWFkZSBpbnRvIE9NWC4gSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNvcmUgZGV0ZXJtaW5lcyB0aGF0IAotICAgIHRoYXJlIGFyZSBjb21wb25lbnRzIGxvYWRlZCB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlLCB0aGUgY29yZSBtYXkgcmV0dXJuIAorLyoqIFRoZSBPTVhfRGVpbml0IG1ldGhvZCBpcyB1c2VkIHRvIGRlaW5pdGlhbGl6ZSB0aGUgT01YIGNvcmUuICBJdCBzaGFsbCBiZQorICAgIHRoZSBsYXN0IGNhbGwgbWFkZSBpbnRvIE9NWC4gSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGNvcmUgZGV0ZXJtaW5lcyB0aGF0CisgICAgdGhhcmUgYXJlIGNvbXBvbmVudHMgbG9hZGVkIHdoZW4gdGhpcyBjYWxsIGlzIG1hZGUsIHRoZSBjb3JlIG1heSByZXR1cm4KICAgICB3aXRoIGFuIGVycm9yIHJhdGhlciB0aGFuIHRyeSB0byB1bmxvYWQgdGhlIGNvbXBvbmVudHMuCi0gICAgICAgIAorCiAgICAgVGhlIGNvcmUgc2hvdWxkIHJldHVybiBmcm9tIHRoaXMgY2FsbCB3aXRoaW4gMjAgbXNlYy4KLSAgICAKKwogICAgIEByZXR1cm4gT01YX0VSUk9SVFlQRQogICAgICAgICBJZiB0aGUgY29tbWFuZCBzdWNjZXNzZnVsbHkgZXhlY3V0ZXMsIHRoZSByZXR1cm4gY29kZSB3aWxsIGJlCiAgICAgICAgIE9NWF9FcnJvck5vbmUuICBPdGhlcndpc2UgdGhlIGFwcHJvcHJpYXRlIE9NWCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgpAQCAtMTIyOSwyMyArMTIyOSwyMyBAQAogICAgIGluc3RhbGxhdGlvbiBvZiBuZXcgY29tcG9uZW50cywgaXQgaXMgb25seSByZXF1cmllZCB0byBkZXRlY3QgbmV3bHkKICAgICBpbnN0YWxsZWQgY29tcG9uZW50cyB3aGVuIHRoZSBmaXJzdCBjYWxsIHRvIGVudW1lcmF0ZSBjb21wb25lbnQgbmFtZXMKICAgICBpcyBtYWRlIChpLmUuIHdoZW4gbkluZGV4IGlzIDB4MCkuCi0gICAgCisKICAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW291dF0gY0NvbXBvbmVudE5hbWUKICAgICAgICAgcG9pbnRlciB0byBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcgd2l0aCB0aGUgY29tcG9uZW50IG5hbWUuICBUaGUKICAgICAgICAgbmFtZXMgb2YgdGhlIGNvbXBvbmVudHMgYXJlIHN0cmluZ3MgbGVzcyB0aGFuIDEyNyBieXRlcyBpbiBsZW5ndGgKLSAgICAgICAgcGx1cyB0aGUgdHJhaWxpbmcgbnVsbCBmb3IgYSBtYXhpbXVtIHNpemUgb2YgMTI4IGJ5dGVzLiAgQW4gZXhhbXBsZSAKLSAgICAgICAgb2YgYSB2YWxpZCBjb21wb25lbnQgbmFtZSBpcyAiT01YLlRJLkFVRElPLkRTUC5NSVhFUlwwIi4gIE5hbWVzIGFyZSAKLSAgICAgICAgYXNzaWduZWQgYnkgdGhlIHZlbmRvciwgYnV0IHNoYWxsIHN0YXJ0IHdpdGggIk9NWC4iIGFuZCB0aGVuIGhhdmUgCisgICAgICAgIHBsdXMgdGhlIHRyYWlsaW5nIG51bGwgZm9yIGEgbWF4aW11bSBzaXplIG9mIDEyOCBieXRlcy4gIEFuIGV4YW1wbGUKKyAgICAgICAgb2YgYSB2YWxpZCBjb21wb25lbnQgbmFtZSBpcyAiT01YLlRJLkFVRElPLkRTUC5NSVhFUlwwIi4gIE5hbWVzIGFyZQorICAgICAgICBhc3NpZ25lZCBieSB0aGUgdmVuZG9yLCBidXQgc2hhbGwgc3RhcnQgd2l0aCAiT01YLiIgYW5kIHRoZW4gaGF2ZQogICAgICAgICB0aGUgVmVuZG9yIGRlc2lnbmF0aW9uIG5leHQuCiAgICAgQHBhcmFtIFtpbl0gbk5hbWVMZW5ndGgKLSAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGNDb21wb25lbnROYW1lIHN0cmluZy4gIFdpdGggYWxsIAotICAgICAgICBjb21wb25lbnQgbmFtZSBzdHJpbmdzIHJlc3RyaWN0ZWQgdG8gbGVzcyB0aGFuIDEyOCBjaGFyYWN0ZXJzIAorICAgICAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgY0NvbXBvbmVudE5hbWUgc3RyaW5nLiAgV2l0aCBhbGwKKyAgICAgICAgY29tcG9uZW50IG5hbWUgc3RyaW5ncyByZXN0cmljdGVkIHRvIGxlc3MgdGhhbiAxMjggY2hhcmFjdGVycwogICAgICAgICAoaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBudWxsKSBpdCBpcyByZWNvbWVuZGVkIHRoYXQgdGhlIGNhbGxlcgogICAgICAgICBwcm92aWRlIGEgaW5wdXQgc3RyaW5nIGZvciB0aGUgY0NvbXBvbmVudE5hbWUgb2YgMTI4IGNoYXJhY3RlcnMuCiAgICAgQHBhcmFtIFtpbl0gbkluZGV4Ci0gICAgICAgIG51bWJlciBjb250YWluaW5nIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGNvbXBvbmVudC4gCisgICAgICAgIG51bWJlciBjb250YWluaW5nIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGNvbXBvbmVudC4KICAgICAgICAgTXVsdGlwbGUgY2FsbHMgdG8gT01YX0NvbXBvbmVudE5hbWVFbnVtIHdpdGggaW5jcmVhc2luZyB2YWx1ZXMKICAgICAgICAgb2YgbkluZGV4IHdpbGwgZW51bWVyYXRlIHRocm91Z2ggdGhlIGNvbXBvbmVudCBuYW1lcyBpbiB0aGUKICAgICAgICAgc3lzdGVtIHVudGlsIE9NWF9FcnJvck5vTW9yZSBpcyByZXR1cm5lZC4gIFRoZSB2YWx1ZSBvZiBuSW5kZXgKQEAgLTEyNTMsNyArMTI1Myw3IEBACiAgICAgICAgIGluIHRoZSBzeXN0ZW0uCiAgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCiAgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKLSAgICAgICAgT01YX0Vycm9yTm9uZS4gIFdoZW4gdGhlIHZhbHVlIG9mIG5JbmRleCBleGNlZWRzIHRoZSBudW1iZXIgb2YgCisgICAgICAgIE9NWF9FcnJvck5vbmUuICBXaGVuIHRoZSB2YWx1ZSBvZiBuSW5kZXggZXhjZWVkcyB0aGUgbnVtYmVyIG9mCiAgICAgICAgIGNvbXBvbmVudHMgaW4gdGhlIHN5c3RlbSBtaW51cyAxLCBPTVhfRXJyb3JOb01vcmUgd2lsbCBiZQogICAgICAgICByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KICAgICBAaW5ncm91cCBjb3JlCkBAIC0xMjY2LDE4ICsxMjY2LDE4IEBACiAKIC8qKiBUaGUgT01YX0dldEhhbmRsZSBtZXRob2Qgd2lsbCBsb2NhdGUgdGhlIGNvbXBvbmVudCBzcGVjaWZpZWQgYnkgdGhlCiAgICAgY29tcG9uZW50IG5hbWUgZ2l2ZW4sIGxvYWQgdGhhdCBjb21wb25lbnQgaW50byBtZW1vcnkgYW5kIHRoZW4gaW52b2tlCi0gICAgdGhlIGNvbXBvbmVudCdzIG1ldGhvZHMgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQuICAKLSAgICAKKyAgICB0aGUgY29tcG9uZW50J3MgbWV0aG9kcyB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC4KKwogICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW291dF0gcEhhbmRsZQogICAgICAgICBwb2ludGVyIHRvIGFuIE9NWF9IQU5ETEVUWVBFIHBvaW50ZXIgdG8gYmUgZmlsbGVkIGluIGJ5IHRoaXMgbWV0aG9kLgogICAgIEBwYXJhbSBbaW5dIGNDb21wb25lbnROYW1lCiAgICAgICAgIHBvaW50ZXIgdG8gYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lLiAgVGhlCiAgICAgICAgIG5hbWVzIG9mIHRoZSBjb21wb25lbnRzIGFyZSBzdHJpbmdzIGxlc3MgdGhhbiAxMjcgYnl0ZXMgaW4gbGVuZ3RoCi0gICAgICAgIHBsdXMgdGhlIHRyYWlsaW5nIG51bGwgZm9yIGEgbWF4aW11bSBzaXplIG9mIDEyOCBieXRlcy4gIEFuIGV4YW1wbGUgCi0gICAgICAgIG9mIGEgdmFsaWQgY29tcG9uZW50IG5hbWUgaXMgIk9NWC5USS5BVURJTy5EU1AuTUlYRVJcMCIuICBOYW1lcyBhcmUgCi0gICAgICAgIGFzc2lnbmVkIGJ5IHRoZSB2ZW5kb3IsIGJ1dCBzaGFsbCBzdGFydCB3aXRoICJPTVguIiBhbmQgdGhlbiBoYXZlIAorICAgICAgICBwbHVzIHRoZSB0cmFpbGluZyBudWxsIGZvciBhIG1heGltdW0gc2l6ZSBvZiAxMjggYnl0ZXMuICBBbiBleGFtcGxlCisgICAgICAgIG9mIGEgdmFsaWQgY29tcG9uZW50IG5hbWUgaXMgIk9NWC5USS5BVURJTy5EU1AuTUlYRVJcMCIuICBOYW1lcyBhcmUKKyAgICAgICAgYXNzaWduZWQgYnkgdGhlIHZlbmRvciwgYnV0IHNoYWxsIHN0YXJ0IHdpdGggIk9NWC4iIGFuZCB0aGVuIGhhdmUKICAgICAgICAgdGhlIFZlbmRvciBkZXNpZ25hdGlvbiBuZXh0LgogICAgIEBwYXJhbSBbaW5dIHBBcHBEYXRhCiAgICAgICAgIHBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQKQEAgLTEyODUsMjQgKzEyODUsMjQgQEAKICAgICAgICAgb2YgdGhlIGNhbGxiYWNrLgogICAgIEBwYXJhbSBbaW5dIHBDYWxsQmFja3MKICAgICAgICAgcG9pbnRlciB0byBhIE9NWF9DQUxMQkFDS1RZUEUgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi0gICAgICAgIGNvbXBvbmVudCB0byBpbml0aWFsaXplIGl0IHdpdGguICAKKyAgICAgICAgY29tcG9uZW50IHRvIGluaXRpYWxpemUgaXQgd2l0aC4KICAgICBAcmV0dXJuIE9NWF9FUlJPUlRZUEUKICAgICAgICAgSWYgdGhlIGNvbW1hbmQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzLCB0aGUgcmV0dXJuIGNvZGUgd2lsbCBiZQogICAgICAgICBPTVhfRXJyb3JOb25lLiAgT3RoZXJ3aXNlIHRoZSBhcHByb3ByaWF0ZSBPTVggZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KICAgICBAaW5ncm91cCBjb3JlCiAgKi8KIE9NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfQVBJRU5UUlkgT01YX0dldEhhbmRsZSgKLSAgICBPTVhfT1VUIE9NWF9IQU5ETEVUWVBFKiBwSGFuZGxlLCAKKyAgICBPTVhfT1VUIE9NWF9IQU5ETEVUWVBFKiBwSGFuZGxlLAogICAgIE9NWF9JTiAgT01YX1NUUklORyBjQ29tcG9uZW50TmFtZSwKICAgICBPTVhfSU4gIE9NWF9QVFIgcEFwcERhdGEsCiAgICAgT01YX0lOICBPTVhfQ0FMTEJBQ0tUWVBFKiBwQ2FsbEJhY2tzKTsKIAogCi0vKiogVGhlIE9NWF9GcmVlSGFuZGxlIG1ldGhvZCB3aWxsIGZyZWUgYSBoYW5kbGUgYWxsb2NhdGVkIGJ5IHRoZSBPTVhfR2V0SGFuZGxlIAorLyoqIFRoZSBPTVhfRnJlZUhhbmRsZSBtZXRob2Qgd2lsbCBmcmVlIGEgaGFuZGxlIGFsbG9jYXRlZCBieSB0aGUgT01YX0dldEhhbmRsZQogICAgIG1ldGhvZC4gIElmIHRoZSBjb21wb25lbnQgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8gemVybywgdGhlIGNvbXBvbmVudCB3aWxsCi0gICAgYmUgdW5sb2FkZWQgZnJvbSBtZW1vcnkuICAKLSAgICAKLSAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiAyMCBtc2VjIHdoZW4gdGhlIGNvbXBvbmVudCBpcyAKKyAgICBiZSB1bmxvYWRlZCBmcm9tIG1lbW9yeS4KKworICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMgd2hlbiB0aGUgY29tcG9uZW50IGlzCiAgICAgaW4gdGhlIE9NWF9TdGF0ZUxvYWRlZCBzdGF0ZS4KIAogICAgIEBwYXJhbSBbaW5dIGhDb21wb25lbnQKQEAgLTEzMjEsMzQgKzEzMjEsMzQgQEAKIC8qKiBUaGUgT01YX1NldHVwVHVubmVsIG1ldGhvZCB3aWxsIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IGNhbGxzIHRvIHRoZSBjb21wb25lbnRzCiAgICAgdG8gc2V0dXAgdGhlIHNwZWNpZmllZCB0dW5uZWwgdGhlIHR3byBjb21wb25lbnRzLiAgTk9URTogVGhpcyBpcwogICAgIGFuIGFjdHVhbCBtZXRob2QgKG5vdCBhICNkZWZpbmUgbWFjcm8pLiAgVGhpcyBtZXRob2Qgd2lsbCBtYWtlIGNhbGxzIGludG8KLSAgICB0aGUgY29tcG9uZW50IENvbXBvbmVudFR1bm5lbFJlcXVlc3QgbWV0aG9kIHRvIGRvIHRoZSBhY3R1YWwgdHVubmVsIAotICAgIGNvbm5lY3Rpb24uICAKKyAgICB0aGUgY29tcG9uZW50IENvbXBvbmVudFR1bm5lbFJlcXVlc3QgbWV0aG9kIHRvIGRvIHRoZSBhY3R1YWwgdHVubmVsCisgICAgY29ubmVjdGlvbi4KIAotICAgIFRoZSBDb21wb25lbnRUdW5uZWxSZXF1ZXN0IG1ldGhvZCBvbiBib3RoIGNvbXBvbmVudHMgd2lsbCBiZSBjYWxsZWQuIAotICAgIFRoaXMgbWV0aG9kIHNoYWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzIHRoZSBjb21wb25lbnQgaXMgaW4gdGhlIAorICAgIFRoZSBDb21wb25lbnRUdW5uZWxSZXF1ZXN0IG1ldGhvZCBvbiBib3RoIGNvbXBvbmVudHMgd2lsbCBiZSBjYWxsZWQuCisgICAgVGhpcyBtZXRob2Qgc2hhbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgdGhlIGNvbXBvbmVudCBpcyBpbiB0aGUKICAgICBPTVhfU3RhdGVMb2FkZWQgc3RhdGUgZXhjZXB0IHdoZW4gdGhlIHBvcnRzIHVzZWQgZm9yIHRoZSB0dW5uZWwgYXJlCiAgICAgZGlzYWJsZWQuIEluIHRoaXMgY2FzZSwgdGhlIGNvbXBvbmVudCBtYXkgYmUgaW4gdGhlIE9NWF9TdGF0ZUV4ZWN1dGluZywKLSAgICBPTVhfU3RhdGVQYXVzZSwgb3IgT01YX1N0YXRlSWRsZSBzdGF0ZXMuIAorICAgIE9NWF9TdGF0ZVBhdXNlLCBvciBPTVhfU3RhdGVJZGxlIHN0YXRlcy4KIAogICAgIFRoZSBjb3JlIHNob3VsZCByZXR1cm4gZnJvbSB0aGlzIGNhbGwgd2l0aGluIDIwIG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSBoT3V0cHV0CiAgICAgICAgIEhhbmRsZSBvZiB0aGUgY29tcG9uZW50IHRvIGJlIGFjY2Vzc2VkLiAgQWxzbyB0aGlzIGlzIHRoZSBoYW5kbGUKICAgICAgICAgb2YgdGhlIGNvbXBvbmVudCB3aG9zZSBwb3J0LCBzcGVjaWZpZWQgaW4gdGhlIG5Qb3J0T3V0cHV0IHBhcmFtZXRlcgogICAgICAgICB3aWxsIGJlIHVzZWQgdGhlIHNvdXJjZSBmb3IgdGhlIHR1bm5lbC4gVGhpcyBpcyB0aGUgY29tcG9uZW50IGhhbmRsZQotICAgICAgICByZXR1cm5lZCBieSB0aGUgY2FsbCB0byB0aGUgT01YX0dldEhhbmRsZSBmdW5jdGlvbi4gIFRoZXJlIGlzIGEgCisgICAgICAgIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLiAgVGhlcmUgaXMgYQogICAgICAgICByZXF1aXJlbWVudCB0aGF0IGhPdXRwdXQgYmUgdGhlIHNvdXJjZSBmb3IgdGhlIGRhdGEgd2hlbgogICAgICAgICB0dW5lbGxpbmcgKGkuZS4gblBvcnRPdXRwdXQgaXMgYW4gb3V0cHV0IHBvcnQpLiAgSWYgMHgwLCB0aGUgY29tcG9uZW50CiAgICAgICAgIHNwZWNpZmllZCBpbiBoSW5wdXQgd2lsbCBoYXZlIGl0J3MgcG9ydCBzcGVjaWZpZWQgaW4gblBvcnRJbnB1dAogICAgICAgICBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIGNsaWVudC4KICAgICBAcGFyYW0gW2luXSBuUG9ydE91dHB1dAogICAgICAgICBuUG9ydE91dHB1dCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc291cmNlIHBvcnQgb24gY29tcG9uZW50IHRvIGJlCi0gICAgICAgIHVzZWQgaW4gdGhlIHR1bm5lbC4gCisgICAgICAgIHVzZWQgaW4gdGhlIHR1bm5lbC4KICAgICBAcGFyYW0gW2luXSBoSW5wdXQKICAgICAgICAgVGhpcyBpcyB0aGUgY29tcG9uZW50IHRvIHNldHVwIHRoZSB0dW5uZWwgd2l0aC4gVGhpcyBpcyB0aGUgaGFuZGxlCiAgICAgICAgIG9mIHRoZSBjb21wb25lbnQgd2hvc2UgcG9ydCwgc3BlY2lmaWVkIGluIHRoZSBuUG9ydElucHV0IHBhcmFtZXRlcgogICAgICAgICB3aWxsIGJlIHVzZWQgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgdHVubmVsLiBUaGlzIGlzIHRoZSBjb21wb25lbnQgaGFuZGxlCi0gICAgICAgIHJldHVybmVkIGJ5IHRoZSBjYWxsIHRvIHRoZSBPTVhfR2V0SGFuZGxlIGZ1bmN0aW9uLiAgVGhlcmUgaXMgYSAKKyAgICAgICAgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gdGhlIE9NWF9HZXRIYW5kbGUgZnVuY3Rpb24uICBUaGVyZSBpcyBhCiAgICAgICAgIHJlcXVpcmVtZW50IHRoYXQgaElucHV0IGJlIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGRhdGEgd2hlbgogICAgICAgICB0dW5lbGxpbmcgKGkuZS4gblBvcnRJbnV0IGlzIGFuIGlucHV0IHBvcnQpLiAgIElmIDB4MCwgdGhlIGNvbXBvbmVudAogICAgICAgICBzcGVjaWZpZWQgaW4gaE91dHB1dCB3aWxsIGhhdmUgaXQncyBwb3J0IHNwZWNpZmllZCBpbiBuUG9ydFBPdXRwdXQKQEAgLTEzNTksOSArMTM1OSw5IEBACiAgICAgQHJldHVybiBPTVhfRVJST1JUWVBFCiAgICAgICAgIElmIHRoZSBjb21tYW5kIHN1Y2Nlc3NmdWxseSBleGVjdXRlcywgdGhlIHJldHVybiBjb2RlIHdpbGwgYmUKICAgICAgICAgT01YX0Vycm9yTm9uZS4gIE90aGVyd2lzZSB0aGUgYXBwcm9wcmlhdGUgT01YIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICAgIFdoZW4gT01YX0Vycm9yTm90SW1wbGVtZW50ZWQgaXMgcmV0dXJuZWQsIG9uZSBvciBib3RoIGNvbXBvbmVudHMgaXMgCisgICAgICAgIFdoZW4gT01YX0Vycm9yTm90SW1wbGVtZW50ZWQgaXMgcmV0dXJuZWQsIG9uZSBvciBib3RoIGNvbXBvbmVudHMgaXMKICAgICAgICAgYSBub24taW50ZXJvcCBjb21wb25lbnQgYW5kIGRvZXMgbm90IHN1cHBvcnQgdHVubmVsaW5nLgotICAgICAgICAKKwogICAgICAgICBPbiBmYWlsdXJlLCB0aGUgcG9ydHMgb2YgYm90aCBjb21wb25lbnRzIGFyZSBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbgogICAgICAgICB3aXRoIHRoZSBhcHBsaWNhdGlvbiAvIElMIENsaWVudC4KICAgICBAaW5ncm91cCBjb3JlIHR1bgpAQCAtMTM3MSw1MCArMTM3MSw1MCBAQAogICAgIE9NWF9JTiAgT01YX1UzMiBuUG9ydE91dHB1dCwKICAgICBPTVhfSU4gIE9NWF9IQU5ETEVUWVBFIGhJbnB1dCwKICAgICBPTVhfSU4gIE9NWF9VMzIgblBvcnRJbnB1dCk7Ci0gICAgCisKIC8qKiBAaW5ncm91cCBjcCAqLwogT01YX0FQSSBPTVhfRVJST1JUWVBFICAgT01YX0dldENvbnRlbnRQaXBlKAogICAgIE9NWF9PVVQgT01YX0hBTkRMRVRZUEUgKmhQaXBlLAogICAgIE9NWF9JTiBPTVhfU1RSSU5HIHN6VVJJKTsKIAogLyoqIFRoZSBPTVhfR2V0Q29tcG9uZW50c09mUm9sZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzIHRoYXQgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICByb2xlIGFuZCAoaWYgdGhlIGNvbXBOYW1lcyBmaWVsZCBpcyBub24tTlVMTCkgdGhlIG5hbWVzIG9mIHRob3NlIGNvbXBvbmVudHMuIFRoZSBjYWxsIHdpbGwgZmFpbCBpZiAKKyAgICByb2xlIGFuZCAoaWYgdGhlIGNvbXBOYW1lcyBmaWVsZCBpcyBub24tTlVMTCkgdGhlIG5hbWVzIG9mIHRob3NlIGNvbXBvbmVudHMuIFRoZSBjYWxsIHdpbGwgZmFpbCBpZgogICAgIGFuIGluc3VmZmljaWVudGx5IHNpemVkIGFycmF5IG9mIG5hbWVzIGlzIHN1cHBsaWVkLiBUbyBlbnN1cmUgdGhlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBzaXplZCB0aGUKICAgICBjbGllbnQgc2hvdWxkOgogICAgICAgICAqIGZpcnN0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBjb21wTmFtZXMgZmllbGQgTlVMTCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjb21wb25lbnQgbmFtZXMKLSAgICAgICAgKiBzZWNvbmQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIGNvbXBOYW1lcyBmaWVsZCBwb2ludGluZyB0byBhbiBhcnJheSBvZiBuYW1lcyBhbGxvY2F0ZWQgCisgICAgICAgICogc2Vjb25kIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBjb21wTmFtZXMgZmllbGQgcG9pbnRpbmcgdG8gYW4gYXJyYXkgb2YgbmFtZXMgYWxsb2NhdGVkCiAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIGZpcnN0IGNhbGwuCiAKICAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCi0gICAgCisKICAgICBAcGFyYW0gW2luXSByb2xlCi0gICAgICAgIFRoaXMgaXMgZ2VuZXJpYyBzdGFuZGFyZCBjb21wb25lbnQgbmFtZSBjb25zaXN0aW5nIG9ubHkgb2YgY29tcG9uZW50IGNsYXNzIAorICAgICAgICBUaGlzIGlzIGdlbmVyaWMgc3RhbmRhcmQgY29tcG9uZW50IG5hbWUgY29uc2lzdGluZyBvbmx5IG9mIGNvbXBvbmVudCBjbGFzcwogICAgICAgICBuYW1lIGFuZCB0aGUgdHlwZSB3aXRoaW4gdGhhdCBjbGFzcyAoZS5nLiAnYXVkaW9fZGVjb2Rlci5hYWMnKS4KICAgICBAcGFyYW0gW2lub3V0XSBwTnVtQ29tcHMKLSAgICAgICAgVGhpcyBpcyB1c2VkIGJvdGggYXMgaW5wdXQgYW5kIG91dHB1dC4gCi0gCisgICAgICAgIFRoaXMgaXMgdXNlZCBib3RoIGFzIGlucHV0IGFuZCBvdXRwdXQuCisKICAgICAgICAgSWYgY29tcE5hbWVzIGlzIE5VTEwsIHRoZSBpbnB1dCBpcyBpZ25vcmVkIGFuZCB0aGUgb3V0cHV0IHNwZWNpZmllcyBob3cgbWFueSBjb21wb25lbnRzIHN1cHBvcnQKICAgICAgICAgdGhlIGdpdmVuIHJvbGUuCi0gICAgIAotICAgICAgICBJZiBjb21wTmFtZXMgaXMgbm90IE5VTEwsIG9uIGlucHV0IGl0IGJvdW5kcyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgc3RydWN0dXJlIGFuZCAKKworICAgICAgICBJZiBjb21wTmFtZXMgaXMgbm90IE5VTEwsIG9uIGlucHV0IGl0IGJvdW5kcyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgc3RydWN0dXJlIGFuZAogICAgICAgICBvbiBvdXRwdXQsIGl0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgc3RyaW5nIG5hbWVzIGxpc3RlZCB3aXRoaW4gdGhlIGNvbXBOYW1lcyBwYXJhbWV0ZXIuCiAgICAgQHBhcmFtIFtpbm91dF0gY29tcE5hbWVzCi0gICAgICAgIElmIE5VTEwgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLiBJZiBub24tTlVMTCB0aGlzIHBvaW50cyB0byBhbiBhcnJheSBvZiAxMjgtYnl0ZSBzdHJpbmdzIHdoaWNoIGFjY2VwdHMgCi0gICAgICAgIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgYWxsIHBoeXNpY2FsIGNvbXBvbmVudHMgdGhhdCBpbXBsZW1lbnQgdGhlIHNwZWNpZmllZCBzdGFuZGFyZCBjb21wb25lbnQgbmFtZS4gCisgICAgICAgIElmIE5VTEwgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLiBJZiBub24tTlVMTCB0aGlzIHBvaW50cyB0byBhbiBhcnJheSBvZiAxMjgtYnl0ZSBzdHJpbmdzIHdoaWNoIGFjY2VwdHMKKyAgICAgICAgYSBsaXN0IG9mIHRoZSBuYW1lcyBvZiBhbGwgcGh5c2ljYWwgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCB0aGUgc3BlY2lmaWVkIHN0YW5kYXJkIGNvbXBvbmVudCBuYW1lLgogICAgICAgICBFYWNoIG5hbWUgaXMgTlVMTCB0ZXJtaW5hdGVkLiBudW1Db21wcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBuYW1lcy4KICAgICBAaW5ncm91cCBjb3JlCiAgKi8KLU9NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfR2V0Q29tcG9uZW50c09mUm9sZSAoIAotCU9NWF9JTiAgICAgIE9NWF9TVFJJTkcgcm9sZSwKK09NWF9BUEkgT01YX0VSUk9SVFlQRSBPTVhfR2V0Q29tcG9uZW50c09mUm9sZSAoCisgICAgT01YX0lOICAgICAgT01YX1NUUklORyByb2xlLAogICAgIE9NWF9JTk9VVCAgIE9NWF9VMzIgKnBOdW1Db21wcywKICAgICBPTVhfSU5PVVQgICBPTVhfVTggICoqY29tcE5hbWVzKTsKIAogLyoqIFRoZSBPTVhfR2V0Um9sZXNPZkNvbXBvbmVudCBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiByb2xlcyBzdXBwb3J0ZWQgYnkgdGhlIGdpdmVuCi0gICAgY29tcG9uZW50IGFuZCAoaWYgdGhlIHJvbGVzIGZpZWxkIGlzIG5vbi1OVUxMKSB0aGUgbmFtZXMgb2YgdGhvc2Ugcm9sZXMuIFRoZSBjYWxsIHdpbGwgZmFpbCBpZiAKKyAgICBjb21wb25lbnQgYW5kIChpZiB0aGUgcm9sZXMgZmllbGQgaXMgbm9uLU5VTEwpIHRoZSBuYW1lcyBvZiB0aG9zZSByb2xlcy4gVGhlIGNhbGwgd2lsbCBmYWlsIGlmCiAgICAgYW4gaW5zdWZmaWNpZW50bHkgc2l6ZWQgYXJyYXkgb2YgbmFtZXMgaXMgc3VwcGxpZWQuIFRvIGVuc3VyZSB0aGUgYXJyYXkgaXMgc3VmZmljaWVudGx5IHNpemVkIHRoZQogICAgIGNsaWVudCBzaG91bGQ6CiAgICAgICAgICogZmlyc3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJvbGVzIGZpZWxkIE5VTEwgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygcm9sZSBuYW1lcwotICAgICAgICAqIHNlY29uZCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgcm9sZXMgZmllbGQgcG9pbnRpbmcgdG8gYW4gYXJyYXkgb2YgbmFtZXMgYWxsb2NhdGVkIAorICAgICAgICAqIHNlY29uZCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgcm9sZXMgZmllbGQgcG9pbnRpbmcgdG8gYW4gYXJyYXkgb2YgbmFtZXMgYWxsb2NhdGVkCiAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIGZpcnN0IGNhbGwuCiAKICAgICBUaGUgY29yZSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBjYWxsIHdpdGhpbiA1IG1zZWMuCkBAIC0xNDIyLDIwICsxNDIyLDIwIEBACiAgICAgQHBhcmFtIFtpbl0gY29tcE5hbWUKICAgICAgICAgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY29tcG9uZW50IGJlaW5nIHF1ZXJpZWQgYWJvdXQuCiAgICAgQHBhcmFtIFtpbm91dF0gcE51bVJvbGVzCi0gICAgICAgIFRoaXMgaXMgdXNlZCBib3RoIGFzIGlucHV0IGFuZCBvdXRwdXQuIAotIAorICAgICAgICBUaGlzIGlzIHVzZWQgYm90aCBhcyBpbnB1dCBhbmQgb3V0cHV0LgorCiAgICAgICAgIElmIHJvbGVzIGlzIE5VTEwsIHRoZSBpbnB1dCBpcyBpZ25vcmVkIGFuZCB0aGUgb3V0cHV0IHNwZWNpZmllcyBob3cgbWFueSByb2xlcyB0aGUgY29tcG9uZW50IHN1cHBvcnRzLgotICAgICAKLSAgICAgICAgSWYgY29tcE5hbWVzIGlzIG5vdCBOVUxMLCBvbiBpbnB1dCBpdCBib3VuZHMgdGhlIHNpemUgb2YgdGhlIGlucHV0IHN0cnVjdHVyZSBhbmQgCisKKyAgICAgICAgSWYgY29tcE5hbWVzIGlzIG5vdCBOVUxMLCBvbiBpbnB1dCBpdCBib3VuZHMgdGhlIHNpemUgb2YgdGhlIGlucHV0IHN0cnVjdHVyZSBhbmQKICAgICAgICAgb24gb3V0cHV0LCBpdCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb2xlcyBzdHJpbmcgbmFtZXMgbGlzdGVkIHdpdGhpbiB0aGUgcm9sZXMgcGFyYW1ldGVyLgogICAgIEBwYXJhbSBbb3V0XSByb2xlcwotICAgICAgICBJZiBOVUxMIHRoaXMgZmllbGQgaXMgaWdub3JlZC4gSWYgbm9uLU5VTEwgdGhpcyBwb2ludHMgdG8gYW4gYXJyYXkgb2YgMTI4LWJ5dGUgc3RyaW5ncyAKLSAgICAgICAgd2hpY2ggYWNjZXB0cyBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGFuZGFyZCBjb21wb25lbnRzIHJvbGVzIGltcGxlbWVudGVkIG9uIHRoZSAKKyAgICAgICAgSWYgTlVMTCB0aGlzIGZpZWxkIGlzIGlnbm9yZWQuIElmIG5vbi1OVUxMIHRoaXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIDEyOC1ieXRlIHN0cmluZ3MKKyAgICAgICAgd2hpY2ggYWNjZXB0cyBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGFuZGFyZCBjb21wb25lbnRzIHJvbGVzIGltcGxlbWVudGVkIG9uIHRoZQogICAgICAgICBzcGVjaWZpZWQgY29tcG9uZW50IG5hbWUuIG51bUNvbXBzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIG5hbWVzLgogICAgIEBpbmdyb3VwIGNvcmUKICAqLwotT01YX0FQSSBPTVhfRVJST1JUWVBFIE9NWF9HZXRSb2xlc09mQ29tcG9uZW50ICggCi0JT01YX0lOICAgICAgT01YX1NUUklORyBjb21wTmFtZSwgCitPTVhfQVBJIE9NWF9FUlJPUlRZUEUgT01YX0dldFJvbGVzT2ZDb21wb25lbnQgKAorICAgIE9NWF9JTiAgICAgIE9NWF9TVFJJTkcgY29tcE5hbWUsCiAgICAgT01YX0lOT1VUICAgT01YX1UzMiAqcE51bVJvbGVzLAogICAgIE9NWF9PVVQgICAgIE9NWF9VOCAqKnJvbGVzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JVkNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JVkNvbW1vbi5oCmluZGV4IDVmOWU5YjYuLmE1YjlkMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSVZDb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0lWQ29tbW9uLmgKQEAgLTg0NSw3ICs4NDUsNyBAQAogdHlwZWRlZiBlbnVtIE9NWF9NRVRFUklOR1RZUEUgewogCiAgICAgT01YX01ldGVyaW5nTW9kZUF2ZXJhZ2UsICAgICAvKio8IENlbnRlci13ZWlnaHRlZCBhdmVyYWdlIG1ldGVyaW5nLiAqLwotICAgIE9NWF9NZXRlcmluZ01vZGVTcG90LCAgCSAgICAgIC8qKjwgU3BvdCAocGFydGlhbCkgbWV0ZXJpbmcuICovCisgICAgT01YX01ldGVyaW5nTW9kZVNwb3QsICAgICAgICAvKio8IFNwb3QgKHBhcnRpYWwpIG1ldGVyaW5nLiAqLwogICAgIE9NWF9NZXRlcmluZ01vZGVNYXRyaXgsICAgICAgLyoqPCBNYXRyaXggb3IgZXZhbHVhdGl2ZSBtZXRlcmluZy4gKi8KIAogICAgIE9NWF9NZXRlcmluZ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwpAQCAtODYwLDExICs4NjAsMTEgQEAKICAgICBPTVhfTUVURVJJTkdUWVBFIGVNZXRlcmluZzsKICAgICBPTVhfUzMyIHhFVkNvbXBlbnNhdGlvbjsgICAgICAvKio8IEZpeGVkIHBvaW50IHZhbHVlIHN0b3JlZCBhcyBRMTYgKi8KICAgICBPTVhfVTMyIG5BcGVydHVyZUZOdW1iZXI7ICAgICAvKio8IGUuZy4gbkFwZXJ0dXJlRk51bWJlciA9IDIgaW1wbGllcyAiZi8yIiAtIFExNiBmb3JtYXQgKi8KLSAgICBPTVhfQk9PTCBiQXV0b0FwZXJ0dXJlOwkJLyoqPCBXaGV0aGVyIGFwZXJ0dXJlIG51bWJlciBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KKyAgICBPTVhfQk9PTCBiQXV0b0FwZXJ0dXJlOyAgICAgICAvKio8IFdoZXRoZXIgYXBlcnR1cmUgbnVtYmVyIGlzIGRlZmluZWQgYXV0b21hdGljYWxseSAqLwogICAgIE9NWF9VMzIgblNodXR0ZXJTcGVlZE1zZWM7ICAgIC8qKjwgU2h1dHRlcnNwZWVkIGluIG1pbGxpc2Vjb25kcyAqLwotICAgIE9NWF9CT09MIGJBdXRvU2h1dHRlclNwZWVkOwkvKio8IFdoZXRoZXIgc2h1dHRlciBzcGVlZCBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KKyAgICBPTVhfQk9PTCBiQXV0b1NodXR0ZXJTcGVlZDsgICAvKio8IFdoZXRoZXIgc2h1dHRlciBzcGVlZCBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KICAgICBPTVhfVTMyIG5TZW5zaXRpdml0eTsgICAgICAgICAvKio8IGUuZy4gblNlbnNpdGl2aXR5ID0gMTAwIGltcGxpZXMgIklTTyAxMDAiICovCi0gICAgT01YX0JPT0wgYkF1dG9TZW5zaXRpdml0eTsJLyoqPCBXaGV0aGVyIHNlbnNpdGl2aXR5IGlzIGRlZmluZWQgYXV0b21hdGljYWxseSAqLworICAgIE9NWF9CT09MIGJBdXRvU2Vuc2l0aXZpdHk7ICAgIC8qKjwgV2hldGhlciBzZW5zaXRpdml0eSBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgKi8KIH0gT01YX0NPTkZJR19FWFBPU1VSRVZBTFVFVFlQRTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0ltYWdlLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0ltYWdlLmgKaW5kZXggNDJlMzllYy4uMjNhMDIwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbWFnZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSW1hZ2UuaApAQCAtMTYsMzAgKzE2LDMwIEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLS8qKiAKKy8qKgogICogQGZpbGUgT01YX0ltYWdlLmggLSBPcGVuTWF4IElMIHZlcnNpb24gMS4xLjIKLSAqIFRoZSBzdHJ1Y3R1cmVzIG5lZWRlZCBieSBJbWFnZSBjb21wb25lbnRzIHRvIGV4Y2hhbmdlIHBhcmFtZXRlcnMgYW5kIAorICogVGhlIHN0cnVjdHVyZXMgbmVlZGVkIGJ5IEltYWdlIGNvbXBvbmVudHMgdG8gZXhjaGFuZ2UgcGFyYW1ldGVycyBhbmQKICAqIGNvbmZpZ3VyYXRpb24gZGF0YSB3aXRoIHRoZSBjb21wb25lbnRzLgogICovCiAjaWZuZGVmIE9NWF9JbWFnZV9oCkBAIC01MSw5ICs1MSw5IEBACiAKIAogLyoqCi0gKiBFYWNoIE9NWCBoZWFkZXIgbXVzdCBpbmNsdWRlIGFsbCByZXF1aXJlZCBoZWFkZXIgZmlsZXMgdG8gYWxsb3cgdGhlIAotICogaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkICAKLSAqIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQorICogaGVhZGVyIHRvIGNvbXBpbGUgd2l0aG91dCBlcnJvcnMuICBUaGUgaW5jbHVkZXMgYmVsb3cgYXJlIHJlcXVpcmVkCisgKiBmb3IgdGhpcyBoZWFkZXIgZmlsZSB0byBjb21waWxlIHN1Y2Nlc3NmdWxseQogICovCiAKICNpbmNsdWRlIDxPTVhfSVZDb21tb24uaD4KQEAgLTY0LDggKzY0LDggQEAKICAqIEB7CiAgKi8KIAotLyoqIAotICogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIGltYWdlIGNvbXByZXNzaW9uIGNvZGluZy4gCisvKioKKyAqIEVudW1lcmF0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSBwb3NzaWJsZSBpbWFnZSBjb21wcmVzc2lvbiBjb2RpbmcuCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfSU1BR0VfQ09ESU5HVFlQRSB7CiAgICAgT01YX0lNQUdFX0NvZGluZ1VudXNlZCwgICAgICAvKio8IFZhbHVlIHdoZW4gZm9ybWF0IGlzIE4vQSAqLwpAQCAtNzgsNTkgKzc4LDU5IEBACiAgICAgT01YX0lNQUdFX0NvZGluZ1BORywgICAgICAgICAvKio8IFBORyBpbWFnZSBmb3JtYXQgKi8KICAgICBPTVhfSU1BR0VfQ29kaW5nTFpXLCAgICAgICAgIC8qKjwgTFpXIGltYWdlIGZvcm1hdCAqLwogICAgIE9NWF9JTUFHRV9Db2RpbmdCTVAsICAgICAgICAgLyoqPCBXaW5kb3dzIEJpdG1hcCBmb3JtYXQgKi8KLSAgICBPTVhfSU1BR0VfQ29kaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9JTUFHRV9Db2RpbmdLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfSU1BR0VfQ29kaW5nVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfSU1BR0VfQ29kaW5nTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfSU1BR0VfQ09ESU5HVFlQRTsKIAogCiAvKioKLSAqIERhdGEgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGFuIGltYWdlIHBhdGguIFRoZSBudW1iZXIgb2YgaW1hZ2UgcGF0aHMgCi0gKiBmb3IgaW5wdXQgYW5kIG91dHB1dCB3aWxsIHZhcnkgYnkgdHlwZSBvZiB0aGUgaW1hZ2UgY29tcG9uZW50LiAgCi0gKiAKKyAqIERhdGEgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGFuIGltYWdlIHBhdGguIFRoZSBudW1iZXIgb2YgaW1hZ2UgcGF0aHMKKyAqIGZvciBpbnB1dCBhbmQgb3V0cHV0IHdpbGwgdmFyeSBieSB0eXBlIG9mIHRoZSBpbWFnZSBjb21wb25lbnQuCisgKgogICogIElucHV0IChha2EgU291cmNlKSA6IFplcm8gSW5wdXRzLCBvbmUgT3V0cHV0LAogICogIFNwbGl0dGVyICAgICAgICAgICA6IE9uZSBJbnB1dCwgMiBvciBtb3JlIE91dHB1dHMsCiAgKiAgUHJvY2Vzc2luZyBFbGVtZW50IDogT25lIElucHV0LCBvbmUgb3V0cHV0LAogICogIE1peGVyICAgICAgICAgICAgICA6IDIgb3IgbW9yZSBpbnB1dHMsIG9uZSBvdXRwdXQsCiAgKiAgT3V0cHV0IChha2EgU2luaykgIDogT25lIElucHV0LCB6ZXJvIG91dHB1dHMuCi0gKiAKLSAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIAotICogbmVjZXNzYXJ5IGZvciB0aGUgY29tcGxpYW50IGNvbXBvbmVudCB0byBzZXR1cCBhbiBpbnB1dCBvciBhbiBvdXRwdXQgIAotICogaW1hZ2UgcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZCAgCi0gKiBiZSB0cmFuc21pdHRlZCB0byB0aGUgY29tcG9uZW50IHVzaW5nIHRoZSBDdXN0b21Db21tYW5kIGZ1bmN0aW9uLiAgIAotICogQ29tcGxpYW50IGNvbXBvbmVudHMgd2lsbCBwcmVwb3B1bGF0ZSB0aGlzIHN0cnVjdHVyZSB3aXRoIG9wdGltYWwgIAorICoKKyAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzCisgKiBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dAorICogaW1hZ2UgcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZAorICogYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIGNvbXBvbmVudCB1c2luZyB0aGUgQ3VzdG9tQ29tbWFuZCBmdW5jdGlvbi4KKyAqIENvbXBsaWFudCBjb21wb25lbnRzIHdpbGwgcHJlcG9wdWxhdGUgdGhpcyBzdHJ1Y3R1cmUgd2l0aCBvcHRpbWFsCiAgKiB2YWx1ZXMgZHVyaW5nIHRoZSBPTVhfR2V0UGFyYW1ldGVyKCkgY29tbWFuZC4KICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBjTUlNRVR5cGUgICAgICAgICAgICAgOiBNSU1FIHR5cGUgb2YgZGF0YSBmb3IgdGhlIHBvcnQKLSAqICBwTmF0aXZlUmVuZGVyICAgICAgICAgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgZGlzcGxheSBpZiBhIAorICogIHBOYXRpdmVSZW5kZXIgICAgICAgICA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSBkaXNwbGF5IGlmIGEKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jLCBvdGhlcndpc2UgdGhpcyBmaWVsZCBpcyAwCi0gKiAgbkZyYW1lV2lkdGggICAgICAgICAgIDogV2lkdGggb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBwb3J0IGlmIAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZCBmb3JtYXQgaXMgdXNlZC4gIFVzZSAwIGZvciAKKyAqICBuRnJhbWVXaWR0aCAgICAgICAgICAgOiBXaWR0aCBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIHBvcnQgaWYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuICBVc2UgMCBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLCBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCi0gKiAgbkZyYW1lSGVpZ2h0ICAgICAgICAgIDogSGVpZ2h0IG9mIGZyYW1lIHRvIGJlIHVzZWQgb24gcG9ydCBpZiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciAKKyAqICBuRnJhbWVIZWlnaHQgICAgICAgICAgOiBIZWlnaHQgb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBwb3J0IGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb21wcmVzc2VkIGZvcm1hdCBpcyB1c2VkLiBVc2UgMCBmb3IKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLCBkb24ndCBjYXJlIG9yIHZhcmlhYmxlCi0gKiAgblN0cmlkZSAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIGJ5dGVzIHBlciBzcGFuIG9mIGFuIGltYWdlIChpLmUuIAorICogIG5TdHJpZGUgICAgICAgICAgICAgICA6IE51bWJlciBvZiBieXRlcyBwZXIgc3BhbiBvZiBhbiBpbWFnZSAoaS5lLgogICogICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldCBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiBOIHRvIHNwYW4gTisxLCB3aGVyZSBuZWdhdGl2ZSBzdHJpZGUgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiBOIHRvIHNwYW4gTisxLCB3aGVyZSBuZWdhdGl2ZSBzdHJpZGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgdGhlIGltYWdlIGlzIGJvdHRvbSB1cAogICogIG5TbGljZUhlaWdodCAgICAgICAgICA6IEhlaWdodCB1c2VkIHdoZW4gZW5jb2RpbmcgaW4gc2xpY2VzCi0gKiAgYkZsYWdFcnJvckNvbmNlYWxtZW50IDogVHVybnMgb24gZXJyb3IgY29uY2VhbG1lbnQgaWYgaXQgaXMgc3VwcG9ydGVkIGJ5IAorICogIGJGbGFnRXJyb3JDb25jZWFsbWVudCA6IFR1cm5zIG9uIGVycm9yIGNvbmNlYWxtZW50IGlmIGl0IGlzIHN1cHBvcnRlZCBieQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPTVggY29tcG9uZW50Ci0gKiAgZUNvbXByZXNzaW9uRm9ybWF0ICAgIDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiAgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbXBvbmVudC4gV2hlbiBPTVhfSU1BR0VfQ29kaW5nVW51c2VkIGlzIAorICogIGVDb21wcmVzc2lvbkZvcm1hdCAgICA6IENvbXByZXNzaW9uIGZvcm1hdCB1c2VkIGluIHRoaXMgaW5zdGFuY2Ugb2YKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tcG9uZW50LiBXaGVuIE9NWF9JTUFHRV9Db2RpbmdVbnVzZWQgaXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGVDb2xvckZvcm1hdCBpcyB2YWxpZAogICogIGVDb2xvckZvcm1hdCAgICAgICAgICA6IERlY29tcHJlc3NlZCBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbXBvbmVudAotICogIHBOYXRpdmVXaW5kb3cgICAgICAgICA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSB3aW5kb3cgb2JqZWN0IGlmIGEgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBzaW5rICwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgMHgwLiAKKyAqICBwTmF0aXZlV2luZG93ICAgICAgICAgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgd2luZG93IG9iamVjdCBpZiBhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSBzaW5rICwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgMHgwLgogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfSU1BR0VfUE9SVERFRklOSVRJT05UWVBFIHsKICAgICBPTVhfU1RSSU5HIGNNSU1FVHlwZTsKICAgICBPTVhfTkFUSVZFX0RFVklDRVRZUEUgcE5hdGl2ZVJlbmRlcjsKLSAgICBPTVhfVTMyIG5GcmFtZVdpZHRoOyAKKyAgICBPTVhfVTMyIG5GcmFtZVdpZHRoOwogICAgIE9NWF9VMzIgbkZyYW1lSGVpZ2h0OwotICAgIE9NWF9TMzIgblN0cmlkZTsgICAgIAorICAgIE9NWF9TMzIgblN0cmlkZTsKICAgICBPTVhfVTMyIG5TbGljZUhlaWdodDsKICAgICBPTVhfQk9PTCBiRmxhZ0Vycm9yQ29uY2VhbG1lbnQ7CiAgICAgT01YX0lNQUdFX0NPRElOR1RZUEUgZUNvbXByZXNzaW9uRm9ybWF0OwpAQCAtMTM5LDE4ICsxMzksMTggQEAKIH0gT01YX0lNQUdFX1BPUlRERUZJTklUSU9OVFlQRTsKIAogCi0vKiogIAotICogUG9ydCBmb3JtYXQgcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnVtZXJhdGUgdGhlIHZhcmlvdXMgCisvKioKKyAqIFBvcnQgZm9ybWF0IHBhcmFtZXRlci4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW51bWVyYXRlIHRoZSB2YXJpb3VzCiAgKiBkYXRhIGlucHV0L291dHB1dCBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgotICogCisgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICA6IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldAotICogIG5JbmRleCAgICAgICAgICAgICA6IEluZGljYXRlcyB0aGUgZW51bWVyYXRpb24gaW5kZXggZm9yIHRoZSBmb3JtYXQgZnJvbSAKKyAqICBuSW5kZXggICAgICAgICAgICAgOiBJbmRpY2F0ZXMgdGhlIGVudW1lcmF0aW9uIGluZGV4IGZvciB0aGUgZm9ybWF0IGZyb20KICAqICAgICAgICAgICAgICAgICAgICAgICAweDAgdG8gTi0xCi0gKiAgZUNvbXByZXNzaW9uRm9ybWF0IDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiB0aGUgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LiBXaGVuIE9NWF9JTUFHRV9Db2RpbmdVbnVzZWQgaXMgc3BlY2lmaWVkLCAKKyAqICBlQ29tcHJlc3Npb25Gb3JtYXQgOiBDb21wcmVzc2lvbiBmb3JtYXQgdXNlZCBpbiB0aGlzIGluc3RhbmNlIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4gV2hlbiBPTVhfSU1BR0VfQ29kaW5nVW51c2VkIGlzIHNwZWNpZmllZCwKICAqICAgICAgICAgICAgICAgICAgICAgICBlQ29sb3JGb3JtYXQgaXMgdmFsaWQKICAqICBlQ29sb3JGb3JtYXQgICAgICAgOiBEZWNvbXByZXNzZWQgZm9ybWF0IHVzZWQgYnkgdGhpcyBjb21wb25lbnQKICAqLwpAQCAtMTY0LDggKzE2NCw4IEBACiB9IE9NWF9JTUFHRV9QQVJBTV9QT1JURk9STUFUVFlQRTsKIAogCi0vKiogCi0gKiBGbGFzaCBjb250cm9sIHR5cGUgCisvKioKKyAqIEZsYXNoIGNvbnRyb2wgdHlwZQogICoKICAqIEVOVU1TCiAgKiAgVG9yY2ggOiBGbGFzaCBmb3JjZWQgY29uc3RhbnRseSBvbgpAQCAtMTc3LDE0ICsxNzcsMTQgQEAKICAgICBPTVhfSU1BR0VfRmxhc2hDb250cm9sUmVkRXllUmVkdWN0aW9uLAogICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xGaWxsaW4sCiAgICAgT01YX0lNQUdFX0ZsYXNoQ29udHJvbFRvcmNoLAotICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0lNQUdFX0ZsYXNoQ29udHJvbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9GbGFzaENvbnRyb2xNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9JTUFHRV9GTEFTSENPTlRST0xUWVBFOwogCiAKLS8qKiAKLSAqIEZsYXNoIGNvbnRyb2wgY29uZmlndXJhdGlvbiAKKy8qKgorICogRmxhc2ggY29udHJvbCBjb25maWd1cmF0aW9uCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwpAQCAtMjAwLDI5ICsyMDAsMjkgQEAKIH0gT01YX0lNQUdFX1BBUkFNX0ZMQVNIQ09OVFJPTFRZUEU7CiAKIAotLyoqIAotICogRm9jdXMgY29udHJvbCB0eXBlIAorLyoqCisgKiBGb2N1cyBjb250cm9sIHR5cGUKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9JTUFHRV9GT0NVU0NPTlRST0xUWVBFIHsKICAgICBPTVhfSU1BR0VfRm9jdXNDb250cm9sT24gPSAwLAogICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xPZmYsCiAgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbEF1dG8sCiAgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbEF1dG9Mb2NrLAotICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX0lNQUdFX0ZvY3VzQ29udHJvbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9Gb2N1c0NvbnRyb2xNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9JTUFHRV9GT0NVU0NPTlRST0xUWVBFOwogCi0gCi0vKiogCi0gKiBGb2N1cyBjb250cm9sIGNvbmZpZ3VyYXRpb24gCisKKy8qKgorICogRm9jdXMgY29udHJvbCBjb25maWd1cmF0aW9uCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCiAgKiAgblZlcnNpb24gICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgZUZvY3VzQ29udHJvbCAgIDogRm9jdXMgY29udHJvbAotICogIG5Gb2N1c1N0ZXBzICAgICA6IEZvY3VzIGNhbiB0YWtlIG9uIHZhbHVlcyBmcm9tIDAgbW0gdG8gaW5maW5pdHkuIAorICogIG5Gb2N1c1N0ZXBzICAgICA6IEZvY3VzIGNhbiB0YWtlIG9uIHZhbHVlcyBmcm9tIDAgbW0gdG8gaW5maW5pdHkuCiAgKiAgICAgICAgICAgICAgICAgICAgSW50ZXJlc3QgaXMgb25seSBpbiBudW1iZXIgb2Ygc3RlcHMgb3ZlciB0aGlzIHJhbmdlLgogICogIG5Gb2N1c1N0ZXBJbmRleCA6IEN1cnJlbnQgZm9jdXMgc3RlcCBpbmRleAogICovCkBAIC0yMzYsMzAgKzIzNiwzMCBAQAogfSBPTVhfSU1BR0VfQ09ORklHX0ZPQ1VTQ09OVFJPTFRZUEU7CiAKIAotLyoqIAorLyoqCiAgKiBRIEZhY3RvciBmb3IgSlBFRyBjb21wcmVzc2lvbiwgd2hpY2ggY29udHJvbHMgdGhlIHRyYWRlb2ZmIGJldHdlZW4gaW1hZ2UKICAqIHF1YWxpdHkgYW5kIHNpemUuICBRIEZhY3RvciBwcm92aWRlcyBhIG1vcmUgc2ltcGxlIG1lYW5zIG9mIGNvbnRyb2xsaW5nCiAgKiBKUEVHIGNvbXByZXNzaW9uIHF1YWxpdHksIHdpdGhvdXQgZGlyZWN0bHkgcHJvZ3JhbW1pbmcgUXVhbnRpemF0aW9uCi0gKiB0YWJsZXMgZm9yIGNocm9tYSBhbmQgbHVtYSAKKyAqIHRhYmxlcyBmb3IgY2hyb21hIGFuZCBsdW1hCiAgKgogICogU1RSVUNUIE1FTUJFUlM6Ci0gKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAgICAgICAgIAotICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAotICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAKLSAqICBuUUZhY3RvciAgIDogSlBFRyBRIGZhY3RvciB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgMS0xMDAuIEEgZmFjdG9yIG9mIDEgCi0gKiAgICAgICAgICAgICAgIHByb2R1Y2VzIHRoZSBzbWFsbGVzdCwgd29yc3QgcXVhbGl0eSBpbWFnZXMsIGFuZCBhIGZhY3RvciAKLSAqICAgICAgICAgICAgICAgb2YgMTAwIHByb2R1Y2VzIHRoZSBsYXJnZXN0LCBiZXN0IHF1YWxpdHkgaW1hZ2VzLiAgQSAKLSAqICAgICAgICAgICAgICAgdHlwaWNhbCBkZWZhdWx0IGlzIDc1IGZvciBzbWFsbCBnb29kIHF1YWxpdHkgaW1hZ2VzICAgICAgICAgICAgICAgCisgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcworICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCisgKiAgblBvcnRJbmRleCA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCisgKiAgblFGYWN0b3IgICA6IEpQRUcgUSBmYWN0b3IgdmFsdWUgaW4gdGhlIHJhbmdlIG9mIDEtMTAwLiBBIGZhY3RvciBvZiAxCisgKiAgICAgICAgICAgICAgIHByb2R1Y2VzIHRoZSBzbWFsbGVzdCwgd29yc3QgcXVhbGl0eSBpbWFnZXMsIGFuZCBhIGZhY3RvcgorICogICAgICAgICAgICAgICBvZiAxMDAgcHJvZHVjZXMgdGhlIGxhcmdlc3QsIGJlc3QgcXVhbGl0eSBpbWFnZXMuICBBCisgKiAgICAgICAgICAgICAgIHR5cGljYWwgZGVmYXVsdCBpcyA3NSBmb3Igc21hbGwgZ29vZCBxdWFsaXR5IGltYWdlcwogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfSU1BR0VfUEFSQU1fUUZBQ1RPUlRZUEUgewotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAKLSAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgIAotICAgIE9NWF9VMzIgblFGYWN0b3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfVTMyIG5RRmFjdG9yOwogfSBPTVhfSU1BR0VfUEFSQU1fUUZBQ1RPUlRZUEU7CiAKLS8qKiAKLSAqIFF1YW50aXphdGlvbiB0YWJsZSB0eXBlIAorLyoqCisgKiBRdWFudGl6YXRpb24gdGFibGUgdHlwZQogICovCiAKIHR5cGVkZWYgZW51bSBPTVhfSU1BR0VfUVVBTlRJWkFUSU9OVEFCTEVUWVBFIHsKQEAgLTI2NywyNyArMjY3LDI3IEBACiAgICAgT01YX0lNQUdFX1F1YW50aXphdGlvblRhYmxlQ2hyb21hLAogICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZUNocm9tYUNiLAogICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZUNocm9tYUNyLAotICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfSU1BR0VfUXVhbnRpemF0aW9uVGFibGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfSU1BR0VfUXVhbnRpemF0aW9uVGFibGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9JTUFHRV9RdWFudGl6YXRpb25UYWJsZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0lNQUdFX1FVQU5USVpBVElPTlRBQkxFVFlQRTsKIAotLyoqIAorLyoqCiAgKiBKUEVHIHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIERDVCBjb21wcmVzc2lvbiBmb3IKLSAqIFlVViBkYXRhLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBzcGVjaWZ5aW5nIFEgZmFjdG9yLCBwcm92aWRpbmcgZXhhY3QgCi0gKiBjb250cm9sIG9mIGNvbXByZXNzaW9uIAorICogWVVWIGRhdGEsIGFzIGFuIGFsdGVybmF0aXZlIHRvIHNwZWNpZnlpbmcgUSBmYWN0b3IsIHByb3ZpZGluZyBleGFjdAorICogY29udHJvbCBvZiBjb21wcmVzc2lvbgogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCi0gKiAgblZlcnNpb24gICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uIAorICogIG5WZXJzaW9uICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICAqICBlUXVhbnRpemF0aW9uVGFibGUgICAgICA6IFF1YW50aXphdGlvbiB0YWJsZSB0eXBlCi0gKiAgblF1YW50aXphdGlvbk1hdHJpeFs2NF0gOiBKUEVHIHF1YW50aXphdGlvbiB0YWJsZSBvZiBjb2VmZmljaWVudHMgc3RvcmVkIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gaW5jcmVhc2luZyBjb2x1bW5zIHRoZW4gYnkgcm93cyBvZiBkYXRhIChpLmUuIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93IDEsIC4uLiByb3cgOCkuIFF1YW50aXphdGlvbiB2YWx1ZXMgYXJlIGluIAorICogIG5RdWFudGl6YXRpb25NYXRyaXhbNjRdIDogSlBFRyBxdWFudGl6YXRpb24gdGFibGUgb2YgY29lZmZpY2llbnRzIHN0b3JlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gaW5jcmVhc2luZyBjb2x1bW5zIHRoZW4gYnkgcm93cyBvZiBkYXRhIChpLmUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgMSwgLi4uIHJvdyA4KS4gUXVhbnRpemF0aW9uIHZhbHVlcyBhcmUgaW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByYW5nZSAwLTI1NSBhbmQgc3RvcmVkIGluIGxpbmVhciBvcmRlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gdGhlIGNvbXBvbmVudCB3aWxsIHppZy16YWcgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemF0aW9uIHRhYmxlIGRhdGEgaWYgcmVxdWlyZWQgaW50ZXJuYWxseSkgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiB0aGUgY29tcG9uZW50IHdpbGwgemlnLXphZyB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXphdGlvbiB0YWJsZSBkYXRhIGlmIHJlcXVpcmVkIGludGVybmFsbHkpCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9JTUFHRV9QQVJBTV9RVUFOVElaQVRJT05UQUJMRVRZUEUgewogICAgIE9NWF9VMzIgblNpemU7CkBAIC0yOTgsOSArMjk4LDkgQEAKIH0gT01YX0lNQUdFX1BBUkFNX1FVQU5USVpBVElPTlRBQkxFVFlQRTsKIAogCi0vKiogCi0gKiBIdWZmbWFuIHRhYmxlIHR5cGUsIHRoZSBzYW1lIEh1ZmZtYW4gdGFibGUgaXMgYXBwbGllZCBmb3IgY2hyb21hIGFuZCAKLSAqIGx1bWEgY29tcG9uZW50IAorLyoqCisgKiBIdWZmbWFuIHRhYmxlIHR5cGUsIHRoZSBzYW1lIEh1ZmZtYW4gdGFibGUgaXMgYXBwbGllZCBmb3IgY2hyb21hIGFuZAorICogbHVtYSBjb21wb25lbnQKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9JTUFHRV9IVUZGTUFOVEFCTEVUWVBFIHsKICAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlQUMgPSAwLApAQCAtMzA5LDIzICszMDksMjMgQEAKICAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlQUNDaHJvbWEsCiAgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZURDTHVtYSwKICAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlRENDaHJvbWEsCi0gICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfSU1BR0VfSHVmZm1hblRhYmxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX0lNQUdFX0h1ZmZtYW5UYWJsZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX0lNQUdFX0hVRkZNQU5UQUJMRVRZUEU7CiAKLS8qKiAKLSAqIEpQRUcgSHVmZm1hbiB0YWJsZSAKKy8qKgorICogSlBFRyBIdWZmbWFuIHRhYmxlCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKICAqICBuVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICAqICBuUG9ydEluZGV4ICAgICAgICAgICAgICAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgZUh1ZmZtYW5UYWJsZSAgICAgICAgICAgICAgICAgICAgOiBIdWZmbWFuIHRhYmxlIHR5cGUKLSAqICBuTnVtYmVyT2ZIdWZmbWFuQ29kZU9mTGVuZ3RoWzE2XSA6IDAtMTYsIG51bWJlciBvZiBIdWZmbWFuIGNvZGVzIG9mIGVhY2ggCisgKiAgbk51bWJlck9mSHVmZm1hbkNvZGVPZkxlbmd0aFsxNl0gOiAwLTE2LCBudW1iZXIgb2YgSHVmZm1hbiBjb2RlcyBvZiBlYWNoCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSBsZW5ndGgKLSAqICBuSHVmZm1hblRhYmxlWzI1Nl0gICAgICAgICAgICAgICA6IDAtMjU1LCB0aGUgc2l6ZSB1c2VkIGZvciBBQyBhbmQgREMgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdWZmbWFuVGFibGUgYXJlIDE2IGFuZCAxNjIgCisgKiAgbkh1ZmZtYW5UYWJsZVsyNTZdICAgICAgICAgICAgICAgOiAwLTI1NSwgdGhlIHNpemUgdXNlZCBmb3IgQUMgYW5kIERDCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdWZmbWFuVGFibGUgYXJlIDE2IGFuZCAxNjIKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX0lNQUdFX1BBUkFNX0hVRkZNQU5UVEFCTEVUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbmRleC5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbmRleC5oCmluZGV4IGJlOWExYTYuLjFhMmE1NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSW5kZXguaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0luZGV4LmgKQEAgLTE2LDI1ICsxNiwyNSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqLwogCkBAIC01MSwyNSArNTEsMjMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCiAKLQogLyogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQogICogIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAotICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5CiAgKi8KICNpbmNsdWRlIDxPTVhfVHlwZXMuaD4KIAotCiAvKiogVGhlIE9NWF9JTkRFWFRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBzZWxlY3QgYSBzdHJ1Y3R1cmUgd2hlbiBlaXRoZXIKLSAqICBnZXR0aW5nIG9yIHNldHRpbmcgcGFyYW1ldGVycyBhbmQvb3IgY29uZmlndXJhdGlvbiBkYXRhLiAgRWFjaCBlbnRyeSBpbiAKLSAqICB0aGlzIGVudW1lcmF0aW9uIG1hcHMgdG8gYW4gT01YIHNwZWNpZmllZCBzdHJ1Y3R1cmUuICBXaGVuIHRoZSAKKyAqICBnZXR0aW5nIG9yIHNldHRpbmcgcGFyYW1ldGVycyBhbmQvb3IgY29uZmlndXJhdGlvbiBkYXRhLiAgRWFjaCBlbnRyeSBpbgorICogIHRoaXMgZW51bWVyYXRpb24gbWFwcyB0byBhbiBPTVggc3BlY2lmaWVkIHN0cnVjdHVyZS4gIFdoZW4gdGhlCiAgKiAgT01YX0dldFBhcmFtZXRlciwgT01YX1NldFBhcmFtZXRlciwgT01YX0dldENvbmZpZyBvciBPTVhfU2V0Q29uZmlnIG1ldGhvZHMKICAqICBhcmUgdXNlZCwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd2lsbCBhbHdheXMgYmUgYW4gZW50cnkgZnJvbSB0aGlzIGVudW1lcmF0aW9uCiAgKiAgYW5kIHRoZSB0aGlyZCBlbnRyeSB3aWxsIGJlIHRoZSBzdHJ1Y3R1cmUgc2hvd24gaW4gdGhlIGNvbW1lbnRzIGZvciB0aGUgZW50cnkuCi0gKiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXppbmcgYSBjcm9wcGluZyBmdW5jdGlvbiwgdGhlIAotICogIE9NWF9TZXRDb25maWcgY29tbWFuZCB3b3VsZCBoYXZlIE9NWF9JbmRleENvbmZpZ0NvbW1vbklucHV0Q3JvcCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciAKLSAqICBhbmQgd291bGQgc2VuZCBhIHBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgT01YX1JFQ1RUWVBFIHN0cnVjdHVyZSBhcyB0aGUgCisgKiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXppbmcgYSBjcm9wcGluZyBmdW5jdGlvbiwgdGhlCisgKiAgT01YX1NldENvbmZpZyBjb21tYW5kIHdvdWxkIGhhdmUgT01YX0luZGV4Q29uZmlnQ29tbW9uSW5wdXRDcm9wIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyCisgKiAgYW5kIHdvdWxkIHNlbmQgYSBwb2ludGVyIHRvIGFuIGluaXRpYWxpemVkIE9NWF9SRUNUVFlQRSBzdHJ1Y3R1cmUgYXMgdGhlCiAgKiAgdGhpcmQgcGFyYW1ldGVyLgotICogIAorICoKICAqICBUaGUgZW51bWVyYXRpb24gZW50cmllcyBuYW1lZCB3aXRoIHRoZSBPTVhfQ29uZmlnIHByZWZpeCBhcmUgc2VudCB1c2luZwogICogIHRoZSBPTVhfU2V0Q29uZmlnIGNvbW1hbmQgYW5kIHRoZSBlbnVtZXJhdGlvbiBlbnRyaWVzIG5hbWVkIHdpdGggdGhlCiAgKiAgT01YX1BBUkFNXyBwcmVmaXggYXJlIHNlbnQgdXNpbmcgdGhlIE9NWF9TZXRQYXJhbWV0ZXIgY29tbWFuZC4KQEAgLTg2LDExICs4NCwxMSBAQAogICAgIE9NWF9JbmRleFBhcmFtQWN0aXZlU3RyZWFtLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX1UzMlRZUEUgKi8KICAgICBPTVhfSW5kZXhQYXJhbVN1c3BlbnNpb25Qb2xpY3ksICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9TVVNQRU5TSU9OUE9MSUNZVFlQRSAqLwogICAgIE9NWF9JbmRleFBhcmFtQ29tcG9uZW50U3VzcGVuZGVkLCAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX1NVU1BFTlNJT05UWVBFICovCi0gICAgT01YX0luZGV4Q29uZmlnQ2FwdHVyaW5nLCAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0JPT0xFQU5UWVBFICovIAotICAgIE9NWF9JbmRleENvbmZpZ0NhcHR1cmVNb2RlLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19DQVBUVVJFTU9ERVRZUEUgKi8gCi0gICAgT01YX0luZGV4QXV0b1BhdXNlQWZ0ZXJDYXB0dXJlLCAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0JPT0xFQU5UWVBFICovIAorICAgIE9NWF9JbmRleENvbmZpZ0NhcHR1cmluZywgICAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19CT09MRUFOVFlQRSAqLworICAgIE9NWF9JbmRleENvbmZpZ0NhcHR1cmVNb2RlLCAgICAgICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19DQVBUVVJFTU9ERVRZUEUgKi8KKyAgICBPTVhfSW5kZXhBdXRvUGF1c2VBZnRlckNhcHR1cmUsICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9DT05GSUdfQk9PTEVBTlRZUEUgKi8KICAgICBPTVhfSW5kZXhQYXJhbUNvbnRlbnRVUkksICAgICAgICAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9DT05URU5UVVJJVFlQRSAqLwotICAgIE9NWF9JbmRleFBhcmFtQ3VzdG9tQ29udGVudFBpcGUsICAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX0NPTlRFTlRQSVBFVFlQRSAqLyAKKyAgICBPTVhfSW5kZXhQYXJhbUN1c3RvbUNvbnRlbnRQaXBlLCAgICAgICAgLyoqPCByZWZlcmVuY2U6IE9NWF9QQVJBTV9DT05URU5UUElQRVRZUEUgKi8KICAgICBPTVhfSW5kZXhQYXJhbURpc2FibGVSZXNvdXJjZUNvbmNlYWxtZW50LCAvKio8IHJlZmVyZW5jZTogT01YX1JFU09VUkNFQ09OQ0VBTE1FTlRUWVBFICovCiAgICAgT01YX0luZGV4Q29uZmlnTWV0YWRhdGFJdGVtQ291bnQsICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX01FVEFEQVRBSVRFTUNPVU5UVFlQRSAqLwogICAgIE9NWF9JbmRleENvbmZpZ0NvbnRhaW5lck5vZGVDb3VudCwgICAgICAvKio8IHJlZmVyZW5jZTogT01YX0NPTkZJR19DT05UQUlORVJOT0RFQ09VTlRUWVBFICovCkBAIC0xMDMsNyArMTAxLDcgQEAKIAogICAgIE9NWF9JbmRleFBvcnRTdGFydFVudXNlZCA9IDB4MDIwMDAwMDAsCiAgICAgT01YX0luZGV4UGFyYW1Qb3J0RGVmaW5pdGlvbiwgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fUE9SVERFRklOSVRJT05UWVBFICovCi0gICAgT01YX0luZGV4UGFyYW1Db21wQnVmZmVyU3VwcGxpZXIsICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfUEFSQU1fQlVGRkVSU1VQUExJRVJUWVBFICovIAorICAgIE9NWF9JbmRleFBhcmFtQ29tcEJ1ZmZlclN1cHBsaWVyLCAgICAgICAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX0JVRkZFUlNVUFBMSUVSVFlQRSAqLwogICAgIE9NWF9JbmRleFJlc2VydmVkU3RhcnRVbnVzZWQgPSAweDAzMDAwMDAwLAogCiAgICAgLyogQXVkaW8gcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbnMgKi8KQEAgLTI1NiwxMCArMjU0LDEwIEBACiAgICAgT01YX0luZGV4Q29uZmlnVGltZVNlZWtNb2RlLCAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFICovCiAKIAotICAgIE9NWF9JbmRleEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfSW5kZXhLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICAvKiBWZW5kb3Igc3BlY2lmaWMgYXJlYSAqLwogICAgIE9NWF9JbmRleFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKLSAgICAvKiBWZW5kb3Igc3BlY2lmaWMgc3RydWN0dXJlcyBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIG9mIDB4N0YwMDAwMDAgCisgICAgLyogVmVuZG9yIHNwZWNpZmljIHN0cnVjdHVyZXMgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBvZiAweDdGMDAwMDAwCiAgICAgICAgdG8gMHg3RkZGRkZGRS4gIFRoaXMgcmFuZ2UgaXMgbm90IGJyb2tlbiBvdXQgYnkgdmVuZG9yLCBzbwogICAgICAgIHByaXZhdGUgaW5kZXhlcyBhcmUgbm90IGd1YXJhbnRlZWQgdW5pcXVlIGFuZCB0aGVyZWZvcmUgc2hvdWxkCiAgICAgICAgb25seSBiZSBzZW50IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21wb25lbnQuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0luZGV4RXh0LmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX0luZGV4RXh0LmgKaW5kZXggNmNkNzc0Yi4uNjk5ZWZjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9JbmRleEV4dC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfSW5kZXhFeHQuaApAQCAtODEsNiArODEsNyBAQAogCiAgICAgLyogT3RoZXIgY29uZmlndXJhdGlvbnMgKi8KICAgICBPTVhfSW5kZXhFeHRPdGhlclN0YXJ0VW51c2VkID0gT01YX0luZGV4S2hyb25vc0V4dGVuc2lvbnMgKyAweDAwODAwMDAwLAorICAgIE9NWF9JbmRleENvbmZpZ0F1dG9GcmFtZXJhdGVDb252ZXJzaW9uLCAgICAgICAgIC8qKjwgcmVmZXJlbmNlOiBPTVhfQ09ORklHX0JPT0xFQU5UWVBFICovCiAKICAgICAvKiBUaW1lIGNvbmZpZ3VyYXRpb25zICovCiAgICAgT01YX0luZGV4RXh0VGltZVN0YXJ0VW51c2VkID0gT01YX0luZGV4S2hyb25vc0V4dGVuc2lvbnMgKyAweDAwOTAwMDAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9PdGhlci5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9PdGhlci5oCmluZGV4IGVmYmNlODMuLjYwNzJlZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfT3RoZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX090aGVyLmgKQEAgLTE2LDI1ICsxNiwyNSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0Ci0gKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IAorICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKLSAqIAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgogICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKICAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICoKICAqLwogCkBAIC01Myw0NiArNTMsNDYgQEAKIAogLyogRWFjaCBPTVggaGVhZGVyIG11c3QgaW5jbHVkZSBhbGwgcmVxdWlyZWQgaGVhZGVyIGZpbGVzIHRvIGFsbG93IHRoZQogICogIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAotICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5CiAgKi8KIAogI2luY2x1ZGUgPE9NWF9Db3JlLmg+CiAKIAotLyoqIAorLyoqCiAgKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBkYXRhIHR5cGVzIHdoaWNoIG1hdGNoIHRvIG11bHRpcGxlIGRvbWFpbnMgb3Igbm8KICAqIGRvbWFpbiBhdCBhbGwuICBGb3IgdHlwZXMgd2hpY2ggYXJlIHZlbmRvciBzcGVjaWZpYywgYSB2YWx1ZSBhYm92ZQogICogT01YX09USEVSX1ZFTkRPUlRTVEFSVCBzaG91bGQgYmUgdXNlZC4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9PVEhFUl9GT1JNQVRUWVBFIHsKLSAgICBPTVhfT1RIRVJfRm9ybWF0VGltZSA9IDAsIC8qKjwgVHJhbnNtaXNzaW9uIG9mIHZhcmlvdXMgdGltZXN0YW1wcywgZWxhcHNlZCB0aW1lLCAKKyAgICBPTVhfT1RIRVJfRm9ybWF0VGltZSA9IDAsIC8qKjwgVHJhbnNtaXNzaW9uIG9mIHZhcmlvdXMgdGltZXN0YW1wcywgZWxhcHNlZCB0aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGRlbHRhcywgZXRjICovCi0gICAgT01YX09USEVSX0Zvcm1hdFBvd2VyLCAgICAvKio8IFBlcmhhcHMgdXNlZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHBvd2VyIAorICAgIE9NWF9PVEhFUl9Gb3JtYXRQb3dlciwgICAgLyoqPCBQZXJoYXBzIHVzZWQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBwb3dlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50LCBzZXR0aW5nIGNsb2Nrcz8gKi8KLSAgICBPTVhfT1RIRVJfRm9ybWF0U3RhdHMsICAgIC8qKjwgQ291bGQgYmUgdGhpbmdzIHN1Y2ggYXMgZnJhbWUgcmF0ZSwgZnJhbWVzIAorICAgIE9NWF9PVEhFUl9Gb3JtYXRTdGF0cywgICAgLyoqPCBDb3VsZCBiZSB0aGluZ3Mgc3VjaCBhcyBmcmFtZSByYXRlLCBmcmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCwgZXRjICovCiAgICAgT01YX09USEVSX0Zvcm1hdEJpbmFyeSwgICAvKio8IEFyYml0cmFyeSBiaW5hcnkgZGF0YSAqLwotICAgIE9NWF9PVEhFUl9Gb3JtYXRWZW5kb3JSZXNlcnZlZCA9IDEwMDAsIC8qKjwgU3RhcnRpbmcgdmFsdWUgZm9yIHZlbmRvciBzcGVjaWZpYyAKKyAgICBPTVhfT1RIRVJfRm9ybWF0VmVuZG9yUmVzZXJ2ZWQgPSAxMDAwLCAvKio8IFN0YXJ0aW5nIHZhbHVlIGZvciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMgKi8KIAotICAgIE9NWF9PVEhFUl9Gb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX09USEVSX0Zvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9PVEhFUl9Gb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9PVEhFUl9Gb3JtYXRNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9PVEhFUl9GT1JNQVRUWVBFOwogCi0vKiogCisvKioKICAqIEVudW1lcmF0aW9uIG9mIHNlZWsgbW9kZXMuCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfVElNRV9TRUVLTU9ERVRZUEUgewogICAgIE9NWF9USU1FX1NlZWtNb2RlRmFzdCA9IDAsIC8qKjwgUHJlZmVyIHNlZWtpbmcgdG8gYW4gYXBwcm94aW1hdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiBvdmVyICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uIG92ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgYWN0dWFsIHNlZWsgcG9zaXRpb24gaWYgaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXN1bHRzIGluIGEgZmFzdGVyIHNlZWsuICovCi0gICAgT01YX1RJTUVfU2Vla01vZGVBY2N1cmF0ZSwgLyoqPCBQcmVmZXIgc2Vla2luZyB0byB0aGUgYWN0dWFsIHNlZWsgCisgICAgT01YX1RJTUVfU2Vla01vZGVBY2N1cmF0ZSwgLyoqPCBQcmVmZXIgc2Vla2luZyB0byB0aGUgYWN0dWFsIHNlZWsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwb3NpdGlvbiBvdmVyIGFuIGFwcHJveGltYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24gZXZlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmIGl0IHJlc3VsdHMgaW4gYSBzbG93ZXIgc2Vlay4gKi8KLSAgICBPTVhfVElNRV9TZWVrTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVElNRV9TZWVrTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9USU1FX1NlZWtNb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVElNRV9TZWVrTW9kZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1RJTUVfU0VFS01PREVUWVBFOwpAQCAtMTA0LDQyICsxMDQsNDIgQEAKICAgICBPTVhfVElNRV9TRUVLTU9ERVRZUEUgZVR5cGU7ICAgIC8qKjwgVGhlIHNlZWsgbW9kZSAqLwogfSBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFOwogCi0vKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHRpbWUgc3RhbXAgdXNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlncyAKKy8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgdGltZSBzdGFtcCB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWdzCiAgKiBvbiB0aGUgQ2xvY2sgQ29tcG9uZW50IChDQyk6Ci0gKiAKLSAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50V2FsbFRpbWU6IHF1ZXJ5IG9mIHRoZSBDQ5JzIGN1cnJlbnQgd2FsbCAgCisgKgorICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRXYWxsVGltZTogcXVlcnkgb2YgdGhlIENDJ3MgY3VycmVudCB3YWxsCiAgKiAgICAgdGltZQotICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRNZWRpYVRpbWU6IHF1ZXJ5IG9mIHRoZSBDQ5JzIGN1cnJlbnQgbWVkaWEKKyAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50TWVkaWFUaW1lOiBxdWVyeSBvZiB0aGUgQ0MncyBjdXJyZW50IG1lZGlhCiAgKiAgICAgdGltZQotICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRBdWRpb1JlZmVyZW5jZSBhbmQgIAotICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRWaWRlb1JlZmVyZW5jZTogYXVkaW8vdmlkZW8gcmVmZXJlbmNlIAorICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRBdWRpb1JlZmVyZW5jZSBhbmQKKyAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2U6IGF1ZGlvL3ZpZGVvIHJlZmVyZW5jZQogICogICAgIGNsb2NrIHNlbmRpbmcgU0MgaXRzIHJlZmVyZW5jZSB0aW1lCi0gKiBPTVhfSW5kZXhDb25maWdUaW1lQ2xpZW50U3RhcnRUaW1lOiBhIENsb2NrIENvbXBvbmVudCBjbGllbnQgc2VuZHMgCi0gKiAgICAgdGhpcyBzdHJ1Y3R1cmUgdG8gdGhlIENsb2NrIENvbXBvbmVudCB2aWEgYSBTZXRDb25maWcgb24gaXRzIAorICogT01YX0luZGV4Q29uZmlnVGltZUNsaWVudFN0YXJ0VGltZTogYSBDbG9jayBDb21wb25lbnQgY2xpZW50IHNlbmRzCisgKiAgICAgdGhpcyBzdHJ1Y3R1cmUgdG8gdGhlIENsb2NrIENvbXBvbmVudCB2aWEgYSBTZXRDb25maWcgb24gaXRzCiAgKiAgICAgY2xpZW50IHBvcnQgd2hlbiBpdCByZWNlaXZlcyBhIGJ1ZmZlciB3aXRoCiAgKiAgICAgT01YX0JVRkZFUkZMQUdfU1RBUlRUSU1FIHNldC4gSXQgbXVzdCB1c2UgdGhlIHRpbWVzdGFtcAotICogICAgIHNwZWNpZmllZCBieSB0aGF0IGJ1ZmZlciBmb3IgblN0YXJ0VGltZXN0YW1wLiAKKyAqICAgICBzcGVjaWZpZWQgYnkgdGhhdCBidWZmZXIgZm9yIG5TdGFydFRpbWVzdGFtcC4KICAqCi0gKiBJdJJzIGFsc28gdXNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlnIG9uIGNvbXBvbmVudHMgaW4gZ2VuZXJhbDoKKyAqIEl0J3MgYWxzbyB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWcgb24gY29tcG9uZW50cyBpbiBnZW5lcmFsOgogICoKLSAqIE9NWF9JbmRleENvbmZpZ1RpbWVQb3NpdGlvbjogSUwgY2xpZW50IHF1ZXJ5aW5nIGNvbXBvbmVudCBwb3NpdGlvbiAKKyAqIE9NWF9JbmRleENvbmZpZ1RpbWVQb3NpdGlvbjogSUwgY2xpZW50IHF1ZXJ5aW5nIGNvbXBvbmVudCBwb3NpdGlvbgogICogKEdldENvbmZpZykgb3IgY29tbWFuZGluZyBhIGNvbXBvbmVudCB0byBzZWVrIHRvIHRoZSBnaXZlbiBsb2NhdGlvbgogICogKFNldENvbmZpZykKLSAqLwkKKyAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX1RJTUVTVEFNUFRZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBpbmZvcm1hdGlvbiAqLwotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KLSAgICBPTVhfVElDS1MgblRpbWVzdGFtcDsgIAkgICAgIC8qKjwgdGltZXN0YW1wIC4qLyAKLX0gT01YX1RJTUVfQ09ORklHX1RJTUVTVEFNUFRZUEU7ICAKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KKyAgICBPTVhfVElDS1MgblRpbWVzdGFtcDsgICAgICAgIC8qKjwgdGltZXN0YW1wIC4qLworfSBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRTsKIAogLyoqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHJlZmVyZW5jZSBjbG9ja3MgdG8gdGhlIG1lZGlhIHRpbWUuICovCiB0eXBlZGVmIGVudW0gT01YX1RJTUVfVVBEQVRFVFlQRSB7CiAgICAgICBPTVhfVElNRV9VcGRhdGVSZXF1ZXN0RnVsZmlsbG1lbnQsICAgIC8qKjwgVXBkYXRlIGlzIHRoZSBmdWxmaWxsbWVudCBvZiBhIG1lZGlhIHRpbWUgcmVxdWVzdC4gKi8KLSAgICAgIE9NWF9USU1FX1VwZGF0ZVNjYWxlQ2hhbmdlZCwJICAgICAgICAvKio8IFVwZGF0ZSB3YXMgZ2VuZXJhdGVkIGJlY2F1c2UgdGhlIHNjYWxlIGNoYWduZWQuICovCisgICAgICBPTVhfVElNRV9VcGRhdGVTY2FsZUNoYW5nZWQsICAgICAgICAgIC8qKjwgVXBkYXRlIHdhcyBnZW5lcmF0ZWQgYmVjYXVzZSB0aGUgc2NhbGUgY2hhZ25lZC4gKi8KICAgICAgIE9NWF9USU1FX1VwZGF0ZUNsb2NrU3RhdGVDaGFuZ2VkLCAgICAgLyoqPCBVcGRhdGUgd2FzIGdlbmVyYXRlZCBiZWNhdXNlIHRoZSBjbG9jayBzdGF0ZSBjaGFuZ2VkLiAqLwotICAgICAgT01YX1RJTUVfVXBkYXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgICAgT01YX1RJTUVfVXBkYXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgICBPTVhfVElNRV9VcGRhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgICAgT01YX1RJTUVfVXBkYXRlTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVElNRV9VUERBVEVUWVBFOwpAQCAtMTQ3LDkgKzE0Nyw5IEBACiAvKiogRW51bWVyYXRpb24gb2YgcG9zc2libGUgcmVmZXJlbmNlIGNsb2NrcyB0byB0aGUgbWVkaWEgdGltZS4gKi8KIHR5cGVkZWYgZW51bSBPTVhfVElNRV9SRUZDTE9DS1RZUEUgewogICAgICAgT01YX1RJTUVfUmVmQ2xvY2tOb25lLCAgICAvKio8IFVzZSBubyByZWZlcmVuY2VzLiAqLwotICAgICAgT01YX1RJTUVfUmVmQ2xvY2tBdWRpbywJLyoqPCBVc2UgcmVmZXJlbmNlcyBzZW50IHRocm91Z2ggT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRBdWRpb1JlZmVyZW5jZSAqLworICAgICAgT01YX1RJTUVfUmVmQ2xvY2tBdWRpbywgICAvKio8IFVzZSByZWZlcmVuY2VzIHNlbnQgdGhyb3VnaCBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudEF1ZGlvUmVmZXJlbmNlICovCiAgICAgICBPTVhfVElNRV9SZWZDbG9ja1ZpZGVvLCAgIC8qKjwgVXNlIHJlZmVyZW5jZXMgc2VudCB0aHJvdWdoIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50VmlkZW9SZWZlcmVuY2UgKi8KLSAgICAgIE9NWF9USU1FX1JlZkNsb2NrS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgICAgT01YX1RJTUVfUmVmQ2xvY2tLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICAgIE9NWF9USU1FX1JlZkNsb2NrVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICAgIE9NWF9USU1FX1JlZkNsb2NrTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVElNRV9SRUZDTE9DS1RZUEU7CkBAIC0xNTcsMTEgKzE1NywxMSBAQAogLyoqIEVudW1lcmF0aW9uIG9mIGNsb2NrIHN0YXRlcy4gKi8KIHR5cGVkZWYgZW51bSBPTVhfVElNRV9DTE9DS1NUQVRFIHsKICAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVSdW5uaW5nLCAgICAgICAgICAgICAvKio8IENsb2NrIHJ1bm5pbmcuICovCi0gICAgICBPTVhfVElNRV9DbG9ja1N0YXRlV2FpdGluZ0ZvclN0YXJ0VGltZSwgLyoqPCBDbG9jayB3YWl0aW5nIHVudGlsIHRoZSAKKyAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVXYWl0aW5nRm9yU3RhcnRUaW1lLCAvKio8IENsb2NrIHdhaXRpbmcgdW50aWwgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcmVzY3JpYmVkIGNsaWVudHMgZW1pdCB0aGVpcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgc3RhcnQgdGltZS4gKi8KICAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVTdG9wcGVkLCAgICAgICAgICAgICAvKio8IENsb2NrIHN0b3BwZWQuICovCi0gICAgICBPTVhfVElNRV9DbG9ja1N0YXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgICBPTVhfVElNRV9DbG9ja1N0YXRlTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVElNRV9DTE9DS1NUQVRFOwpAQCAtMTcxLDE4ICsxNzEsMTggQEAKICAqICBBIGNsaWVudCBjb21wb25lbnQgc2VuZHMgdGhpcyBzdHJ1Y3R1cmUgdG8gdGhlIENsb2NrIENvbXBvbmVudCB2aWEgYSBTZXRDb25maWcKICAqICBvbiBpdHMgY2xpZW50IHBvcnQgdG8gc3BlY2lmeSBhIG1lZGlhIHRpbWVzdGFtcCB0aGUgQ2xvY2sgQ29tcG9uZW50CiAgKiAgc2hvdWxkIGVtaXQuICBUaGUgQ2xvY2sgQ29tcG9uZW50IHNob3VsZCBmdWxmaWxsIHRoZSByZXF1ZXN0IGJ5IHNlbmRpbmcgYQotICogIE9NWF9USU1FX01FRElBVElNRVRZUEUgd2hlbiBpdHMgbWVkaWEgY2xvY2sgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIAorICogIE9NWF9USU1FX01FRElBVElNRVRZUEUgd2hlbiBpdHMgbWVkaWEgY2xvY2sgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkCiAgKiAgdGltZXN0YW1wLgogICoKICAqICBUaGUgY2xpZW50IG1heSByZXF1aXJlIGEgbWVkaWEgdGltZSByZXF1ZXN0IGJlIGZ1bGZpbGxlZCBzbGlnaHRseQotICogIGVhcmxpZXIgdGhhbiB0aGUgbWVkaWEgdGltZSBzcGVjaWZpZWQuIEluIHRoaXMgY2FzZSB0aGUgY2xpZW50IHNwZWNpZmllcyAKLSAqICBhbiBvZmZzZXQgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3YWxsIHRpbWUgY29ycmVzcG9uZGluZyAKLSAqICB0byB0aGUgcmVxdWVzdGVkIG1lZGlhIHRpbWUgYW5kIHRoZSB3YWxsIHRpbWUgd2hlbiBpdCB3aWxsIGJlIAotICogIGZ1bGZpbGxlZC4gCisgKiAgZWFybGllciB0aGFuIHRoZSBtZWRpYSB0aW1lIHNwZWNpZmllZC4gSW4gdGhpcyBjYXNlIHRoZSBjbGllbnQgc3BlY2lmaWVzCisgKiAgYW4gb2Zmc2V0IHdoaWNoIGlzIGVxdWFsIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gd2FsbCB0aW1lIGNvcnJlc3BvbmRpbmcKKyAqICB0byB0aGUgcmVxdWVzdGVkIG1lZGlhIHRpbWUgYW5kIHRoZSB3YWxsIHRpbWUgd2hlbiBpdCB3aWxsIGJlCisgKiAgZnVsZmlsbGVkLgogICoKICAqICBBIGNsaWVudCBjb21wb25lbnQgbWF5IHVzZXMgdGhlc2UgcmVxdWVzdHMgYW5kIHRoZSBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHRvCiAgKiAgdGltZSBldmVudHMgYWNjb3JkaW5nIHRvIHRpbWVzdGFtcHMuIElmIGEgY2xpZW50IG11c3QgcGVyZm9ybSBhbiBvcGVyYXRpb24gTyBhdAotICogIGEgdGltZSBUIChlLmcuIGRlbGl2ZXIgYSB2aWRlbyBmcmFtZSBhdCBpdHMgY29ycmVzcG9uZGluZyB0aW1lc3RhbXApLCBpdCBtYWtlcyBhIAorICogIGEgdGltZSBUIChlLmcuIGRlbGl2ZXIgYSB2aWRlbyBmcmFtZSBhdCBpdHMgY29ycmVzcG9uZGluZyB0aW1lc3RhbXApLCBpdCBtYWtlcyBhCiAgKiAgbWVkaWEgdGltZSByZXF1ZXN0IGF0IFQgKHBlcmhhcHMgc3BlY2lmeWluZyBhbiBvZmZzZXQgdG8gZW5zdXJlIHRoZSByZXF1ZXN0IGZ1bGZpbGxtZW50CiAgKiAgaXMgYSBsaXR0bGUgZWFybHkpLiBXaGVuIHRoZSBjbG9jayBjb21wb25lbnQgcGFzc2VzIHRoZSByZXN1bHRpbmcgT01YX1RJTUVfTUVESUFUSU1FVFlQRQogICogIHN0cnVjdHVyZSBiYWNrIHRvIHRoZSBjbGllbnQgY29tcG9uZW50LCB0aGUgY2xpZW50IG1heSBwZXJmb3JtIG9wZXJhdGlvbiBPIChwZXJoYXBzIGhhdmluZwpAQCAtMTkzLDUyICsxOTMsNTIgQEAKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KLSAgICBPTVhfUFRSIHBDbGllbnRQcml2YXRlOyAgICAgLyoqPCBDbGllbnQgcHJpdmF0ZSBkYXRhIHRvIGRpc2FiaWd1YXRlIHRoaXMgbWVkaWEgdGltZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBmcm9tIG90aGVycyAoZS5nLiB0aGUgbnVtYmVyIG9mIHRoZSBmcmFtZSB0byBkZWxpdmVyKS4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgRHVwbGljYXRlZCBpbiB0aGUgbWVkaWEgdGltZSBzdHJ1Y3R1cmUgdGhhdCBmdWxmaWxscyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB0aGlzIHJlcXVlc3QuIEEgdmFsdWUgb2YgemVybyBpcyByZXNlcnZlZCBmb3IgdGltZSBzY2FsZSAKKyAgICBPTVhfUFRSIHBDbGllbnRQcml2YXRlOyAgICAgLyoqPCBDbGllbnQgcHJpdmF0ZSBkYXRhIHRvIGRpc2FiaWd1YXRlIHRoaXMgbWVkaWEgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGZyb20gb3RoZXJzIChlLmcuIHRoZSBudW1iZXIgb2YgdGhlIGZyYW1lIHRvIGRlbGl2ZXIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIER1cGxpY2F0ZWQgaW4gdGhlIG1lZGlhIHRpbWUgc3RydWN0dXJlIHRoYXQgZnVsZmlsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB0aGlzIHJlcXVlc3QuIEEgdmFsdWUgb2YgemVybyBpcyByZXNlcnZlZCBmb3IgdGltZSBzY2FsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHVwZGF0ZXMuICovCi0gICAgT01YX1RJQ0tTIG5NZWRpYVRpbWVzdGFtcDsgIC8qKjwgTWVkaWEgdGltZXN0YW1wIHJlcXVlc3RlZC4qLyAKKyAgICBPTVhfVElDS1Mgbk1lZGlhVGltZXN0YW1wOyAgLyoqPCBNZWRpYSB0aW1lc3RhbXAgcmVxdWVzdGVkLiovCiAgICAgT01YX1RJQ0tTIG5PZmZzZXQ7ICAgICAgICAgIC8qKjwgQW1vdW50IG9mIHdhbGwgY2xvY2sgdGltZSBieSB3aGljaCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcmVxdWVzdCBzaG91bGQgYmUgZnVsZmlsbGVkIGVhcmx5ICovCiB9IE9NWF9USU1FX0NPTkZJR19NRURJQVRJTUVSRVFVRVNUVFlQRTsKIAotLyoqPCBTdHJ1Y3R1cmUgc2VudCBmcm9tIHRoZSBjbG9jayBjb21wb25lbnQgY2xpZW50IGVpdGhlciB3aGVuIGZ1bGZpbGxpbmcgCi0gKiAgIGEgbWVkaWEgdGltZSByZXF1ZXN0IG9yIHdoZW4gdGhlIHRpbWUgc2NhbGUgaGFzIGNoYW5nZWQuIAorLyoqPCBTdHJ1Y3R1cmUgc2VudCBmcm9tIHRoZSBjbG9jayBjb21wb25lbnQgY2xpZW50IGVpdGhlciB3aGVuIGZ1bGZpbGxpbmcKKyAqICAgYSBtZWRpYSB0aW1lIHJlcXVlc3Qgb3Igd2hlbiB0aGUgdGltZSBzY2FsZSBoYXMgY2hhbmdlZC4KICAqCi0gKiAgIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgQ2xvY2sgQ29tcG9uZW50IGZpbGxzIHRoaXMgc3RydWN0dXJlIGFuZCB0aW1lcyBpdHMgZW1pc3Npb24gCi0gKiAgIHRvIGEgY2xpZW50IGNvbXBvbmVudCAodmlhIHRoZSBjbGllbnQgcG9ydCkgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIG1lZGlhIAorICogICBJbiB0aGUgZm9ybWVyIGNhc2UgdGhlIENsb2NrIENvbXBvbmVudCBmaWxscyB0aGlzIHN0cnVjdHVyZSBhbmQgdGltZXMgaXRzIGVtaXNzaW9uCisgKiAgIHRvIGEgY2xpZW50IGNvbXBvbmVudCAodmlhIHRoZSBjbGllbnQgcG9ydCkgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIG1lZGlhCiAgKiAgIHRpbWUgcmVxdWVzdCBzZW50IGJ5IHRoZSBjbGllbnQuIFRoZSBDbG9jayBDb21wb25lbnQgc2hvdWxkIHRpbWUgdGhlIGVtaXNzaW9uIHRvIG9jY3VyCi0gKiAgIHdoZW4gdGhlIHJlcXVlc3RlZCB0aW1lc3RhbXAgbWF0Y2hlcyB0aGUgQ2xvY2sgQ29tcG9uZW50J3MgbWVkaWEgdGltZSBidXQgYWxzbyB0aGUgCi0gKiAgIHByZXNjcmliZWQgb2Zmc2V0IGVhcmx5LiAKKyAqICAgd2hlbiB0aGUgcmVxdWVzdGVkIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBDbG9jayBDb21wb25lbnQncyBtZWRpYSB0aW1lIGJ1dCBhbHNvIHRoZQorICogICBwcmVzY3JpYmVkIG9mZnNldCBlYXJseS4KICAqCiAgKiAgIFVwb24gc2NhbGUgY2hhbmdlcyB0aGUgY2xvY2sgY29tcG9uZW50IGNsZWFycyB0aGUgbkNsaWVudFByaXZhdGUgZGF0YSwgc2VuZHMgdGhlIGN1cnJlbnQKLSAqICAgbWVkaWEgdGltZSBhbmQgc2V0cyB0aGUgblNjYWxlIHRvIHRoZSBuZXcgc2NhbGUgdmlhIHRoZSBjbGllbnQgcG9ydC4gSXQgZW1pdHMgYSAKLSAqICAgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB0byBhbGwgY2xpZW50cyBpbmRlcGVuZGVudCBvZiBhbnkgcmVxdWVzdHMuIFRoaXMgYWxsb3dzIGNsaWVudHMgdG8gCi0gKiAgIGFsdGVyIHByb2Nlc3NpbmcgdG8gYWNjb21vZGF0ZSBzY2FsaW5nLiBGb3IgaW5zdGFuY2UgYSB2aWRlbyBjb21wb25lbnQgbWlnaHQgc2tpcCBpbnRlci1mcmFtZXMgCi0gKiAgIGluIHRoZSBjYXNlIG9mIGV4dHJlbWUgZmFzdGZvcndhcmQuIExpa2V3aXNlIGFuIGF1ZGlvIGNvbXBvbmVudCBtaWdodCBhZGQgb3IgcmVtb3ZlIHNhbXBsZXMgCi0gKiAgIGZyb20gYW4gYXVkaW8gZnJhbWUgdG8gc2NhbGUgYXVkaW8gZGF0YS4gCisgKiAgIG1lZGlhIHRpbWUgYW5kIHNldHMgdGhlIG5TY2FsZSB0byB0aGUgbmV3IHNjYWxlIHZpYSB0aGUgY2xpZW50IHBvcnQuIEl0IGVtaXRzIGEKKyAqICAgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB0byBhbGwgY2xpZW50cyBpbmRlcGVuZGVudCBvZiBhbnkgcmVxdWVzdHMuIFRoaXMgYWxsb3dzIGNsaWVudHMgdG8KKyAqICAgYWx0ZXIgcHJvY2Vzc2luZyB0byBhY2NvbW9kYXRlIHNjYWxpbmcuIEZvciBpbnN0YW5jZSBhIHZpZGVvIGNvbXBvbmVudCBtaWdodCBza2lwIGludGVyLWZyYW1lcworICogICBpbiB0aGUgY2FzZSBvZiBleHRyZW1lIGZhc3Rmb3J3YXJkLiBMaWtld2lzZSBhbiBhdWRpbyBjb21wb25lbnQgbWlnaHQgYWRkIG9yIHJlbW92ZSBzYW1wbGVzCisgKiAgIGZyb20gYW4gYXVkaW8gZnJhbWUgdG8gc2NhbGUgYXVkaW8gZGF0YS4KICAqCiAgKiAgIEl0IGlzIGV4cGVjdGVkIHRoYXQgc29tZSBjbG9jayBjb21wb25lbnRzIG1heSBub3QgYmUgYWJsZSB0byBmdWxmaWxsIHJlcXVlc3RzCi0gKiAgIGF0IGV4YWN0bHkgdGhlIHByZXNjcmliZWQgdGltZS4gVGhpcyBpcyBhY2NlcHRhYmxlIHNvIGxvbmcgYXMgdGhlIHJlcXVlc3QgaXMgCi0gKiAgIGZ1bGZpbGxlZCBhdCBsZWFzdCBhcyBlYXJseSBhcyBkZXNjcmliZWQgYW5kIG5vdCBsYXRlci4gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgCisgKiAgIGF0IGV4YWN0bHkgdGhlIHByZXNjcmliZWQgdGltZS4gVGhpcyBpcyBhY2NlcHRhYmxlIHNvIGxvbmcgYXMgdGhlIHJlcXVlc3QgaXMKKyAqICAgZnVsZmlsbGVkIGF0IGxlYXN0IGFzIGVhcmx5IGFzIGRlc2NyaWJlZCBhbmQgbm90IGxhdGVyLiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcwogICogICBmaWVsZHMgdGhlIGNsaWVudCBtYXkgdXNlIHRvIHdhaXQgZm9yIHRoZSByZW1haW5pbmcgdGltZS4KICAqCi0gKiAgIFRoZSBjbGllbnQgbWF5IHVzZSBlaXRoZXIgdGhlIG5PZmZzZXQgb3IgbldhbGxUaW1lQXRNZWRpYSBmaWVsZHMgdG8gZGV0ZXJtaW5lIHRoZSAKKyAqICAgVGhlIGNsaWVudCBtYXkgdXNlIGVpdGhlciB0aGUgbk9mZnNldCBvciBuV2FsbFRpbWVBdE1lZGlhIGZpZWxkcyB0byBkZXRlcm1pbmUgdGhlCiAgKiAgIHdhbGwgdGltZSB1bnRpbCB0aGUgbk1lZGlhVGltZXN0YW1wIGFjdHVhbGx5IG9jY3Vycy4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZQogICogICBjbGllbnQgY2FuIGdldCBhIG1vcmUgYWNjdXJhdGUgdmFsdWUgZm9yIG9mZnNldCBieSBnZXR0aW5nIHRoZSBjdXJyZW50IHdhbGwKLSAqICAgZnJvbSB0aGUgY2xvYyBjb21wb25lbnQgYW5kIHN1YnRyYWN0aW5nIGl0IGZyb20gbldhbGxUaW1lQXRNZWRpYS4gCisgKiAgIGZyb20gdGhlIGNsb2MgY29tcG9uZW50IGFuZCBzdWJ0cmFjdGluZyBpdCBmcm9tIG5XYWxsVGltZUF0TWVkaWEuCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0gICAgT01YX1UzMiBuQ2xpZW50UHJpdmF0ZTsgICAgICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBmcm9tIG90aGVycy4gQ29waWVkIGZyb20gdGhlIG1lZGlhIHRpbWUgcmVxdWVzdC4gCisgICAgT01YX1UzMiBuQ2xpZW50UHJpdmF0ZTsgICAgICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGZyb20gb3RoZXJzLiBDb3BpZWQgZnJvbSB0aGUgbWVkaWEgdGltZSByZXF1ZXN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBBIHZhbHVlIG9mIHplcm8gaXMgcmVzZXJ2ZWQgZm9yIHRpbWUgc2NhbGUgdXBkYXRlcy4gKi8KICAgICBPTVhfVElNRV9VUERBVEVUWVBFIGVVcGRhdGVUeXBlOyAvKio8IFJlYXNvbiBmb3IgdGhlIHVwZGF0ZSAqLwotICAgIE9NWF9USUNLUyBuTWVkaWFUaW1lc3RhbXA7ICAgICAgLyoqPCBNZWRpYSB0aW1lIHJlcXVlc3RlZC4gSWYgbm8gbWVkaWEgdGltZSB3YXMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3RlZCB0aGVuIHRoaXMgaXMgdGhlIGN1cnJlbnQgbWVkaWEgdGltZS4gKi8gCisgICAgT01YX1RJQ0tTIG5NZWRpYVRpbWVzdGFtcDsgICAgICAvKio8IE1lZGlhIHRpbWUgcmVxdWVzdGVkLiBJZiBubyBtZWRpYSB0aW1lIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICByZXF1ZXN0ZWQgdGhlbiB0aGlzIGlzIHRoZSBjdXJyZW50IG1lZGlhIHRpbWUuICovCiAgICAgT01YX1RJQ0tTIG5PZmZzZXQ7ICAgICAgICAgICAgICAvKio8IEFtb3VudCBvZiB3YWxsIGNsb2NrIHRpbWUgYnkgd2hpY2ggdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICByZXF1ZXN0IHdhcyBhY3R1YWxseSBmdWxmaWxsZWQgZWFybHkgKi8KIApAQCAtMjUwLDIxICsyNTAsMjEgQEAKICAgICBPTVhfUzMyIHhTY2FsZTsgICAgICAgICAgICAgICAgIC8qKjwgQ3VycmVudCBtZWRpYSB0aW1lIHNjYWxlIGluIFExNiBmb3JtYXQuICovCiAgICAgT01YX1RJTUVfQ0xPQ0tTVEFURSBlU3RhdGU7ICAgICAvKiBTZWVraW5nIENoYW5nZS4gQWRkZWQgNy8xMi4qLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTdGF0ZSBvZiB0aGUgbWVkaWEgdGltZS4gKi8KLX0gT01YX1RJTUVfTUVESUFUSU1FVFlQRTsgIAorfSBPTVhfVElNRV9NRURJQVRJTUVUWVBFOwogCi0vKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtZWRpYSB0aW1lIHNjYWxlIGZhY3Rvci4gQXBwbGljYWJsZSBvbmx5IHRvIGNsb2NrIAorLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbWVkaWEgdGltZSBzY2FsZSBmYWN0b3IuIEFwcGxpY2FibGUgb25seSB0byBjbG9jawogICogIGNvbXBvbmVudCwgb3RoZXIgY29tcG9uZW50cyBzZWUgc2NhbGUgY2hhbmdlcyB2aWEgT01YX1RJTUVfTUVESUFUSU1FVFlQRSBidWZmZXJzIHNlbnQgdmlhCi0gKiAgdGhlIGNsb2NrIGNvbXBvbmVudCBjbGllbnQgcG9ydHMuIFVwb24gcmVjaWV2aW5nIHRoaXMgY29uZmlnIHRoZSBjbG9jayBjb21wb25lbnQgY2hhbmdlcyAKLSAqICB0aGUgcmF0ZSBieSB3aGljaCB0aGUgbWVkaWEgdGltZSBpbmNyZWFzZXMgb3IgZGVjcmVhc2VzIGVmZmVjdGl2ZWx5IGltcGxlbWVudGluZyB0cmljayBtb2Rlcy4gCi0gKi8gCisgKiAgdGhlIGNsb2NrIGNvbXBvbmVudCBjbGllbnQgcG9ydHMuIFVwb24gcmVjaWV2aW5nIHRoaXMgY29uZmlnIHRoZSBjbG9jayBjb21wb25lbnQgY2hhbmdlcworICogIHRoZSByYXRlIGJ5IHdoaWNoIHRoZSBtZWRpYSB0aW1lIGluY3JlYXNlcyBvciBkZWNyZWFzZXMgZWZmZWN0aXZlbHkgaW1wbGVtZW50aW5nIHRyaWNrIG1vZGVzLgorICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfU0NBTEVUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgICBPTVhfUzMyIHhTY2FsZTsgICAgICAgICAgICAgICAgIC8qKjwgVGhpcyBpcyBhIHZhbHVlIGluIFExNiBmb3JtYXQgd2hpY2ggaXMgdXNlZCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNjYWxpbmcgdGhlIG1lZGlhIHRpbWUgKi8KIH0gT01YX1RJTUVfQ09ORklHX1NDQUxFVFlQRTsKLSAKLS8qKiBCaXRzIHVzZWQgdG8gaWRlbnRpZnkgYSBjbG9jayBwb3J0LiBVc2VkIGluIE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRZJzIG5XYWl0TWFzayBmaWVsZCAqLworCisvKiogQml0cyB1c2VkIHRvIGlkZW50aWZ5IGEgY2xvY2sgcG9ydC4gVXNlZCBpbiBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEUncyBuV2FpdE1hc2sgZmllbGQgKi8KICNkZWZpbmUgT01YX0NMT0NLUE9SVDAgMHgwMDAwMDAwMQogI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMSAweDAwMDAwMDAyCiAjZGVmaW5lIE9NWF9DTE9DS1BPUlQyIDB4MDAwMDAwMDQKQEAgLTI3NCwzOCArMjc0LDM4IEBACiAjZGVmaW5lIE9NWF9DTE9DS1BPUlQ2IDB4MDAwMDAwNDAKICNkZWZpbmUgT01YX0NMT0NLUE9SVDcgMHgwMDAwMDA4MAogCi0vKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHRoZSBtZWRpYSBjbG9jay4gCi0gKiAgSUwgQ2xpZW50IHVzZXMgdGhpcyBjb25maWcgdG8gY2hhbmdlIG9yIHF1ZXJ5IHRoZSBtb2RlIG9mIHRoZSAKKy8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IG1vZGUgb2YgdGhlIG1lZGlhIGNsb2NrLgorICogIElMIENsaWVudCB1c2VzIHRoaXMgY29uZmlnIHRvIGNoYW5nZSBvciBxdWVyeSB0aGUgbW9kZSBvZiB0aGUKICAqICBtZWRpYSBjbG9jayBvZiB0aGUgY2xvY2sgY29tcG9uZW50LiBBcHBsaWNhYmxlIG9ubHkgdG8gY2xvY2sKLSAqICBjb21wb25lbnQuIAotICogIAorICogIGNvbXBvbmVudC4KKyAqCiAgKiAgT24gYSBTZXRDb25maWcgaWYgZVN0YXRlIGlzIE9NWF9USU1FX0Nsb2NrU3RhdGVSdW5uaW5nIG1lZGlhIHRpbWUKICAqICBzdGFydHMgaW1tZWRpYXRlbHkgYXQgdGhlIHByZXNjcmliZWQgc3RhcnQgdGltZS4gSWYKICAqICBPTVhfVElNRV9DbG9ja1N0YXRlV2FpdGluZ0ZvclN0YXJ0VGltZSB0aGUgQ2xvY2sgQ29tcG9uZW50IGlnbm9yZXMKLSAqICB0aGUgZ2l2ZW4gblN0YXJ0VGltZSBhbmQgd2FpdHMgZm9yIGFsbCBjbGllbnRzIHNwZWNpZmllZCBpbiB0aGUgCi0gKiAgbldhaXRNYXNrIHRvIHNlbmQgc3RhcnR0aW1lcyAodmlhIAotICogIE9NWF9JbmRleENvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWUpLiBUaGUgQ2xvY2sgQ29tcG9uZW50IHRoZW4gc3RhcnRzIAotICogIHRoZSBtZWRpYSBjbG9jayB1c2luZyB0aGUgZWFybGllc3Qgc3RhcnQgdGltZSBzdXBwbGllZC4gKi8gICAgCisgKiAgdGhlIGdpdmVuIG5TdGFydFRpbWUgYW5kIHdhaXRzIGZvciBhbGwgY2xpZW50cyBzcGVjaWZpZWQgaW4gdGhlCisgKiAgbldhaXRNYXNrIHRvIHNlbmQgc3RhcnR0aW1lcyAodmlhCisgKiAgT01YX0luZGV4Q29uZmlnVGltZUNsaWVudFN0YXJ0VGltZSkuIFRoZSBDbG9jayBDb21wb25lbnQgdGhlbiBzdGFydHMKKyAqICB0aGUgbWVkaWEgY2xvY2sgdXNpbmcgdGhlIGVhcmxpZXN0IHN0YXJ0IHRpbWUgc3VwcGxpZWQuICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEUgewogICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gCisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGluZm9ybWF0aW9uICovCiAgICAgT01YX1RJTUVfQ0xPQ0tTVEFURSBlU3RhdGU7IC8qKjwgU3RhdGUgb2YgdGhlIG1lZGlhIHRpbWUuICovCiAgICAgT01YX1RJQ0tTIG5TdGFydFRpbWU7ICAgICAgIC8qKjwgU3RhcnQgdGltZSBvZiB0aGUgbWVkaWEgdGltZS4gKi8KLSAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgLyoqPCBUaW1lIHRvIG9mZnNldCB0aGUgbWVkaWEgdGltZSBieSAKKyAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgLyoqPCBUaW1lIHRvIG9mZnNldCB0aGUgbWVkaWEgdGltZSBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoZS5nLiBwcmVyb2xsKS4gTWVkaWEgdGltZSB3aWxsIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlcG9ydGVkIHRvIGJlIG5PZmZzZXQgdGlja3MgZWFybGllci4gICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXBvcnRlZCB0byBiZSBuT2Zmc2V0IHRpY2tzIGVhcmxpZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIE9NWF9VMzIgbldhaXRNYXNrOyAgICAgICAgICAvKio8IE1hc2sgb2YgT01YX0NMT0NLUE9SVCB2YWx1ZXMuICovCiB9IE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRTsKIAogLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHJlZmVyZW5jZSBjbG9jayBjdXJyZW50bHkgYmVpbmcgdXNlZCB0bwotICogIGNvbXB1dGUgbWVkaWEgdGltZS4gSUwgY2xpZW50IHVzZXMgdGhpcyBjb25maWcgdG8gY2hhbmdlIG9yIHF1ZXJ5IHRoZSAKKyAqICBjb21wdXRlIG1lZGlhIHRpbWUuIElMIGNsaWVudCB1c2VzIHRoaXMgY29uZmlnIHRvIGNoYW5nZSBvciBxdWVyeSB0aGUKICAqICBjbG9jayBjb21wb25lbnQncyBhY3RpdmUgcmVmZXJlbmNlIGNsb2NrICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfQUNUSVZFUkVGQ0xPQ0tUWVBFIHsKICAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSAgICBPTVhfVElNRV9SRUZDTE9DS1RZUEUgZUNsb2NrOyAgIC8qKjwgUmVmZXJlbmNlIGNsb2NrIHVzZWQgdG8gY29tcHV0ZSBtZWRpYSB0aW1lICovICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgT01YX1RJTUVfUkVGQ0xPQ0tUWVBFIGVDbG9jazsgICAvKio8IFJlZmVyZW5jZSBjbG9jayB1c2VkIHRvIGNvbXB1dGUgbWVkaWEgdGltZSAqLwogfSBPTVhfVElNRV9DT05GSUdfQUNUSVZFUkVGQ0xPQ0tUWVBFOwogCiAvKiogRGVzY3JpcHRvciBmb3Igc2V0dGluZyBzcGVjaWZpY3Mgb2YgcG93ZXIgdHlwZS4KQEAgLTMyNyw4ICszMjcsOCBAQAogCiAKIC8qKgotICogVGhlIFBvcnREZWZpbml0aW9uIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlZmluZSBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgCi0gKiBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dCBvdGhlciAKKyAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzCisgKiBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dCBvdGhlcgogICogcGF0aC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX1BPUlRERUZJTklUSU9OVFlQRSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7IC8qKjwgSW5kaWNhdGVzIHdoaWNoIHBvcnQgdG8gc2V0ICovCiAgICAgT01YX1UzMiBuSW5kZXg7IC8qKjwgSW5kaWNhdGVzIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGZvcm1hdCBmcm9tIDB4MCB0byBOLTEgKi8KICAgICBPTVhfT1RIRVJfRk9STUFUVFlQRSBlRm9ybWF0OyAvKio8IFR5cGUgb2YgZGF0YSBleHBlY3RlZCBmb3IgdGhpcyBjaGFubmVsICovCi19IE9NWF9PVEhFUl9QQVJBTV9QT1JURk9STUFUVFlQRTsgCit9IE9NWF9PVEhFUl9QQVJBTV9QT1JURk9STUFUVFlQRTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1R5cGVzLmggYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1R5cGVzLmgKaW5kZXggNzFlMzQ2YS4uNWFmYWJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9UeXBlcy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfVHlwZXMuaApAQCAtMTYsMzIgKzE2LDMyIEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLiAKLSAqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QKLSAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAotICogCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgogICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQotICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIAorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKgogICovCiAKIC8qKiBPTVhfVHlwZXMuaCAtIE9wZW5NYXggSUwgdmVyc2lvbiAxLjEuMgotICogIFRoZSBPTVhfVHlwZXMgaGVhZGVyIGZpbGUgY29udGFpbnMgdGhlIHByaW1pdGl2ZSB0eXBlIGRlZmluaXRpb25zIHVzZWQgYnkgCisgKiAgVGhlIE9NWF9UeXBlcyBoZWFkZXIgZmlsZSBjb250YWlucyB0aGUgcHJpbWl0aXZlIHR5cGUgZGVmaW5pdGlvbnMgdXNlZCBieQogICogIHRoZSBjb3JlLCB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBjb21wb25lbnQuICBUaGlzIGZpbGUgbWF5IG5lZWQgdG8gYmUKLSAqICBtb2RpZmllZCB0byBiZSB1c2VkIG9uIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSAiY2hhciIgc2V0IHRvIDggYml0cywgCisgKiAgbW9kaWZpZWQgdG8gYmUgdXNlZCBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgImNoYXIiIHNldCB0byA4IGJpdHMsCiAgKiAgInNob3J0IiBzZXQgdG8gMTYgYml0cyBhbmQgImxvbmciIHNldCB0byAzMiBiaXRzLgogICovCiAKQEAgLTU3LDEyICs1NywxMiBAQAogLyoqIFRoZSBPTVhfQVBJIGFuZCBPTVhfQVBJRU5UUlkgYXJlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zIHVzZWQKICAqICB0byBkZWNsYXJlIE9NWCBmdW5jdGlvbiBwcm90b3R5cGVzLiAgVGhleSBhcmUgbW9kaWZpZWQgdG8gbWVldCB0aGUKICAqICByZXF1aXJlbWVudHMgZm9yIGEgcGFydGljdWxhciBwbGF0Zm9ybSAqLwotI2lmZGVmIF9fU1lNQklBTjMyX18gICAKKyNpZmRlZiBfX1NZTUJJQU4zMl9fCiAjICAgaWZkZWYgX19PTVhfRVhQT1JUUwogIyAgICAgICBkZWZpbmUgT01YX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKICMgICBlbHNlCiAjICAgICAgIGlmZGVmIF9XSU4zMgotIyAgICAgICAgICAgZGVmaW5lIE9NWF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpIAorIyAgICAgICAgICAgZGVmaW5lIE9NWF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCiAjICAgICAgIGVsc2UKICMgICAgICAgICAgIGRlZmluZSBPTVhfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQogIyAgICAgICBlbmRpZgpAQCAtODUsMTggKzg1LDE4IEBACiAjZW5kaWYKIAogI2lmbmRlZiBPTVhfQVBJRU5UUlkKLSNkZWZpbmUgT01YX0FQSUVOVFJZIAotI2VuZGlmIAorI2RlZmluZSBPTVhfQVBJRU5UUlkKKyNlbmRpZgogCi0vKiogT01YX0lOIGlzIHVzZWQgdG8gaWRlbnRpZnkgaW5wdXRzIHRvIGFuIE9NWCBmdW5jdGlvbi4gIFRoaXMgZGVzaWduYXRpb24gCi0gICAgd2lsbCBhbHNvIGJlIHVzZWQgaW4gdGhlIGNhc2Ugb2YgYSBwb2ludGVyIHRoYXQgcG9pbnRzIHRvIGEgcGFyYW1ldGVyIAorLyoqIE9NWF9JTiBpcyB1c2VkIHRvIGlkZW50aWZ5IGlucHV0cyB0byBhbiBPTVggZnVuY3Rpb24uICBUaGlzIGRlc2lnbmF0aW9uCisgICAgd2lsbCBhbHNvIGJlIHVzZWQgaW4gdGhlIGNhc2Ugb2YgYSBwb2ludGVyIHRoYXQgcG9pbnRzIHRvIGEgcGFyYW1ldGVyCiAgICAgdGhhdCBpcyB1c2VkIGFzIGFuIG91dHB1dC4gKi8KICNpZm5kZWYgT01YX0lOCiAjZGVmaW5lIE9NWF9JTgogI2VuZGlmCiAKLS8qKiBPTVhfT1VUIGlzIHVzZWQgdG8gaWRlbnRpZnkgb3V0cHV0cyBmcm9tIGFuIE9NWCBmdW5jdGlvbi4gIFRoaXMgCi0gICAgZGVzaWduYXRpb24gd2lsbCBhbHNvIGJlIHVzZWQgaW4gdGhlIGNhc2Ugb2YgYSBwb2ludGVyIHRoYXQgcG9pbnRzIAorLyoqIE9NWF9PVVQgaXMgdXNlZCB0byBpZGVudGlmeSBvdXRwdXRzIGZyb20gYW4gT01YIGZ1bmN0aW9uLiAgVGhpcworICAgIGRlc2lnbmF0aW9uIHdpbGwgYWxzbyBiZSB1c2VkIGluIHRoZSBjYXNlIG9mIGEgcG9pbnRlciB0aGF0IHBvaW50cwogICAgIHRvIGEgcGFyYW1ldGVyIHRoYXQgaXMgdXNlZCBhcyBhbiBpbnB1dC4gKi8KICNpZm5kZWYgT01YX09VVAogI2RlZmluZSBPTVhfT1VUCkBAIC0xMDQsOCArMTA0LDggQEAKIAogCiAvKiogT01YX0lOT1VUIGlzIHVzZWQgdG8gaWRlbnRpZnkgcGFyYW1ldGVycyB0aGF0IG1heSBiZSBlaXRoZXIgaW5wdXRzIG9yCi0gICAgb3V0cHV0cyBmcm9tIGFuIE9NWCBmdW5jdGlvbiBhdCB0aGUgc2FtZSB0aW1lLiAgVGhpcyBkZXNpZ25hdGlvbiB3aWxsIAotICAgIGFsc28gYmUgdXNlZCBpbiB0aGUgY2FzZSBvZiBhIHBvaW50ZXIgdGhhdCAgcG9pbnRzIHRvIGEgcGFyYW1ldGVyIHRoYXQgCisgICAgb3V0cHV0cyBmcm9tIGFuIE9NWCBmdW5jdGlvbiBhdCB0aGUgc2FtZSB0aW1lLiAgVGhpcyBkZXNpZ25hdGlvbiB3aWxsCisgICAgYWxzbyBiZSB1c2VkIGluIHRoZSBjYXNlIG9mIGEgcG9pbnRlciB0aGF0ICBwb2ludHMgdG8gYSBwYXJhbWV0ZXIgdGhhdAogICAgIGlzIHVzZWQgYm90aCBhcyBhbiBpbnB1dCBhbmQgYW4gb3V0cHV0LiAqLwogI2lmbmRlZiBPTVhfSU5PVVQKICNkZWZpbmUgT01YX0lOT1VUCkBAIC0xMjMsMzEgKzEyMywzMSBAQAogLyoqIEBkZWZncm91cCBjb3JlIE9wZW5NQVggSUwgY29yZQogICogRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgT01YIElMIGNvcmUKICAqLwotIAorCiAgLyoqIEBkZWZncm91cCBjb21wIE9wZW5NQVggSUwgY29tcG9uZW50CiAgKiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZSByZWxhdGVkIHRvIHRoZSBPTVggSUwgY29tcG9uZW50CiAgKi8KLSAKLS8qKiBAZGVmZ3JvdXAgcnBtIFJlc291cmNlIGFuZCBQb2xpY3kgTWFuYWdlbWVudCAKKworLyoqIEBkZWZncm91cCBycG0gUmVzb3VyY2UgYW5kIFBvbGljeSBNYW5hZ2VtZW50CiAgKiBTdHJ1Y3R1cmVzIGZvciByZXNvdXJjZSBhbmQgcG9saWN5IG1hbmFnZW1lbnQgb2YgY29tcG9uZW50cwogICovCiAKIC8qKiBAZGVmZ3JvdXAgYnVmIEJ1ZmZlciBNYW5hZ2VtZW50CiAgKiBCdWZmZXIgaGFuZGxpbmcgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzCiAgKi8KLSAgCisKIC8qKiBAZGVmZ3JvdXAgdHVuIFR1bm5lbGluZwogICogQGluZ3JvdXAgY29yZSBjb21wCiAgKiBTdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdG8gbWFuYWdlIHR1bm5lbHMgYW1vbmcgY29tcG9uZW50IHBvcnRzCiAgKi8KLSAKKwogLyoqIEBkZWZncm91cCBjcCBDb250ZW50IFBpcGVzCiAgKiAgQGluZ3JvdXAgY29yZQogICovCi0gCisKICAvKiogQGRlZmdyb3VwIG1ldGFkYXRhIE1ldGFkYXRhIGhhbmRsaW5nCi0gICogCi0gICovIAorICAqCisgICovCiAKIC8qKiBPTVhfVTggaXMgYW4gOCBiaXQgdW5zaWduZWQgcXVhbnRpdHkgdGhhdCBpcyBieXRlIGFsaWduZWQgKi8KIHR5cGVkZWYgdW5zaWduZWQgY2hhciBPTVhfVTg7CkBAIC0xNjksNyArMTY5LDcgQEAKIAogCiAvKiBVc2VycyB3aXRoIGNvbXBpbGVycyB0aGF0IGNhbm5vdCBhY2NlcHQgdGhlICJsb25nIGxvbmciIGRlc2lnbmF0aW9uIHNob3VsZAotICAgZGVmaW5lIHRoZSBPTVhfU0tJUDY0QklUIG1hY3JvLiAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhpcyBtYXkgY2F1c2UgCisgICBkZWZpbmUgdGhlIE9NWF9TS0lQNjRCSVQgbWFjcm8uICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGlzIG1heSBjYXVzZQogICAgc29tZSBjb21wb25lbnRzIHRvIGZhaWwgdG8gY29tcGlsZSBpZiB0aGUgY29tcG9uZW50IHdhcyB3cml0dGVuIHRvIHJlcXVpcmUKICAgIDY0IGJpdCBpbnRlZ3JhbCB0eXBlcy4gIEhvd2V2ZXIsIHRoZXNlIGNvbXBvbmVudHMgd291bGQgTk9UIGNvbXBpbGUgYW55d2F5CiAgICBzaW5jZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgd2F5IHRoZSBjb21wb25lbnQgd2FzIHdyaXR0ZW4uCkBAIC0xODQsNyArMTg0LDcgQEAKIAogI2VsaWYgZGVmaW5lZChXSU4zMikKIAotLyoqIE9NWF9VNjQgaXMgYSA2NCBiaXQgdW5zaWduZWQgcXVhbnRpdHkgdGhhdCBpcyA2NCBiaXQgd29yZCBhbGlnbmVkICovICAgCisvKiogT01YX1U2NCBpcyBhIDY0IGJpdCB1bnNpZ25lZCBxdWFudGl0eSB0aGF0IGlzIDY0IGJpdCB3b3JkIGFsaWduZWQgKi8KIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgT01YX1U2NDsKIAogLyoqIE9NWF9TNjQgaXMgYSA2NCBiaXQgc2lnbmVkIHF1YW50aXR5IHRoYXQgaXMgNjQgYml0IHdvcmQgYWxpZ25lZCAqLwpAQCAtMjAyLDcgKzIwMiw3IEBACiAjZW5kaWYKIAogCi0vKiogVGhlIE9NWF9CT09MIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgYSB0cnVlIG9yIGEgZmFsc2UgCisvKiogVGhlIE9NWF9CT09MIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgYSB0cnVlIG9yIGEgZmFsc2UKICAgICB2YWx1ZSB3aGVuIHBhc3NpbmcgcGFyYW1ldGVycyB0byBhbmQgZnJvbSB0aGUgT01YIGNvcmUgYW5kIGNvbXBvbmVudHMuICBUaGUKICAgICBPTVhfQk9PTCBpcyBhIDMyIGJpdCBxdWFudGl0eSBhbmQgaXMgYWxpZ25lZCBvbiBhIDMyIGJpdCB3b3JkIGJvdW5kYXJ5LgogICovCkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICBPTVhfRkFMU0UgPSAwLAogICAgIE9NWF9UUlVFID0gIU9NWF9GQUxTRSwKICAgICBPTVhfQk9PTF9NQVggPSAweDdGRkZGRkZGCi19IE9NWF9CT09MOyAKK30gT01YX0JPT0w7CiAKIC8qCiAgKiBUZW1wb3JhcnkgQW5kcm9pZCA2NCBiaXQgbW9kaWZpY2F0aW9uCkBAIC0yMzcsMTQgKzIzNywxNCBAQAogdHlwZWRlZiB2b2lkKiBPTVhfUFRSOwogCiAvKiogVGhlIE9NWF9TVFJJTkcgdHlwZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHBhc3MgIkMiIHR5cGUgc3RyaW5ncyBiZXR3ZWVuCi0gICAgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgY29yZSBhbmQgY29tcG9uZW50LiAgVGhlIE9NWF9TVFJJTkcgdHlwZSBpcyBhIDMyIAotICAgIGJpdCBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4gIFRoZSAgcG9pbnRlciBpcyB3b3JkIGFsaWduZWQgYW5kIAotICAgIHRoZSBzdHJpbmcgaXMgYnl0ZSBhbGlnbmVkLiAgCisgICAgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgY29yZSBhbmQgY29tcG9uZW50LiAgVGhlIE9NWF9TVFJJTkcgdHlwZSBpcyBhIDMyCisgICAgYml0IHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiAgVGhlICBwb2ludGVyIGlzIHdvcmQgYWxpZ25lZCBhbmQKKyAgICB0aGUgc3RyaW5nIGlzIGJ5dGUgYWxpZ25lZC4KICAqLwogdHlwZWRlZiBjaGFyKiBPTVhfU1RSSU5HOwogCiAvKiogVGhlIE9NWF9CWVRFIHR5cGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBwYXNzIGFycmF5cyBvZiBieXRlcyBzdWNoIGFzCi0gICAgYnVmZmVycyBiZXR3ZWVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIGNvbXBvbmVudCBhbmQgY29yZS4gIFRoZSBPTVhfQllURSAKKyAgICBidWZmZXJzIGJldHdlZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgY29tcG9uZW50IGFuZCBjb3JlLiAgVGhlIE9NWF9CWVRFCiAgICAgdHlwZSBpcyBhIDMyIGJpdCBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZy4gIFRoZSAgcG9pbnRlciBpcyB3b3JkCiAgICAgYWxpZ25lZCBhbmQgdGhlIHN0cmluZyBpcyBieXRlIGFsaWduZWQuCiAgKi8KQEAgLTI1OSw3ICsyNTksNyBAQAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIE9NWF9VVUlEVFlQRVsxMjhdOwogCiAvKiogVGhlIE9NWF9ESVJUWVBFIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgaWYgYSBwb3J0IGlzIGFuIGlucHV0IG9yCi0gICAgYW4gb3V0cHV0IHBvcnQuICBUaGlzIGVudW1lcmF0aW9uIGlzIGNvbW1vbiBhY3Jvc3MgYWxsIGNvbXBvbmVudCB0eXBlcy4gICAgCisgICAgYW4gb3V0cHV0IHBvcnQuICBUaGlzIGVudW1lcmF0aW9uIGlzIGNvbW1vbiBhY3Jvc3MgYWxsIGNvbXBvbmVudCB0eXBlcy4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9ESVJUWVBFCiB7CkBAIC0yNjgsOCArMjY4LDggQEAKICAgICBPTVhfRGlyTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfRElSVFlQRTsKIAotLyoqIFRoZSBPTVhfRU5ESUFOVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBiaXQgb3JkZXJpbmcgCi0gICAgZm9yIG51bWVyaWNhbCBkYXRhIChpLmUuIGJpZyBlbmRpYW4sIG9yIGxpdHRsZSBlbmRpYW4pLiAgICAKKy8qKiBUaGUgT01YX0VORElBTlRZUEUgZW51bWVyYXRpb24gaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgYml0IG9yZGVyaW5nCisgICAgZm9yIG51bWVyaWNhbCBkYXRhIChpLmUuIGJpZyBlbmRpYW4sIG9yIGxpdHRsZSBlbmRpYW4pLgogICovCiB0eXBlZGVmIGVudW0gT01YX0VORElBTlRZUEUKIHsKQEAgLTI3OSw3ICsyNzksNyBAQAogfSBPTVhfRU5ESUFOVFlQRTsKIAogCi0vKiogVGhlIE9NWF9OVU1FUklDQUxEQVRBVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIGlmIGRhdGEgCisvKiogVGhlIE9NWF9OVU1FUklDQUxEQVRBVFlQRSBlbnVtZXJhdGlvbiBpcyB1c2VkIHRvIGluZGljYXRlIGlmIGRhdGEKICAgICBpcyBzaWduZWQgb3IgdW5zaWduZWQKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9OVU1FUklDQUxEQVRBVFlQRQpAQCAtMzA3LDE2ICszMDcsMTYgQEAKIAogCiAvKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyBzb21lIHRpbWUgb3IgZHVyYXRpb24gaW4gbWljcm9zZWNvbmRzLiBUaGlzIHN0cnVjdHVyZQotICAqICBtdXN0IGJlIGludGVycHJldGVkIGFzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZS4gVGhlIHF1YW50aXR5IGlzIHNpZ25lZCB0byBhY2NvbW1vZGF0ZSAKLSAgKiAgbmVnYXRpdmUgZGVsdGFzIGFuZCBwcmVyb2xsIHNjZW5hcmlvcy4gVGhlIHF1YW50aXR5IGlzIHJlcHJlc2VudGVkIGluIG1pY3Jvc2Vjb25kcyAKKyAgKiAgbXVzdCBiZSBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuIFRoZSBxdWFudGl0eSBpcyBzaWduZWQgdG8gYWNjb21tb2RhdGUKKyAgKiAgbmVnYXRpdmUgZGVsdGFzIGFuZCBwcmVyb2xsIHNjZW5hcmlvcy4gVGhlIHF1YW50aXR5IGlzIHJlcHJlc2VudGVkIGluIG1pY3Jvc2Vjb25kcwogICAqICB0byBhY2NvbW9kYXRlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXBzIChlLmcuIERWRCBwcmVzZW50YXRpb24gdGltZXN0YW1wcyBiYXNlZAotICAqICBvbiBhIDkwa0h6IGNsb2NrKSBhbmQgdG8gYWxsb3cgbW9yZSBhY2N1cmF0ZSBhbmQgc3luY2hyb25pemVkIGRlbGl2ZXJ5IChlLmcuIAotICAqICBpbmRpdmlkdWFsIGF1ZGlvIHNhbXBsZXMgZGVsaXZlcmVkIGF0IDE5MiBrSHopLiBUaGUgcXVhbnRpdHkgaXMgNjQgYml0IHRvIAorICAqICBvbiBhIDkwa0h6IGNsb2NrKSBhbmQgdG8gYWxsb3cgbW9yZSBhY2N1cmF0ZSBhbmQgc3luY2hyb25pemVkIGRlbGl2ZXJ5IChlLmcuCisgICogIGluZGl2aWR1YWwgYXVkaW8gc2FtcGxlcyBkZWxpdmVyZWQgYXQgMTkyIGtIeikuIFRoZSBxdWFudGl0eSBpcyA2NCBiaXQgdG8KICAgKiAgYWNjb21tb2RhdGUgYSBsYXJnZSBkeW5hbWljIHJhbmdlIChzaWduZWQgMzIgYml0IHZhbHVlcyB3b3VsZCBhbGxvdyBvbmx5IGZvciBwbHVzCiAgICogIG9yIG1pbnVzIDM1IG1pbnV0ZXMpLgogICAqCi0gICogIEltcGxlbWVudGF0aW9ucyB3aXRoIGxpbWl0ZWQgcHJlY2lzaW9uIG1heSBjb252ZXJ0IHRoZSBzaWduZWQgNjQgYml0IHZhbHVlIHRvIAotICAqICBhIHNpZ25lZCAzMiBiaXQgdmFsdWUgaW50ZXJuYWxseSBidXQgcmlzayBsb3NzIG9mIHByZWNpc2lvbi4gIAorICAqICBJbXBsZW1lbnRhdGlvbnMgd2l0aCBsaW1pdGVkIHByZWNpc2lvbiBtYXkgY29udmVydCB0aGUgc2lnbmVkIDY0IGJpdCB2YWx1ZSB0bworICAqICBhIHNpZ25lZCAzMiBiaXQgdmFsdWUgaW50ZXJuYWxseSBidXQgcmlzayBsb3NzIG9mIHByZWNpc2lvbi4KICAgKi8KICNpZm5kZWYgT01YX1NLSVA2NEJJVAogdHlwZWRlZiBPTVhfUzY0IE9NWF9USUNLUzsKQEAgLTMzNiwxNyArMzM2LDE3IEBACiAKIHR5cGVkZWYgc3RydWN0IE9NWF9NQVJLVFlQRQogewotICAgIE9NWF9IQU5ETEVUWVBFIGhNYXJrVGFyZ2V0Q29tcG9uZW50OyAgIC8qKjwgVGhlIGNvbXBvbmVudCB0aGF0IHdpbGwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSBhIG1hcmsgZXZlbnQgdXBvbiAKKyAgICBPTVhfSEFORExFVFlQRSBoTWFya1RhcmdldENvbXBvbmVudDsgICAvKio8IFRoZSBjb21wb25lbnQgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSBhIG1hcmsgZXZlbnQgdXBvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyB0aGUgbWFyay4gKi8KLSAgICBPTVhfUFRSIHBNYXJrRGF0YTsgICAvKio8IEFwcGxpY2F0aW9uIHNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3aXRoIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hcmsgc2VudCBvbiBhIG1hcmsgZXZlbnQgdG8gZGlzYW1iaWd1YXRlIAorICAgIE9NWF9QVFIgcE1hcmtEYXRhOyAgIC8qKjwgQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXJrIHNlbnQgb24gYSBtYXJrIGV2ZW50IHRvIGRpc2FtYmlndWF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYXJrIGZyb20gb3RoZXJzLiAqLwogfSBPTVhfTUFSS1RZUEU7CiAKIAogLyoqIE9NWF9OQVRJVkVfREVWSUNFVFlQRSBpcyB1c2VkIHRvIG1hcCBhIE9NWCB2aWRlbyBwb3J0IHRvIHRoZQotICogIHBsYXRmb3JtICYgb3BlcmF0aW5nIHNwZWNpZmljIG9iamVjdCB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgZGlzcGxheSAKKyAqICBwbGF0Zm9ybSAmIG9wZXJhdGluZyBzcGVjaWZpYyBvYmplY3QgdXNlZCB0byByZWZlcmVuY2UgdGhlIGRpc3BsYXkKICAqICBvciBjYW4gYmUgdXNlZCBieSBhIGF1ZGlvIHBvcnQgZm9yIG5hdGl2ZSBhdWRpbyByZW5kZXJpbmcgKi8KIHR5cGVkZWYgT01YX1BUUiBPTVhfTkFUSVZFX0RFVklDRVRZUEU7CiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogLyoqIFRoZSBPTVhfVkVSU0lPTlRZUEUgdW5pb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSB2ZXJzaW9uIGZvcgogICAgIGEgc3RydWN0dXJlIG9yIGNvbXBvbmVudC4gIEZvciBhIGNvbXBvbmVudCwgdGhlIHZlcnNpb24gaXMgZW50aXJlbHkKICAgICBzcGVjaWZpZWQgYnkgdGhlIGNvbXBvbmVudCB2ZW5kb3IuICBDb21wb25lbnRzIGRvaW5nIHRoZSBzYW1lIGZ1bmN0aW9uCi0gICAgZnJvbSBkaWZmZXJlbnQgdmVuZG9ycyBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZSBzYW1lIHZlcnNpb24uICBGb3IgCisgICAgZnJvbSBkaWZmZXJlbnQgdmVuZG9ycyBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZSBzYW1lIHZlcnNpb24uICBGb3IKICAgICBzdHJ1Y3R1cmVzLCB0aGUgdmVyc2lvbiBzaGFsbCBiZSBzZXQgYnkgdGhlIGVudGl0eSB0aGF0IGFsbG9jYXRlcyB0aGUKICAgICBzdHJ1Y3R1cmUuICBGb3Igc3RydWN0dXJlcyBzcGVjaWZpZWQgaW4gdGhlIE9NWCAxLjEgc3BlY2lmaWNhdGlvbiwgdGhlCiAgICAgdmFsdWUgb2YgdGhlIHZlcnNpb24gc2hhbGwgYmUgc2V0IHRvIDEuMS4wLjAgaW4gYWxsIGNhc2VzLiAgQWNjZXNzIHRvIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9WaWRlby5oIGIvaW5jbHVkZS9tZWRpYS9vcGVubWF4L09NWF9WaWRlby5oCmluZGV4IDg5NDI1ZTAuLmRlY2M0MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Blbm1heC9PTVhfVmlkZW8uaAorKysgYi9pbmNsdWRlL21lZGlhL29wZW5tYXgvT01YX1ZpZGVvLmgKQEAgLTE2LDMxICsxNiwzMSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgS2hyb25vcyBHcm91cCBJbmMuIAotICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCiAgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAotICogdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAKKyAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0gKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4gCi0gKiAKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAgKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQogICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCi0gKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCiAgKi8KIAotLyoqIAorLyoqCiAgKiAgQGZpbGUgT01YX1ZpZGVvLmggLSBPcGVuTWF4IElMIHZlcnNpb24gMS4xLjIKLSAqICBUaGUgc3RydWN0dXJlcyBpcyBuZWVkZWQgYnkgVmlkZW8gY29tcG9uZW50cyB0byBleGNoYW5nZSBwYXJhbWV0ZXJzIAorICogIFRoZSBzdHJ1Y3R1cmVzIGlzIG5lZWRlZCBieSBWaWRlbyBjb21wb25lbnRzIHRvIGV4Y2hhbmdlIHBhcmFtZXRlcnMKICAqICBhbmQgY29uZmlndXJhdGlvbiBkYXRhIHdpdGggT01YIGNvbXBvbmVudHMuCiAgKi8KICNpZm5kZWYgT01YX1ZpZGVvX2gKQEAgLTYwLDE5ICs2MCwxOSBAQAogLyoqCiAgKiBFYWNoIE9NWCBoZWFkZXIgbXVzdCBpbmNsdWRlIGFsbCByZXF1aXJlZCBoZWFkZXIgZmlsZXMgdG8gYWxsb3cgdGhlCiAgKiBoZWFkZXIgdG8gY29tcGlsZSB3aXRob3V0IGVycm9ycy4gIFRoZSBpbmNsdWRlcyBiZWxvdyBhcmUgcmVxdWlyZWQKLSAqIGZvciB0aGlzIGhlYWRlciBmaWxlIHRvIGNvbXBpbGUgc3VjY2Vzc2Z1bGx5IAorICogZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkKICAqLwogCiAjaW5jbHVkZSA8T01YX0lWQ29tbW9uLmg+CiAKIAogLyoqCi0gKiBFbnVtZXJhdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgcG9zc2libGUgdmlkZW8gY29tcHJlc3Npb24gY29kaW5ncy4gIAotICogTk9URTogIFRoaXMgZXNzZW50aWFsbHkgcmVmZXJzIHRvIGZpbGUgZXh0ZW5zaW9ucy4gSWYgdGhlIGNvZGluZyBpcyAKLSAqICAgICAgICBiZWluZyB1c2VkIHRvIHNwZWNpZnkgdGhlIEVOQ09ERSB0eXBlLCB0aGVuIGFkZGl0aW9uYWwgd29yayAKLSAqICAgICAgICBtdXN0IGJlIGRvbmUgdG8gY29uZmlndXJlIHRoZSBleGFjdCBmbGF2b3Igb2YgdGhlIGNvbXByZXNzaW9uIAotICogICAgICAgIHRvIGJlIHVzZWQuICBGb3IgZGVjb2RlIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNhbiAKLSAqICAgICAgICBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIE1QRUctNCBhbmQgSC4yNjQgYml0IHN0cmVhbXMsIGl0IGlzIAorICogRW51bWVyYXRpb24gdXNlZCB0byBkZWZpbmUgdGhlIHBvc3NpYmxlIHZpZGVvIGNvbXByZXNzaW9uIGNvZGluZ3MuCisgKiBOT1RFOiAgVGhpcyBlc3NlbnRpYWxseSByZWZlcnMgdG8gZmlsZSBleHRlbnNpb25zLiBJZiB0aGUgY29kaW5nIGlzCisgKiAgICAgICAgYmVpbmcgdXNlZCB0byBzcGVjaWZ5IHRoZSBFTkNPREUgdHlwZSwgdGhlbiBhZGRpdGlvbmFsIHdvcmsKKyAqICAgICAgICBtdXN0IGJlIGRvbmUgdG8gY29uZmlndXJlIHRoZSBleGFjdCBmbGF2b3Igb2YgdGhlIGNvbXByZXNzaW9uCisgKiAgICAgICAgdG8gYmUgdXNlZC4gIEZvciBkZWNvZGUgY2FzZXMgd2hlcmUgdGhlIHVzZXIgYXBwbGljYXRpb24gY2FuCisgKiAgICAgICAgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBNUEVHLTQgYW5kIEguMjY0IGJpdCBzdHJlYW1zLCBpdCBpcwogICogICAgICAgIHVwIHRvIHRoZSBjb2RlYyB0byBoYW5kbGUgdGhpcy4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19DT0RJTkdUWVBFIHsKQEAgLTg4LDU4ICs4OCw1OCBAQAogICAgIE9NWF9WSURFT19Db2RpbmdWUDgsICAgICAgICAvKio8IEdvb2dsZSBWUDgsIGZvcm1lcmx5IGtub3duIGFzIE9uMiBWUDggKi8KICAgICBPTVhfVklERU9fQ29kaW5nVlA5LCAgICAgICAgLyoqPCBHb29nbGUgVlA5ICovCiAgICAgT01YX1ZJREVPX0NvZGluZ0hFVkMsICAgICAgIC8qKjwgSVRVIEguMjY1L0hFVkMgKi8KLSAgICBPTVhfVklERU9fQ29kaW5nS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19Db2RpbmdLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fQ29kaW5nVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fQ29kaW5nTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fQ09ESU5HVFlQRTsKIAogCiAvKioKLSAqIERhdGEgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGEgdmlkZW8gcGF0aC4gIFRoZSBudW1iZXIgb2YgVmlkZW8gcGF0aHMgZm9yIAotICogaW5wdXQgYW5kIG91dHB1dCB3aWxsIHZhcnkgYnkgdHlwZSBvZiB0aGUgVmlkZW8gY29tcG9uZW50LiAgCi0gKiAKKyAqIERhdGEgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGEgdmlkZW8gcGF0aC4gIFRoZSBudW1iZXIgb2YgVmlkZW8gcGF0aHMgZm9yCisgKiBpbnB1dCBhbmQgb3V0cHV0IHdpbGwgdmFyeSBieSB0eXBlIG9mIHRoZSBWaWRlbyBjb21wb25lbnQuCisgKgogICogICAgSW5wdXQgKGFrYSBTb3VyY2UpIDogemVybyBJbnB1dHMsIG9uZSBPdXRwdXQsCiAgKiAgICBTcGxpdHRlciAgICAgICAgICAgOiBvbmUgSW5wdXQsIDIgb3IgbW9yZSBPdXRwdXRzLAogICogICAgUHJvY2Vzc2luZyBFbGVtZW50IDogb25lIElucHV0LCBvbmUgb3V0cHV0LAogICogICAgTWl4ZXIgICAgICAgICAgICAgIDogMiBvciBtb3JlIGlucHV0cywgb25lIG91dHB1dCwKICAqICAgIE91dHB1dCAoYWthIFNpbmspICA6IG9uZSBJbnB1dCwgemVybyBvdXRwdXRzLgotICogCi0gKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKLSAqIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsaWFudCBjb21wb25lbnQgdG8gc2V0dXAgYW4gaW5wdXQgb3IgYW4gb3V0cHV0IHZpZGVvIAotICogcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZCBiZSAKLSAqIHRyYW5zbWl0dGVkIHRvIHRoZSBjb21wb25lbnQgdXNpbmcgdGhlIEN1c3RvbUNvbW1hbmQgZnVuY3Rpb24uICBDb21wbGlhbnQgCi0gKiBjb21wb25lbnRzIHdpbGwgcHJlcG9wdWxhdGUgdGhpcyBzdHJ1Y3R1cmUgd2l0aCBvcHRpbWFsIHZhbHVlcyBkdXJpbmcgdGhlIAorICoKKyAqIFRoZSBQb3J0RGVmaW5pdGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZWZpbmUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzCisgKiBuZWNlc3NhcnkgZm9yIHRoZSBjb21wbGlhbnQgY29tcG9uZW50IHRvIHNldHVwIGFuIGlucHV0IG9yIGFuIG91dHB1dCB2aWRlbworICogcGF0aC4gIElmIGFkZGl0aW9uYWwgdmVuZG9yIHNwZWNpZmljIGRhdGEgaXMgcmVxdWlyZWQsIGl0IHNob3VsZCBiZQorICogdHJhbnNtaXR0ZWQgdG8gdGhlIGNvbXBvbmVudCB1c2luZyB0aGUgQ3VzdG9tQ29tbWFuZCBmdW5jdGlvbi4gIENvbXBsaWFudAorICogY29tcG9uZW50cyB3aWxsIHByZXBvcHVsYXRlIHRoaXMgc3RydWN0dXJlIHdpdGggb3B0aW1hbCB2YWx1ZXMgZHVyaW5nIHRoZQogICogR2V0RGVmYXVsdEluaXRQYXJhbXMgY29tbWFuZC4KICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBjTUlNRVR5cGUgICAgICAgICAgICAgOiBNSU1FIHR5cGUgb2YgZGF0YSBmb3IgdGhlIHBvcnQKLSAqICBwTmF0aXZlUmVuZGVyICAgICAgICAgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgZGlzcGxheSBpZiBhIAorICogIHBOYXRpdmVSZW5kZXIgICAgICAgICA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSBkaXNwbGF5IGlmIGEKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jLCBvdGhlcndpc2UgdGhpcyBmaWVsZCBpcyAwCi0gKiAgbkZyYW1lV2lkdGggICAgICAgICAgIDogV2lkdGggb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBjaGFubmVsIGlmIAorICogIG5GcmFtZVdpZHRoICAgICAgICAgICA6IFdpZHRoIG9mIGZyYW1lIHRvIGJlIHVzZWQgb24gY2hhbm5lbCBpZgogICogICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZCBmb3JtYXQgaXMgdXNlZC4gIFVzZSAwIGZvciB1bmtub3duLAogICogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbid0IGNhcmUgb3IgdmFyaWFibGUKLSAqICBuRnJhbWVIZWlnaHQgICAgICAgICAgOiBIZWlnaHQgb2YgZnJhbWUgdG8gYmUgdXNlZCBvbiBjaGFubmVsIGlmIAorICogIG5GcmFtZUhlaWdodCAgICAgICAgICA6IEhlaWdodCBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciB1bmtub3duLAogICogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbid0IGNhcmUgb3IgdmFyaWFibGUKLSAqICBuU3RyaWRlICAgICAgICAgICAgICAgOiBOdW1iZXIgb2YgYnl0ZXMgcGVyIHNwYW4gb2YgYW4gaW1hZ2UgCisgKiAgblN0cmlkZSAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIGJ5dGVzIHBlciBzcGFuIG9mIGFuIGltYWdlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZ2V0CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBzcGFuIE4gdG8gc3BhbiBOKzEsIHdoZXJlIG5lZ2F0aXZlIHN0cmlkZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlcyB0aGUgaW1hZ2UgaXMgYm90dG9tIHVwCiAgKiAgblNsaWNlSGVpZ2h0ICAgICAgICAgIDogSGVpZ2h0IHVzZWQgd2hlbiBlbmNvZGluZyBpbiBzbGljZXMKLSAqICBuQml0cmF0ZSAgICAgICAgICAgICAgOiBCaXQgcmF0ZSBvZiBmcmFtZSB0byBiZSB1c2VkIG9uIGNoYW5uZWwgaWYgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NlZCBmb3JtYXQgaXMgdXNlZC4gVXNlIDAgZm9yIHVua25vd24sIAorICogIG5CaXRyYXRlICAgICAgICAgICAgICA6IEJpdCByYXRlIG9mIGZyYW1lIHRvIGJlIHVzZWQgb24gY2hhbm5lbCBpZgorICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzZWQgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciB1bmtub3duLAogICogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbid0IGNhcmUgb3IgdmFyaWFibGUKLSAqICB4RnJhbWVyYXRlICAgICAgICAgICAgOiBGcmFtZSByYXRlIHRvIGJlIHVzZWQgb24gY2hhbm5lbCBpZiB1bmNvbXByZXNzZWQgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGlzIHVzZWQuIFVzZSAwIGZvciB1bmtub3duLCBkb24ndCBjYXJlIG9yIAorICogIHhGcmFtZXJhdGUgICAgICAgICAgICA6IEZyYW1lIHJhdGUgdG8gYmUgdXNlZCBvbiBjaGFubmVsIGlmIHVuY29tcHJlc3NlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBpcyB1c2VkLiBVc2UgMCBmb3IgdW5rbm93biwgZG9uJ3QgY2FyZSBvcgogICogICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLiAgVW5pdHMgYXJlIFExNiBmcmFtZXMgcGVyIHNlY29uZC4KLSAqICBiRmxhZ0Vycm9yQ29uY2VhbG1lbnQgOiBUdXJucyBvbiBlcnJvciBjb25jZWFsbWVudCBpZiBpdCBpcyBzdXBwb3J0ZWQgYnkgCisgKiAgYkZsYWdFcnJvckNvbmNlYWxtZW50IDogVHVybnMgb24gZXJyb3IgY29uY2VhbG1lbnQgaWYgaXQgaXMgc3VwcG9ydGVkIGJ5CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9NWCBjb21wb25lbnQKLSAqICBlQ29tcHJlc3Npb25Gb3JtYXQgICAgOiBDb21wcmVzc2lvbiBmb3JtYXQgdXNlZCBpbiB0aGlzIGluc3RhbmNlIG9mIHRoZSAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuIFdoZW4gT01YX1ZJREVPX0NvZGluZ1VudXNlZCBpcyAKKyAqICBlQ29tcHJlc3Npb25Gb3JtYXQgICAgOiBDb21wcmVzc2lvbiBmb3JtYXQgdXNlZCBpbiB0aGlzIGluc3RhbmNlIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4gV2hlbiBPTVhfVklERU9fQ29kaW5nVW51c2VkIGlzCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBlQ29sb3JGb3JtYXQgaXMgdXNlZAogICogIGVDb2xvckZvcm1hdCA6IERlY29tcHJlc3NlZCBmb3JtYXQgdXNlZCBieSB0aGlzIGNvbXBvbmVudAotICogIHBOYXRpdmVXaW5kb3cgOiBQbGF0Zm9ybSBzcGVjaWZpYyByZWZlcmVuY2UgZm9yIGEgd2luZG93IG9iamVjdCBpZiBhIAotICogICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgc2luayAsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIDB4MC4gCisgKiAgcE5hdGl2ZVdpbmRvdyA6IFBsYXRmb3JtIHNwZWNpZmljIHJlZmVyZW5jZSBmb3IgYSB3aW5kb3cgb2JqZWN0IGlmIGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHNpbmsgLCBvdGhlcndpc2UgdGhpcyBmaWVsZCBpcyAweDAuCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QT1JUREVGSU5JVElPTlRZUEUgewogICAgIE9NWF9TVFJJTkcgY01JTUVUeXBlOwpAQCAtMTU2LDE5ICsxNTYsMTkgQEAKICAgICBPTVhfTkFUSVZFX1dJTkRPV1RZUEUgcE5hdGl2ZVdpbmRvdzsKIH0gT01YX1ZJREVPX1BPUlRERUZJTklUSU9OVFlQRTsKIAotLyoqICAKLSAqIFBvcnQgZm9ybWF0IHBhcmFtZXRlci4gIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW51bWVyYXRlIHRoZSB2YXJpb3VzIAorLyoqCisgKiBQb3J0IGZvcm1hdCBwYXJhbWV0ZXIuICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVudW1lcmF0ZSB0aGUgdmFyaW91cwogICogZGF0YSBpbnB1dC9vdXRwdXQgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KLSAqIAorICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwogICogIG5WZXJzaW9uICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICAqICBuUG9ydEluZGV4ICAgICAgICAgOiBJbmRpY2F0ZXMgd2hpY2ggcG9ydCB0byBzZXQKLSAqICBuSW5kZXggICAgICAgICAgICAgOiBJbmRpY2F0ZXMgdGhlIGVudW1lcmF0aW9uIGluZGV4IGZvciB0aGUgZm9ybWF0IGZyb20gCisgKiAgbkluZGV4ICAgICAgICAgICAgIDogSW5kaWNhdGVzIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGZvcm1hdCBmcm9tCiAgKiAgICAgICAgICAgICAgICAgICAgICAgMHgwIHRvIE4tMQotICogIGVDb21wcmVzc2lvbkZvcm1hdCA6IENvbXByZXNzaW9uIGZvcm1hdCB1c2VkIGluIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC4gV2hlbiBPTVhfVklERU9fQ29kaW5nVW51c2VkIGlzIHNwZWNpZmllZCwgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgZUNvbG9yRm9ybWF0IGlzIHVzZWQgCisgKiAgZUNvbXByZXNzaW9uRm9ybWF0IDogQ29tcHJlc3Npb24gZm9ybWF0IHVzZWQgaW4gdGhpcyBpbnN0YW5jZSBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuIFdoZW4gT01YX1ZJREVPX0NvZGluZ1VudXNlZCBpcyBzcGVjaWZpZWQsCisgKiAgICAgICAgICAgICAgICAgICAgICAgZUNvbG9yRm9ybWF0IGlzIHVzZWQKICAqICBlQ29sb3JGb3JtYXQgICAgICAgOiBEZWNvbXByZXNzZWQgZm9ybWF0IHVzZWQgYnkgdGhpcyBjb21wb25lbnQKICAqICB4RnJhbWVSYXRlICAgICAgICAgOiBJbmRpY2F0ZXMgdGhlIHZpZGVvIGZyYW1lIHJhdGUgaW4gUTE2IGZvcm1hdAogICovCkBAIC0xNzcsMTQgKzE3NywxNCBAQAogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICAgT01YX1UzMiBuSW5kZXg7Ci0gICAgT01YX1ZJREVPX0NPRElOR1RZUEUgZUNvbXByZXNzaW9uRm9ybWF0OyAKKyAgICBPTVhfVklERU9fQ09ESU5HVFlQRSBlQ29tcHJlc3Npb25Gb3JtYXQ7CiAgICAgT01YX0NPTE9SX0ZPUk1BVFRZUEUgZUNvbG9yRm9ybWF0OwogICAgIE9NWF9VMzIgeEZyYW1lcmF0ZTsKIH0gT01YX1ZJREVPX1BBUkFNX1BPUlRGT1JNQVRUWVBFOwogCiAKIC8qKgotICogVGhpcyBpcyBhIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgdmlkZW8gY29tcHJlc3Npb24gcXVhbnRpemF0aW9uIAorICogVGhpcyBpcyBhIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgdmlkZW8gY29tcHJlc3Npb24gcXVhbnRpemF0aW9uCiAgKiBwYXJhbWV0ZXIgdmFsdWVzLiAgQ29kZWNzIG1heSBzdXBwb3J0IGRpZmZlcmVudCBRUCB2YWx1ZXMgZm9yIGRpZmZlcmVudAogICogZnJhbWUgdHlwZXMuCiAgKgpAQCAtMTk0LDEwICsxOTQsMTAgQEAKICAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICAqICBuUXBJICAgICAgIDogUVAgdmFsdWUgdG8gdXNlIGZvciBpbmRleCBmcmFtZXMKICAqICBuUXBQICAgICAgIDogUVAgdmFsdWUgdG8gdXNlIGZvciBQIGZyYW1lcwotICogIG5RcEIgICAgICAgOiBRUCB2YWx1ZXMgdG8gdXNlIGZvciBiaWRpcmVjdGlvbmFsIGZyYW1lcyAKKyAqICBuUXBCICAgICAgIDogUVAgdmFsdWVzIHRvIHVzZSBmb3IgYmlkaXJlY3Rpb25hbCBmcmFtZXMKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX1FVQU5USVpBVElPTlRZUEUgewotICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgCisgICAgT01YX1UzMiBuU2l6ZTsKICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgIE9NWF9VMzIgblFwSTsKQEAgLTIwNiwzMiArMjA2LDMyIEBACiB9IE9NWF9WSURFT19QQVJBTV9RVUFOVElaQVRJT05UWVBFOwogCiAKLS8qKiAKLSAqIFN0cnVjdHVyZSBmb3IgY29uZmlndXJhdGlvbiBvZiB2aWRlbyBmYXN0IHVwZGF0ZSBwYXJhbWV0ZXJzLiAKLSAqICAKKy8qKgorICogU3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uIG9mIHZpZGVvIGZhc3QgdXBkYXRlIHBhcmFtZXRlcnMuCisgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwotICogIG5WZXJzaW9uICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm8gCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mbwogICogIG5Qb3J0SW5kZXggOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwogICogIGJFbmFibGVWRlUgOiBFbmFibGUvRGlzYWJsZSB2aWRlbyBmYXN0IHVwZGF0ZQogICogIG5GaXJzdEdPQiAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgbWFjcm9ibG9jayByb3cKICAqICBuRmlyc3RNQiAgIDogc3BlY2lmaWVzIHRoZSBmaXJzdCBNQiByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVkIGZpcnN0IEdPQgotICogIG5OdW1NQnMgICAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBNQnMgdG8gYmUgcmVmcmVzaGVkIGZyb20gbkZpcnN0R09CIAorICogIG5OdW1NQnMgICAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBNQnMgdG8gYmUgcmVmcmVzaGVkIGZyb20gbkZpcnN0R09CCiAgKiAgICAgICAgICAgICAgIGFuZCBuRmlyc3RNQgogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fVklERU9GQVNUVVBEQVRFVFlQRSB7Ci0gICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAKLSAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgCi0gICAgT01YX0JPT0wgYkVuYWJsZVZGVTsgICAgICAKLSAgICBPTVhfVTMyIG5GaXJzdEdPQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgT01YX1UzMiBuRmlyc3RNQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgT01YX1UzMiBuTnVtTUJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0JPT0wgYkVuYWJsZVZGVTsKKyAgICBPTVhfVTMyIG5GaXJzdEdPQjsKKyAgICBPTVhfVTMyIG5GaXJzdE1COworICAgIE9NWF9VMzIgbk51bU1CczsKIH0gT01YX1ZJREVPX1BBUkFNX1ZJREVPRkFTVFVQREFURVRZUEU7CiAKIAotLyoqIAotICogRW51bWVyYXRpb24gb2YgcG9zc2libGUgYml0cmF0ZSBjb250cm9sIHR5cGVzIAorLyoqCisgKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBiaXRyYXRlIGNvbnRyb2wgdHlwZXMKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgewogICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZURpc2FibGUsCkBAIC0yMzksMTQgKzIzOSwxNCBAQAogICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZUNvbnN0YW50LAogICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZVZhcmlhYmxlU2tpcEZyYW1lcywKICAgICBPTVhfVmlkZW9fQ29udHJvbFJhdGVDb25zdGFudFNraXBGcmFtZXMsCi0gICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WaWRlb19Db250cm9sUmF0ZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1ZpZGVvX0NvbnRyb2xSYXRlTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fQ09OVFJPTFJBVEVUWVBFOwogCiAKLS8qKiAKLSAqIFN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgYml0cmF0ZSBtb2RlIG9mIGEgY29kZWMuIAorLyoqCisgKiBTdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIGJpdHJhdGUgbW9kZSBvZiBhIGNvZGVjLgogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0IGluIGJ5dGVzCkBAIC0yNTYsMjMgKzI1NiwyMyBAQAogICogIG5UYXJnZXRCaXRyYXRlIDogVGFyZ2V0IGJpdHJhdGUgdG8gZW5jb2RlIHdpdGgKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX0JJVFJBVEVUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgICAgICAgIAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAgICAgICAKLSAgICBPTVhfVklERU9fQ09OVFJPTFJBVEVUWVBFIGVDb250cm9sUmF0ZTsgCi0gICAgT01YX1UzMiBuVGFyZ2V0Qml0cmF0ZTsgICAgICAgICAgICAgICAgIAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfVklERU9fQ09OVFJPTFJBVEVUWVBFIGVDb250cm9sUmF0ZTsKKyAgICBPTVhfVTMyIG5UYXJnZXRCaXRyYXRlOwogfSBPTVhfVklERU9fUEFSQU1fQklUUkFURVRZUEU7CiAKIAotLyoqIAotICogRW51bWVyYXRpb24gb2YgcG9zc2libGUgbW90aW9uIHZlY3RvciAoTVYpIHR5cGVzIAorLyoqCisgKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBtb3Rpb24gdmVjdG9yIChNVikgdHlwZXMKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19NT1RJT05WRUNUT1JUWVBFIHsKICAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yUGl4ZWwsCiAgICAgT01YX1ZpZGVvX01vdGlvblZlY3RvckhhbGZQZWwsCiAgICAgT01YX1ZpZGVvX01vdGlvblZlY3RvclF1YXJ0ZXJQZWwsCiAgICAgT01YX1ZpZGVvX01vdGlvblZlY3RvckVpZ2h0aFBlbCwKLSAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WaWRlb19Nb3Rpb25WZWN0b3JLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVmlkZW9fTW90aW9uVmVjdG9yTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fTU9USU9OVkVDVE9SVFlQRTsKQEAgLTI4MSw3ICsyODEsNyBAQAogLyoqCiAgKiBTdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBudW1iZXIgb2YgbW90aW9uIHZlY3RvcnMgdXNlZCBhcyB3ZWxsCiAgKiBhcyB0aGVpciBhY2N1cmFjeS4KLSAqIAorICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3QgaW4gYnl0ZXMKICAqICBuVmVyc2lvbiAgICAgICAgIDogT01YIHNwZWMgdmVyc2lvbiBpbmZvCkBAIC0zMDQsMzIgKzMwNCwzMiBAQAogfSBPTVhfVklERU9fUEFSQU1fTU9USU9OVkVDVE9SVFlQRTsKIAogCi0vKiogCi0gKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBtZXRob2RzIHRvIHVzZSBmb3IgSW50cmEgUmVmcmVzaCAKKy8qKgorICogRW51bWVyYXRpb24gb2YgcG9zc2libGUgbWV0aG9kcyB0byB1c2UgZm9yIEludHJhIFJlZnJlc2gKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19JTlRSQVJFRlJFU0hUWVBFIHsKICAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoQ3ljbGljLAogICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hBZGFwdGl2ZSwKICAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoQm90aCwKLSAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19JbnRyYVJlZnJlc2hLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fSW50cmFSZWZyZXNoTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fSU5UUkFSRUZSRVNIVFlQRTsKIAogCiAvKioKLSAqIFN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgaW50cmEgcmVmcmVzaCBtb2RlIAotICogCisgKiBTdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIGludHJhIHJlZnJlc2ggbW9kZQorICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwogICogIG5WZXJzaW9uICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICAqICBuUG9ydEluZGV4ICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwogICogIGVSZWZyZXNoTW9kZSA6IEN5Y2xpYywgQWRhcHRpdmUsIG9yIEJvdGgKLSAqICBuQWlyTUJzICAgICAgOiBOdW1iZXIgb2YgaW50cmEgbWFjcm9ibG9ja3MgdG8gcmVmcmVzaCBpbiBhIGZyYW1lIHdoZW4gCisgKiAgbkFpck1CcyAgICAgIDogTnVtYmVyIG9mIGludHJhIG1hY3JvYmxvY2tzIHRvIHJlZnJlc2ggaW4gYSBmcmFtZSB3aGVuCiAgKiAgICAgICAgICAgICAgICAgQUlSIGlzIGVuYWJsZWQKLSAqICBuQWlyUmVmICAgICAgOiBOdW1iZXIgb2YgdGltZXMgYSBtb3Rpb24gbWFya2VkIG1hY3JvYmxvY2sgaGFzIHRvIGJlICAKKyAqICBuQWlyUmVmICAgICAgOiBOdW1iZXIgb2YgdGltZXMgYSBtb3Rpb24gbWFya2VkIG1hY3JvYmxvY2sgaGFzIHRvIGJlCiAgKiAgICAgICAgICAgICAgICAgaW50cmEgY29kZWQKLSAqICBuQ2lyTUJzICAgICAgOiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgbWFjcm9ibG9ja3MgdG8gYmUgY29kZWQgYXMgImludHJhIiAgCisgKiAgbkNpck1CcyAgICAgIDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIG1hY3JvYmxvY2tzIHRvIGJlIGNvZGVkIGFzICJpbnRyYSIKICAqICAgICAgICAgICAgICAgICB3aGVuIENJUiBpcyBlbmFibGVkCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9JTlRSQVJFRlJFU0hUWVBFIHsKQEAgLTM0NCwxOSArMzQ0LDE5IEBACiAKIAogLyoqCi0gKiBTdHJ1Y3R1cmUgZm9yIGVuYWJsaW5nIHZhcmlvdXMgZXJyb3IgY29ycmVjdGlvbiBtZXRob2RzIGZvciB2aWRlbyAKKyAqIFN0cnVjdHVyZSBmb3IgZW5hYmxpbmcgdmFyaW91cyBlcnJvciBjb3JyZWN0aW9uIG1ldGhvZHMgZm9yIHZpZGVvCiAgKiBjb21wcmVzc2lvbi4KICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBuU2l6ZSAgICAgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwotICogIG5WZXJzaW9uICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAKLSAqICBuUG9ydEluZGV4ICAgICAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvIAorICogIG5WZXJzaW9uICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgorICogIG5Qb3J0SW5kZXggICAgICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICAqICBiRW5hYmxlSEVDICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGhlYWRlciBleHRlbnNpb24gY29kZXMgKEhFQykKICAqICBiRW5hYmxlUmVzeW5jICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHJlc3luY2hyb25pemF0aW9uIG1hcmtlcnMKLSAqICBuUmVzeW5jaE1hcmtlclNwYWNpbmcgICA6IFJlc3luY2ggbWFya2VycyBpbnRlcnZhbCAoaW4gYml0cykgdG8gYmUgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkIGluIHRoZSBzdHJlYW0gCi0gKiAgYkVuYWJsZURhdGFQYXJ0aXRpb25pbmcgOiBFbmFibGUvZGlzYWJsZSBkYXRhIHBhcnRpdGlvbmluZyAKLSAqICBiRW5hYmxlUlZMQyAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHJldmVyc2libGUgdmFyaWFibGUgbGVuZ3RoIAorICogIG5SZXN5bmNoTWFya2VyU3BhY2luZyAgIDogUmVzeW5jaCBtYXJrZXJzIGludGVydmFsIChpbiBiaXRzKSB0byBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZCBpbiB0aGUgc3RyZWFtCisgKiAgYkVuYWJsZURhdGFQYXJ0aXRpb25pbmcgOiBFbmFibGUvZGlzYWJsZSBkYXRhIHBhcnRpdGlvbmluZworICogIGJFbmFibGVSVkxDICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgcmV2ZXJzaWJsZSB2YXJpYWJsZSBsZW5ndGgKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZwogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fRVJST1JDT1JSRUNUSU9OVFlQRSB7CkBAIC0zNzEsMTIgKzM3MSwxMiBAQAogfSBPTVhfVklERU9fUEFSQU1fRVJST1JDT1JSRUNUSU9OVFlQRTsKIAogCi0vKiogCi0gKiBDb25maWd1cmF0aW9uIG9mIHZhcmlhYmxlIGJsb2NrLXNpemUgbW90aW9uIGNvbXBlbnNhdGlvbiAoVkJTTUMpIAotICogCisvKioKKyAqIENvbmZpZ3VyYXRpb24gb2YgdmFyaWFibGUgYmxvY2stc2l6ZSBtb3Rpb24gY29tcGVuc2F0aW9uIChWQlNNQykKKyAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCi0gKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gCisgKiAgblZlcnNpb24gICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24KICAqICBuUG9ydEluZGV4IDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KICAqICBiMTZ4MTYgICAgIDogRW5hYmxlIGludGVyIGJsb2NrIHNlYXJjaCAxNngxNgogICogIGIxNng4ICAgICAgOiBFbmFibGUgaW50ZXIgYmxvY2sgc2VhcmNoIDE2eDgKQEAgLTM4NywxMSArMzg3LDExIEBACiAgKiAgYjR4NCAgICAgICA6IEVuYWJsZSBpbnRlciBibG9jayBzZWFyY2ggNHg0CiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9WQlNNQ1RZUEUgewotICAgIE9NWF9VMzIgblNpemU7IAotICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgCi0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgICAKLSAgICBPTVhfQk9PTCBiMTZ4MTY7IAotICAgIE9NWF9CT09MIGIxNng4OyAKKyAgICBPTVhfVTMyIG5TaXplOworICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CisgICAgT01YX0JPT0wgYjE2eDE2OworICAgIE9NWF9CT09MIGIxNng4OwogICAgIE9NWF9CT09MIGI4eDE2OwogICAgIE9NWF9CT09MIGI4eDg7CiAgICAgT01YX0JPT0wgYjh4NDsKQEAgLTQwMCw2NyArNDAwLDY3IEBACiB9IE9NWF9WSURFT19QQVJBTV9WQlNNQ1RZUEU7CiAKIAotLyoqIAotICogSC4yNjMgcHJvZmlsZSB0eXBlcywgZWFjaCBwcm9maWxlIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIAorLyoqCisgKiBILjI2MyBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMKICAqIHBlcmZvcm1hbmNlIGJvdW5kcyBhbmQgZGlmZmVyZW50IGFubmV4ZXMuCiAgKgogICogRU5VTVM6Ci0gKiAgQmFzZWxpbmUgICAgICAgICAgIDogQmFzZWxpbmUgUHJvZmlsZTogSC4yNjMgKFYxKSwgbm8gb3B0aW9uYWwgbW9kZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgSDMyMCBDb2RpbmcgICAgICAgIDogSC4zMjAgQ29kaW5nIEVmZmljaWVuY3kgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSAKKyAqICBCYXNlbGluZSAgICAgICAgICAgOiBCYXNlbGluZSBQcm9maWxlOiBILjI2MyAoVjEpLCBubyBvcHRpb25hbCBtb2RlcworICogIEgzMjAgQ29kaW5nICAgICAgICA6IEguMzIwIENvZGluZyBFZmZpY2llbmN5IEJhY2t3YXJkIENvbXBhdGliaWxpdHkKICAqICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlOiBILjI2MysgKFYyKSwgaW5jbHVkZXMgYW5uZXhlcyBJLCBKLCBMLjQKICAqICAgICAgICAgICAgICAgICAgICAgICBhbmQgVAotICogIEJhY2t3YXJkQ29tcGF0aWJsZSA6IEJhY2t3YXJkIENvbXBhdGliaWxpdHkgUHJvZmlsZTogSC4yNjMgKFYxKSwgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgYW5uZXggRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogIElTV1YyICAgICAgICAgICAgICA6IEludGVyYWN0aXZlIFN0cmVhbWluZyBXaXJlbGVzcyBQcm9maWxlOiBILjI2MysgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgKFYyKSwgaW5jbHVkZXMgYW5uZXhlcyBJLCBKLCBLIGFuZCBUICAgICAgICAgICAgICAgICAKLSAqICBJU1dWMyAgICAgICAgICAgICAgOiBJbnRlcmFjdGl2ZSBTdHJlYW1pbmcgV2lyZWxlc3MgUHJvZmlsZTogSC4yNjMrKyAgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgKFYzKSwgaW5jbHVkZXMgcHJvZmlsZSAzIGFuZCBhbm5leGVzIFYgYW5kIFcuNi4zLjggICAKLSAqICBIaWdoQ29tcHJlc3Npb24gICAgOiBDb252ZXJzYXRpb25hbCBIaWdoIENvbXByZXNzaW9uIFByb2ZpbGU6IEguMjYzKysgIAotICogICAgICAgICAgICAgICAgICAgICAgIChWMyksIGluY2x1ZGVzIHByb2ZpbGVzIDEgJiAyIGFuZCBhbm5leGVzIEQgYW5kIFUgICAKLSAqICBJbnRlcm5ldCAgICAgICAgICAgOiBDb252ZXJzYXRpb25hbCBJbnRlcm5ldCBQcm9maWxlOiBILjI2MysrIChWMyksICAKLSAqICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyBwcm9maWxlIDUgYW5kIGFubmV4IEsgICAgICAgICAgICAgICAgICAgICAgIAotICogIEludGVybGFjZSAgICAgICAgICA6IENvbnZlcnNhdGlvbmFsIEludGVybGFjZSBQcm9maWxlOiBILjI2MysrIChWMyksICAKLSAqICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyBwcm9maWxlIDUgYW5kIGFubmV4IFcuNi4zLjExICAgICAgICAgICAgICAgCi0gKiAgSGlnaExhdGVuY3kgICAgICAgIDogSGlnaCBMYXRlbmN5IFByb2ZpbGU6IEguMjYzKysgKFYzKSwgaW5jbHVkZXMgIAotICogICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgNiBhbmQgYW5uZXhlcyBPLjEgYW5kIFAuNSAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgQmFja3dhcmRDb21wYXRpYmxlIDogQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBQcm9maWxlOiBILjI2MyAoVjEpLAorICogICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIGFubmV4IEYKKyAqICBJU1dWMiAgICAgICAgICAgICAgOiBJbnRlcmFjdGl2ZSBTdHJlYW1pbmcgV2lyZWxlc3MgUHJvZmlsZTogSC4yNjMrCisgKiAgICAgICAgICAgICAgICAgICAgICAgKFYyKSwgaW5jbHVkZXMgYW5uZXhlcyBJLCBKLCBLIGFuZCBUCisgKiAgSVNXVjMgICAgICAgICAgICAgIDogSW50ZXJhY3RpdmUgU3RyZWFtaW5nIFdpcmVsZXNzIFByb2ZpbGU6IEguMjYzKysKKyAqICAgICAgICAgICAgICAgICAgICAgICAoVjMpLCBpbmNsdWRlcyBwcm9maWxlIDMgYW5kIGFubmV4ZXMgViBhbmQgVy42LjMuOAorICogIEhpZ2hDb21wcmVzc2lvbiAgICA6IENvbnZlcnNhdGlvbmFsIEhpZ2ggQ29tcHJlc3Npb24gUHJvZmlsZTogSC4yNjMrKworICogICAgICAgICAgICAgICAgICAgICAgIChWMyksIGluY2x1ZGVzIHByb2ZpbGVzIDEgJiAyIGFuZCBhbm5leGVzIEQgYW5kIFUKKyAqICBJbnRlcm5ldCAgICAgICAgICAgOiBDb252ZXJzYXRpb25hbCBJbnRlcm5ldCBQcm9maWxlOiBILjI2MysrIChWMyksCisgKiAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgcHJvZmlsZSA1IGFuZCBhbm5leCBLCisgKiAgSW50ZXJsYWNlICAgICAgICAgIDogQ29udmVyc2F0aW9uYWwgSW50ZXJsYWNlIFByb2ZpbGU6IEguMjYzKysgKFYzKSwKKyAqICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyBwcm9maWxlIDUgYW5kIGFubmV4IFcuNi4zLjExCisgKiAgSGlnaExhdGVuY3kgICAgICAgIDogSGlnaCBMYXRlbmN5IFByb2ZpbGU6IEguMjYzKysgKFYzKSwgaW5jbHVkZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlIDYgYW5kIGFubmV4ZXMgTy4xIGFuZCBQLjUKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19IMjYzUFJPRklMRVRZUEUgewotICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUJhc2VsaW5lICAgICAgICAgICAgPSAweDAxLCAgICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSDMyMENvZGluZyAgICAgICAgICA9IDB4MDIsICAgICAgICAgIAotICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUJhY2t3YXJkQ29tcGF0aWJsZSAgPSAweDA0LCAgCi0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSVNXVjIgICAgICAgICAgICAgICA9IDB4MDgsICAgICAgICAgICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSVNXVjMgICAgICAgICAgICAgICA9IDB4MTAsICAgICAgICAgICAgICAgCi0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSGlnaENvbXByZXNzaW9uICAgICA9IDB4MjAsICAgICAKLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcm5ldCAgICAgICAgICAgID0gMHg0MCwgICAgICAgICAgICAKLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVJbnRlcmxhY2UgICAgICAgICAgID0gMHg4MCwgICAgICAgICAgIAotICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUhpZ2hMYXRlbmN5ICAgICAgICAgPSAweDEwMCwgICAgICAgICAKLSAgICBPTVhfVklERU9fSDI2M1Byb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlQmFzZWxpbmUgICAgICAgICAgICA9IDB4MDEsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSDMyMENvZGluZyAgICAgICAgICA9IDB4MDIsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlQmFja3dhcmRDb21wYXRpYmxlICA9IDB4MDQsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSVNXVjIgICAgICAgICAgICAgICA9IDB4MDgsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSVNXVjMgICAgICAgICAgICAgICA9IDB4MTAsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSGlnaENvbXByZXNzaW9uICAgICA9IDB4MjAsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSW50ZXJuZXQgICAgICAgICAgICA9IDB4NDAsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSW50ZXJsYWNlICAgICAgICAgICA9IDB4ODAsCisgICAgT01YX1ZJREVPX0gyNjNQcm9maWxlSGlnaExhdGVuY3kgICAgICAgICA9IDB4MTAwLAorICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCi0gICAgT01YX1ZJREVPX0gyNjNQcm9maWxlTWF4ICAgICAgICAgICAgICAgICA9IDB4N0ZGRkZGRkYgIAorICAgIE9NWF9WSURFT19IMjYzUHJvZmlsZU1heCAgICAgICAgICAgICAgICAgPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19IMjYzUFJPRklMRVRZUEU7CiAKIAotLyoqIAotICogSC4yNjMgbGV2ZWwgdHlwZXMsIGVhY2ggbGV2ZWwgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgZnJhbWUgc2l6ZXMsIAorLyoqCisgKiBILjI2MyBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZSBzaXplcywKICAqIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19IMjYzTEVWRUxUWVBFIHsKLSAgICBPTVhfVklERU9fSDI2M0xldmVsMTAgID0gMHgwMSwgIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWwyMCAgPSAweDAyLCAgICAgIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWwzMCAgPSAweDA0LCAgICAgIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWw0MCAgPSAweDA4LCAgICAgIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWw0NSAgPSAweDEwLCAgICAgIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWw1MCAgPSAweDIwLCAgICAgIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWw2MCAgPSAweDQwLCAgICAgIAotICAgIE9NWF9WSURFT19IMjYzTGV2ZWw3MCAgPSAweDgwLCAKLSAgICBPTVhfVklERU9fSDI2M0xldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWwxMCAgPSAweDAxLAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWwyMCAgPSAweDAyLAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWwzMCAgPSAweDA0LAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWw0MCAgPSAweDA4LAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWw0NSAgPSAweDEwLAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWw1MCAgPSAweDIwLAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWw2MCAgPSAweDQwLAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWw3MCAgPSAweDgwLAorICAgIE9NWF9WSURFT19IMjYzTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fSDI2M0xldmVsVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfVklERU9fSDI2M0xldmVsTWF4ID0gMHg3RkZGRkZGRiAgCisgICAgT01YX1ZJREVPX0gyNjNMZXZlbE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX0gyNjNMRVZFTFRZUEU7CiAKIAotLyoqIAotICogU3BlY2lmaWVzIHRoZSBwaWN0dXJlIHR5cGUuIFRoZXNlIHZhbHVlcyBzaG91bGQgYmUgT1InZCB0byBzaWduYWwgYWxsIAorLyoqCisgKiBTcGVjaWZpZXMgdGhlIHBpY3R1cmUgdHlwZS4gVGhlc2UgdmFsdWVzIHNob3VsZCBiZSBPUidkIHRvIHNpZ25hbCBhbGwKICAqIHBpY3R1cmVzIHR5cGVzIHdoaWNoIGFyZSBhbGxvd2VkLgogICoKICAqIEVOVU1TOgpAQCAtNDc4LDM2ICs0NzgsMzYgQEAKICAgICBPTVhfVklERU9fUGljdHVyZVR5cGVFSSAgPSAweDExLAogICAgIE9NWF9WSURFT19QaWN0dXJlVHlwZUVQICA9IDB4MTIsCiAgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlUyAgID0gMHgxNCwKLSAgICBPTVhfVklERU9fUGljdHVyZVR5cGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX1BpY3R1cmVUeXBlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fUGljdHVyZVR5cGVNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19QSUNUVVJFVFlQRTsKIAogCi0vKiogCi0gKiBILjI2MyBQYXJhbXMgCisvKioKKyAqIEguMjYzIFBhcmFtcwogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwotICogIG5WZXJzaW9uICAgICAgICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gCisgKiAgblZlcnNpb24gICAgICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgblBGcmFtZXMgICAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIFAgZnJhbWVzIGJldHdlZW4gZWFjaCBJIGZyYW1lCiAgKiAgbkJGcmFtZXMgICAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIEIgZnJhbWVzIGJldHdlZW4gZWFjaCBJIGZyYW1lCiAgKiAgZVByb2ZpbGUgICAgICAgICAgICAgICAgIDogSC4yNjMgcHJvZmlsZShzKSB0byB1c2UKICAqICBlTGV2ZWwgICAgICAgICAgICAgICAgICAgOiBILjI2MyBsZXZlbChzKSB0byB1c2UKLSAqICBiUExVU1BUWVBFQWxsb3dlZCAgICAgICAgOiBJbmRpY2F0aW5nIHRoYXQgaXQgaXMgYWxsb3dlZCB0byB1c2UgUExVU1BUWVBFIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGVjaWZpZWQgaW4gdGhlIDE5OTggdmVyc2lvbiBvZiBILjI2MykgdG8gCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgY3VzdG9tIHBpY3R1cmUgc2l6ZXMgb3IgY2xvY2sgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmNpZXMgCi0gKiAgbkFsbG93ZWRQaWN0dXJlVHlwZXMgICAgIDogU3BlY2lmaWVzIHRoZSBwaWN0dXJlIHR5cGVzIGFsbG93ZWQgaW4gdGhlIAorICogIGJQTFVTUFRZUEVBbGxvd2VkICAgICAgICA6IEluZGljYXRpbmcgdGhhdCBpdCBpcyBhbGxvd2VkIHRvIHVzZSBQTFVTUFRZUEUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BlY2lmaWVkIGluIHRoZSAxOTk4IHZlcnNpb24gb2YgSC4yNjMpIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgY3VzdG9tIHBpY3R1cmUgc2l6ZXMgb3IgY2xvY2sKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY2llcworICogIG5BbGxvd2VkUGljdHVyZVR5cGVzICAgICA6IFNwZWNpZmllcyB0aGUgcGljdHVyZSB0eXBlcyBhbGxvd2VkIGluIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHN0cmVhbQotICogIGJGb3JjZVJvdW5kaW5nVHlwZVRvWmVybyA6IHZhbHVlIG9mIHRoZSBSVFlQRSBiaXQgKGJpdCA2IG9mIE1QUFRZUEUpIGlzIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb25zdHJhaW5lZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gY2hhbmdlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgUlRZUEUgYml0IGZvciBlYWNoIHJlZmVyZW5jZSAKKyAqICBiRm9yY2VSb3VuZGluZ1R5cGVUb1plcm8gOiB2YWx1ZSBvZiB0aGUgUlRZUEUgYml0IChiaXQgNiBvZiBNUFBUWVBFKSBpcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb25zdHJhaW5lZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gY2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBSVFlQRSBiaXQgZm9yIGVhY2ggcmVmZXJlbmNlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljdHVyZSBpbiBlcnJvci1mcmVlIGNvbW11bmljYXRpb24KLSAqICBuUGljdHVyZUhlYWRlclJlcGV0aXRpb24gOiBTcGVjaWZpZXMgdGhlIGZyZXF1ZW5jeSBvZiBwaWN0dXJlIGhlYWRlciAKKyAqICBuUGljdHVyZUhlYWRlclJlcGV0aXRpb24gOiBTcGVjaWZpZXMgdGhlIGZyZXF1ZW5jeSBvZiBwaWN0dXJlIGhlYWRlcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGV0aXRpb24KLSAqICBuR09CSGVhZGVySW50ZXJ2YWwgICAgICAgOiBTcGVjaWZpZXMgdGhlIGludGVydmFsIG9mIG5vbi1lbXB0eSBHT0IgIAorICogIG5HT0JIZWFkZXJJbnRlcnZhbCAgICAgICA6IFNwZWNpZmllcyB0aGUgaW50ZXJ2YWwgb2Ygbm9uLWVtcHR5IEdPQgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgaW4gdW5pdHMgb2YgR09CcwogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fSDI2M1RZUEUgewpAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgT01YX1UzMiBuUEZyYW1lczsKICAgICBPTVhfVTMyIG5CRnJhbWVzOwogICAgIE9NWF9WSURFT19IMjYzUFJPRklMRVRZUEUgZVByb2ZpbGU7Ci0JT01YX1ZJREVPX0gyNjNMRVZFTFRZUEUgZUxldmVsOworICAgIE9NWF9WSURFT19IMjYzTEVWRUxUWVBFIGVMZXZlbDsKICAgICBPTVhfQk9PTCBiUExVU1BUWVBFQWxsb3dlZDsKICAgICBPTVhfVTMyIG5BbGxvd2VkUGljdHVyZVR5cGVzOwogICAgIE9NWF9CT09MIGJGb3JjZVJvdW5kaW5nVHlwZVRvWmVybzsKQEAgLTUyNiw4ICs1MjYsOCBAQAogfSBPTVhfVklERU9fUEFSQU1fSDI2M1RZUEU7CiAKIAotLyoqIAotICogTVBFRy0yIHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyAKKy8qKgorICogTVBFRy0yIHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cwogICogcGVyZm9ybWFuY2UgYm91bmRzIGFuZCBkaWZmZXJlbnQgYW5uZXhlcy4KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19NUEVHMlBST0ZJTEVUWVBFIHsKQEAgLTUzNywyOSArNTM3LDI5IEBACiAgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZVNOUiwgICAgICAgICAvKio8IFNOUiBQcm9maWxlICovCiAgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZVNwYXRpYWwsICAgICAvKio8IFNwYXRpYWwgUHJvZmlsZSAqLwogICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVIaWdoLCAgICAgICAgLyoqPCBIaWdoIFByb2ZpbGUgKi8KLSAgICBPTVhfVklERU9fTVBFRzJQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAorICAgIE9NWF9WSURFT19NUEVHMlByb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fTVBFRzJQcm9maWxlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfVklERU9fTVBFRzJQcm9maWxlTWF4ID0gMHg3RkZGRkZGRiAgCisgICAgT01YX1ZJREVPX01QRUcyUHJvZmlsZU1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX01QRUcyUFJPRklMRVRZUEU7CiAKIAotLyoqIAotICogTVBFRy0yIGxldmVsIHR5cGVzLCBlYWNoIGxldmVsIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIGZyYW1lIAotICogc2l6ZXMsIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4gIE5vIG5lZWQgCisvKioKKyAqIE1QRUctMiBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZQorICogc2l6ZXMsIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4gIE5vIG5lZWQKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19NUEVHMkxFVkVMVFlQRSB7Ci0gICAgT01YX1ZJREVPX01QRUcyTGV2ZWxMTCA9IDAsICAvKio8IExvdyBMZXZlbCAqLyAKLSAgICBPTVhfVklERU9fTVBFRzJMZXZlbE1MLCAgICAgIC8qKjwgTWFpbiBMZXZlbCAqLyAKLSAgICBPTVhfVklERU9fTVBFRzJMZXZlbEgxNCwgICAgIC8qKjwgSGlnaCAxNDQwICovIAotICAgIE9NWF9WSURFT19NUEVHMkxldmVsSEwsICAgICAgLyoqPCBIaWdoIExldmVsICovICAgCi0gICAgT01YX1ZJREVPX01QRUcyTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX01QRUcyTGV2ZWxMTCA9IDAsICAvKio8IExvdyBMZXZlbCAqLworICAgIE9NWF9WSURFT19NUEVHMkxldmVsTUwsICAgICAgLyoqPCBNYWluIExldmVsICovCisgICAgT01YX1ZJREVPX01QRUcyTGV2ZWxIMTQsICAgICAvKio8IEhpZ2ggMTQ0MCAqLworICAgIE9NWF9WSURFT19NUEVHMkxldmVsSEwsICAgICAgLyoqPCBIaWdoIExldmVsICovCisgICAgT01YX1ZJREVPX01QRUcyTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fTVBFRzJMZXZlbFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCi0gICAgT01YX1ZJREVPX01QRUcyTGV2ZWxNYXggPSAweDdGRkZGRkZGICAKKyAgICBPTVhfVklERU9fTVBFRzJMZXZlbE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX01QRUcyTEVWRUxUWVBFOwogCiAKLS8qKiAKLSAqIE1QRUctMiBwYXJhbXMgCisvKioKKyAqIE1QRUctMiBwYXJhbXMKICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCkBAIC01NzEsMjAgKzU3MSwyMCBAQAogICogIGVMZXZlbCAgICAgOiBNUEVHLTIgbGV2ZWxzKHMpIHRvIHVzZQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fTVBFRzJUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgCisgICAgT01YX1UzMiBuU2l6ZTsKICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247Ci0gICAgT01YX1UzMiBuUG9ydEluZGV4OyAgICAgIAotICAgIE9NWF9VMzIgblBGcmFtZXM7ICAgICAgICAKLSAgICBPTVhfVTMyIG5CRnJhbWVzOyAgICAgICAgCisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgblBGcmFtZXM7CisgICAgT01YX1UzMiBuQkZyYW1lczsKICAgICBPTVhfVklERU9fTVBFRzJQUk9GSUxFVFlQRSBlUHJvZmlsZTsKLQlPTVhfVklERU9fTVBFRzJMRVZFTFRZUEUgZUxldmVsOyAgIAorICAgIE9NWF9WSURFT19NUEVHMkxFVkVMVFlQRSBlTGV2ZWw7CiB9IE9NWF9WSURFT19QQVJBTV9NUEVHMlRZUEU7CiAKIAotLyoqIAotICogTVBFRy00IHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyAKKy8qKgorICogTVBFRy00IHByb2ZpbGUgdHlwZXMsIGVhY2ggcHJvZmlsZSBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cwogICogcGVyZm9ybWFuY2UgYm91bmRzIGFuZCBkaWZmZXJlbnQgYW5uZXhlcy4KLSAqIAorICoKICAqIEVOVU1TOgogICogIC0gU2ltcGxlIFByb2ZpbGUsIExldmVscyAxLTMKICAqICAtIFNpbXBsZSBTY2FsYWJsZSBQcm9maWxlLCBMZXZlbHMgMS0yCkBAIC02MDMsNDggKzYwMyw0OCBAQAogICogIC0gQWR2YW5jZWQgU2NhbGFibGUgVGV4dHVyZSwgTGV2ZWxzIDItMwogICovCiB0eXBlZGVmIGVudW0gT01YX1ZJREVPX01QRUc0UFJPRklMRVRZUEUgewotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGUgICAgICAgICAgID0gMHgwMSwgICAgICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTaW1wbGVTY2FsYWJsZSAgID0gMHgwMiwgICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUNvcmUgICAgICAgICAgICAgPSAweDA0LCAgICAgICAgICAgICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZU1haW4gICAgICAgICAgICAgPSAweDA4LCAgICAgICAgICAgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlTmJpdCAgICAgICAgICAgICA9IDB4MTAsICAgICAgICAgICAgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2NhbGFibGVUZXh0dXJlICA9IDB4MjAsICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZhY2UgICAgICAgPSAweDQwLCAgICAgICAgCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZCQSAgICAgICAgPSAweDgwLCAgICAgICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVCYXNpY0FuaW1hdGVkICAgID0gMHgxMDAsICAgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlSHlicmlkICAgICAgICAgICA9IDB4MjAwLCAgICAgICAgICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZFJlYWxUaW1lID0gMHg0MDAsICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQ29yZVNjYWxhYmxlICAgICA9IDB4ODAwLCAgICAgIAotICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVBZHZhbmNlZENvZGluZyAgID0gMHgxMDAwLCAgICAKLSAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRDb3JlICAgICA9IDB4MjAwMCwgICAgICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2ltcGxlICAgICAgICAgICA9IDB4MDEsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZVNjYWxhYmxlICAgPSAweDAyLAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVDb3JlICAgICAgICAgICAgID0gMHgwNCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlTWFpbiAgICAgICAgICAgICA9IDB4MDgsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZU5iaXQgICAgICAgICAgICAgPSAweDEwLAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVTY2FsYWJsZVRleHR1cmUgID0gMHgyMCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlU2ltcGxlRmFjZSAgICAgICA9IDB4NDAsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVNpbXBsZUZCQSAgICAgICAgPSAweDgwLAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVCYXNpY0FuaW1hdGVkICAgID0gMHgxMDAsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUh5YnJpZCAgICAgICAgICAgPSAweDIwMCwKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlQWR2YW5jZWRSZWFsVGltZSA9IDB4NDAwLAorICAgIE9NWF9WSURFT19NUEVHNFByb2ZpbGVDb3JlU2NhbGFibGUgICAgID0gMHg4MDAsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkQ29kaW5nICAgPSAweDEwMDAsCisgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkQ29yZSAgICAgPSAweDIwMDAsCiAgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkU2NhbGFibGUgPSAweDQwMDAsCiAgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUFkdmFuY2VkU2ltcGxlICAgPSAweDgwMDAsCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCi0gICAgT01YX1ZJREVPX01QRUc0UHJvZmlsZU1heCAgICAgICAgICAgICAgPSAweDdGRkZGRkZGICAKKyAgICBPTVhfVklERU9fTVBFRzRQcm9maWxlTWF4ICAgICAgICAgICAgICA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX01QRUc0UFJPRklMRVRZUEU7CiAKIAotLyoqIAotICogTVBFRy00IGxldmVsIHR5cGVzLCBlYWNoIGxldmVsIGluZGljYXRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIGZyYW1lIAotICogc2l6ZXMsIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4gIE5vIG5lZWQgCisvKioKKyAqIE1QRUctNCBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZQorICogc2l6ZXMsIGJpdCByYXRlcywgZGVjb2RlciBmcmFtZSByYXRlcy4gIE5vIG5lZWQKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19NUEVHNExFVkVMVFlQRSB7Ci0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWwwICA9IDB4MDEsICAgLyoqPCBMZXZlbCAwICovICAgCi0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWwwYiA9IDB4MDIsICAgLyoqPCBMZXZlbCAwYiAqLyAgIAotICAgIE9NWF9WSURFT19NUEVHNExldmVsMSAgPSAweDA0LCAgIC8qKjwgTGV2ZWwgMSAqLyAKLSAgICBPTVhfVklERU9fTVBFRzRMZXZlbDIgID0gMHgwOCwgICAvKio8IExldmVsIDIgKi8gCi0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWwzICA9IDB4MTAsICAgLyoqPCBMZXZlbCAzICovIAotICAgIE9NWF9WSURFT19NUEVHNExldmVsNCAgPSAweDIwLCAgIC8qKjwgTGV2ZWwgNCAqLyAgCi0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWw0YSA9IDB4NDAsICAgLyoqPCBMZXZlbCA0YSAqLyAgCi0gICAgT01YX1ZJREVPX01QRUc0TGV2ZWw1ICA9IDB4ODAsICAgLyoqPCBMZXZlbCA1ICovICAKLSAgICBPTVhfVklERU9fTVBFRzRMZXZlbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDAgID0gMHgwMSwgICAvKio8IExldmVsIDAgKi8KKyAgICBPTVhfVklERU9fTVBFRzRMZXZlbDBiID0gMHgwMiwgICAvKio8IExldmVsIDBiICovCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWwxICA9IDB4MDQsICAgLyoqPCBMZXZlbCAxICovCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWwyICA9IDB4MDgsICAgLyoqPCBMZXZlbCAyICovCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWwzICA9IDB4MTAsICAgLyoqPCBMZXZlbCAzICovCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWw0ICA9IDB4MjAsICAgLyoqPCBMZXZlbCA0ICovCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWw0YSA9IDB4NDAsICAgLyoqPCBMZXZlbCA0YSAqLworICAgIE9NWF9WSURFT19NUEVHNExldmVsNSAgPSAweDgwLCAgIC8qKjwgTGV2ZWwgNSAqLworICAgIE9NWF9WSURFT19NUEVHNExldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX01QRUc0TGV2ZWxWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwotICAgIE9NWF9WSURFT19NUEVHNExldmVsTWF4ID0gMHg3RkZGRkZGRiAgCisgICAgT01YX1ZJREVPX01QRUc0TGV2ZWxNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19NUEVHNExFVkVMVFlQRTsKIAogCi0vKiogCisvKioKICAqIE1QRUctNCBjb25maWd1cmF0aW9uLiAgVGhpcyBzdHJ1Y3R1cmUgaGFuZGxlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMKICAqIHdoaWNoIGFyZSBzcGVjaWZpYyB0byBNUEVHNCBhbGdvcml0aG1zCiAgKgpAQCAtNjUyLDI0ICs2NTIsMjQgQEAKICAqICBuU2l6ZSAgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwogICogIG5WZXJzaW9uICAgICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICAgIDogUG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8KLSAqICBuU2xpY2VIZWFkZXJTcGFjaW5nICA6IE51bWJlciBvZiBtYWNyb2Jsb2NrcyBiZXR3ZWVuIHNsaWNlIGhlYWRlciAoSDI2MysgCisgKiAgblNsaWNlSGVhZGVyU3BhY2luZyAgOiBOdW1iZXIgb2YgbWFjcm9ibG9ja3MgYmV0d2VlbiBzbGljZSBoZWFkZXIgKEgyNjMrCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBBbm5leCBLKS4gUHV0IHplcm8gaWYgbm90IHVzZWQKICAqICBiU1ZIICAgICAgICAgICAgICAgICA6IEVuYWJsZSBTaG9ydCBWaWRlbyBIZWFkZXIgbW9kZQogICogIGJHb3YgICAgICAgICAgICAgICAgIDogRmxhZyB0byBlbmFibGUgR09WCi0gKiAgblBGcmFtZXMgICAgICAgICAgICAgOiBOdW1iZXIgb2YgUCBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUgKGFsc28gY2FsbGVkIAorICogIG5QRnJhbWVzICAgICAgICAgICAgIDogTnVtYmVyIG9mIFAgZnJhbWVzIGJldHdlZW4gZWFjaCBJIGZyYW1lIChhbHNvIGNhbGxlZAogICogICAgICAgICAgICAgICAgICAgICAgICAgR09WIHBlcmlvZCkKICAqICBuQkZyYW1lcyAgICAgICAgICAgICA6IE51bWJlciBvZiBCIGZyYW1lcyBiZXR3ZWVuIGVhY2ggSSBmcmFtZQogICogIG5JRENWTENUaHJlc2hvbGQgICAgIDogVmFsdWUgb2YgaW50cmEgREMgVkxDIHRocmVzaG9sZAogICogIGJBQ1ByZWQgICAgICAgICAgICAgIDogRmxhZyB0byB1c2UgYWMgcHJlZGljdGlvbgogICogIG5NYXhQYWNrZXRTaXplICAgICAgIDogTWF4aW11bSBzaXplIG9mIHBhY2tldCBpbiBieXRlcy4KLSAqICBuVGltZUluY1JlcyAgICAgICAgICA6IFVzZWQgdG8gcGFzcyBWT1AgdGltZSBpbmNyZW1lbnQgcmVzb2x1dGlvbiBmb3IgTVBFRzQuIAorICogIG5UaW1lSW5jUmVzICAgICAgICAgIDogVXNlZCB0byBwYXNzIFZPUCB0aW1lIGluY3JlbWVudCByZXNvbHV0aW9uIGZvciBNUEVHNC4KICAqICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycHJldGVkIGFzIGRlc2NyaWJlZCBpbiBNUEVHNCBzdGFuZGFyZC4KICAqICBlUHJvZmlsZSAgICAgICAgICAgICA6IE1QRUctNCBwcm9maWxlKHMpIHRvIHVzZS4KICAqICBlTGV2ZWwgICAgICAgICAgICAgICA6IE1QRUctNCBsZXZlbChzKSB0byB1c2UuCiAgKiAgbkFsbG93ZWRQaWN0dXJlVHlwZXMgOiBTcGVjaWZpZXMgdGhlIHBpY3R1cmUgdHlwZXMgYWxsb3dlZCBpbiB0aGUgYml0c3RyZWFtCiAgKiAgbkhlYWRlckV4dGVuc2lvbiAgICAgOiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSB2aWRlbyBwYWNrZXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgd2l0aGluIGEgVk9QCi0gKiAgYlJldmVyc2libGVWTEMgICAgICAgOiBTcGVjaWZpZXMgd2hldGhlciByZXZlcnNpYmxlIHZhcmlhYmxlIGxlbmd0aCBjb2RpbmcgCisgKiAgYlJldmVyc2libGVWTEMgICAgICAgOiBTcGVjaWZpZXMgd2hldGhlciByZXZlcnNpYmxlIHZhcmlhYmxlIGxlbmd0aCBjb2RpbmcKICAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHVzZQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fTVBFRzRUWVBFIHsKQEAgLTY5MywyMiArNjkzLDIyIEBACiB9IE9NWF9WSURFT19QQVJBTV9NUEVHNFRZUEU7CiAKIAotLyoqIAotICogV01WIFZlcnNpb25zIAorLyoqCisgKiBXTVYgVmVyc2lvbnMKICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19XTVZGT1JNQVRUWVBFIHsKICAgICBPTVhfVklERU9fV01WRm9ybWF0VW51c2VkID0gMHgwMSwgICAvKio8IEZvcm1hdCB1bnVzZWQgb3IgdW5rbm93biAqLwogICAgIE9NWF9WSURFT19XTVZGb3JtYXQ3ICAgICAgPSAweDAyLCAgIC8qKjwgV2luZG93cyBNZWRpYSBWaWRlbyBmb3JtYXQgNyAqLwogICAgIE9NWF9WSURFT19XTVZGb3JtYXQ4ICAgICAgPSAweDA0LCAgIC8qKjwgV2luZG93cyBNZWRpYSBWaWRlbyBmb3JtYXQgOCAqLwogICAgIE9NWF9WSURFT19XTVZGb3JtYXQ5ICAgICAgPSAweDA4LCAgIC8qKjwgV2luZG93cyBNZWRpYSBWaWRlbyBmb3JtYXQgOSAqLwotICAgIE9NWF9WSURFT19XTUZGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX1dNRkZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19XTUZGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19XTVZGb3JtYXRNYXggICAgPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19XTVZGT1JNQVRUWVBFOwogCiAKLS8qKiAKLSAqIFdNViBQYXJhbXMgCisvKioKKyAqIFdNViBQYXJhbXMKICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBuU2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzCkBAIC03MTcsMzMgKzcxNywzMyBAQAogICogIGVGb3JtYXQgICAgOiBWZXJzaW9uIG9mIFdNViBzdHJlYW0gLyBkYXRhCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9XTVZUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAKKyAgICBPTVhfVTMyIG5TaXplOwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICAgT01YX1ZJREVPX1dNVkZPUk1BVFRZUEUgZUZvcm1hdDsKIH0gT01YX1ZJREVPX1BBUkFNX1dNVlRZUEU7CiAKIAotLyoqIAotICogUmVhbCBWaWRlbyBWZXJzaW9uIAorLyoqCisgKiBSZWFsIFZpZGVvIFZlcnNpb24KICAqLwogdHlwZWRlZiBlbnVtIE9NWF9WSURFT19SVkZPUk1BVFRZUEUgewogICAgIE9NWF9WSURFT19SVkZvcm1hdFVudXNlZCA9IDAsIC8qKjwgRm9ybWF0IHVudXNlZCBvciB1bmtub3duICovCiAgICAgT01YX1ZJREVPX1JWRm9ybWF0OCwgICAgICAgICAgLyoqPCBSZWFsIFZpZGVvIGZvcm1hdCA4ICovCiAgICAgT01YX1ZJREVPX1JWRm9ybWF0OSwgICAgICAgICAgLyoqPCBSZWFsIFZpZGVvIGZvcm1hdCA5ICovCiAgICAgT01YX1ZJREVPX1JWRm9ybWF0RzIsICAgICAgICAgLyoqPCBSZWFsIFZpZGVvIEZvcm1hdCBHMiAqLwotICAgIE9NWF9WSURFT19SVkZvcm1hdEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fUlZGb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fUlZGb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19SVkZvcm1hdE1heCA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX1JWRk9STUFUVFlQRTsKIAogCi0vKiogCi0gKiBSZWFsIFZpZGVvIFBhcmFtcyAKKy8qKgorICogUmVhbCBWaWRlbyBQYXJhbXMKICAqCiAgKiBTVFVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwotICogIG5WZXJzaW9uICAgICAgICAgICA6IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gCisgKiAgblZlcnNpb24gICAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCiAgKiAgZUZvcm1hdCAgICAgICAgICAgIDogVmVyc2lvbiBvZiBSViBzdHJlYW0gLyBkYXRhCiAgKiAgbkJpdHNQZXJQaXhlbCAgICAgIDogQml0cyBwZXIgcGl4ZWwgY29kZWQgaW4gdGhlIGZyYW1lCkBAIC03NTUsMTEgKzc1NSwxMSBAQAogICogIG5NYXhFbmNvZGVGcmFtZVNpemU6IE1heCBlbmNvZGVkIGZyYW1lIHNpemUKICAqICBiRW5hYmxlUG9zdEZpbHRlciAgOiBUdXJuIG9uL29mZiBwb3N0IGZpbHRlcgogICogIGJFbmFibGVUZW1wb3JhbEludGVycG9sYXRpb24gOiBUdXJuIG9uL29mZiB0ZW1wb3JhbCBpbnRlcnBvbGF0aW9uCi0gKiAgYkVuYWJsZUxhdGVuY3lNb2RlIDogV2hlbiBlbmFibGVkLCB0aGUgZGVjb2RlciBkb2VzIG5vdCBkaXNwbGF5IGEgZGVjb2RlZCAKLSAqICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSB1bnRpbCBpdCBoYXMgZGV0ZWN0ZWQgdGhhdCBubyBlbmhhbmNlbWVudCBsYXllciAKLSAqICAJCQkJCSBmcmFtZXMgb3IgZGVwZW5kZW50IEIgZnJhbWVzIHdpbGwgYmUgY29taW5nLiBUaGlzIAotICogIAkJCQkJIGRldGVjdGlvbiB1c3VhbGx5IG9jY3VycyB3aGVuIGEgc3Vic2VxdWVudCBub24tQiAKLSAqICAJCQkJCSBmcmFtZSBpcyBlbmNvdW50ZXJlZCAKKyAqICBiRW5hYmxlTGF0ZW5jeU1vZGUgOiBXaGVuIGVuYWJsZWQsIHRoZSBkZWNvZGVyIGRvZXMgbm90IGRpc3BsYXkgYSBkZWNvZGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgdW50aWwgaXQgaGFzIGRldGVjdGVkIHRoYXQgbm8gZW5oYW5jZW1lbnQgbGF5ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgb3IgZGVwZW5kZW50IEIgZnJhbWVzIHdpbGwgYmUgY29taW5nLiBUaGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0aW9uIHVzdWFsbHkgb2NjdXJzIHdoZW4gYSBzdWJzZXF1ZW50IG5vbi1CCisgKiAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgaXMgZW5jb3VudGVyZWQKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX1BBUkFNX1JWVFlQRSB7CiAgICAgT01YX1UzMiBuU2l6ZTsKQEAgLTc3OSw4ICs3NzksOCBAQAogfSBPTVhfVklERU9fUEFSQU1fUlZUWVBFOwogCiAKLS8qKiAKLSAqIEFWQyBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgCisvKioKKyAqIEFWQyBwcm9maWxlIHR5cGVzLCBlYWNoIHByb2ZpbGUgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMKICAqIHBlcmZvcm1hbmNlIGJvdW5kcyBhbmQgZGlmZmVyZW50IGFubmV4ZXMuCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfVklERU9fQVZDUFJPRklMRVRZUEUgewpAQCAtNzkxLDE1ICs3OTEsMTUgQEAKICAgICBPTVhfVklERU9fQVZDUHJvZmlsZUhpZ2gxMCAgID0gMHgxMCwgICAvKio8IEhpZ2ggMTAgcHJvZmlsZSAqLwogICAgIE9NWF9WSURFT19BVkNQcm9maWxlSGlnaDQyMiAgPSAweDIwLCAgIC8qKjwgSGlnaCA0OjI6MiBwcm9maWxlICovCiAgICAgT01YX1ZJREVPX0FWQ1Byb2ZpbGVIaWdoNDQ0ICA9IDB4NDAsICAgLyoqPCBIaWdoIDQ6NDo0IHByb2ZpbGUgKi8KLSAgICBPTVhfVklERU9fQVZDUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fQVZDUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19BVkNQcm9maWxlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfVklERU9fQVZDUHJvZmlsZU1heCAgICAgID0gMHg3RkZGRkZGRiAgCisgICAgT01YX1ZJREVPX0FWQ1Byb2ZpbGVNYXggICAgICA9IDB4N0ZGRkZGRkYKIH0gT01YX1ZJREVPX0FWQ1BST0ZJTEVUWVBFOwogCiAKLS8qKiAKLSAqIEFWQyBsZXZlbCB0eXBlcywgZWFjaCBsZXZlbCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdmFyaW91cyBmcmFtZSBzaXplcywgCi0gKiBiaXQgcmF0ZXMsIGRlY29kZXIgZnJhbWUgcmF0ZXMuICBObyBuZWVkIAorLyoqCisgKiBBVkMgbGV2ZWwgdHlwZXMsIGVhY2ggbGV2ZWwgaW5kaWNhdGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgZnJhbWUgc2l6ZXMsCisgKiBiaXQgcmF0ZXMsIGRlY29kZXIgZnJhbWUgcmF0ZXMuICBObyBuZWVkCiAgKi8KIHR5cGVkZWYgZW51bSBPTVhfVklERU9fQVZDTEVWRUxUWVBFIHsKICAgICBPTVhfVklERU9fQVZDTGV2ZWwxICAgPSAweDAxLCAgICAgLyoqPCBMZXZlbCAxICovCkBAIC04MTksMTQgKzgxOSwxNCBAQAogICAgIE9NWF9WSURFT19BVkNMZXZlbDUgICA9IDB4NDAwMCwgICAvKio8IExldmVsIDUgKi8KICAgICBPTVhfVklERU9fQVZDTGV2ZWw1MSAgPSAweDgwMDAsICAgLyoqPCBMZXZlbCA1LjEgKi8KICAgICBPTVhfVklERU9fQVZDTGV2ZWw1MiAgPSAweDEwMDAwLCAgLyoqPCBMZXZlbCA1LjIgKi8KLSAgICBPTVhfVklERU9fQVZDTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0FWQ0xldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX0FWQ0xldmVsVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KLSAgICBPTVhfVklERU9fQVZDTGV2ZWxNYXggPSAweDdGRkZGRkZGICAKKyAgICBPTVhfVklERU9fQVZDTGV2ZWxNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19BVkNMRVZFTFRZUEU7CiAKIAotLyoqIAotICogQVZDIGxvb3AgZmlsdGVyIG1vZGVzIAorLyoqCisgKiBBVkMgbG9vcCBmaWx0ZXIgbW9kZXMKICAqCiAgKiBPTVhfVklERU9fQVZDTG9vcEZpbHRlckVuYWJsZSAgICAgICAgICAgICAgIDogRW5hYmxlCiAgKiBPTVhfVklERU9fQVZDTG9vcEZpbHRlckRpc2FibGUgICAgICAgICAgICAgIDogRGlzYWJsZQpAQCAtODM2LDIwICs4MzYsMjAgQEAKICAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlckVuYWJsZSA9IDAsCiAgICAgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJEaXNhYmxlLAogICAgIE9NWF9WSURFT19BVkNMb29wRmlsdGVyRGlzYWJsZVNsaWNlQm91bmRhcnksCi0gICAgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCisgICAgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fQVZDTG9vcEZpbHRlclZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgT01YX1ZJREVPX0FWQ0xvb3BGaWx0ZXJNYXggPSAweDdGRkZGRkZGCiB9IE9NWF9WSURFT19BVkNMT09QRklMVEVSVFlQRTsKIAogCi0vKiogCi0gKiBBVkMgcGFyYW1zIAorLyoqCisgKiBBVkMgcGFyYW1zCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CiAgKiAgblNpemUgICAgICAgICAgICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwogICogIG5WZXJzaW9uICAgICAgICAgICAgICAgICAgOiBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uCiAgKiAgblBvcnRJbmRleCAgICAgICAgICAgICAgICA6IFBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvCi0gKiAgblNsaWNlSGVhZGVyU3BhY2luZyAgICAgICA6IE51bWJlciBvZiBtYWNyb2Jsb2NrcyBiZXR3ZWVuIHNsaWNlIGhlYWRlciwgcHV0ICAKKyAqICBuU2xpY2VIZWFkZXJTcGFjaW5nICAgICAgIDogTnVtYmVyIG9mIG1hY3JvYmxvY2tzIGJldHdlZW4gc2xpY2UgaGVhZGVyLCBwdXQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVybyBpZiBub3QgdXNlZAogICogIG5QRnJhbWVzICAgICAgICAgICAgICAgICAgOiBOdW1iZXIgb2YgUCBmcmFtZXMgYmV0d2VlbiBlYWNoIEkgZnJhbWUKICAqICBuQkZyYW1lcyAgICAgICAgICAgICAgICAgIDogTnVtYmVyIG9mIEIgZnJhbWVzIGJldHdlZW4gZWFjaCBJIGZyYW1lCkBAIC04NjIsODUgKzg2Miw4NSBAQAogICogIG5SZWZJZHhGb3J3YXJkICAgICAgICAgICAgOiBQaWMgcGFyYW0gc2V0IHJlZiBmcmFtZSBpbmRleCAoaW5kZXggaW50byByZWYKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgYnVmZmVyIG9mIGZvcndhcmQgZnJhbWVzIGxpc3QpLCBCIGZyYW1lCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQKLSAqICBiRW5hYmxlVUVQICAgICAgICAgICAgICAgIDogRW5hYmxlL2Rpc2FibGUgdW5lcXVhbCBlcnJvciBwcm90ZWN0aW9uLiBUaGlzIAorICogIGJFbmFibGVVRVAgICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSB1bmVxdWFsIGVycm9yIHByb3RlY3Rpb24uIFRoaXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgb25seSB2YWxpZCBvZiBkYXRhIHBhcnRpdGlvbmluZyBpcyBlbmFibGVkLgogICogIGJFbmFibGVGTU8gICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSBmbGV4aWJsZSBtYWNyb2Jsb2NrIG9yZGVyaW5nCiAgKiAgYkVuYWJsZUFTTyAgICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGFyYml0cmFyeSBzbGljZSBvcmRlcmluZwogICogIGJFbmFibGVSUyAgICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSBzZW5kaW5nIG9mIHJlZHVuZGFudCBzbGljZXMKICAqICBlUHJvZmlsZSAgICAgICAgICAgICAgICAgIDogQVZDIHByb2ZpbGUocykgdG8gdXNlCiAgKiAgZUxldmVsICAgICAgICAgICAgICAgICAgICA6IEFWQyBsZXZlbChzKSB0byB1c2UKLSAqICBuQWxsb3dlZFBpY3R1cmVUeXBlcyAgICAgIDogU3BlY2lmaWVzIHRoZSBwaWN0dXJlIHR5cGVzIGFsbG93ZWQgaW4gdGhlIAorICogIG5BbGxvd2VkUGljdHVyZVR5cGVzICAgICAgOiBTcGVjaWZpZXMgdGhlIHBpY3R1cmUgdHlwZXMgYWxsb3dlZCBpbiB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c3RyZWFtCi0gKiAgYkZyYW1lTUJzT25seSAgICAgICAgICAgICA6IHNwZWNpZmllcyB0aGF0IGV2ZXJ5IGNvZGVkIHBpY3R1cmUgb2YgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlZCB2aWRlbyBzZXF1ZW5jZSBpcyBhIGNvZGVkIGZyYW1lIAorICogIGJGcmFtZU1Cc09ubHkgICAgICAgICAgICAgOiBzcGVjaWZpZXMgdGhhdCBldmVyeSBjb2RlZCBwaWN0dXJlIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlZCB2aWRlbyBzZXF1ZW5jZSBpcyBhIGNvZGVkIGZyYW1lCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgb25seSBmcmFtZSBtYWNyb2Jsb2NrcwotICogIGJNQkFGRiAgICAgICAgICAgICAgICAgICAgOiBFbmFibGUvZGlzYWJsZSBzd2l0Y2hpbmcgYmV0d2VlbiBmcmFtZSBhbmQgCisgKiAgYk1CQUZGICAgICAgICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIHN3aXRjaGluZyBiZXR3ZWVuIGZyYW1lIGFuZAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCBtYWNyb2Jsb2NrcyB3aXRoaW4gYSBwaWN0dXJlCi0gKiAgYkVudHJvcHlDb2RpbmdDQUJBQyAgICAgICA6IEVudHJvcHkgZGVjb2RpbmcgbWV0aG9kIHRvIGJlIGFwcGxpZWQgZm9yIHRoZSAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IGVsZW1lbnRzIGZvciB3aGljaCB0d28gZGVzY3JpcHRvcnMgYXBwZWFyIAorICogIGJFbnRyb3B5Q29kaW5nQ0FCQUMgICAgICAgOiBFbnRyb3B5IGRlY29kaW5nIG1ldGhvZCB0byBiZSBhcHBsaWVkIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IGVsZW1lbnRzIGZvciB3aGljaCB0d28gZGVzY3JpcHRvcnMgYXBwZWFyCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBzeW50YXggdGFibGVzCi0gKiAgYldlaWdodGVkUFByZWRpY3Rpb24gICAgICA6IEVuYWJsZS9kaXNhYmxlIHdlaWdodGVkIHByZWRpY3Rpb24gc2hhbGwgbm90IAorICogIGJXZWlnaHRlZFBQcmVkaWN0aW9uICAgICAgOiBFbmFibGUvZGlzYWJsZSB3ZWlnaHRlZCBwcmVkaWN0aW9uIHNoYWxsIG5vdAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBhcHBsaWVkIHRvIFAgYW5kIFNQIHNsaWNlcwotICogIG5XZWlnaHRlZEJpcHJlZGljaXRvbk1vZGUgOiBEZWZhdWx0IHdlaWdodGVkIHByZWRpY3Rpb24gaXMgYXBwbGllZCB0byBCIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZXMgCisgKiAgbldlaWdodGVkQmlwcmVkaWNpdG9uTW9kZSA6IERlZmF1bHQgd2VpZ2h0ZWQgcHJlZGljdGlvbiBpcyBhcHBsaWVkIHRvIEIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VzCiAgKiAgYmNvbnN0SXByZWQgICAgICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGludHJhIHByZWRpY3Rpb24KLSAqICBiRGlyZWN0OHg4SW5mZXJlbmNlICAgICAgIDogU3BlY2lmaWVzIHRoZSBtZXRob2QgdXNlZCBpbiB0aGUgZGVyaXZhdGlvbiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBmb3IgbHVtYSBtb3Rpb24gdmVjdG9ycyBmb3IgQl9Ta2lwLCAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQl9EaXJlY3RfMTZ4MTYgYW5kIEJfRGlyZWN0Xzh4OCBhcyBzcGVjaWZpZWQgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHN1YmNsYXVzZSA4LjQuMS4yIG9mIHRoZSBBVkMgc3BlYyAKKyAqICBiRGlyZWN0OHg4SW5mZXJlbmNlICAgICAgIDogU3BlY2lmaWVzIHRoZSBtZXRob2QgdXNlZCBpbiB0aGUgZGVyaXZhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGZvciBsdW1hIG1vdGlvbiB2ZWN0b3JzIGZvciBCX1NraXAsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJfRGlyZWN0XzE2eDE2IGFuZCBCX0RpcmVjdF84eDggYXMgc3BlY2lmaWVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHN1YmNsYXVzZSA4LjQuMS4yIG9mIHRoZSBBVkMgc3BlYwogICogIGJEaXJlY3RTcGF0aWFsVGVtcG9yYWwgICAgOiBGbGFnIGluZGljYXRpbmcgc3BhdGlhbCBvciB0ZW1wb3JhbCBkaXJlY3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSB1c2VkIGluIEIgc2xpY2UgY29kaW5nIChyZWxhdGVkIHRvIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiRGlyZWN0OHg4SW5mZXJlbmNlKSAuIFNwYXRpYWwgZGlyZWN0IG1vZGUgaXMgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgdXNlZCBpbiBCIHNsaWNlIGNvZGluZyAocmVsYXRlZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiRGlyZWN0OHg4SW5mZXJlbmNlKSAuIFNwYXRpYWwgZGlyZWN0IG1vZGUgaXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBjb21tb24gYW5kIHNob3VsZCBiZSB0aGUgZGVmYXVsdC4KICAqICBuQ2FiYWNJbml0SWR4ICAgICAgICAgICAgIDogSW5kZXggdXNlZCB0byBpbml0IENBQkFDIGNvbnRleHRzCiAgKiAgZUxvb3BGaWx0ZXJNb2RlICAgICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGxvb3AgZmlsdGVyCiAgKi8KIHR5cGVkZWYgc3RydWN0IE9NWF9WSURFT19QQVJBTV9BVkNUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgIAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAKLSAgICBPTVhfVTMyIG5TbGljZUhlYWRlclNwYWNpbmc7ICAKLSAgICBPTVhfVTMyIG5QRnJhbWVzOyAgICAgCi0gICAgT01YX1UzMiBuQkZyYW1lczsgICAgIAorICAgIE9NWF9VMzIgblNpemU7CisgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOworICAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgICBPTVhfVTMyIG5TbGljZUhlYWRlclNwYWNpbmc7CisgICAgT01YX1UzMiBuUEZyYW1lczsKKyAgICBPTVhfVTMyIG5CRnJhbWVzOwogICAgIE9NWF9CT09MIGJVc2VIYWRhbWFyZDsKLSAgICBPTVhfVTMyIG5SZWZGcmFtZXM7ICAKLQlPTVhfVTMyIG5SZWZJZHgxMEFjdGl2ZU1pbnVzMTsKLQlPTVhfVTMyIG5SZWZJZHgxMUFjdGl2ZU1pbnVzMTsKLSAgICBPTVhfQk9PTCBiRW5hYmxlVUVQOyAgCi0gICAgT01YX0JPT0wgYkVuYWJsZUZNTzsgIAotICAgIE9NWF9CT09MIGJFbmFibGVBU087ICAKLSAgICBPTVhfQk9PTCBiRW5hYmxlUlM7ICAgCisgICAgT01YX1UzMiBuUmVmRnJhbWVzOworICAgIE9NWF9VMzIgblJlZklkeDEwQWN0aXZlTWludXMxOworICAgIE9NWF9VMzIgblJlZklkeDExQWN0aXZlTWludXMxOworICAgIE9NWF9CT09MIGJFbmFibGVVRVA7CisgICAgT01YX0JPT0wgYkVuYWJsZUZNTzsKKyAgICBPTVhfQk9PTCBiRW5hYmxlQVNPOworICAgIE9NWF9CT09MIGJFbmFibGVSUzsKICAgICBPTVhfVklERU9fQVZDUFJPRklMRVRZUEUgZVByb2ZpbGU7Ci0JT01YX1ZJREVPX0FWQ0xFVkVMVFlQRSBlTGV2ZWw7IAotICAgIE9NWF9VMzIgbkFsbG93ZWRQaWN0dXJlVHlwZXM7ICAKLQlPTVhfQk9PTCBiRnJhbWVNQnNPbmx5OyAgICAgICAgCQkJCQkJCQkJCi0gICAgT01YX0JPT0wgYk1CQUZGOyAgICAgICAgICAgICAgIAotICAgIE9NWF9CT09MIGJFbnRyb3B5Q29kaW5nQ0FCQUM7ICAKLSAgICBPTVhfQk9PTCBiV2VpZ2h0ZWRQUHJlZGljdGlvbjsgCi0gICAgT01YX1UzMiBuV2VpZ2h0ZWRCaXByZWRpY2l0b25Nb2RlOyAKKyAgICBPTVhfVklERU9fQVZDTEVWRUxUWVBFIGVMZXZlbDsKKyAgICBPTVhfVTMyIG5BbGxvd2VkUGljdHVyZVR5cGVzOworICAgIE9NWF9CT09MIGJGcmFtZU1Cc09ubHk7CisgICAgT01YX0JPT0wgYk1CQUZGOworICAgIE9NWF9CT09MIGJFbnRyb3B5Q29kaW5nQ0FCQUM7CisgICAgT01YX0JPT0wgYldlaWdodGVkUFByZWRpY3Rpb247CisgICAgT01YX1UzMiBuV2VpZ2h0ZWRCaXByZWRpY2l0b25Nb2RlOwogICAgIE9NWF9CT09MIGJjb25zdElwcmVkIDsKLSAgICBPTVhfQk9PTCBiRGlyZWN0OHg4SW5mZXJlbmNlOyAgCi0JT01YX0JPT0wgYkRpcmVjdFNwYXRpYWxUZW1wb3JhbDsKLQlPTVhfVTMyIG5DYWJhY0luaXRJZGM7Ci0JT01YX1ZJREVPX0FWQ0xPT1BGSUxURVJUWVBFIGVMb29wRmlsdGVyTW9kZTsKKyAgICBPTVhfQk9PTCBiRGlyZWN0OHg4SW5mZXJlbmNlOworICAgIE9NWF9CT09MIGJEaXJlY3RTcGF0aWFsVGVtcG9yYWw7CisgICAgT01YX1UzMiBuQ2FiYWNJbml0SWRjOworICAgIE9NWF9WSURFT19BVkNMT09QRklMVEVSVFlQRSBlTG9vcEZpbHRlck1vZGU7CiB9IE9NWF9WSURFT19QQVJBTV9BVkNUWVBFOwogCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fUFJPRklMRUxFVkVMVFlQRSB7Ci0gICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgCi0gICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgCi0gICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgICAgCi0gICBPTVhfVTMyIGVQcm9maWxlOyAgICAgIC8qKjwgdHlwZSBpcyBPTVhfVklERU9fQVZDUFJPRklMRVRZUEUsIE9NWF9WSURFT19IMjYzUFJPRklMRVRZUEUsIAorICAgT01YX1UzMiBuU2l6ZTsKKyAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKKyAgIE9NWF9VMzIgblBvcnRJbmRleDsKKyAgIE9NWF9VMzIgZVByb2ZpbGU7ICAgICAgLyoqPCB0eXBlIGlzIE9NWF9WSURFT19BVkNQUk9GSUxFVFlQRSwgT01YX1ZJREVPX0gyNjNQUk9GSUxFVFlQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIE9NWF9WSURFT19NUEVHNFBST0ZJTEVUWVBFIGRlcGVuZGluZyBvbiBjb250ZXh0ICovCi0gICBPTVhfVTMyIGVMZXZlbDsgICAgICAgIC8qKjwgdHlwZSBpcyBPTVhfVklERU9fQVZDTEVWRUxUWVBFLCBPTVhfVklERU9fSDI2M0xFVkVMVFlQRSwgCisgICBPTVhfVTMyIGVMZXZlbDsgICAgICAgIC8qKjwgdHlwZSBpcyBPTVhfVklERU9fQVZDTEVWRUxUWVBFLCBPTVhfVklERU9fSDI2M0xFVkVMVFlQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIE9NWF9WSURFT19NUEVHNFBST0ZJTEVUWVBFIGRlcGVuZGluZyBvbiBjb250ZXh0ICovCiAgICBPTVhfVTMyIG5Qcm9maWxlSW5kZXg7IC8qKjwgVXNlZCB0byBxdWVyeSBmb3IgaW5kaXZpZHVhbCBwcm9maWxlIHN1cHBvcnQgaW5mb3JtYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdmFsaWQgb25seSBmb3IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdmFsaWQgb25seSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTVhfSW5kZXhQYXJhbVZpZGVvUHJvZmlsZUxldmVsUXVlcnlTdXBwb3J0ZWQgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFsbCBvdGhlciBpbmRpY2VzIHRoaXMgcGFyYW1ldGVyIGlzIHRvIGJlIGlnbm9yZWQuICovCiB9IE9NWF9WSURFT19QQVJBTV9QUk9GSUxFTEVWRUxUWVBFOwogCi0vKiogCi0gKiBTdHJ1Y3R1cmUgZm9yIGR5bmFtaWNhbGx5IGNvbmZpZ3VyaW5nIGJpdHJhdGUgbW9kZSBvZiBhIGNvZGVjLiAKKy8qKgorICogU3RydWN0dXJlIGZvciBkeW5hbWljYWxseSBjb25maWd1cmluZyBiaXRyYXRlIG1vZGUgb2YgYSBjb2RlYy4KICAqCiAgKiBTVFJVQ1QgTUVNQkVSUzoKICAqICBuU2l6ZSAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdCBpbiBieXRlcwpAQCAtOTQ5LDE4ICs5NDksMTggQEAKICAqICBuRW5jb2RlQml0cmF0ZSA6IFRhcmdldCBhdmVyYWdlIGJpdHJhdGUgdG8gYmUgZ2VuZXJhdGVkIGluIGJwcwogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fQ09ORklHX0JJVFJBVEVUWVBFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAgICAgICAgIAotICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAgICAgICAKLSAgICBPTVhfVTMyIG5FbmNvZGVCaXRyYXRlOyAgICAgICAgICAgICAgICAgCisgICAgT01YX1UzMiBuU2l6ZTsKKyAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CisgICAgT01YX1UzMiBuUG9ydEluZGV4OworICAgIE9NWF9VMzIgbkVuY29kZUJpdHJhdGU7CiB9IE9NWF9WSURFT19DT05GSUdfQklUUkFURVRZUEU7CiAKLS8qKiAKKy8qKgogICogRGVmaW5lcyBFbmNvZGVyIEZyYW1lIFJhdGUgc2V0dGluZwogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKLSAqICBuVmVyc2lvbiAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAKKyAqICBuVmVyc2lvbiAgICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogICogIG5Qb3J0SW5kZXggICAgICAgOiBQb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bwogICogIHhFbmNvZGVGcmFtZXJhdGUgOiBFbmNvZGluZyBmcmFtZXJhdGUgcmVwcmVzZW50ZWQgaW4gUTE2IGZvcm1hdAogICovCkBAIC0xMDAwLDggKzEwMDAsOCBAQAogICAgIE9NWF9VMzIgbk1hY3JvYmxvY2tzOwogfSBPTVhfUEFSQU1fTUFDUk9CTE9DS1NUWVBFOwogCi0vKiogCi0gKiBBVkMgU2xpY2UgTW9kZSBtb2RlcyAKKy8qKgorICogQVZDIFNsaWNlIE1vZGUgbW9kZXMKICAqCiAgKiBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0RlZmF1bHQgICA6IE5vcm1hbCBmcmFtZSBlbmNvZGluZywgb25lIHNsaWNlIHBlciBmcmFtZQogICogT01YX1ZJREVPX1NMSUNFTU9ERV9BVkNNQlNsaWNlICAgOiBOQUwgbW9kZSwgbnVtYmVyIG9mIE1CcyBwZXIgZnJhbWUKQEAgLTEwMTEsMTMgKzEwMTEsMTMgQEAKICAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0RlZmF1bHQgPSAwLAogICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDTUJTbGljZSwKICAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0J5dGVTbGljZSwKLSAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKKyAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgIE9NWF9WSURFT19TTElDRU1PREVfQVZDVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICBPTVhfVklERU9fU0xJQ0VNT0RFX0FWQ0xldmVsTWF4ID0gMHg3RkZGRkZGRgogfSBPTVhfVklERU9fQVZDU0xJQ0VNT0RFVFlQRTsKIAotLyoqIAotICogQVZDIEZNTyBTbGljZSBNb2RlIFBhcmFtcyAKKy8qKgorICogQVZDIEZNTyBTbGljZSBNb2RlIFBhcmFtcwogICoKICAqIFNUUlVDVCBNRU1CRVJTOgogICogIG5TaXplICAgICAgOiBTaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMKQEAgLTEwMjgsNyArMTAyOCw3IEBACiAgKiAgZVNsaWNlTW9kZSA6IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBzbGljZQogICovCiB0eXBlZGVmIHN0cnVjdCBPTVhfVklERU9fUEFSQU1fQVZDU0xJQ0VGTU8gewotICAgIE9NWF9VMzIgblNpemU7IAorICAgIE9NWF9VMzIgblNpemU7CiAgICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgICBPTVhfVTggbk51bVNsaWNlR3JvdXBzOwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKICAgICBPTVhfVklERU9fQVZDU0xJQ0VNT0RFVFlQRSBlU2xpY2VNb2RlOwogfSBPTVhfVklERU9fUEFSQU1fQVZDU0xJQ0VGTU87CiAKLS8qKiAKKy8qKgogICogQVZDIElEUiBQZXJpb2QgQ29uZmlncwogICoKICAqIFNUUlVDVCBNRU1CRVJTOgpAQCAtMTA0NywxNCArMTA0NywxNCBAQAogICogIG5QRnJhbWVzIDogU3BlY2lmaWVzIGludGVybmFsIG9mIGNvZGluZyBJbnRyYSBmcmFtZXMKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX0NPTkZJR19BVkNJTlRSQVBFUklPRCB7Ci0gICAgT01YX1UzMiBuU2l6ZTsgCisgICAgT01YX1UzMiBuU2l6ZTsKICAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgIE9NWF9VMzIgbklEUlBlcmlvZDsKICAgICBPTVhfVTMyIG5QRnJhbWVzOwogfSBPTVhfVklERU9fQ09ORklHX0FWQ0lOVFJBUEVSSU9EOwogCi0vKiogCisvKioKICAqIEFWQyBOQUwgU2l6ZSBDb25maWdzCiAgKgogICogU1RSVUNUIE1FTUJFUlM6CkBAIC0xMDY0LDcgKzEwNjQsNyBAQAogICogIG5OYWx1Qnl0ZXMgOiBTcGVjaWZpZXMgdGhlIE5BTCB1bml0IHNpemUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgT01YX1ZJREVPX0NPTkZJR19OQUxTSVpFIHsKLSAgICBPTVhfVTMyIG5TaXplOyAKKyAgICBPTVhfVTMyIG5TaXplOwogICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICAgT01YX1UzMiBuTmFsdUJ5dGVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcml2YXRlL2JpbmRlci9TdGF0aWMuaCBiL2luY2x1ZGUvcHJpdmF0ZS9iaW5kZXIvU3RhdGljLmgKaW5kZXggNmEwMzU5NC4uZDEwNDY0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wcml2YXRlL2JpbmRlci9TdGF0aWMuaAorKysgYi9pbmNsdWRlL3ByaXZhdGUvYmluZGVyL1N0YXRpYy5oCkBAIC0zNCw3ICszNCw3IEBACiBleHRlcm4gTXV0ZXggZ1Byb2Nlc3NNdXRleDsKIGV4dGVybiBzcDxQcm9jZXNzU3RhdGU+IGdQcm9jZXNzOwogCi0vLyBGb3IgU2VydmljZU1hbmFnZXIuY3BwCisvLyBGb3IgSVNlcnZpY2VNYW5hZ2VyLmNwcAogZXh0ZXJuIE11dGV4IGdEZWZhdWx0U2VydmljZU1hbmFnZXJMb2NrOwogZXh0ZXJuIHNwPElTZXJ2aWNlTWFuYWdlcj4gZ0RlZmF1bHRTZXJ2aWNlTWFuYWdlcjsKIGV4dGVybiBzcDxJUGVybWlzc2lvbkNvbnRyb2xsZXI+IGdQZXJtaXNzaW9uQ29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2xpYnMvYmluZGVyL1BhcmNlbC5jcHAgYi9saWJzL2JpbmRlci9QYXJjZWwuY3BwCmluZGV4IGM1MjYzOTkuLjBmZjkwNDUgMTAwNjQ0Ci0tLSBhL2xpYnMvYmluZGVyL1BhcmNlbC5jcHAKKysrIGIvbGlicy9iaW5kZXIvUGFyY2VsLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGJpbmRlci9UZXh0T3V0cHV0Lmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHV0aWxzL0NhbGxTdGFjay5oPgogI2luY2x1ZGUgPHV0aWxzL0RlYnVnLmg+CiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAjaW5jbHVkZSA8dXRpbHMvU3RyaW5nOC5oPgpAQCAtMzYsOCArMzUsOCBAQAogI2luY2x1ZGUgPGN1dGlscy9hc2htZW0uaD4KIAogI2luY2x1ZGUgPHByaXZhdGUvYmluZGVyL2JpbmRlcl9tb2R1bGUuaD4KKyNpbmNsdWRlIDxwcml2YXRlL2JpbmRlci9TdGF0aWMuaD4KIAotI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNTAsNiArNDksOCBAQAogCiAjZGVmaW5lIExPR19SRUZTKC4uLikKIC8vI2RlZmluZSBMT0dfUkVGUyguLi4pIEFMT0coTE9HX0RFQlVHLCAiUGFyY2VsIiwgX19WQV9BUkdTX18pCisjZGVmaW5lIExPR19BTExPQyguLi4pCisvLyNkZWZpbmUgTE9HX0FMTE9DKC4uLikgQUxPRyhMT0dfREVCVUcsICJQYXJjZWwiLCBfX1ZBX0FSR1NfXykKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTc0LDYgKzc1LDEwIEBACiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAorc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnUGFyY2VsR2xvYmFsQWxsb2NTaXplTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgc2l6ZV90IGdQYXJjZWxHbG9iYWxBbGxvY1NpemUgPSAwOworc3RhdGljIHNpemVfdCBnUGFyY2VsR2xvYmFsQWxsb2NDb3VudCA9IDA7CisKIHZvaWQgYWNxdWlyZV9vYmplY3QoY29uc3Qgc3A8UHJvY2Vzc1N0YXRlPiYgcHJvYywKICAgICBjb25zdCBmbGF0X2JpbmRlcl9vYmplY3QmIG9iaiwgY29uc3Qgdm9pZCogd2hvKQogewpAQCAtMjkzLDEyICsyOTgsMjggQEAKIAogUGFyY2VsOjpQYXJjZWwoKQogeworICAgIExPR19BTExPQygiUGFyY2VsICVwOiBjb25zdHJ1Y3RpbmciLCB0aGlzKTsKICAgICBpbml0U3RhdGUoKTsKIH0KIAogUGFyY2VsOjp+UGFyY2VsKCkKIHsKICAgICBmcmVlRGF0YU5vSW5pdCgpOworICAgIExPR19BTExPQygiUGFyY2VsICVwOiBkZXN0cm95ZWQiLCB0aGlzKTsKK30KKworc2l6ZV90IFBhcmNlbDo6Z2V0R2xvYmFsQWxsb2NTaXplKCkgeworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZUxvY2spOworICAgIHNpemVfdCBzaXplID0gZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZUxvY2spOworICAgIHJldHVybiBzaXplOworfQorCitzaXplX3QgUGFyY2VsOjpnZXRHbG9iYWxBbGxvY0NvdW50KCkgeworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZUxvY2spOworICAgIHNpemVfdCBjb3VudCA9IGdQYXJjZWxHbG9iYWxBbGxvY0NvdW50OworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnUGFyY2VsR2xvYmFsQWxsb2NTaXplTG9jayk7CisgICAgcmV0dXJuIGNvdW50OwogfQogCiBjb25zdCB1aW50OF90KiBQYXJjZWw6OmRhdGEoKSBjb25zdApAQCAtNzc0LDI5ICs3OTUsNiBAQAogc3RhdHVzX3QgUGFyY2VsOjp3cml0ZUR1cEZpbGVEZXNjcmlwdG9yKGludCBmZCkKIHsKICAgICBpbnQgZHVwRmQgPSBkdXAoZmQpOwotCi0gICAgeyAgIC8vIFRlbXBvcmFyeSBleHRyYSBkZWJ1ZyB2YWxpZGF0aW9uIGZvciBiLzE3NDc3MjE5OiBhIFBhcmNlbCByZWNpcGllbnQgaXMKLSAgICAgICAgLy8gZ2V0dGluZyBhIHBvc2l0aXZlIGJ1dCBpbnZhbGlkIGZkIHVuZXhwZWN0ZWRseS4gVHJ5aW5nIHRvIHRyYWNrIGRvd24KLSAgICAgICAgLy8gd2hlcmUgaXQncyBjb21pbmcgZnJvbS4KLSAgICAgICAgaW50IGR1cEVycm5vID0gZHVwRmQgPCAwID8gZXJybm8gOiAwOwotICAgICAgICBpbnQgZmRGbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZEKTsKLSAgICAgICAgaW50IGZkRmxhZ3NFcnJubyA9IGZkRmxhZ3MgPT0gLTEgPyBlcnJubyA6IDA7Ci0gICAgICAgIGludCBkdXBGbGFncyA9IGZjbnRsKGR1cEZkLCBGX0dFVEZEKTsKLSAgICAgICAgaW50IGR1cEZsYWdzRXJybm8gPSBkdXBGbGFncyA9PSAtMSA/IGVycm5vIDogMDsKLSAgICAgICAgaWYgKGR1cEZkIDwgMCB8fCBmZEZsYWdzID09IC0xIHx8IGR1cEZsYWdzID09IC0xKSB7Ci0gICAgICAgICAgICBBTE9HRSgiUGFyY2VsOjp3cml0ZUR1cEZpbGVEZXNjcmlwdG9yIGZhaWxlZDpcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgZmQ9JWQgZmxhZ3M9JWQgZXJyPSVkKCVzKVxuIgotICAgICAgICAgICAgICAgICAgICAiICBkdXBGZD0lZCBkdXBFcnI9JWQoJXMpIGZsYWdzPSVkIGVycj0lZCglcykiLAotICAgICAgICAgICAgICAgICAgICBmZCwgZmRGbGFncywgZmRGbGFnc0Vycm5vLCBzdHJlcnJvcihmZEZsYWdzRXJybm8pLAotICAgICAgICAgICAgICAgICAgICBkdXBGZCwgZHVwRXJybm8sIHN0cmVycm9yKGR1cEVycm5vKSwKLSAgICAgICAgICAgICAgICAgICAgZHVwRmxhZ3MsIGR1cEZsYWdzRXJybm8sIHN0cmVycm9yKGR1cEZsYWdzRXJybm8pKTsKLSAgICAgICAgICAgIGlmIChmZCA8IDAgfHwgZmRGbGFncyA9PSAtMSkgewotICAgICAgICAgICAgICAgIENhbGxTdGFjayhMT0dfVEFHKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtZXJybm87Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoZHVwRmQgPCAwKSB7CiAgICAgICAgIHJldHVybiAtZXJybm87CiAgICAgfQpAQCAtMTMyMCwyMyArMTMxOCwxMSBAQAogCiAgICAgc3RhdHVzX3QgZXJyID0gTk9fRVJST1I7CiAgICAgZm9yIChzaXplX3QgaT0wIDsgaTxmZF9jb3VudCAmJiBlcnI9PU5PX0VSUk9SIDsgaSsrKSB7Ci0gICAgICAgIGludCBvbGRmZCA9IHRoaXMtPnJlYWRGaWxlRGVzY3JpcHRvcigpOwotICAgICAgICBmZHNbaV0gPSBkdXAob2xkZmQpOworICAgICAgICBmZHNbaV0gPSBkdXAodGhpcy0+cmVhZEZpbGVEZXNjcmlwdG9yKCkpOwogICAgICAgICBpZiAoZmRzW2ldIDwgMCkgewotICAgICAgICAgICAgaW50IGR1cEVycm5vID0gZXJybm87CiAgICAgICAgICAgICBlcnIgPSBCQURfVkFMVUU7Ci0gICAgICAgICAgICBpbnQgZmxhZ3MgPSBmY250bChvbGRmZCwgRl9HRVRGRCk7Ci0gICAgICAgICAgICBpbnQgZmNudGxFcnJubyA9IGVycm5vOwotICAgICAgICAgICAgY29uc3QgZmxhdF9iaW5kZXJfb2JqZWN0KiBmbGF0ID0gcmVhZE9iamVjdCh0cnVlKTsKLSAgICAgICAgICAgIEFMT0dFKCJkdXAgZmFpbGVkIGluIFBhcmNlbDo6cmVhZCwgZmQgJXp1IG9mICV6dVxuIgotICAgICAgICAgICAgICAgICIgIGR1cCglZCkgPSAlZCBbZXJybm86ICVkICglcyldXG4iCi0gICAgICAgICAgICAgICAgIiAgZmNudGwoJWQsIEZfR0VURkQpID0gJWQgW2Vycm5vOiAlZCAoJXMpXVxuIgotICAgICAgICAgICAgICAgICIgIGZsYXQgJXAgdHlwZSAlZCIsCi0gICAgICAgICAgICAgICAgaSwgZmRfY291bnQsCi0gICAgICAgICAgICAgICAgb2xkZmQsIGZkc1tpXSwgZHVwRXJybm8sIHN0cmVycm9yKGR1cEVycm5vKSwKLSAgICAgICAgICAgICAgICBvbGRmZCwgZmxhZ3MsIGZjbnRsRXJybm8sIHN0cmVycm9yKGZjbnRsRXJybm8pLAotICAgICAgICAgICAgICAgIGZsYXQsIGZsYXQgPyBmbGF0LT50eXBlIDogMCk7Ci0gICAgICAgICAgICBDYWxsU3RhY2soTE9HX1RBRyk7CisgICAgICAgICAgICBBTE9HRSgiZHVwKCkgZmFpbGVkIGluIFBhcmNlbDo6cmVhZCwgaSBpcyAlenUsIGZkc1tpXSBpcyAlZCwgZmRfY291bnQgaXMgJXp1LCBlcnJvcjogJXMiLAorICAgICAgICAgICAgICAgIGksIGZkc1tpXSwgZmRfY291bnQsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1NDAsMTEgKzE1MjYsMjAgQEAKIHZvaWQgUGFyY2VsOjpmcmVlRGF0YU5vSW5pdCgpCiB7CiAgICAgaWYgKG1Pd25lcikgeworICAgICAgICBMT0dfQUxMT0MoIlBhcmNlbCAlcDogZnJlZWluZyBvdGhlciBvd25lciBkYXRhIiwgdGhpcyk7CiAgICAgICAgIC8vQUxPR0koIkZyZWVpbmcgZGF0YSByZWYgb2YgJXAgKHBpZD0lZCkiLCB0aGlzLCBnZXRwaWQoKSk7CiAgICAgICAgIG1Pd25lcih0aGlzLCBtRGF0YSwgbURhdGFTaXplLCBtT2JqZWN0cywgbU9iamVjdHNTaXplLCBtT3duZXJDb29raWUpOwogICAgIH0gZWxzZSB7CisgICAgICAgIExPR19BTExPQygiUGFyY2VsICVwOiBmcmVlaW5nIGFsbG9jYXRlZCBkYXRhIiwgdGhpcyk7CiAgICAgICAgIHJlbGVhc2VPYmplY3RzKCk7Ci0gICAgICAgIGlmIChtRGF0YSkgZnJlZShtRGF0YSk7CisgICAgICAgIGlmIChtRGF0YSkgeworICAgICAgICAgICAgTE9HX0FMTE9DKCJQYXJjZWwgJXA6IGZyZWVpbmcgd2l0aCAlenUgY2FwYWNpdHkiLCB0aGlzLCBtRGF0YUNhcGFjaXR5KTsKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZUxvY2spOworICAgICAgICAgICAgZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZSAtPSBtRGF0YUNhcGFjaXR5OworICAgICAgICAgICAgZ1BhcmNlbEdsb2JhbEFsbG9jQ291bnQtLTsKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnUGFyY2VsR2xvYmFsQWxsb2NTaXplTG9jayk7CisgICAgICAgICAgICBmcmVlKG1EYXRhKTsKKyAgICAgICAgfQogICAgICAgICBpZiAobU9iamVjdHMpIGZyZWUobU9iamVjdHMpOwogICAgIH0KIH0KQEAgLTE1NzMsNiArMTU2OCwxMSBAQAogICAgIHJlbGVhc2VPYmplY3RzKCk7CiAKICAgICBpZiAoZGF0YSkgeworICAgICAgICBMT0dfQUxMT0MoIlBhcmNlbCAlcDogcmVzdGFydCBmcm9tICV6dSB0byAlenUgY2FwYWNpdHkiLCB0aGlzLCBtRGF0YUNhcGFjaXR5LCBkZXNpcmVkKTsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnUGFyY2VsR2xvYmFsQWxsb2NTaXplTG9jayk7CisgICAgICAgIGdQYXJjZWxHbG9iYWxBbGxvY1NpemUgKz0gZGVzaXJlZDsKKyAgICAgICAgZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZSAtPSBtRGF0YUNhcGFjaXR5OworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZUxvY2spOwogICAgICAgICBtRGF0YSA9IGRhdGE7CiAgICAgICAgIG1EYXRhQ2FwYWNpdHkgPSBkZXNpcmVkOwogICAgIH0KQEAgLTE2NTIsNiArMTY1MiwxMiBAQAogICAgICAgICBtT3duZXIodGhpcywgbURhdGEsIG1EYXRhU2l6ZSwgbU9iamVjdHMsIG1PYmplY3RzU2l6ZSwgbU93bmVyQ29va2llKTsKICAgICAgICAgbU93bmVyID0gTlVMTDsKIAorICAgICAgICBMT0dfQUxMT0MoIlBhcmNlbCAlcDogdGFraW5nIG93bmVyc2hpcCBvZiAlenUgY2FwYWNpdHkiLCB0aGlzLCBkZXNpcmVkKTsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnUGFyY2VsR2xvYmFsQWxsb2NTaXplTG9jayk7CisgICAgICAgIGdQYXJjZWxHbG9iYWxBbGxvY1NpemUgKz0gZGVzaXJlZDsKKyAgICAgICAgZ1BhcmNlbEdsb2JhbEFsbG9jQ291bnQrKzsKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdQYXJjZWxHbG9iYWxBbGxvY1NpemVMb2NrKTsKKwogICAgICAgICBtRGF0YSA9IGRhdGE7CiAgICAgICAgIG1PYmplY3RzID0gb2JqZWN0czsKICAgICAgICAgbURhdGFTaXplID0gKG1EYXRhU2l6ZSA8IGRlc2lyZWQpID8gbURhdGFTaXplIDogZGVzaXJlZDsKQEAgLTE2ODYsNiArMTY5MiwxMiBAQAogICAgICAgICBpZiAoZGVzaXJlZCA+IG1EYXRhQ2FwYWNpdHkpIHsKICAgICAgICAgICAgIHVpbnQ4X3QqIGRhdGEgPSAodWludDhfdCopcmVhbGxvYyhtRGF0YSwgZGVzaXJlZCk7CiAgICAgICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAgICAgIExPR19BTExPQygiUGFyY2VsICVwOiBjb250aW51ZSBmcm9tICV6dSB0byAlenUgY2FwYWNpdHkiLCB0aGlzLCBtRGF0YUNhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZCk7CisgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnUGFyY2VsR2xvYmFsQWxsb2NTaXplTG9jayk7CisgICAgICAgICAgICAgICAgZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZSArPSBkZXNpcmVkOworICAgICAgICAgICAgICAgIGdQYXJjZWxHbG9iYWxBbGxvY1NpemUgLT0gbURhdGFDYXBhY2l0eTsKKyAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1BhcmNlbEdsb2JhbEFsbG9jU2l6ZUxvY2spOwogICAgICAgICAgICAgICAgIG1EYXRhID0gZGF0YTsKICAgICAgICAgICAgICAgICBtRGF0YUNhcGFjaXR5ID0gZGVzaXJlZDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzaXJlZCA+IG1EYXRhQ2FwYWNpdHkpIHsKQEAgLTE3MTYsNiArMTcyOCwxMiBAQAogICAgICAgICAgICAgQUxPR0UoImNvbnRpbnVlV3JpdGU6ICV6dS8lcC8lenUvJXp1IiwgbURhdGFDYXBhY2l0eSwgbU9iamVjdHMsIG1PYmplY3RzQ2FwYWNpdHksIGRlc2lyZWQpOwogICAgICAgICB9CiAKKyAgICAgICAgTE9HX0FMTE9DKCJQYXJjZWwgJXA6IGFsbG9jYXRpbmcgd2l0aCAlenUgY2FwYWNpdHkiLCB0aGlzLCBkZXNpcmVkKTsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnUGFyY2VsR2xvYmFsQWxsb2NTaXplTG9jayk7CisgICAgICAgIGdQYXJjZWxHbG9iYWxBbGxvY1NpemUgKz0gZGVzaXJlZDsKKyAgICAgICAgZ1BhcmNlbEdsb2JhbEFsbG9jQ291bnQrKzsKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdQYXJjZWxHbG9iYWxBbGxvY1NpemVMb2NrKTsKKwogICAgICAgICBtRGF0YSA9IGRhdGE7CiAgICAgICAgIG1EYXRhU2l6ZSA9IG1EYXRhUG9zID0gMDsKICAgICAgICAgQUxPR1YoImNvbnRpbnVlV3JpdGUgU2V0dGluZyBkYXRhIHNpemUgb2YgJXAgdG8gJXp1IiwgdGhpcywgbURhdGFTaXplKTsKQEAgLTE3MjgsNiArMTc0Niw3IEBACiAKIHZvaWQgUGFyY2VsOjppbml0U3RhdGUoKQogeworICAgIExPR19BTExPQygiUGFyY2VsICVwOiBpbml0U3RhdGUiLCB0aGlzKTsKICAgICBtRXJyb3IgPSBOT19FUlJPUjsKICAgICBtRGF0YSA9IDA7CiAgICAgbURhdGFTaXplID0gMDsKZGlmZiAtLWdpdCBhL2xpYnMvYmluZGVyL1N0YXRpYy5jcHAgYi9saWJzL2JpbmRlci9TdGF0aWMuY3BwCmluZGV4IDIwNjI2OTIuLmNkOTUwOWYgMTAwNjQ0Ci0tLSBhL2xpYnMvYmluZGVyL1N0YXRpYy5jcHAKKysrIGIvbGlicy9iaW5kZXIvU3RhdGljLmNwcApAQCAtOTAsNyArOTAsNyBAQAogCiBzdGF0aWMgTGliQmluZGVySVBDdFN0YXRpY3MgZ0lQQ1N0YXRpY3M7CiAKLS8vIC0tLS0tLS0tLS0tLSBTZXJ2aWNlTWFuYWdlci5jcHAKKy8vIC0tLS0tLS0tLS0tLSBJU2VydmljZU1hbmFnZXIuY3BwCiAKIE11dGV4IGdEZWZhdWx0U2VydmljZU1hbmFnZXJMb2NrOwogc3A8SVNlcnZpY2VNYW5hZ2VyPiBnRGVmYXVsdFNlcnZpY2VNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvbGlicy9iaW5kZXIvVGV4dE91dHB1dC5jcHAgYi9saWJzL2JpbmRlci9UZXh0T3V0cHV0LmNwcAppbmRleCBkYjNlODU4Li4yZWQ1MTg4IDEwMDY0NAotLS0gYS9saWJzL2JpbmRlci9UZXh0T3V0cHV0LmNwcAorKysgYi9saWJzL2JpbmRlci9UZXh0T3V0cHV0LmNwcApAQCAtMTE2LDggKzExNiw4IEBACiAKIFRleHRPdXRwdXQmIG9wZXJhdG9yPDwoVGV4dE91dHB1dCYgdG8sIGNvbnN0IHZvaWQqIHZhbCkKIHsKLSAgICBjaGFyIGJ1ZlsxNl07Ci0gICAgc3ByaW50ZihidWYsICIlcCIsIHZhbCk7CisgICAgY2hhciBidWZbMzJdOworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcCIsIHZhbCk7CiAgICAgdG8ucHJpbnQoYnVmLCBzdHJsZW4oYnVmKSk7CiAgICAgcmV0dXJuIHRvOwogfQpkaWZmIC0tZ2l0IGEvbGlicy9ndWkvQnVmZmVySXRlbS5jcHAgYi9saWJzL2d1aS9CdWZmZXJJdGVtLmNwcAppbmRleCBkM2ZhNDNlLi5lNmZjNzkxIDEwMDY0NAotLS0gYS9saWJzL2d1aS9CdWZmZXJJdGVtLmNwcAorKysgYi9saWJzL2d1aS9CdWZmZXJJdGVtLmNwcApAQCAtMzYsNiArMzYsOCBAQAogICAgIG1Dcm9wLm1ha2VJbnZhbGlkKCk7CiB9CiAKK0J1ZmZlckl0ZW06On5CdWZmZXJJdGVtKCkge30KKwogQnVmZmVySXRlbTo6b3BlcmF0b3IgSUdyYXBoaWNCdWZmZXJDb25zdW1lcjo6QnVmZmVySXRlbSgpIGNvbnN0IHsKICAgICBJR3JhcGhpY0J1ZmZlckNvbnN1bWVyOjpCdWZmZXJJdGVtIGJ1ZmZlckl0ZW07CiAgICAgYnVmZmVySXRlbS5tR3JhcGhpY0J1ZmZlciA9IG1HcmFwaGljQnVmZmVyOwpkaWZmIC0tZ2l0IGEvbGlicy9ndWkvQnVmZmVyUXVldWUuY3BwIGIvbGlicy9ndWkvQnVmZmVyUXVldWUuY3BwCmluZGV4IGM0OWE4ODYuLjYxZmQ4YzQgMTAwNjQ0Ci0tLSBhL2xpYnMvZ3VpL0J1ZmZlclF1ZXVlLmNwcAorKysgYi9saWJzL2d1aS9CdWZmZXJRdWV1ZS5jcHAKQEAgLTMxLDEwICszMSwxMSBAQAogCiBCdWZmZXJRdWV1ZTo6UHJveHlDb25zdW1lckxpc3RlbmVyOjp+UHJveHlDb25zdW1lckxpc3RlbmVyKCkge30KIAotdm9pZCBCdWZmZXJRdWV1ZTo6UHJveHlDb25zdW1lckxpc3RlbmVyOjpvbkZyYW1lQXZhaWxhYmxlKCkgewordm9pZCBCdWZmZXJRdWV1ZTo6UHJveHlDb25zdW1lckxpc3RlbmVyOjpvbkZyYW1lQXZhaWxhYmxlKAorICAgICAgICBjb25zdCBhbmRyb2lkOjpCdWZmZXJJdGVtJiBpdGVtKSB7CiAgICAgc3A8Q29uc3VtZXJMaXN0ZW5lcj4gbGlzdGVuZXIobUNvbnN1bWVyTGlzdGVuZXIucHJvbW90ZSgpKTsKICAgICBpZiAobGlzdGVuZXIgIT0gTlVMTCkgewotICAgICAgICBsaXN0ZW5lci0+b25GcmFtZUF2YWlsYWJsZSgpOworICAgICAgICBsaXN0ZW5lci0+b25GcmFtZUF2YWlsYWJsZShpdGVtKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2xpYnMvZ3VpL0J1ZmZlclF1ZXVlUHJvZHVjZXIuY3BwIGIvbGlicy9ndWkvQnVmZmVyUXVldWVQcm9kdWNlci5jcHAKaW5kZXggZjlmNDczNC4uYmY5Yzg0ZCAxMDA2NDQKLS0tIGEvbGlicy9ndWkvQnVmZmVyUXVldWVQcm9kdWNlci5jcHAKKysrIGIvbGlicy9ndWkvQnVmZmVyUXVldWVQcm9kdWNlci5jcHAKQEAgLTM4LDcgKzM4LDEyIEBACiAgICAgbUNvcmUoY29yZSksCiAgICAgbVNsb3RzKGNvcmUtPm1TbG90cyksCiAgICAgbUNvbnN1bWVyTmFtZSgpLAotICAgIG1TdGlja3lUcmFuc2Zvcm0oMCkge30KKyAgICBtU3RpY2t5VHJhbnNmb3JtKDApLAorICAgIG1MYXN0UXVldWVCdWZmZXJGZW5jZShGZW5jZTo6Tk9fRkVOQ0UpLAorICAgIG1DYWxsYmFja011dGV4KCksCisgICAgbU5leHRDYWxsYmFja1RpY2tldCgwKSwKKyAgICBtQ3VycmVudENhbGxiYWNrVGlja2V0KDApLAorICAgIG1DYWxsYmFja0NvbmRpdGlvbigpIHt9CiAKIEJ1ZmZlclF1ZXVlUHJvZHVjZXI6On5CdWZmZXJRdWV1ZVByb2R1Y2VyKCkge30KIApAQCAtNTIyLDEyICs1MjcsNyBAQAogCiAgICAgaWYgKGZlbmNlID09IE5VTEwpIHsKICAgICAgICAgQlFfTE9HRSgicXVldWVCdWZmZXI6IGZlbmNlIGlzIE5VTEwiKTsKLSAgICAgICAgLy8gVGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGIvMTc5NDYzNDM6IHNvbGRpZXItb24gaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IuIFRoaXMKLSAgICAgICAgLy8gcHJldmVudHMgdGhlIGNsaWVudCBmcm9tIGR5aW5nLCBhdCB0aGUgcmlzayBvZiB2aXNpYmxlIGNvcnJ1cHRpb24gZHVlIHRvIGh3Y29tcG9zZXIKLSAgICAgICAgLy8gcmVhZGluZyB0aGUgYnVmZmVyIGJlZm9yZSB0aGUgcHJvZHVjZXIgaXMgZG9uZSByZW5kZXJpbmcgaXQuIFVubGVzcyB0aGUgYnVmZmVyIGlzIHRoZQotICAgICAgICAvLyBsYXN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbiwgdGhlIGNvcnJ1cHRpb24gd2lsbCBiZSB0cmFuc2llbnQuCi0gICAgICAgIGZlbmNlID0gRmVuY2U6Ok5PX0ZFTkNFOwotICAgICAgICAvLyByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOwogICAgIH0KIAogICAgIHN3aXRjaCAoc2NhbGluZ01vZGUpIHsKQEAgLTU0MSw3ICs1NDEsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgfQogCi0gICAgc3A8SUNvbnN1bWVyTGlzdGVuZXI+IGxpc3RlbmVyOworICAgIHNwPElDb25zdW1lckxpc3RlbmVyPiBmcmFtZUF2YWlsYWJsZUxpc3RlbmVyOworICAgIHNwPElDb25zdW1lckxpc3RlbmVyPiBmcmFtZVJlcGxhY2VkTGlzdGVuZXI7CisgICAgaW50IGNhbGxiYWNrVGlja2V0ID0gMDsKKyAgICBCdWZmZXJJdGVtIGl0ZW07CiAgICAgeyAvLyBBdXRvbG9jayBzY29wZQogICAgICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtQ29yZS0+bU11dGV4KTsKIApAQCAtNTk3LDcgKzYwMCw2IEBACiAgICAgICAgICsrbUNvcmUtPm1GcmFtZUNvdW50ZXI7CiAgICAgICAgIG1TbG90c1tzbG90XS5tRnJhbWVOdW1iZXIgPSBtQ29yZS0+bUZyYW1lQ291bnRlcjsKIAotICAgICAgICBCdWZmZXJJdGVtIGl0ZW07CiAgICAgICAgIGl0ZW0ubUFjcXVpcmVDYWxsZWQgPSBtU2xvdHNbc2xvdF0ubUFjcXVpcmVDYWxsZWQ7CiAgICAgICAgIGl0ZW0ubUdyYXBoaWNCdWZmZXIgPSBtU2xvdHNbc2xvdF0ubUdyYXBoaWNCdWZmZXI7CiAgICAgICAgIGl0ZW0ubUNyb3AgPSBjcm9wOwpAQCAtNjE4LDcgKzYyMCw3IEBACiAgICAgICAgICAgICAvLyBXaGVuIHRoZSBxdWV1ZSBpcyBlbXB0eSwgd2UgY2FuIGlnbm9yZSBtRGVxdWV1ZUJ1ZmZlckNhbm5vdEJsb2NrCiAgICAgICAgICAgICAvLyBhbmQgc2ltcGx5IHF1ZXVlIHRoaXMgYnVmZmVyCiAgICAgICAgICAgICBtQ29yZS0+bVF1ZXVlLnB1c2hfYmFjayhpdGVtKTsKLSAgICAgICAgICAgIGxpc3RlbmVyID0gbUNvcmUtPm1Db25zdW1lckxpc3RlbmVyOworICAgICAgICAgICAgZnJhbWVBdmFpbGFibGVMaXN0ZW5lciA9IG1Db3JlLT5tQ29uc3VtZXJMaXN0ZW5lcjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHF1ZXVlIGlzIG5vdCBlbXB0eSwgd2UgbmVlZCB0byBsb29rIGF0IHRoZSBmcm9udCBidWZmZXIKICAgICAgICAgICAgIC8vIHN0YXRlIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQKQEAgLTYzNCw5ICs2MzYsMTAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gT3ZlcndyaXRlIHRoZSBkcm9wcGFibGUgYnVmZmVyIHdpdGggdGhlIGluY29taW5nIG9uZQogICAgICAgICAgICAgICAgICpmcm9udCA9IGl0ZW07CisgICAgICAgICAgICAgICAgZnJhbWVSZXBsYWNlZExpc3RlbmVyID0gbUNvcmUtPm1Db25zdW1lckxpc3RlbmVyOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtQ29yZS0+bVF1ZXVlLnB1c2hfYmFjayhpdGVtKTsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IG1Db3JlLT5tQ29uc3VtZXJMaXN0ZW5lcjsKKyAgICAgICAgICAgICAgICBmcmFtZUF2YWlsYWJsZUxpc3RlbmVyID0gbUNvcmUtPm1Db25zdW1lckxpc3RlbmVyOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTY0NywxMSArNjUwLDQxIEBACiAgICAgICAgICAgICAgICAgbUNvcmUtPm1UcmFuc2Zvcm1IaW50LCBtQ29yZS0+bVF1ZXVlLnNpemUoKSk7CiAKICAgICAgICAgQVRSQUNFX0lOVChtQ29yZS0+bUNvbnN1bWVyTmFtZS5zdHJpbmcoKSwgbUNvcmUtPm1RdWV1ZS5zaXplKCkpOworCisgICAgICAgIC8vIFRha2UgYSB0aWNrZXQgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMKKyAgICAgICAgY2FsbGJhY2tUaWNrZXQgPSBtTmV4dENhbGxiYWNrVGlja2V0Kys7CiAgICAgfSAvLyBBdXRvbG9jayBzY29wZQogCi0gICAgLy8gQ2FsbCBiYWNrIHdpdGhvdXQgbG9jayBoZWxkCi0gICAgaWYgKGxpc3RlbmVyICE9IE5VTEwpIHsKLSAgICAgICAgbGlzdGVuZXItPm9uRnJhbWVBdmFpbGFibGUoKTsKKyAgICAvLyBXYWl0IHdpdGhvdXQgbG9jayBoZWxkCisgICAgaWYgKG1Db3JlLT5tQ29ubmVjdGVkQXBpID09IE5BVElWRV9XSU5ET1dfQVBJX0VHTCkgeworICAgICAgICAvLyBXYWl0aW5nIGhlcmUgYWxsb3dzIGZvciB0d28gZnVsbCBidWZmZXJzIHRvIGJlIHF1ZXVlZCBidXQgbm90IGEKKyAgICAgICAgLy8gdGhpcmQuIEluIHRoZSBldmVudCB0aGF0IGZyYW1lcyB0YWtlIHZhcnlpbmcgdGltZSwgdGhpcyBtYWtlcyBhCisgICAgICAgIC8vIHNtYWxsIHRyYWRlLW9mZiBpbiBmYXZvciBvZiBsYXRlbmN5IHJhdGhlciB0aGFuIHRocm91Z2hwdXQuCisgICAgICAgIG1MYXN0UXVldWVCdWZmZXJGZW5jZS0+d2FpdEZvcmV2ZXIoIlRocm90dGxpbmcgRUdMIFByb2R1Y3Rpb24iKTsKKyAgICAgICAgbUxhc3RRdWV1ZUJ1ZmZlckZlbmNlID0gZmVuY2U7CisgICAgfQorCisgICAgLy8gRG9uJ3Qgc2VuZCB0aGUgR3JhcGhpY0J1ZmZlciB0aHJvdWdoIHRoZSBjYWxsYmFjaywgYW5kIGRvbid0IHNlbmQKKyAgICAvLyB0aGUgc2xvdCBudW1iZXIsIHNpbmNlIHRoZSBjb25zdW1lciBzaG91bGRuJ3QgbmVlZCBpdAorICAgIGl0ZW0ubUdyYXBoaWNCdWZmZXIuY2xlYXIoKTsKKyAgICBpdGVtLm1TbG90ID0gQnVmZmVySXRlbTo6SU5WQUxJRF9CVUZGRVJfU0xPVDsKKworICAgIC8vIENhbGwgYmFjayB3aXRob3V0IHRoZSBtYWluIEJ1ZmZlclF1ZXVlIGxvY2sgaGVsZCwgYnV0IHdpdGggdGhlIGNhbGxiYWNrCisgICAgLy8gbG9jayBoZWxkIHNvIHdlIGNhbiBlbnN1cmUgdGhhdCBjYWxsYmFja3Mgb2NjdXIgaW4gb3JkZXIKKyAgICB7CisgICAgICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1DYWxsYmFja011dGV4KTsKKyAgICAgICAgd2hpbGUgKGNhbGxiYWNrVGlja2V0ICE9IG1DdXJyZW50Q2FsbGJhY2tUaWNrZXQpIHsKKyAgICAgICAgICAgIG1DYWxsYmFja0NvbmRpdGlvbi53YWl0KG1DYWxsYmFja011dGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmcmFtZUF2YWlsYWJsZUxpc3RlbmVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGZyYW1lQXZhaWxhYmxlTGlzdGVuZXItPm9uRnJhbWVBdmFpbGFibGUoaXRlbSk7CisgICAgICAgIH0gZWxzZSBpZiAoZnJhbWVSZXBsYWNlZExpc3RlbmVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGZyYW1lUmVwbGFjZWRMaXN0ZW5lci0+b25GcmFtZVJlcGxhY2VkKGl0ZW0pOworICAgICAgICB9CisKKyAgICAgICAgKyttQ3VycmVudENhbGxiYWNrVGlja2V0OworICAgICAgICBtQ2FsbGJhY2tDb25kaXRpb24uYnJvYWRjYXN0KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIE5PX0VSUk9SOwpkaWZmIC0tZ2l0IGEvbGlicy9ndWkvQ29uc3VtZXJCYXNlLmNwcCBiL2xpYnMvZ3VpL0NvbnN1bWVyQmFzZS5jcHAKaW5kZXggZTQ3NmM5YS4uOTVmNTUwNyAxMDA2NDQKLS0tIGEvbGlicy9ndWkvQ29uc3VtZXJCYXNlLmNwcAorKysgYi9saWJzL2d1aS9Db25zdW1lckJhc2UuY3BwCkBAIC05OCw3ICs5OCw3IEBACiAgICAgbVNsb3RzW3Nsb3RJbmRleF0ubUZyYW1lTnVtYmVyID0gMDsKIH0KIAotdm9pZCBDb25zdW1lckJhc2U6Om9uRnJhbWVBdmFpbGFibGUoKSB7Cit2b2lkIENvbnN1bWVyQmFzZTo6b25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiBpdGVtKSB7CiAgICAgQ0JfTE9HVigib25GcmFtZUF2YWlsYWJsZSIpOwogCiAgICAgc3A8RnJhbWVBdmFpbGFibGVMaXN0ZW5lcj4gbGlzdGVuZXI7CkBAIC0xMDksNyArMTA5LDcgQEAKIAogICAgIGlmIChsaXN0ZW5lciAhPSBOVUxMKSB7CiAgICAgICAgIENCX0xPR1YoImFjdHVhbGx5IGNhbGxpbmcgb25GcmFtZUF2YWlsYWJsZSIpOwotICAgICAgICBsaXN0ZW5lci0+b25GcmFtZUF2YWlsYWJsZSgpOworICAgICAgICBsaXN0ZW5lci0+b25GcmFtZUF2YWlsYWJsZShpdGVtKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2xpYnMvZ3VpL0dMQ29uc3VtZXIuY3BwIGIvbGlicy9ndWkvR0xDb25zdW1lci5jcHAKaW5kZXggNmJhMmVmOC4uYjg4NmM1YiAxMDA2NDQKLS0tIGEvbGlicy9ndWkvR0xDb25zdW1lci5jcHAKKysrIGIvbGlicy9ndWkvR0xDb25zdW1lci5jcHAKQEAgLTUwNSw3ICs1MDUsNyBAQAogICAgICAgICBpZiAobUVnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKICAgICAgICAgICAgIG1FZ2xEaXNwbGF5ID0gZHB5OwogICAgICAgICB9Ci0gICAgICAgIGlmIChtRWdsQ29udGV4dCA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICBpZiAobUVnbENvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpIHsKICAgICAgICAgICAgIG1FZ2xDb250ZXh0ID0gY3R4OwogICAgICAgICB9CiAgICAgfQpAQCAtMTA2NSw2ICsxMDY1LDcgQEAKICAgICAgICAgaWYgKCFlZ2xEZXN0cm95SW1hZ2VLSFIobUVnbERpc3BsYXksIG1FZ2xJbWFnZSkpIHsKICAgICAgICAgICAgQUxPR0UoIn5FZ2xJbWFnZTogZWdsRGVzdHJveUltYWdlS0hSIGZhaWxlZCIpOwogICAgICAgICB9CisgICAgICAgIGVnbFRlcm1pbmF0ZShtRWdsRGlzcGxheSk7CiAgICAgfQogfQogCkBAIC0xMDc5LDYgKzEwODAsNyBAQAogICAgICAgICBpZiAoIWVnbERlc3Ryb3lJbWFnZUtIUihtRWdsRGlzcGxheSwgbUVnbEltYWdlKSkgewogICAgICAgICAgICBBTE9HRSgiY3JlYXRlSWZOZWVkZWQ6IGVnbERlc3Ryb3lJbWFnZUtIUiBmYWlsZWQiKTsKICAgICAgICAgfQorICAgICAgICBlZ2xUZXJtaW5hdGUobUVnbERpc3BsYXkpOwogICAgICAgICBtRWdsSW1hZ2UgPSBFR0xfTk9fSU1BR0VfS0hSOwogICAgICAgICBtRWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOwogICAgIH0KQEAgLTExMjksMTEgKzExMzEsMTMgQEAKICAgICAgICAgLy8gcmVtb3ZlcyB0aGlzIHJlc3RyaWN0aW9uIGlmIHRoZXJlIGlzIGhhcmR3YXJlIHRoYXQgY2FuIHN1cHBvcnQgaXQuCiAgICAgICAgIGF0dHJzWzJdID0gRUdMX05PTkU7CiAgICAgfQorICAgIGVnbEluaXRpYWxpemUoZHB5LCAwLCAwKTsKICAgICBFR0xJbWFnZUtIUiBpbWFnZSA9IGVnbENyZWF0ZUltYWdlS0hSKGRweSwgRUdMX05PX0NPTlRFWFQsCiAgICAgICAgICAgICBFR0xfTkFUSVZFX0JVRkZFUl9BTkRST0lELCBjYnVmLCBhdHRycyk7CiAgICAgaWYgKGltYWdlID09IEVHTF9OT19JTUFHRV9LSFIpIHsKICAgICAgICAgRUdMaW50IGVycm9yID0gZWdsR2V0RXJyb3IoKTsKICAgICAgICAgQUxPR0UoImVycm9yIGNyZWF0aW5nIEVHTEltYWdlOiAlI3giLCBlcnJvcik7CisgICAgICAgIGVnbFRlcm1pbmF0ZShkcHkpOwogICAgIH0KICAgICByZXR1cm4gaW1hZ2U7CiB9CmRpZmYgLS1naXQgYS9saWJzL2d1aS9JQ29uc3VtZXJMaXN0ZW5lci5jcHAgYi9saWJzL2d1aS9JQ29uc3VtZXJMaXN0ZW5lci5jcHAKaW5kZXggNGNjZjBhYy4uNDA5ZGZlNCAxMDA2NDQKLS0tIGEvbGlicy9ndWkvSUNvbnN1bWVyTGlzdGVuZXIuY3BwCisrKyBiL2xpYnMvZ3VpL0lDb25zdW1lckxpc3RlbmVyLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGJpbmRlci9QYXJjZWwuaD4KIAogI2luY2x1ZGUgPGd1aS9JQ29uc3VtZXJMaXN0ZW5lci5oPgorI2luY2x1ZGUgPGd1aS9CdWZmZXJJdGVtLmg+CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbmFtZXNwYWNlIGFuZHJvaWQgewpAQCAtMzksOSArNDAsMTAgQEAKICAgICAgICAgOiBCcEludGVyZmFjZTxJQ29uc3VtZXJMaXN0ZW5lcj4oaW1wbCkgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKCkgeworICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIGl0ZW0pIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNvbnN1bWVyTGlzdGVuZXI6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CisgICAgICAgIGRhdGEud3JpdGUoaXRlbSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChPTl9GUkFNRV9BVkFJTEFCTEUsIGRhdGEsICZyZXBseSwgSUJpbmRlcjo6RkxBR19PTkVXQVkpOwogICAgIH0KIApAQCAtNjYsMTggKzY4LDIwIEBACiAgICAgdWludDMyX3QgY29kZSwgY29uc3QgUGFyY2VsJiBkYXRhLCBQYXJjZWwqIHJlcGx5LCB1aW50MzJfdCBmbGFncykKIHsKICAgICBzd2l0Y2goY29kZSkgewotICAgICAgICBjYXNlIE9OX0ZSQU1FX0FWQUlMQUJMRToKKyAgICAgICAgY2FzZSBPTl9GUkFNRV9BVkFJTEFCTEU6IHsKICAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJQ29uc3VtZXJMaXN0ZW5lciwgZGF0YSwgcmVwbHkpOwotICAgICAgICAgICAgb25GcmFtZUF2YWlsYWJsZSgpOwotICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwotICAgICAgICBjYXNlIE9OX0JVRkZFUl9SRUxFQVNFRDoKKyAgICAgICAgICAgIEJ1ZmZlckl0ZW0gaXRlbTsKKyAgICAgICAgICAgIGRhdGEucmVhZChpdGVtKTsKKyAgICAgICAgICAgIG9uRnJhbWVBdmFpbGFibGUoaXRlbSk7CisgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7IH0KKyAgICAgICAgY2FzZSBPTl9CVUZGRVJfUkVMRUFTRUQ6IHsKICAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJQ29uc3VtZXJMaXN0ZW5lciwgZGF0YSwgcmVwbHkpOwogICAgICAgICAgICAgb25CdWZmZXJzUmVsZWFzZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKLSAgICAgICAgY2FzZSBPTl9TSURFQkFORF9TVFJFQU1fQ0hBTkdFRDoKKyAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsgfQorICAgICAgICBjYXNlIE9OX1NJREVCQU5EX1NUUkVBTV9DSEFOR0VEOiB7CiAgICAgICAgICAgICBDSEVDS19JTlRFUkZBQ0UoSUNvbnN1bWVyTGlzdGVuZXIsIGRhdGEsIHJlcGx5KTsKICAgICAgICAgICAgIG9uU2lkZWJhbmRTdHJlYW1DaGFuZ2VkKCk7Ci0gICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7IH0KICAgICB9CiAgICAgcmV0dXJuIEJCaW5kZXI6Om9uVHJhbnNhY3QoY29kZSwgZGF0YSwgcmVwbHksIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2xpYnMvZ3VpL0lTdXJmYWNlQ29tcG9zZXIuY3BwIGIvbGlicy9ndWkvSVN1cmZhY2VDb21wb3Nlci5jcHAKaW5kZXggNjY5NzU1YS4uYmM0YmFhMyAxMDA2NDQKLS0tIGEvbGlicy9ndWkvSVN1cmZhY2VDb21wb3Nlci5jcHAKKysrIGIvbGlicy9ndWkvSVN1cmZhY2VDb21wb3Nlci5jcHAKQEAgLTMxMiwxOSArMzEyLDI5IEBACiAgICAgICAgIGNhc2UgU0VUX1RSQU5TQUNUSU9OX1NUQVRFOiB7CiAgICAgICAgICAgICBDSEVDS19JTlRFUkZBQ0UoSVN1cmZhY2VDb21wb3NlciwgZGF0YSwgcmVwbHkpOwogICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gZGF0YS5yZWFkSW50MzIoKTsKKyAgICAgICAgICAgIGlmIChjb3VudCA+IGRhdGEuZGF0YVNpemUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBDb21wb3NlclN0YXRlIHM7CiAgICAgICAgICAgICBWZWN0b3I8Q29tcG9zZXJTdGF0ZT4gc3RhdGU7CiAgICAgICAgICAgICBzdGF0ZS5zZXRDYXBhY2l0eShjb3VudCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpPTAgOyBpPGNvdW50IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcy5yZWFkKGRhdGEpOworICAgICAgICAgICAgICAgIGlmIChzLnJlYWQoZGF0YSkgPT0gQkFEX1ZBTFVFKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXRlLmFkZChzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvdW50ID0gZGF0YS5yZWFkSW50MzIoKTsKKyAgICAgICAgICAgIGlmIChjb3VudCA+IGRhdGEuZGF0YVNpemUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBEaXNwbGF5U3RhdGUgZDsKICAgICAgICAgICAgIFZlY3RvcjxEaXNwbGF5U3RhdGU+IGRpc3BsYXlzOwogICAgICAgICAgICAgZGlzcGxheXMuc2V0Q2FwYWNpdHkoY291bnQpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wIDsgaTxjb3VudCA7IGkrKykgewotICAgICAgICAgICAgICAgIGQucmVhZChkYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAoZC5yZWFkKGRhdGEpID09IEJBRF9WQUxVRSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkaXNwbGF5cy5hZGQoZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB1aW50MzJfdCBmbGFncyA9IGRhdGEucmVhZEludDMyKCk7CmRpZmYgLS1naXQgYS9saWJzL2d1aS9MYXllclN0YXRlLmNwcCBiL2xpYnMvZ3VpL0xheWVyU3RhdGUuY3BwCmluZGV4IGRjZGNkZjIuLmNjZjhiNzggMTAwNjQ0Ci0tLSBhL2xpYnMvZ3VpL0xheWVyU3RhdGUuY3BwCisrKyBiL2xpYnMvZ3VpL0xheWVyU3RhdGUuY3BwCkBAIC01NSw4ICs1NSwxMiBAQAogICAgIGFscGhhID0gaW5wdXQucmVhZEZsb2F0KCk7CiAgICAgZmxhZ3MgPSBpbnB1dC5yZWFkSW50MzIoKTsKICAgICBtYXNrID0gaW5wdXQucmVhZEludDMyKCk7Ci0gICAgbWF0cml4ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8bGF5ZXJfc3RhdGVfdDo6bWF0cml4MjJfdCBjb25zdCAqPigKLSAgICAgICAgICAgIGlucHV0LnJlYWRJbnBsYWNlKHNpemVvZihsYXllcl9zdGF0ZV90OjptYXRyaXgyMl90KSkpOworICAgIGNvbnN0IHZvaWQqIG1hdHJpeF9kYXRhID0gaW5wdXQucmVhZElucGxhY2Uoc2l6ZW9mKGxheWVyX3N0YXRlX3Q6Om1hdHJpeDIyX3QpKTsKKyAgICBpZiAobWF0cml4X2RhdGEpIHsKKyAgICAgICAgbWF0cml4ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8bGF5ZXJfc3RhdGVfdDo6bWF0cml4MjJfdCBjb25zdCAqPihtYXRyaXhfZGF0YSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICB9CiAgICAgaW5wdXQucmVhZChjcm9wKTsKICAgICBpbnB1dC5yZWFkKHRyYW5zcGFyZW50UmVnaW9uKTsKICAgICByZXR1cm4gTk9fRVJST1I7CmRpZmYgLS1naXQgYS9saWJzL2d1aS9TdHJlYW1TcGxpdHRlci5jcHAgYi9saWJzL2d1aS9TdHJlYW1TcGxpdHRlci5jcHAKaW5kZXggMmZkMDllYi4uMjVlNmNhYiAxMDA2NDQKLS0tIGEvbGlicy9ndWkvU3RyZWFtU3BsaXR0ZXIuY3BwCisrKyBiL2xpYnMvZ3VpL1N0cmVhbVNwbGl0dGVyLmNwcApAQCAtOTgsNyArOTgsNyBAQAogICAgIG1JbnB1dC0+c2V0Q29uc3VtZXJOYW1lKG5hbWUpOwogfQogCi12b2lkIFN0cmVhbVNwbGl0dGVyOjpvbkZyYW1lQXZhaWxhYmxlKCkgewordm9pZCBTdHJlYW1TcGxpdHRlcjo6b25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiAvKiBpdGVtICovKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTXV0ZXgpOwogCmRpZmYgLS1naXQgYS9saWJzL2d1aS90ZXN0cy9CdWZmZXJRdWV1ZV90ZXN0LmNwcCBiL2xpYnMvZ3VpL3Rlc3RzL0J1ZmZlclF1ZXVlX3Rlc3QuY3BwCmluZGV4IDVjY2NjOWIuLjgzOGFkOTAgMTAwNjQ0Ci0tLSBhL2xpYnMvZ3VpL3Rlc3RzL0J1ZmZlclF1ZXVlX3Rlc3QuY3BwCisrKyBiL2xpYnMvZ3VpL3Rlc3RzL0J1ZmZlclF1ZXVlX3Rlc3QuY3BwCkBAIC02Nyw3ICs2Nyw3IEBACiB9OwogCiBzdHJ1Y3QgRHVtbXlDb25zdW1lciA6IHB1YmxpYyBCbkNvbnN1bWVyTGlzdGVuZXIgewotICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiAvKiBpdGVtICovKSB7fQogICAgIHZpcnR1YWwgdm9pZCBvbkJ1ZmZlcnNSZWxlYXNlZCgpIHt9CiAgICAgdmlydHVhbCB2b2lkIG9uU2lkZWJhbmRTdHJlYW1DaGFuZ2VkKCkge30KIH07CmRpZmYgLS1naXQgYS9saWJzL2d1aS90ZXN0cy9EaXNjb25uZWN0V2FpdGVyLmggYi9saWJzL2d1aS90ZXN0cy9EaXNjb25uZWN0V2FpdGVyLmgKaW5kZXggNTZlOTZjMi4uNmU2OTE1YiAxMDA2NDQKLS0tIGEvbGlicy9ndWkvdGVzdHMvRGlzY29ubmVjdFdhaXRlci5oCisrKyBiL2xpYnMvZ3VpL3Rlc3RzL0Rpc2Nvbm5lY3RXYWl0ZXIuaApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBtUGVuZGluZ0ZyYW1lcy0tOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKCkgeworICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIC8qIGl0ZW0gKi8pIHsKICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKICAgICAgICAgbVBlbmRpbmdGcmFtZXMrKzsKICAgICAgICAgbUZyYW1lQ29uZGl0aW9uLnNpZ25hbCgpOwpkaWZmIC0tZ2l0IGEvbGlicy9ndWkvdGVzdHMvRnJhbWVXYWl0ZXIuaCBiL2xpYnMvZ3VpL3Rlc3RzL0ZyYW1lV2FpdGVyLmgKaW5kZXggYmRlZGJhNi4uZjc4ZmEwMCAxMDA2NDQKLS0tIGEvbGlicy9ndWkvdGVzdHMvRnJhbWVXYWl0ZXIuaAorKysgYi9saWJzL2d1aS90ZXN0cy9GcmFtZVdhaXRlci5oCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIG1QZW5kaW5nRnJhbWVzLS07CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIG9uRnJhbWVBdmFpbGFibGUoKSB7CisgICAgdmlydHVhbCB2b2lkIG9uRnJhbWVBdmFpbGFibGUoY29uc3QgQnVmZmVySXRlbSYgLyogaXRlbSAqLykgewogICAgICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTXV0ZXgpOwogICAgICAgICBtUGVuZGluZ0ZyYW1lcysrOwogICAgICAgICBtQ29uZGl0aW9uLnNpZ25hbCgpOwpkaWZmIC0tZ2l0IGEvbGlicy9ndWkvdGVzdHMvSUdyYXBoaWNCdWZmZXJQcm9kdWNlcl90ZXN0LmNwcCBiL2xpYnMvZ3VpL3Rlc3RzL0lHcmFwaGljQnVmZmVyUHJvZHVjZXJfdGVzdC5jcHAKaW5kZXggYWFkZmU2MS4uOGQ1ZmQ4ZiAxMDA2NDQKLS0tIGEvbGlicy9ndWkvdGVzdHMvSUdyYXBoaWNCdWZmZXJQcm9kdWNlcl90ZXN0LmNwcAorKysgYi9saWJzL2d1aS90ZXN0cy9JR3JhcGhpY0J1ZmZlclByb2R1Y2VyX3Rlc3QuY3BwCkBAIC02NSw3ICs2NSw3IEBACiB9OyAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCiAKIHN0cnVjdCBEdW1teUNvbnN1bWVyIDogcHVibGljIEJuQ29uc3VtZXJMaXN0ZW5lciB7Ci0gICAgdmlydHVhbCB2b2lkIG9uRnJhbWVBdmFpbGFibGUoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIC8qIGl0ZW0gKi8pIHt9CiAgICAgdmlydHVhbCB2b2lkIG9uQnVmZmVyc1JlbGVhc2VkKCkge30KICAgICB2aXJ0dWFsIHZvaWQgb25TaWRlYmFuZFN0cmVhbUNoYW5nZWQoKSB7fQogfTsKZGlmZiAtLWdpdCBhL2xpYnMvZ3VpL3Rlc3RzL1N0cmVhbVNwbGl0dGVyX3Rlc3QuY3BwIGIvbGlicy9ndWkvdGVzdHMvU3RyZWFtU3BsaXR0ZXJfdGVzdC5jcHAKaW5kZXggMzJlYzkwZC4uNGU2M2E2ZiAxMDA2NDQKLS0tIGEvbGlicy9ndWkvdGVzdHMvU3RyZWFtU3BsaXR0ZXJfdGVzdC5jcHAKKysrIGIvbGlicy9ndWkvdGVzdHMvU3RyZWFtU3BsaXR0ZXJfdGVzdC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKIH07CiAKIHN0cnVjdCBEdW1teUxpc3RlbmVyIDogcHVibGljIEJuQ29uc3VtZXJMaXN0ZW5lciB7Ci0gICAgdmlydHVhbCB2b2lkIG9uRnJhbWVBdmFpbGFibGUoKSB7fQorICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIC8qIGl0ZW0gKi8pIHt9CiAgICAgdmlydHVhbCB2b2lkIG9uQnVmZmVyc1JlbGVhc2VkKCkge30KICAgICB2aXJ0dWFsIHZvaWQgb25TaWRlYmFuZFN0cmVhbUNoYW5nZWQoKSB7fQogfTsKZGlmZiAtLWdpdCBhL2xpYnMvZ3VpL3Rlc3RzL1N1cmZhY2VUZXh0dXJlR0xUaHJlYWRUb0dMLmggYi9saWJzL2d1aS90ZXN0cy9TdXJmYWNlVGV4dHVyZUdMVGhyZWFkVG9HTC5oCmluZGV4IDY0MTA1MTYuLjE0ZTQyYWMgMTAwNjQ0Ci0tLSBhL2xpYnMvZ3VpL3Rlc3RzL1N1cmZhY2VUZXh0dXJlR0xUaHJlYWRUb0dMLmgKKysrIGIvbGlicy9ndWkvdGVzdHMvU3VyZmFjZVRleHR1cmVHTFRocmVhZFRvR0wuaApAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgR0xDb25zdW1lciBvbiB0aGUgcHJvZHVjZXIgdGhyZWFkLgotICAgICAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZSgpIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9uRnJhbWVBdmFpbGFibGUoY29uc3QgQnVmZmVySXRlbSYgLyogaXRlbSAqLykgewogICAgICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKICAgICAgICAgICAgIEFMT0dWKCIrb25GcmFtZUF2YWlsYWJsZSIpOwogICAgICAgICAgICAgbUZyYW1lQXZhaWxhYmxlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2xpYnMvdWkvR3JhcGhpY0J1ZmZlci5jcHAgYi9saWJzL3VpL0dyYXBoaWNCdWZmZXIuY3BwCmluZGV4IDliMGJkNjAuLmU3NjhmMTMgMTAwNjQ0Ci0tLSBhL2xpYnMvdWkvR3JhcGhpY0J1ZmZlci5jcHAKKysrIGIvbGlicy91aS9HcmFwaGljQnVmZmVyLmNwcApAQCAtMzEwLDEwICszMTAsMTkgQEAKICAgICBjb25zdCBzaXplX3QgbnVtRmRzICA9IGJ1Zls4XTsKICAgICBjb25zdCBzaXplX3QgbnVtSW50cyA9IGJ1Zls5XTsKIAorICAgIGNvbnN0IHNpemVfdCBtYXhOdW1iZXIgPSBVSU5UX01BWCAvIHNpemVvZihpbnQpOworICAgIGlmIChudW1GZHMgPj0gbWF4TnVtYmVyIHx8IG51bUludHMgPj0gKG1heE51bWJlciAtIDEwKSkgeworICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHN0cmlkZSA9IGZvcm1hdCA9IHVzYWdlID0gMDsKKyAgICAgICAgaGFuZGxlID0gTlVMTDsKKyAgICAgICAgQUxPR0UoInVuZmxhdHRlbjogbnVtRmRzIG9yIG51bUludHMgaXMgdG9vIGxhcmdlOiAlZCwgJWQiLAorICAgICAgICAgICAgICAgIG51bUZkcywgbnVtSW50cyk7CisgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgfQorCiAgICAgY29uc3Qgc2l6ZV90IHNpemVOZWVkZWQgPSAoMTAgKyBudW1JbnRzKSAqIHNpemVvZihpbnQpOwogICAgIGlmIChzaXplIDwgc2l6ZU5lZWRlZCkgcmV0dXJuIE5PX01FTU9SWTsKIAotICAgIHNpemVfdCBmZENvdW50TmVlZGVkID0gMDsKKyAgICBzaXplX3QgZmRDb3VudE5lZWRlZCA9IG51bUZkczsKICAgICBpZiAoY291bnQgPCBmZENvdW50TmVlZGVkKSByZXR1cm4gTk9fTUVNT1JZOwogCiAgICAgaWYgKGhhbmRsZSkgewpAQCAtMzI4LDYgKzMzNywxMiBAQAogICAgICAgICBmb3JtYXQgPSBidWZbNF07CiAgICAgICAgIHVzYWdlICA9IGJ1Zls1XTsKICAgICAgICAgbmF0aXZlX2hhbmRsZSogaCA9IG5hdGl2ZV9oYW5kbGVfY3JlYXRlKG51bUZkcywgbnVtSW50cyk7CisgICAgICAgIGlmICghaCkgeworICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBzdHJpZGUgPSBmb3JtYXQgPSB1c2FnZSA9IDA7CisgICAgICAgICAgICBoYW5kbGUgPSBOVUxMOworICAgICAgICAgICAgQUxPR0UoInVuZmxhdHRlbjogbmF0aXZlX2hhbmRsZV9jcmVhdGUgZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm4gTk9fTUVNT1JZOworICAgICAgICB9CiAgICAgICAgIG1lbWNweShoLT5kYXRhLCAgICAgICAgICBmZHMsICAgICBudW1GZHMqc2l6ZW9mKGludCkpOwogICAgICAgICBtZW1jcHkoaC0+ZGF0YSArIG51bUZkcywgJmJ1ZlsxMF0sIG51bUludHMqc2l6ZW9mKGludCkpOwogICAgICAgICBoYW5kbGUgPSBoOwpkaWZmIC0tZ2l0IGEvb3BlbmdsL3Rlc3RzL0VHTFRlc3QvRUdMX3Rlc3QuY3BwIGIvb3BlbmdsL3Rlc3RzL0VHTFRlc3QvRUdMX3Rlc3QuY3BwCmluZGV4IGE0MzY0YzYuLmQ2OWEyNzUgMTAwNjQ0Ci0tLSBhL29wZW5nbC90ZXN0cy9FR0xUZXN0L0VHTF90ZXN0LmNwcAorKysgYi9vcGVuZ2wvdGVzdHMvRUdMVGVzdC9FR0xfdGVzdC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIEVYUEVDVF9UUlVFKGVnbENob29zZUNvbmZpZyhtRWdsRGlzcGxheSwgYXR0cnMsICZjb25maWcsIDEsICZudW1Db25maWdzKSk7CiAKICAgICBzdHJ1Y3QgRHVtbXlDb25zdW1lciA6IHB1YmxpYyBCbkNvbnN1bWVyTGlzdGVuZXIgewotICAgICAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZSgpIHt9CisgICAgICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIC8qIGl0ZW0gKi8pIHt9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkJ1ZmZlcnNSZWxlYXNlZCgpIHt9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvblNpZGViYW5kU3RyZWFtQ2hhbmdlZCgpIHt9CiAgICAgfTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2lucHV0Zmxpbmdlci9JbnB1dERpc3BhdGNoZXIuY3BwIGIvc2VydmljZXMvaW5wdXRmbGluZ2VyL0lucHV0RGlzcGF0Y2hlci5jcHAKaW5kZXggMDJmYjZmMC4uNjAzODM2YSAxMDA2NDQKLS0tIGEvc2VydmljZXMvaW5wdXRmbGluZ2VyL0lucHV0RGlzcGF0Y2hlci5jcHAKKysrIGIvc2VydmljZXMvaW5wdXRmbGluZ2VyL0lucHV0RGlzcGF0Y2hlci5jcHAKQEAgLTQ3Nyw3ICs0NzcsNiBAQAogICAgICAgICBjb25zdCBJbnB1dFdpbmRvd0luZm8qIHdpbmRvd0luZm8gPSB3aW5kb3dIYW5kbGUtPmdldEluZm8oKTsKICAgICAgICAgaWYgKHdpbmRvd0luZm8tPmRpc3BsYXlJZCA9PSBkaXNwbGF5SWQpIHsKICAgICAgICAgICAgIGludDMyX3QgZmxhZ3MgPSB3aW5kb3dJbmZvLT5sYXlvdXRQYXJhbXNGbGFnczsKLSAgICAgICAgICAgIGludDMyX3QgcHJpdmF0ZUZsYWdzID0gd2luZG93SW5mby0+bGF5b3V0UGFyYW1zUHJpdmF0ZUZsYWdzOwogCiAgICAgICAgICAgICBpZiAod2luZG93SW5mby0+dmlzaWJsZSkgewogICAgICAgICAgICAgICAgIGlmICghKGZsYWdzICYgSW5wdXRXaW5kb3dJbmZvOjpGTEFHX05PVF9UT1VDSEFCTEUpKSB7CkBAIC00ODksMTEgKzQ4OCw2IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwcml2YXRlRmxhZ3MgJiBJbnB1dFdpbmRvd0luZm86OlBSSVZBVEVfRkxBR19TWVNURU1fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAvLyBFcnJvciB3aW5kb3cgaXMgb24gdG9wIGJ1dCBub3QgdmlzaWJsZSwgc28gdG91Y2ggaXMgZHJvcHBlZC4KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gTlVMTDsKQEAgLTExOTAsNyArMTE4NCw2IEBACiAgICAgICAgIGludDMyX3QgeSA9IGludDMyX3QoZW50cnktPnBvaW50ZXJDb29yZHNbcG9pbnRlckluZGV4XS4KICAgICAgICAgICAgICAgICBnZXRBeGlzVmFsdWUoQU1PVElPTl9FVkVOVF9BWElTX1kpKTsKICAgICAgICAgc3A8SW5wdXRXaW5kb3dIYW5kbGU+IG5ld1RvdWNoZWRXaW5kb3dIYW5kbGU7Ci0gICAgICAgIHNwPElucHV0V2luZG93SGFuZGxlPiB0b3BFcnJvcldpbmRvd0hhbmRsZTsKICAgICAgICAgYm9vbCBpc1RvdWNoTW9kYWwgPSBmYWxzZTsKIAogICAgICAgICAvLyBUcmF2ZXJzZSB3aW5kb3dzIGZyb20gZnJvbnQgdG8gYmFjayB0byBmaW5kIHRvdWNoZWQgd2luZG93IGFuZCBvdXRzaWRlIHRhcmdldHMuCkBAIC0xMjAyLDEzICsxMTk1LDYgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gd3JvbmcgZGlzcGxheQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQzMl90IHByaXZhdGVGbGFncyA9IHdpbmRvd0luZm8tPmxheW91dFBhcmFtc1ByaXZhdGVGbGFnczsKLSAgICAgICAgICAgIGlmIChwcml2YXRlRmxhZ3MgJiBJbnB1dFdpbmRvd0luZm86OlBSSVZBVEVfRkxBR19TWVNURU1fRVJST1IpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9wRXJyb3JXaW5kb3dIYW5kbGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICB0b3BFcnJvcldpbmRvd0hhbmRsZSA9IHdpbmRvd0hhbmRsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGludDMyX3QgZmxhZ3MgPSB3aW5kb3dJbmZvLT5sYXlvdXRQYXJhbXNGbGFnczsKICAgICAgICAgICAgIGlmICh3aW5kb3dJbmZvLT52aXNpYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEgKGZsYWdzICYgSW5wdXRXaW5kb3dJbmZvOjpGTEFHX05PVF9UT1VDSEFCTEUpKSB7CkBAIC0xMjMzLDE3ICsxMjE5LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHdpbmRvdyBidXQgaXQgaXMgbm90IHRha2luZyBmb2N1cyAodHlwaWNhbGx5IGJlY2F1c2UKLSAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlKSB0aGVuIHdhaXQgZm9yIGl0LiAgQW55IG90aGVyIGZvY3VzZWQgd2luZG93IG1heSBpbgotICAgICAgICAvLyBmYWN0IGJlIGluIEFOUiBzdGF0ZS4KLSAgICAgICAgaWYgKHRvcEVycm9yV2luZG93SGFuZGxlICE9IE5VTEwgJiYgbmV3VG91Y2hlZFdpbmRvd0hhbmRsZSAhPSB0b3BFcnJvcldpbmRvd0hhbmRsZSkgewotICAgICAgICAgICAgaW5qZWN0aW9uUmVzdWx0ID0gaGFuZGxlVGFyZ2V0c05vdFJlYWR5TG9ja2VkKGN1cnJlbnRUaW1lLCBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgbmV4dFdha2V1cFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICJXYWl0aW5nIGJlY2F1c2UgYSBzeXN0ZW0gZXJyb3Igd2luZG93IGlzIGFib3V0IHRvIGJlIGRpc3BsYXllZC4iKTsKLSAgICAgICAgICAgIGluamVjdGlvblBlcm1pc3Npb24gPSBJTkpFQ1RJT05fUEVSTUlTU0lPTl9VTktOT1dOOwotICAgICAgICAgICAgZ290byBVbnJlc3BvbnNpdmU7Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIgc3BsaXR0aW5nIHdpbGwgYmUgYWxsb3dlZCBmb3IgdGhpcyB3aW5kb3cuCiAgICAgICAgIGlmIChuZXdUb3VjaGVkV2luZG93SGFuZGxlICE9IE5VTEwKICAgICAgICAgICAgICAgICAmJiBuZXdUb3VjaGVkV2luZG93SGFuZGxlLT5nZXRJbmZvKCktPnN1cHBvcnRzU3BsaXRUb3VjaCgpKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9pbnB1dGZsaW5nZXIvSW5wdXRXaW5kb3cuaCBiL3NlcnZpY2VzL2lucHV0Zmxpbmdlci9JbnB1dFdpbmRvdy5oCmluZGV4IDU4NzljODQuLjQyNDU3Y2UgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2lucHV0Zmxpbmdlci9JbnB1dFdpbmRvdy5oCisrKyBiL3NlcnZpY2VzL2lucHV0Zmxpbmdlci9JbnB1dFdpbmRvdy5oCkBAIC02NCwxMSArNjQsNiBAQAogICAgICAgICBGTEFHX05FRURTX01FTlVfS0VZID0gMHg0MDAwMDAwMCwKICAgICB9OwogCi0gICAgLy8gUHJpdmF0ZSBXaW5kb3cgZmxhZ3MgZnJvbSBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcwotICAgIGVudW0gewotICAgICAgICBQUklWQVRFX0ZMQUdfU1lTVEVNX0VSUk9SID0gMHgwMDAwMDEwMCwKLSAgICB9OwotCiAgICAgLy8gV2luZG93IHR5cGVzIGZyb20gV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMKICAgICBlbnVtIHsKICAgICAgICAgRklSU1RfQVBQTElDQVRJT05fV0lORE9XID0gMSwKQEAgLTExOSw3ICsxMTQsNiBAQAogICAgIHNwPElucHV0Q2hhbm5lbD4gaW5wdXRDaGFubmVsOwogICAgIFN0cmluZzggbmFtZTsKICAgICBpbnQzMl90IGxheW91dFBhcmFtc0ZsYWdzOwotICAgIGludDMyX3QgbGF5b3V0UGFyYW1zUHJpdmF0ZUZsYWdzOwogICAgIGludDMyX3QgbGF5b3V0UGFyYW1zVHlwZTsKICAgICBuc2Vjc190IGRpc3BhdGNoaW5nVGltZW91dDsKICAgICBpbnQzMl90IGZyYW1lTGVmdDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3NlbnNvcnNlcnZpY2UvU2Vuc29yU2VydmljZS5jcHAgYi9zZXJ2aWNlcy9zZW5zb3JzZXJ2aWNlL1NlbnNvclNlcnZpY2UuY3BwCmluZGV4IDliMmFjZWEuLmE4NTczNjYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3NlbnNvcnNlcnZpY2UvU2Vuc29yU2VydmljZS5jcHAKKysrIGIvc2VydmljZXMvc2Vuc29yc2VydmljZS9TZW5zb3JTZXJ2aWNlLmNwcApAQCAtMTkxLDYgKzE5MSw4IEBACiAgICAgICAgICAgICBtU2Vuc29yRXZlbnRTY3JhdGNoID0gbmV3IHNlbnNvcnNfZXZlbnRfdFttaW5CdWZmZXJTaXplXTsKICAgICAgICAgICAgIG1NYXBGbHVzaEV2ZW50c1RvQ29ubmVjdGlvbnMgPSBuZXcgU2Vuc29yRXZlbnRDb25uZWN0aW9uIGNvbnN0ICogW21pbkJ1ZmZlclNpemVdOwogCisgICAgICAgICAgICBtQWNrUmVjZWl2ZXIgPSBuZXcgU2Vuc29yRXZlbnRBY2tSZWNlaXZlcih0aGlzKTsKKyAgICAgICAgICAgIG1BY2tSZWNlaXZlci0+cnVuKCJTZW5zb3JFdmVudEFja1JlY2VpdmVyIiwgUFJJT1JJVFlfVVJHRU5UX0RJU1BMQVkpOwogICAgICAgICAgICAgbUluaXRDaGVjayA9IE5PX0VSUk9SOwogICAgICAgICAgICAgcnVuKCJTZW5zb3JTZXJ2aWNlIiwgUFJJT1JJVFlfVVJHRU5UX0RJU1BMQVkpOwogICAgICAgICB9CkBAIC0zODYsOCArMzg4LDYgQEAKICAgICBTZW5zb3JEZXZpY2UmIGRldmljZShTZW5zb3JEZXZpY2U6OmdldEluc3RhbmNlKCkpOwogICAgIGNvbnN0IHNpemVfdCB2Y291bnQgPSBtVmlydHVhbFNlbnNvckxpc3Quc2l6ZSgpOwogCi0gICAgU2Vuc29yRXZlbnRBY2tSZWNlaXZlciBzZW5kZXIodGhpcyk7Ci0gICAgc2VuZGVyLnJ1bigiU2Vuc29yRXZlbnRBY2tSZWNlaXZlciIsIFBSSU9SSVRZX1VSR0VOVF9ESVNQTEFZKTsKICAgICBjb25zdCBpbnQgaGFsVmVyc2lvbiA9IGRldmljZS5nZXRIYWxEZXZpY2VWZXJzaW9uKCk7CiAgICAgZG8gewogICAgICAgICBzc2l6ZV90IGNvdW50ID0gZGV2aWNlLnBvbGwobVNlbnNvckV2ZW50QnVmZmVyLCBudW1FdmVudE1heCk7CkBAIC00MDgsMTYgKzQwOCw3IEBACiAgICAgICAgIC8vIHJlc3VsdCBpbiBhIGRlYWRsb2NrIGFzIH5TZW5zb3JFdmVudENvbm5lY3Rpb24oKSBuZWVkcyB0byBhY3F1aXJlIG1Mb2NrIGFnYWluIGZvcgogICAgICAgICAvLyBjbGVhbnVwLiBTbyBjb3B5IGFsbCB0aGUgc3Ryb25nUG9pbnRlcnMgdG8gYSB2ZWN0b3IgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLgogICAgICAgICBTb3J0ZWRWZWN0b3I8IHNwPFNlbnNvckV2ZW50Q29ubmVjdGlvbj4gPiBhY3RpdmVDb25uZWN0aW9uczsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGk9MCA7IGkgPCBtQWN0aXZlQ29ubmVjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBzcDxTZW5zb3JFdmVudENvbm5lY3Rpb24+IGNvbm5lY3Rpb24obUFjdGl2ZUNvbm5lY3Rpb25zW2ldLnByb21vdGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9ucy5hZGQoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgcG9wdWxhdGVBY3RpdmVDb25uZWN0aW9ucygmYWN0aXZlQ29ubmVjdGlvbnMpOwogICAgICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUxvY2spOwogICAgICAgICAvLyBQb2xsIGhhcyByZXR1cm5lZC4gSG9sZCBhIHdha2Vsb2NrIGlmIG9uZSBvZiB0aGUgZXZlbnRzIGlzIGZyb20gYSB3YWtlIHVwIHNlbnNvci4gVGhlCiAgICAgICAgIC8vIHJlc3Qgb2YgdGhpcyBsb29wIGlzIHVuZGVyIGEgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0ZWQgYnkgbUxvY2suIEFjcXVpcmluZyBhIHdha2VMb2NrLApAQCAtNDMzLDggKzQyNCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYnVmZmVySGFzV2FrZVVwRXZlbnQgJiYgIW1XYWtlTG9ja0FjcXVpcmVkKSB7Ci0gICAgICAgICAgICBhY3F1aXJlX3dha2VfbG9jayhQQVJUSUFMX1dBS0VfTE9DSywgV0FLRV9MT0NLX05BTUUpOwotICAgICAgICAgICAgbVdha2VMb2NrQWNxdWlyZWQgPSB0cnVlOworICAgICAgICAgICAgc2V0V2FrZUxvY2tBY3F1aXJlZExvY2tlZCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICByZWNvcmRMYXN0VmFsdWVMb2NrZWQobVNlbnNvckV2ZW50QnVmZmVyLCBjb3VudCk7CiAKQEAgLTUyMiw4ICs1MTIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1XYWtlTG9ja0FjcXVpcmVkICYmICFuZWVkc1dha2VMb2NrKSB7Ci0gICAgICAgICAgICByZWxlYXNlX3dha2VfbG9jayhXQUtFX0xPQ0tfTkFNRSk7Ci0gICAgICAgICAgICBtV2FrZUxvY2tBY3F1aXJlZCA9IGZhbHNlOworICAgICAgICAgICAgc2V0V2FrZUxvY2tBY3F1aXJlZExvY2tlZChmYWxzZSk7CiAgICAgICAgIH0KICAgICB9IHdoaWxlICghVGhyZWFkOjpleGl0UGVuZGluZygpKTsKIApAQCAtNTM2LDExICs1MjUsNTIgQEAKICAgICByZXR1cm4gbUxvb3BlcjsKIH0KIAordm9pZCBTZW5zb3JTZXJ2aWNlOjpyZXNldEFsbFdha2VMb2NrUmVmQ291bnRzKCkgeworICAgIFNvcnRlZFZlY3Rvcjwgc3A8U2Vuc29yRXZlbnRDb25uZWN0aW9uPiA+IGFjdGl2ZUNvbm5lY3Rpb25zOworICAgIHBvcHVsYXRlQWN0aXZlQ29ubmVjdGlvbnMoJmFjdGl2ZUNvbm5lY3Rpb25zKTsKKyAgICB7CisgICAgICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgICAgIGZvciAoc2l6ZV90IGk9MCA7IGkgPCBhY3RpdmVDb25uZWN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGFjdGl2ZUNvbm5lY3Rpb25zW2ldICE9IDApIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uc1tpXS0+cmVzZXRXYWtlTG9ja1JlZkNvdW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2V0V2FrZUxvY2tBY3F1aXJlZExvY2tlZChmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFNlbnNvclNlcnZpY2U6OnNldFdha2VMb2NrQWNxdWlyZWRMb2NrZWQoYm9vbCBhY3F1aXJlKSB7CisgICAgaWYgKGFjcXVpcmUpIHsKKyAgICAgICAgaWYgKCFtV2FrZUxvY2tBY3F1aXJlZCkgeworICAgICAgICAgICAgYWNxdWlyZV93YWtlX2xvY2soUEFSVElBTF9XQUtFX0xPQ0ssIFdBS0VfTE9DS19OQU1FKTsKKyAgICAgICAgICAgIG1XYWtlTG9ja0FjcXVpcmVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtTG9vcGVyLT53YWtlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1XYWtlTG9ja0FjcXVpcmVkKSB7CisgICAgICAgICAgICByZWxlYXNlX3dha2VfbG9jayhXQUtFX0xPQ0tfTkFNRSk7CisgICAgICAgICAgICBtV2FrZUxvY2tBY3F1aXJlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCisKK2Jvb2wgU2Vuc29yU2VydmljZTo6aXNXYWtlTG9ja0FjcXVpcmVkKCkgeworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgcmV0dXJuIG1XYWtlTG9ja0FjcXVpcmVkOworfQorCiBib29sIFNlbnNvclNlcnZpY2U6OlNlbnNvckV2ZW50QWNrUmVjZWl2ZXI6OnRocmVhZExvb3AoKSB7CiAgICAgQUxPR0QoIm5ldyB0aHJlYWQgU2Vuc29yRXZlbnRBY2tSZWNlaXZlciIpOworICAgIHNwPExvb3Blcj4gbG9vcGVyID0gbVNlcnZpY2UtPmdldExvb3BlcigpOwogICAgIGRvIHsKLSAgICAgICAgc3A8TG9vcGVyPiBsb29wZXIgPSBtU2VydmljZS0+Z2V0TG9vcGVyKCk7Ci0gICAgICAgIGxvb3Blci0+cG9sbE9uY2UoLTEpOworICAgICAgICBib29sIHdha2VMb2NrQWNxdWlyZWQgPSBtU2VydmljZS0+aXNXYWtlTG9ja0FjcXVpcmVkKCk7CisgICAgICAgIGludCB0aW1lb3V0ID0gLTE7CisgICAgICAgIGlmICh3YWtlTG9ja0FjcXVpcmVkKSB0aW1lb3V0ID0gNTAwMDsKKyAgICAgICAgaW50IHJldCA9IGxvb3Blci0+cG9sbE9uY2UodGltZW91dCk7CisgICAgICAgIGlmIChyZXQgPT0gQUxPT1BFUl9QT0xMX1RJTUVPVVQpIHsKKyAgICAgICAgICAgbVNlcnZpY2UtPnJlc2V0QWxsV2FrZUxvY2tSZWZDb3VudHMoKTsKKyAgICAgICAgfQogICAgIH0gd2hpbGUoIVRocmVhZDo6ZXhpdFBlbmRpbmcoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNzExLDEwICs3NDEsNyBAQAogICAgICAgICAgICAgICAgIHNlbnNvcnNfZXZlbnRfdCYgZXZlbnQobUxhc3RFdmVudFNlZW4uZWRpdFZhbHVlRm9yKGhhbmRsZSkpOwogICAgICAgICAgICAgICAgIGlmIChldmVudC52ZXJzaW9uID09IHNpemVvZihzZW5zb3JzX2V2ZW50X3QpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dha2VVcFNlbnNvckV2ZW50KGV2ZW50KSAmJiAhbVdha2VMb2NrQWNxdWlyZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjcXVpcmVfd2FrZV9sb2NrKFBBUlRJQUxfV0FLRV9MT0NLLCBXQUtFX0xPQ0tfTkFNRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2FrZUxvY2tBY3F1aXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBTE9HRF9JRihERUJVR19DT05ORUNUSU9OUywgImFjcXVpcmVkIHdha2Vsb2NrIGZvciBvbl9jaGFuZ2Ugc2Vuc29yICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FLRV9MT0NLX05BTUUpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2FrZUxvY2tBY3F1aXJlZExvY2tlZCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kRXZlbnRzKCZldmVudCwgMSwgTlVMTCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvbi0+bmVlZHNXYWtlTG9jaygpICYmIG1XYWtlTG9ja0FjcXVpcmVkKSB7CkBAIC05MTksOCArOTQ2LDI2IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHJlbGVhc2VMb2NrKSB7Ci0gICAgICAgIHJlbGVhc2Vfd2FrZV9sb2NrKFdBS0VfTE9DS19OQU1FKTsKLSAgICAgICAgbVdha2VMb2NrQWNxdWlyZWQgPSBmYWxzZTsKKyAgICAgICAgc2V0V2FrZUxvY2tBY3F1aXJlZExvY2tlZChmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFNlbnNvclNlcnZpY2U6OnNlbmRFdmVudHNGcm9tQ2FjaGUoY29uc3Qgc3A8U2Vuc29yRXZlbnRDb25uZWN0aW9uPiYgY29ubmVjdGlvbikgeworICAgIE11dGV4OjpBdXRvbG9jayBfbChtTG9jayk7CisgICAgY29ubmVjdGlvbi0+d3JpdGVUb1NvY2tldEZyb21DYWNoZSgpOworICAgIGlmIChjb25uZWN0aW9uLT5uZWVkc1dha2VMb2NrKCkpIHsKKyAgICAgICAgc2V0V2FrZUxvY2tBY3F1aXJlZExvY2tlZCh0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Vuc29yU2VydmljZTo6cG9wdWxhdGVBY3RpdmVDb25uZWN0aW9ucygKKyAgICAgICAgU29ydGVkVmVjdG9yPCBzcDxTZW5zb3JFdmVudENvbm5lY3Rpb24+ID4qIGFjdGl2ZUNvbm5lY3Rpb25zKSB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Mb2NrKTsKKyAgICBmb3IgKHNpemVfdCBpPTAgOyBpIDwgbUFjdGl2ZUNvbm5lY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIHNwPFNlbnNvckV2ZW50Q29ubmVjdGlvbj4gY29ubmVjdGlvbihtQWN0aXZlQ29ubmVjdGlvbnNbaV0ucHJvbW90ZSgpKTsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24gIT0gMCkgeworICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbnMtPmFkZChjb25uZWN0aW9uKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTAxMCw2ICsxMDU1LDExIEBACiAgICAgcmV0dXJuICFtRGVhZCAmJiBtV2FrZUxvY2tSZWZDb3VudCA+IDA7CiB9CiAKK3ZvaWQgU2Vuc29yU2VydmljZTo6U2Vuc29yRXZlbnRDb25uZWN0aW9uOjpyZXNldFdha2VMb2NrUmVmQ291bnQoKSB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Db25uZWN0aW9uTG9jayk7CisgICAgbVdha2VMb2NrUmVmQ291bnQgPSAwOworfQorCiB2b2lkIFNlbnNvclNlcnZpY2U6OlNlbnNvckV2ZW50Q29ubmVjdGlvbjo6ZHVtcChTdHJpbmc4JiByZXN1bHQpIHsKICAgICBNdXRleDo6QXV0b2xvY2sgX2wobUNvbm5lY3Rpb25Mb2NrKTsKICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCJcdCBXYWtlTG9ja1JlZkNvdW50ICVkIHwgdWlkICVkIHwgY2FjaGUgc2l6ZSAlZCB8IG1heCBjYWNoZSBzaXplICVkXG4iLApAQCAtMTMzMSwxMSArMTM4MSwxNCBAQAogICAgICAgICB3aGlsZSAoZmx1c2hJbmZvLm1QZW5kaW5nRmx1c2hFdmVudHNUb1NlbmQgPiAwKSB7CiAgICAgICAgICAgICBjb25zdCBpbnQgc2Vuc29yX2hhbmRsZSA9IG1TZW5zb3JJbmZvLmtleUF0KGkpOwogICAgICAgICAgICAgZmx1c2hDb21wbGV0ZUV2ZW50Lm1ldGFfZGF0YS5zZW5zb3IgPSBzZW5zb3JfaGFuZGxlOwotICAgICAgICAgICAgaWYgKG1TZXJ2aWNlLT5nZXRTZW5zb3JGcm9tSGFuZGxlKHNlbnNvcl9oYW5kbGUpLmlzV2FrZVVwU2Vuc29yKCkpIHsKKyAgICAgICAgICAgIGJvb2wgd2FrZVVwU2Vuc29yID0gbVNlcnZpY2UtPmdldFNlbnNvckZyb21IYW5kbGUoc2Vuc29yX2hhbmRsZSkuaXNXYWtlVXBTZW5zb3IoKTsKKyAgICAgICAgICAgIGlmICh3YWtlVXBTZW5zb3IpIHsKKyAgICAgICAgICAgICAgICsrbVdha2VMb2NrUmVmQ291bnQ7CiAgICAgICAgICAgICAgICBmbHVzaENvbXBsZXRlRXZlbnQuZmxhZ3MgfD0gV0FLRV9VUF9TRU5TT1JfRVZFTlRfTkVFRFNfQUNLOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3NpemVfdCBzaXplID0gU2Vuc29yRXZlbnRRdWV1ZTo6d3JpdGUobUNoYW5uZWwsICZmbHVzaENvbXBsZXRlRXZlbnQsIDEpOwogICAgICAgICAgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHdha2VVcFNlbnNvcikgLS1tV2FrZUxvY2tSZWZDb3VudDsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBTE9HRF9JRihERUJVR19DT05ORUNUSU9OUywgInNlbnQgZHJvcHBlZCBmbHVzaCBjb21wbGV0ZSBldmVudD09JWQgIiwKQEAgLTEzNDUsMTEgKzEzOTgsMTIgQEAKICAgICB9CiB9CiAKLXZvaWQgU2Vuc29yU2VydmljZTo6U2Vuc29yRXZlbnRDb25uZWN0aW9uOjp3cml0ZVRvU29ja2V0RnJvbUNhY2hlTG9ja2VkKCkgewordm9pZCBTZW5zb3JTZXJ2aWNlOjpTZW5zb3JFdmVudENvbm5lY3Rpb246OndyaXRlVG9Tb2NrZXRGcm9tQ2FjaGUoKSB7CiAgICAgLy8gQXQgYSB0aW1lIHdyaXRlIGF0IG1vc3QgaGFsZiB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZXIgYnVmZmVyIGluIFNlbnNvckV2ZW50UXVldWUgT1IKICAgICAvLyBoYWxmIHRoZSBzaXplIG9mIHRoZSBzb2NrZXQgYnVmZmVyIGFsbG9jYXRlZCBpbiBCaXRUdWJlIHdoaWNoZXZlciBpcyBzbWFsbGVyLgogICAgIGNvbnN0IGludCBtYXhXcml0ZVNpemUgPSBoZWxwZXJzOjptaW4oU2Vuc29yRXZlbnRRdWV1ZTo6TUFYX1JFQ0VJVkVfQlVGRkVSX0VWRU5UX0NPVU5ULzIsCiAgICAgICAgICAgICBpbnQobVNlcnZpY2UtPm1Tb2NrZXRCdWZmZXJTaXplLyhzaXplb2Yoc2Vuc29yc19ldmVudF90KSoyKSkpOworICAgIE11dGV4OjpBdXRvbG9jayBfbChtQ29ubmVjdGlvbkxvY2spOwogICAgIC8vIFNlbmQgcGVuZGluZyBmbHVzaCBjb21wbGV0ZSBldmVudHMgKGlmIGFueSkKICAgICBzZW5kUGVuZGluZ0ZsdXNoRXZlbnRzTG9ja2VkKCk7CiAgICAgZm9yIChpbnQgbnVtRXZlbnRzU2VudCA9IDA7IG51bUV2ZW50c1NlbnQgPCBtQ2FjaGVTaXplOykgewpAQCAtMTUwMCw5ICsxNTU0LDggQEAKICAgICB9CiAKICAgICBpZiAoZXZlbnRzICYgQUxPT1BFUl9FVkVOVF9PVVRQVVQpIHsKLSAgICAgICAgLy8gc2VuZCBzZW5zb3IgZGF0YSB0aGF0IGlzIHN0b3JlZCBpbiBtRXZlbnRDYWNoZS4KLSAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIF9sKG1Db25uZWN0aW9uTG9jayk7Ci0gICAgICAgIHdyaXRlVG9Tb2NrZXRGcm9tQ2FjaGVMb2NrZWQoKTsKKyAgICAgICAgLy8gc2VuZCBzZW5zb3IgZGF0YSB0aGF0IGlzIHN0b3JlZCBpbiBtRXZlbnRDYWNoZSBmb3IgdGhpcyBjb25uZWN0aW9uLgorICAgICAgICBtU2VydmljZS0+c2VuZEV2ZW50c0Zyb21DYWNoZSh0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zZW5zb3JzZXJ2aWNlL1NlbnNvclNlcnZpY2UuaCBiL3NlcnZpY2VzL3NlbnNvcnNlcnZpY2UvU2Vuc29yU2VydmljZS5oCmluZGV4IDJlMTY2NzcuLmU5Y2EzYTUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3NlbnNvcnNlcnZpY2UvU2Vuc29yU2VydmljZS5oCisrKyBiL3NlcnZpY2VzL3NlbnNvcnNlcnZpY2UvU2Vuc29yU2VydmljZS5oCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgdm9pZCBzZW5kUGVuZGluZ0ZsdXNoRXZlbnRzTG9ja2VkKCk7CiAKICAgICAgICAgLy8gV3JpdGVzIGV2ZW50cyBmcm9tIG1FdmVudENhY2hlIHRvIHRoZSBzb2NrZXQuCi0gICAgICAgIHZvaWQgd3JpdGVUb1NvY2tldEZyb21DYWNoZUxvY2tlZCgpOworICAgICAgICB2b2lkIHdyaXRlVG9Tb2NrZXRGcm9tQ2FjaGUoKTsKIAogICAgICAgICAvLyBDb21wdXRlIHRoZSBhcHByb3hpbWF0ZSBjYWNoZSBzaXplIGZyb20gdGhlIEZJRk8gc2l6ZXMgb2YgdmFyaW91cyBzZW5zb3JzIHJlZ2lzdGVyZWQgZm9yCiAgICAgICAgIC8vIHRoaXMgY29ubmVjdGlvbi4gV2FrZSB1cCBhbmQgbm9uLXdha2UgdXAgc2Vuc29ycyBoYXZlIHNlcGFyYXRlIEZJRk9zIGJ1dCBGSUZPIG1heSBiZQpAQCAtMTg5LDYgKzE4OSw3IEBACiAgICAgICAgIHZvaWQgc2V0Rmlyc3RGbHVzaFBlbmRpbmcoaW50MzJfdCBoYW5kbGUsIGJvb2wgdmFsdWUpOwogICAgICAgICB2b2lkIGR1bXAoU3RyaW5nOCYgcmVzdWx0KTsKICAgICAgICAgYm9vbCBuZWVkc1dha2VMb2NrKCk7CisgICAgICAgIHZvaWQgcmVzZXRXYWtlTG9ja1JlZkNvdW50KCk7CiAKICAgICAgICAgdWlkX3QgZ2V0VWlkKCkgY29uc3QgeyByZXR1cm4gbVVpZDsgfQogICAgIH07CkBAIC0yMzcsMTIgKzIzOCwyOSBAQAogICAgIC8vIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb25zLCBpZiB5ZXMgdGhlIHdha2Vsb2NrIGlzIHJlbGVhc2VkLgogICAgIHZvaWQgY2hlY2tXYWtlTG9ja1N0YXRlKCk7CiAgICAgdm9pZCBjaGVja1dha2VMb2NrU3RhdGVMb2NrZWQoKTsKKyAgICBib29sIGlzV2FrZUxvY2tBY3F1aXJlZCgpOwogICAgIGJvb2wgaXNXYWtlVXBTZW5zb3JFdmVudChjb25zdCBzZW5zb3JzX2V2ZW50X3QmIGV2ZW50KSBjb25zdDsKIAogICAgIFNlbnNvclJlY29yZCAqIGdldFNlbnNvclJlY29yZChpbnQgaGFuZGxlKTsKIAogICAgIHNwPExvb3Blcj4gZ2V0TG9vcGVyKCkgY29uc3Q7CiAKKyAgICAvLyBSZXNldCBtV2FrZUxvY2tSZWZDb3VudHMgZm9yIGFsbCBTZW5zb3JFdmVudENvbm5lY3Rpb25zIHRvIHplcm8uIFRoaXMgbWF5IGhhcHBlbiBpZgorICAgIC8vIFNlbnNvclNlcnZpY2UgZGlkIG5vdCByZWNlaXZlIGFueSBhY2tub3dsZWRnZW1lbnRzIGZyb20gYXBwcyB3aGljaCBoYXZlIHJlZ2lzdGVyZWQgZm9yCisgICAgLy8gd2FrZV91cCBzZW5zb3JzLgorICAgIHZvaWQgcmVzZXRBbGxXYWtlTG9ja1JlZkNvdW50cygpOworCisgICAgLy8gQWNxdWlyZSBvciByZWxlYXNlIHdha2VfbG9jay4gSWYgd2FrZV9sb2NrIGlzIGFjcXVpcmVkLCBzZXQgdGhlIHRpbWVvdXQgaW4gdGhlIGxvb3BlciB0bworICAgIC8vIDUgc2Vjb25kcyBhbmQgd2FrZSB0aGUgbG9vcGVyLgorICAgIHZvaWQgc2V0V2FrZUxvY2tBY3F1aXJlZExvY2tlZChib29sIGFjcXVpcmUpOworCisgICAgLy8gU2VuZCBldmVudHMgZnJvbSB0aGUgZXZlbnQgY2FjaGUgZm9yIHRoaXMgcGFydGljdWxhciBjb25uZWN0aW9uLgorICAgIHZvaWQgc2VuZEV2ZW50c0Zyb21DYWNoZShjb25zdCBzcDxTZW5zb3JFdmVudENvbm5lY3Rpb24+JiBjb25uZWN0aW9uKTsKKworICAgIC8vIFByb21vdGUgYWxsIHdlYWsgcmVmZXJlY2VuY2VzIGluIG1BY3RpdmVDb25uZWN0aW9ucyB2ZWN0b3IgdG8gc3Ryb25nIHJlZmVyZW5jZXMgYW5kIGFkZCB0aGVtCisgICAgLy8gdG8gdGhlIG91dHB1dCB2ZWN0b3IuCisgICAgdm9pZCBwb3B1bGF0ZUFjdGl2ZUNvbm5lY3Rpb25zKFNvcnRlZFZlY3Rvcjwgc3A8U2Vuc29yRXZlbnRDb25uZWN0aW9uPiA+KiBhY3RpdmVDb25uZWN0aW9ucyk7CisKICAgICAvLyBjb25zdGFudHMKICAgICBWZWN0b3I8U2Vuc29yPiBtU2Vuc29yTGlzdDsKICAgICBWZWN0b3I8U2Vuc29yPiBtVXNlclNlbnNvckxpc3REZWJ1ZzsKQEAgLTI1NCw2ICsyNzIsNyBAQAogICAgIC8vIHN1cHBvcnRlZCBvciBub3QuCiAgICAgdWludDMyX3QgbVNvY2tldEJ1ZmZlclNpemU7CiAgICAgc3A8TG9vcGVyPiBtTG9vcGVyOworICAgIHNwPFNlbnNvckV2ZW50QWNrUmVjZWl2ZXI+IG1BY2tSZWNlaXZlcjsKIAogICAgIC8vIHByb3RlY3RlZCBieSBtTG9jawogICAgIG11dGFibGUgTXV0ZXggbUxvY2s7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9BbmRyb2lkLm1rIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvQW5kcm9pZC5tawppbmRleCBmMWRkYmUyLi4zMTIzYjYzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9BbmRyb2lkLm1rCisrKyBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL0FuZHJvaWQubWsKQEAgLTgzLDYgKzgzLDEyIEBACiAgICAgTE9DQUxfQ0ZMQUdTICs9IC1EUFJFU0VOVF9USU1FX09GRlNFVF9GUk9NX1ZTWU5DX05TPTAKIGVuZGlmCiAKK2lmbmVxICgkKE1BWF9WSVJUVUFMX0RJU1BMQVlfRElNRU5TSU9OKSwpCisgICAgTE9DQUxfQ0ZMQUdTICs9IC1ETUFYX1ZJUlRVQUxfRElTUExBWV9ESU1FTlNJT049JChNQVhfVklSVFVBTF9ESVNQTEFZX0RJTUVOU0lPTikKK2Vsc2UKKyAgICBMT0NBTF9DRkxBR1MgKz0gLURNQVhfVklSVFVBTF9ESVNQTEFZX0RJTUVOU0lPTj0wCitlbmRpZgorCiBMT0NBTF9DRkxBR1MgKz0gLWZ2aXNpYmlsaXR5PWhpZGRlbiAtV2Vycm9yPWZvcm1hdAogTE9DQUxfQ0ZMQUdTICs9IC1zdGQ9YysrMTEKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvRGlzcGxheUhhcmR3YXJlL0ZyYW1lYnVmZmVyU3VyZmFjZS5jcHAgYi9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9EaXNwbGF5SGFyZHdhcmUvRnJhbWVidWZmZXJTdXJmYWNlLmNwcAppbmRleCAzNDIwMTZlLi4yMmQzY2VjIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9EaXNwbGF5SGFyZHdhcmUvRnJhbWVidWZmZXJTdXJmYWNlLmNwcAorKysgYi9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9EaXNwbGF5SGFyZHdhcmUvRnJhbWVidWZmZXJTdXJmYWNlLmNwcApAQCAtNjgsNyArNjgsNyBAQAogICAgIG1Db25zdW1lci0+c2V0RGVmYXVsdE1heEJ1ZmZlckNvdW50KE5VTV9GUkFNRUJVRkZFUl9TVVJGQUNFX0JVRkZFUlMpOwogfQogCi1zdGF0dXNfdCBGcmFtZWJ1ZmZlclN1cmZhY2U6OmJlZ2luRnJhbWUoYm9vbCAvKiBtdXN0UmVjb21wb3NlICovKSB7CitzdGF0dXNfdCBGcmFtZWJ1ZmZlclN1cmZhY2U6OmJlZ2luRnJhbWUoYm9vbCAvKm11c3RSZWNvbXBvc2UqLykgewogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIApAQCAtMTIyLDcgKzEyMiw3IEBACiB9CiAKIC8vIE92ZXJyaWRlcyBDb25zdW1lckJhc2U6Om9uRnJhbWVBdmFpbGFibGUoKSwgZG9lcyBub3QgY2FsbCBiYXNlIGNsYXNzIGltcGwuCi12b2lkIEZyYW1lYnVmZmVyU3VyZmFjZTo6b25GcmFtZUF2YWlsYWJsZSgpIHsKK3ZvaWQgRnJhbWVidWZmZXJTdXJmYWNlOjpvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIC8qIGl0ZW0gKi8pIHsKICAgICBzcDxHcmFwaGljQnVmZmVyPiBidWY7CiAgICAgc3A8RmVuY2U+IGFjcXVpcmVGZW5jZTsKICAgICBzdGF0dXNfdCBlcnIgPSBuZXh0QnVmZmVyKGJ1ZiwgYWNxdWlyZUZlbmNlKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL0Rpc3BsYXlIYXJkd2FyZS9GcmFtZWJ1ZmZlclN1cmZhY2UuaCBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL0Rpc3BsYXlIYXJkd2FyZS9GcmFtZWJ1ZmZlclN1cmZhY2UuaAppbmRleCBkMGJmMjJiLi44NjA1ODYyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9EaXNwbGF5SGFyZHdhcmUvRnJhbWVidWZmZXJTdXJmYWNlLmgKKysrIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvRGlzcGxheUhhcmR3YXJlL0ZyYW1lYnVmZmVyU3VyZmFjZS5oCkBAIC01Niw3ICs1Niw3IEBACiBwcml2YXRlOgogICAgIHZpcnR1YWwgfkZyYW1lYnVmZmVyU3VyZmFjZSgpIHsgfTsgLy8gdGhpcyBjbGFzcyBjYW5ub3QgYmUgb3ZlcmxvYWRlZAogCi0gICAgdmlydHVhbCB2b2lkIG9uRnJhbWVBdmFpbGFibGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiBpdGVtKTsKICAgICB2aXJ0dWFsIHZvaWQgZnJlZUJ1ZmZlckxvY2tlZChpbnQgc2xvdEluZGV4KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTG9ja2VkKFN0cmluZzgmIHJlc3VsdCwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL0xheWVyLmNwcCBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL0xheWVyLmNwcAppbmRleCA5MWU5YTAyLi45ZGExZWZkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9MYXllci5jcHAKKysrIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvTGF5ZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8dWkvR3JhcGhpY0J1ZmZlci5oPgogI2luY2x1ZGUgPHVpL1BpeGVsRm9ybWF0Lmg+CiAKKyNpbmNsdWRlIDxndWkvQnVmZmVySXRlbS5oPgogI2luY2x1ZGUgPGd1aS9TdXJmYWNlLmg+CiAKICNpbmNsdWRlICJjbHouaCIKQEAgLTE1OCwxMSArMTU5LDI2IEBACiAgICAgfQogfQogCi12b2lkIExheWVyOjpvbkZyYW1lQXZhaWxhYmxlKCkgewordm9pZCBMYXllcjo6b25GcmFtZUF2YWlsYWJsZShjb25zdCBCdWZmZXJJdGVtJiBpdGVtKSB7CisgICAgLy8gQWRkIHRoaXMgYnVmZmVyIGZyb20gb3VyIGludGVybmFsIHF1ZXVlIHRyYWNrZXIKKyAgICB7IC8vIEF1dG9sb2NrIHNjb3BlCisgICAgICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1RdWV1ZUl0ZW1Mb2NrKTsKKyAgICAgICAgbVF1ZXVlSXRlbXMucHVzaF9iYWNrKGl0ZW0pOworICAgIH0KKwogICAgIGFuZHJvaWRfYXRvbWljX2luYygmbVF1ZXVlZEZyYW1lcyk7CiAgICAgbUZsaW5nZXItPnNpZ25hbExheWVyVXBkYXRlKCk7CiB9CiAKK3ZvaWQgTGF5ZXI6Om9uRnJhbWVSZXBsYWNlZChjb25zdCBCdWZmZXJJdGVtJiBpdGVtKSB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobVF1ZXVlSXRlbUxvY2spOworICAgIGlmIChtUXVldWVJdGVtcy5lbXB0eSgpKSB7CisgICAgICAgIEFMT0dFKCJDYW4ndCByZXBsYWNlIGEgZnJhbWUgb24gYW4gZW1wdHkgcXVldWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtUXVldWVJdGVtcy5lZGl0SXRlbUF0KDApID0gaXRlbTsKK30KKwogdm9pZCBMYXllcjo6b25TaWRlYmFuZFN0cmVhbUNoYW5nZWQoKSB7CiAgICAgaWYgKGFuZHJvaWRfYXRvbWljX3JlbGVhc2VfY2FzKGZhbHNlLCB0cnVlLCAmbVNpZGViYW5kU3RyZWFtQ2hhbmdlZCkgPT0gMCkgewogICAgICAgICAvLyBtU2lkZWJhbmRTdHJlYW1DaGFuZ2VkIHdhcyBmYWxzZQpAQCAtMjc3LDEyICsyOTMsMTcgQEAKIAogUmVjdCBMYXllcjo6Y29tcHV0ZUJvdW5kcygpIGNvbnN0IHsKICAgICBjb25zdCBMYXllcjo6U3RhdGUmIHMoZ2V0RHJhd2luZ1N0YXRlKCkpOworICAgIHJldHVybiBjb21wdXRlQm91bmRzKHMuYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24pOworfQorCitSZWN0IExheWVyOjpjb21wdXRlQm91bmRzKGNvbnN0IFJlZ2lvbiYgYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24pIGNvbnN0IHsKKyAgICBjb25zdCBMYXllcjo6U3RhdGUmIHMoZ2V0RHJhd2luZ1N0YXRlKCkpOwogICAgIFJlY3Qgd2luKHMuYWN0aXZlLncsIHMuYWN0aXZlLmgpOwogICAgIGlmICghcy5hY3RpdmUuY3JvcC5pc0VtcHR5KCkpIHsKICAgICAgICAgd2luLmludGVyc2VjdChzLmFjdGl2ZS5jcm9wLCAmd2luKTsKICAgICB9CiAgICAgLy8gc3VidHJhY3QgdGhlIHRyYW5zcGFyZW50IHJlZ2lvbiBhbmQgc25hcCB0byB0aGUgYm91bmRzCi0gICAgcmV0dXJuIHJlZHVjZSh3aW4sIHMuYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24pOworICAgIHJldHVybiByZWR1Y2Uod2luLCBhY3RpdmVUcmFuc3BhcmVudFJlZ2lvbik7CiB9CiAKIEZsb2F0UmVjdCBMYXllcjo6Y29tcHV0ZUNyb3AoY29uc3Qgc3A8Y29uc3QgRGlzcGxheURldmljZT4mIGh3KSBjb25zdCB7CkBAIC0zMTAsOCArMzMxLDEyIEBACiAgICAgYWN0aXZlQ3JvcC5pbnRlcnNlY3QoaHctPmdldFZpZXdwb3J0KCksICZhY3RpdmVDcm9wKTsKICAgICBhY3RpdmVDcm9wID0gcy50cmFuc2Zvcm0uaW52ZXJzZSgpLnRyYW5zZm9ybShhY3RpdmVDcm9wKTsKIAotICAgIC8vIHBhcmFub2lhOiBtYWtlIHN1cmUgdGhlIHdpbmRvdy1jcm9wIGlzIGNvbnN0cmFpbmVkIGluIHRoZQotICAgIC8vIHdpbmRvdydzIGJvdW5kcworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgaGVyZSBhcyB0cmFuc2Zvcm0udHJhbnNmb3JtKFJlY3QpIGNvbXB1dGVzIHRoZQorICAgIC8vIHRyYW5zZm9ybWVkIHJlY3QgYW5kIHRoZW4gdGFrZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgcmVzdWx0IGJlZm9yZQorICAgIC8vIHJldHVybmluZy4gVGhpcyBtZWFucworICAgIC8vIHRyYW5zZm9ybS5pbnZlcnNlKCkudHJhbnNmb3JtKHRyYW5zZm9ybS50cmFuc2Zvcm0oUmVjdCkpICE9IFJlY3QKKyAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmaW5hbCByZWN0IGlzIGNsaXBwZWQgdG8gdGhlCisgICAgLy8gZGlzcGxheSBib3VuZHMuCiAgICAgYWN0aXZlQ3JvcC5pbnRlcnNlY3QoUmVjdChzLmFjdGl2ZS53LCBzLmFjdGl2ZS5oKSwgJmFjdGl2ZUNyb3ApOwogCiAgICAgLy8gc3VidHJhY3QgdGhlIHRyYW5zcGFyZW50IHJlZ2lvbiBhbmQgc25hcCB0byB0aGUgYm91bmRzCkBAIC00MDQsNyArNDI5LDI5IEBACiAKICAgICAvLyBhcHBseSB0aGUgbGF5ZXIncyB0cmFuc2Zvcm0sIGZvbGxvd2VkIGJ5IHRoZSBkaXNwbGF5J3MgZ2xvYmFsIHRyYW5zZm9ybQogICAgIC8vIGhlcmUgd2UncmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBsYXllcidzIHRyYW5zZm9ybSBwcmVzZXJ2ZXMgcmVjdHMKLSAgICBSZWN0IGZyYW1lKHMudHJhbnNmb3JtLnRyYW5zZm9ybShjb21wdXRlQm91bmRzKCkpKTsKKyAgICBSZWdpb24gYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24ocy5hY3RpdmVUcmFuc3BhcmVudFJlZ2lvbik7CisgICAgaWYgKCFzLmFjdGl2ZS5jcm9wLmlzRW1wdHkoKSkgeworICAgICAgICBSZWN0IGFjdGl2ZUNyb3Aocy5hY3RpdmUuY3JvcCk7CisgICAgICAgIGFjdGl2ZUNyb3AgPSBzLnRyYW5zZm9ybS50cmFuc2Zvcm0oYWN0aXZlQ3JvcCk7CisgICAgICAgIGFjdGl2ZUNyb3AuaW50ZXJzZWN0KGh3LT5nZXRWaWV3cG9ydCgpLCAmYWN0aXZlQ3JvcCk7CisgICAgICAgIGFjdGl2ZUNyb3AgPSBzLnRyYW5zZm9ybS5pbnZlcnNlKCkudHJhbnNmb3JtKGFjdGl2ZUNyb3ApOworICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGhlcmUgYXMgdHJhbnNmb3JtLnRyYW5zZm9ybShSZWN0KSBjb21wdXRlcyB0aGUKKyAgICAgICAgLy8gdHJhbnNmb3JtZWQgcmVjdCBhbmQgdGhlbiB0YWtlcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSByZXN1bHQgYmVmb3JlCisgICAgICAgIC8vIHJldHVybmluZy4gVGhpcyBtZWFucworICAgICAgICAvLyB0cmFuc2Zvcm0uaW52ZXJzZSgpLnRyYW5zZm9ybSh0cmFuc2Zvcm0udHJhbnNmb3JtKFJlY3QpKSAhPSBSZWN0CisgICAgICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZpbmFsIHJlY3QgaXMgY2xpcHBlZCB0byB0aGUKKyAgICAgICAgLy8gZGlzcGxheSBib3VuZHMuCisgICAgICAgIGFjdGl2ZUNyb3AuaW50ZXJzZWN0KFJlY3Qocy5hY3RpdmUudywgcy5hY3RpdmUuaCksICZhY3RpdmVDcm9wKTsKKyAgICAgICAgLy8gbWFyayByZWdpb25zIG91dHNpZGUgdGhlIGNyb3AgYXMgdHJhbnNwYXJlbnQKKyAgICAgICAgYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24ub3JTZWxmKFJlY3QoMCwgMCwgcy5hY3RpdmUudywgYWN0aXZlQ3JvcC50b3ApKTsKKyAgICAgICAgYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24ub3JTZWxmKFJlY3QoMCwgYWN0aXZlQ3JvcC5ib3R0b20sCisgICAgICAgICAgICAgICAgcy5hY3RpdmUudywgcy5hY3RpdmUuaCkpOworICAgICAgICBhY3RpdmVUcmFuc3BhcmVudFJlZ2lvbi5vclNlbGYoUmVjdCgwLCBhY3RpdmVDcm9wLnRvcCwKKyAgICAgICAgICAgICAgICBhY3RpdmVDcm9wLmxlZnQsIGFjdGl2ZUNyb3AuYm90dG9tKSk7CisgICAgICAgIGFjdGl2ZVRyYW5zcGFyZW50UmVnaW9uLm9yU2VsZihSZWN0KGFjdGl2ZUNyb3AucmlnaHQsIGFjdGl2ZUNyb3AudG9wLAorICAgICAgICAgICAgICAgIHMuYWN0aXZlLncsIGFjdGl2ZUNyb3AuYm90dG9tKSk7CisgICAgfQorICAgIFJlY3QgZnJhbWUocy50cmFuc2Zvcm0udHJhbnNmb3JtKGNvbXB1dGVCb3VuZHMoYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24pKSk7CiAgICAgZnJhbWUuaW50ZXJzZWN0KGh3LT5nZXRWaWV3cG9ydCgpLCAmZnJhbWUpOwogICAgIGNvbnN0IFRyYW5zZm9ybSYgdHIoaHctPmdldFRyYW5zZm9ybSgpKTsKICAgICBsYXllci5zZXRGcmFtZSh0ci50cmFuc2Zvcm0oZnJhbWUpKTsKQEAgLTk5Miw2ICsxMDM5LDE0IEBACiAvLyBwYWdlZmxpcCBoYW5kbGluZy4uLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitib29sIExheWVyOjpzaG91bGRQcmVzZW50Tm93KGNvbnN0IERpc3BTeW5jJiBkaXNwU3luYykgY29uc3QgeworICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1RdWV1ZUl0ZW1Mb2NrKTsKKyAgICBuc2Vjc190IGV4cGVjdGVkUHJlc2VudCA9CisgICAgICAgICAgICBtU3VyZmFjZUZsaW5nZXJDb25zdW1lci0+Y29tcHV0ZUV4cGVjdGVkUHJlc2VudChkaXNwU3luYyk7CisgICAgcmV0dXJuIG1RdWV1ZUl0ZW1zLmVtcHR5KCkgPworICAgICAgICAgICAgZmFsc2UgOiBtUXVldWVJdGVtc1swXS5tVGltZXN0YW1wIDwgZXhwZWN0ZWRQcmVzZW50OworfQorCiBib29sIExheWVyOjpvblByZUNvbXBvc2l0aW9uKCkgewogICAgIG1SZWZyZXNoUGVuZGluZyA9IGZhbHNlOwogICAgIHJldHVybiBtUXVldWVkRnJhbWVzID4gMCB8fCBtU2lkZWJhbmRTdHJlYW1DaGFuZ2VkOwpAQCAtMTE4MSw2ICsxMjM2LDEyIEBACiAgICAgICAgICAgICByZXR1cm4gb3V0RGlydHlSZWdpb247CiAgICAgICAgIH0KIAorICAgICAgICAvLyBSZW1vdmUgdGhpcyBidWZmZXIgZnJvbSBvdXIgaW50ZXJuYWwgcXVldWUgdHJhY2tlcgorICAgICAgICB7IC8vIEF1dG9sb2NrIHNjb3BlCisgICAgICAgICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtUXVldWVJdGVtTG9jayk7CisgICAgICAgICAgICBtUXVldWVJdGVtcy5yZW1vdmVBdCgwKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIERlY3JlbWVudCB0aGUgcXVldWVkLWZyYW1lcyBjb3VudC4gIFNpZ25hbCBhbm90aGVyIGV2ZW50IGlmIHdlCiAgICAgICAgIC8vIGhhdmUgbW9yZSBmcmFtZXMgcGVuZGluZy4KICAgICAgICAgaWYgKGFuZHJvaWRfYXRvbWljX2RlYygmbVF1ZXVlZEZyYW1lcykgPiAxKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9MYXllci5oIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvTGF5ZXIuaAppbmRleCAyZWYzOWU4Li40MjRjMDNlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9MYXllci5oCisrKyBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL0xheWVyLmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogCiAgICAgdm9pZCBjb21wdXRlR2VvbWV0cnkoY29uc3Qgc3A8Y29uc3QgRGlzcGxheURldmljZT4mIGh3LCBNZXNoJiBtZXNoLAogICAgICAgICAgICAgYm9vbCB1c2VJZGVudGl0eVRyYW5zZm9ybSkgY29uc3Q7CisgICAgUmVjdCBjb21wdXRlQm91bmRzKGNvbnN0IFJlZ2lvbiYgYWN0aXZlVHJhbnNwYXJlbnRSZWdpb24pIGNvbnN0OwogICAgIFJlY3QgY29tcHV0ZUJvdW5kcygpIGNvbnN0OwogCiAgICAgc3A8SUJpbmRlcj4gZ2V0SGFuZGxlKCk7CkBAIC0yMDksNiArMjEwLDggQEAKICAgICB2b2lkIG9uTGF5ZXJEaXNwbGF5ZWQoY29uc3Qgc3A8Y29uc3QgRGlzcGxheURldmljZT4mIGh3LAogICAgICAgICAgICAgSFdDb21wb3Nlcjo6SFdDTGF5ZXJJbnRlcmZhY2UqIGxheWVyKTsKIAorICAgIGJvb2wgc2hvdWxkUHJlc2VudE5vdyhjb25zdCBEaXNwU3luYyYgZGlzcFN5bmMpIGNvbnN0OworCiAgICAgLyoKICAgICAgKiBjYWxsZWQgYmVmb3JlIGNvbXBvc2l0aW9uLgogICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgbGF5ZXIgaGFzIHBlbmRpbmcgdXBkYXRlcy4KQEAgLTMyOSw3ICszMzIsOCBAQAogCiBwcml2YXRlOgogICAgIC8vIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgU3VyZmFjZUZsaW5nZXJDb25zdW1lcjo6Q29udGVudHNDaGFuZ2VkTGlzdGVuZXIKLSAgICB2aXJ0dWFsIHZvaWQgb25GcmFtZUF2YWlsYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKGNvbnN0IEJ1ZmZlckl0ZW0mIGl0ZW0pOworICAgIHZpcnR1YWwgdm9pZCBvbkZyYW1lUmVwbGFjZWQoY29uc3QgQnVmZmVySXRlbSYgaXRlbSk7CiAgICAgdmlydHVhbCB2b2lkIG9uU2lkZWJhbmRTdHJlYW1DaGFuZ2VkKCk7CiAKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKCk7CkBAIC00MDIsNiArNDA2LDEwIEBACiAKICAgICAvLyBUaGlzIGxheWVyIGNhbiBiZSBhIGN1cnNvciBvbiBzb21lIGRpc3BsYXlzLgogICAgIGJvb2wgbVBvdGVudGlhbEN1cnNvcjsKKworICAgIC8vIExvY2FsIGNvcHkgb2YgdGhlIHF1ZXVlZCBjb250ZW50cyBvZiB0aGUgaW5jb21pbmcgQnVmZmVyUXVldWUKKyAgICBtdXRhYmxlIE11dGV4IG1RdWV1ZUl0ZW1Mb2NrOworICAgIFZlY3RvcjxCdWZmZXJJdGVtPiBtUXVldWVJdGVtczsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvTGF5ZXJEaW0uaCBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL0xheWVyRGltLmgKaW5kZXggNjBlZGQ5MS4uYTBjZmNhOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvTGF5ZXJEaW0uaAorKysgYi9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9MYXllckRpbS5oCkBAIC0yOCw3ICsyOCw3IEBACiAKIGNsYXNzIExheWVyRGltIDogcHVibGljIExheWVyCiB7Ci1wdWJsaWM6ICAgIAorcHVibGljOgogICAgICAgICAgICAgICAgIExheWVyRGltKFN1cmZhY2VGbGluZ2VyKiBmbGluZ2VyLCBjb25zdCBzcDxDbGllbnQ+JiBjbGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmc4JiBuYW1lLCB1aW50MzJfdCB3LCB1aW50MzJfdCBoLCB1aW50MzJfdCBmbGFncyk7CiAgICAgICAgIHZpcnR1YWwgfkxheWVyRGltKCk7CkBAIC0zNiw4ICszNiw3IEBACiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiAiTGF5ZXJEaW0iOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uRHJhdyhjb25zdCBzcDxjb25zdCBEaXNwbGF5RGV2aWNlPiYgaHcsIGNvbnN0IFJlZ2lvbiYgY2xpcCwKICAgICAgICAgICAgIGJvb2wgdXNlSWRlbnRpdHlUcmFuc2Zvcm0pIGNvbnN0OwotICAgIHVzaW5nIExheWVyOjppc09wYXF1ZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNPcGFxdWUoKSBjb25zdCAgICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzT3BhcXVlKGNvbnN0IExheWVyOjpTdGF0ZSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2VjdXJlKCkgY29uc3QgICAgICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0ICAgICAgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL1JlbmRlckVuZ2luZS9SZW5kZXJFbmdpbmUuY3BwIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvUmVuZGVyRW5naW5lL1JlbmRlckVuZ2luZS5jcHAKaW5kZXggNzY3YjcxNC4uN2NkNDJlNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvUmVuZGVyRW5naW5lL1JlbmRlckVuZ2luZS5jcHAKKysrIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvUmVuZGVyRW5naW5lL1JlbmRlckVuZ2luZS5jcHAKQEAgLTIxOSw2ICsyMTksMTAgQEAKICAgICBkcmF3TWVzaChtZXNoKTsKIH0KIAordm9pZCBSZW5kZXJFbmdpbmU6OmZsdXNoKCkgeworICAgIGdsRmx1c2goKTsKK30KKwogdm9pZCBSZW5kZXJFbmdpbmU6OmNsZWFyV2l0aENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKSB7CiAgICAgZ2xDbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvUmVuZGVyRW5naW5lL1JlbmRlckVuZ2luZS5oIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvUmVuZGVyRW5naW5lL1JlbmRlckVuZ2luZS5oCmluZGV4IGFjYmZmOWIuLjhkNzUyOWMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL1JlbmRlckVuZ2luZS9SZW5kZXJFbmdpbmUuaAorKysgYi9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9SZW5kZXJFbmdpbmUvUmVuZGVyRW5naW5lLmgKQEAgLTY3LDYgKzY3LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChTdHJpbmc4JiByZXN1bHQpOwogCiAgICAgLy8gaGVscGVycworICAgIHZvaWQgZmx1c2goKTsKICAgICB2b2lkIGNsZWFyV2l0aENvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKICAgICB2b2lkIGZpbGxSZWdpb25XaXRoQ29sb3IoY29uc3QgUmVnaW9uJiByZWdpb24sIHVpbnQzMl90IGhlaWdodCwKICAgICAgICAgICAgIGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL1N1cmZhY2VGbGluZ2VyLmNwcCBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL1N1cmZhY2VGbGluZ2VyLmNwcAppbmRleCA4ZGFmMGY5Li5lOGM5MDI1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9TdXJmYWNlRmxpbmdlci5jcHAKKysrIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvU3VyZmFjZUZsaW5nZXIuY3BwCkBAIC01MDYsNiArNTA2LDkgQEAKICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICB9CiAKKyAgICBpZiAoIWRpc3BsYXkuZ2V0KCkpCisgICAgICAgIHJldHVybiBOQU1FX05PVF9GT1VORDsKKwogICAgIGludDMyX3QgdHlwZSA9IE5BTUVfTk9UX0ZPVU5EOwogICAgIGZvciAoaW50IGk9MCA7IGk8RGlzcGxheURldmljZTo6TlVNX0JVSUxUSU5fRElTUExBWV9UWVBFUyA7IGkrKykgewogICAgICAgICBpZiAoZGlzcGxheSA9PSBtQnVpbHRpbkRpc3BsYXlzW2ldKSB7CkBAIC02NTIsNyArNjU1LDcgQEAKICAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZXIoKSB7CiAgICAgICAgICAgICBWZWN0b3I8RGlzcGxheUluZm8+IGNvbmZpZ3M7CiAgICAgICAgICAgICBtRmxpbmdlci5nZXREaXNwbGF5Q29uZmlncyhtRGlzcGxheSwgJmNvbmZpZ3MpOwotICAgICAgICAgICAgaWYobU1vZGUgPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4obU1vZGUpID49IGNvbmZpZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAobU1vZGUgPCAwIHx8IG1Nb2RlID49IHN0YXRpY19jYXN0PGludD4oY29uZmlncy5zaXplKCkpKSB7CiAgICAgICAgICAgICAgICAgQUxPR0UoIkF0dGVtcHQgdG8gc2V0IGFjdGl2ZSBjb25maWcgPSAlZCBmb3IgZGlzcGxheSB3aXRoICV6dSBjb25maWdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1Nb2RlLCBjb25maWdzLnNpemUoKSk7CiAgICAgICAgICAgICB9CkBAIC04MjUsMzAgKzgyOCwzOSBAQAogdm9pZCBTdXJmYWNlRmxpbmdlcjo6b25NZXNzYWdlUmVjZWl2ZWQoaW50MzJfdCB3aGF0KSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKICAgICBzd2l0Y2ggKHdoYXQpIHsKLSAgICBjYXNlIE1lc3NhZ2VRdWV1ZTo6VFJBTlNBQ1RJT046Ci0gICAgICAgIGhhbmRsZU1lc3NhZ2VUcmFuc2FjdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1lc3NhZ2VRdWV1ZTo6SU5WQUxJREFURToKLSAgICAgICAgaGFuZGxlTWVzc2FnZVRyYW5zYWN0aW9uKCk7Ci0gICAgICAgIGhhbmRsZU1lc3NhZ2VJbnZhbGlkYXRlKCk7Ci0gICAgICAgIHNpZ25hbFJlZnJlc2goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNZXNzYWdlUXVldWU6OlJFRlJFU0g6Ci0gICAgICAgIGhhbmRsZU1lc3NhZ2VSZWZyZXNoKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1lc3NhZ2VRdWV1ZTo6VFJBTlNBQ1RJT046IHsKKyAgICAgICAgICAgIGhhbmRsZU1lc3NhZ2VUcmFuc2FjdGlvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBNZXNzYWdlUXVldWU6OklOVkFMSURBVEU6IHsKKyAgICAgICAgICAgIGJvb2wgcmVmcmVzaE5lZWRlZCA9IGhhbmRsZU1lc3NhZ2VUcmFuc2FjdGlvbigpOworICAgICAgICAgICAgcmVmcmVzaE5lZWRlZCB8PSBoYW5kbGVNZXNzYWdlSW52YWxpZGF0ZSgpOworICAgICAgICAgICAgaWYgKHJlZnJlc2hOZWVkZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBTaWduYWwgYSByZWZyZXNoIGlmIGEgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhlIHdpbmRvdyBzdGF0ZSBvciBpZgorICAgICAgICAgICAgICAgIC8vIGEgbmV3IGJ1ZmZlciB3YXMgbGF0Y2hlZAorICAgICAgICAgICAgICAgIHNpZ25hbFJlZnJlc2goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTWVzc2FnZVF1ZXVlOjpSRUZSRVNIOiB7CisgICAgICAgICAgICBoYW5kbGVNZXNzYWdlUmVmcmVzaCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgU3VyZmFjZUZsaW5nZXI6OmhhbmRsZU1lc3NhZ2VUcmFuc2FjdGlvbigpIHsKK2Jvb2wgU3VyZmFjZUZsaW5nZXI6OmhhbmRsZU1lc3NhZ2VUcmFuc2FjdGlvbigpIHsKICAgICB1aW50MzJfdCB0cmFuc2FjdGlvbkZsYWdzID0gcGVla1RyYW5zYWN0aW9uRmxhZ3MoZVRyYW5zYWN0aW9uTWFzayk7CiAgICAgaWYgKHRyYW5zYWN0aW9uRmxhZ3MpIHsKICAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25GbGFncyk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3VyZmFjZUZsaW5nZXI6OmhhbmRsZU1lc3NhZ2VJbnZhbGlkYXRlKCkgeworYm9vbCBTdXJmYWNlRmxpbmdlcjo6aGFuZGxlTWVzc2FnZUludmFsaWRhdGUoKSB7CiAgICAgQVRSQUNFX0NBTEwoKTsKLSAgICBoYW5kbGVQYWdlRmxpcCgpOworICAgIHJldHVybiBoYW5kbGVQYWdlRmxpcCgpOwogfQogCiB2b2lkIFN1cmZhY2VGbGluZ2VyOjpoYW5kbGVNZXNzYWdlUmVmcmVzaCgpIHsKQEAgLTEzMjksNyArMTM0MSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXRjLikgYnV0IG5vIGludGVybmFsIHN0YXRlIChpLmUuIGEgRGlzcGxheURldmljZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3VyZmFjZSAhPSBOVUxMKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2NEaXNwbGF5SWQgPSBhbGxvY2F0ZUh3Y0Rpc3BsYXlJZChzdGF0ZS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSBzdGF0ZS5zdXJmYWNlLT5xdWVyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BVElWRV9XSU5ET1dfV0lEVEgsICZ3aWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxPR0VfSUYoc3RhdHVzICE9IE5PX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBxdWVyeSB3aWR0aCAoJWQpIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0ZS5zdXJmYWNlLT5xdWVyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BVElWRV9XSU5ET1dfSEVJR0hULCAmaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTE9HRV9JRihzdGF0dXMgIT0gTk9fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIHF1ZXJ5IGhlaWdodCAoJWQpIiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTUFYX1ZJUlRVQUxfRElTUExBWV9ESU1FTlNJT04gPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpZHRoIDw9IE1BWF9WSVJUVUFMX0RJU1BMQVlfRElNRU5TSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDw9IE1BWF9WSVJUVUFMX0RJU1BMQVlfRElNRU5TSU9OKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2NEaXNwbGF5SWQgPSBhbGxvY2F0ZUh3Y0Rpc3BsYXlJZChzdGF0ZS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcDxWaXJ0dWFsRGlzcGxheVN1cmZhY2U+IHZkcyA9IG5ldyBWaXJ0dWFsRGlzcGxheVN1cmZhY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbUh3YywgaHdjRGlzcGxheUlkLCBzdGF0ZS5zdXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnFQcm9kdWNlciwgYnFDb25zdW1lciwgc3RhdGUuZGlzcGxheU5hbWUpOwpAQCAtMTY2OCwxMiArMTY5NSwxMyBAQAogICAgIH0KIH0KIAotdm9pZCBTdXJmYWNlRmxpbmdlcjo6aGFuZGxlUGFnZUZsaXAoKQorYm9vbCBTdXJmYWNlRmxpbmdlcjo6aGFuZGxlUGFnZUZsaXAoKQogewogICAgIFJlZ2lvbiBkaXJ0eVJlZ2lvbjsKIAogICAgIGJvb2wgdmlzaWJsZVJlZ2lvbnMgPSBmYWxzZTsKICAgICBjb25zdCBMYXllclZlY3RvciYgbGF5ZXJzKG1EcmF3aW5nU3RhdGUubGF5ZXJzU29ydGVkQnlaKTsKKyAgICBib29sIGZyYW1lUXVldWVkID0gZmFsc2U7CiAKICAgICAvLyBTdG9yZSB0aGUgc2V0IG9mIGxheWVycyB0aGF0IG5lZWQgdXBkYXRlcy4gVGhpcyBzZXQgbXVzdCBub3QgY2hhbmdlIGFzCiAgICAgLy8gYnVmZmVycyBhcmUgYmVpbmcgbGF0Y2hlZCwgYXMgdGhpcyBjb3VsZCByZXN1bHQgaW4gYSBkZWFkbG9jay4KQEAgLTE2ODcsOCArMTcxNSwxMiBAQAogICAgIFZlY3RvcjxMYXllcio+IGxheWVyc1dpdGhRdWV1ZWRGcmFtZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbGF5ZXJzLnNpemUoKTsgaTxjb3VudCA7IGkrKykgewogICAgICAgICBjb25zdCBzcDxMYXllcj4mIGxheWVyKGxheWVyc1tpXSk7Ci0gICAgICAgIGlmIChsYXllci0+aGFzUXVldWVkRnJhbWUoKSkKLSAgICAgICAgICAgIGxheWVyc1dpdGhRdWV1ZWRGcmFtZXMucHVzaF9iYWNrKGxheWVyLmdldCgpKTsKKyAgICAgICAgaWYgKGxheWVyLT5oYXNRdWV1ZWRGcmFtZSgpKSB7CisgICAgICAgICAgICBmcmFtZVF1ZXVlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAobGF5ZXItPnNob3VsZFByZXNlbnROb3cobVByaW1hcnlEaXNwU3luYykpIHsKKyAgICAgICAgICAgICAgICBsYXllcnNXaXRoUXVldWVkRnJhbWVzLnB1c2hfYmFjayhsYXllci5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbGF5ZXJzV2l0aFF1ZXVlZEZyYW1lcy5zaXplKCkgOyBpPGNvdW50IDsgaSsrKSB7CiAgICAgICAgIExheWVyKiBsYXllciA9IGxheWVyc1dpdGhRdWV1ZWRGcmFtZXNbaV07CkBAIC0xNjk4LDYgKzE3MzAsMTYgQEAKICAgICB9CiAKICAgICBtVmlzaWJsZVJlZ2lvbnNEaXJ0eSB8PSB2aXNpYmxlUmVnaW9uczsKKworICAgIC8vIElmIHdlIHdpbGwgbmVlZCB0byB3YWtlIHVwIGF0IHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlIHRvIGRlYWwgd2l0aCBhCisgICAgLy8gcXVldWVkIGZyYW1lIHRoYXQgc2hvdWxkbid0IGJlIGRpc3BsYXllZCBkdXJpbmcgdGhpcyB2c3luYyBwZXJpb2QsIHdha2UKKyAgICAvLyB1cCBkdXJpbmcgdGhlIG5leHQgdnN5bmMgcGVyaW9kIHRvIGNoZWNrIGFnYWluLgorICAgIGlmIChmcmFtZVF1ZXVlZCAmJiBsYXllcnNXaXRoUXVldWVkRnJhbWVzLmVtcHR5KCkpIHsKKyAgICAgICAgc2lnbmFsTGF5ZXJVcGRhdGUoKTsKKyAgICB9CisKKyAgICAvLyBPbmx5IGNvbnRpbnVlIHdpdGggdGhlIHJlZnJlc2ggaWYgdGhlcmUgaXMgYWN0dWFsbHkgbmV3IHdvcmsgdG8gZG8KKyAgICByZXR1cm4gIWxheWVyc1dpdGhRdWV1ZWRGcmFtZXMuZW1wdHkoKTsKIH0KIAogdm9pZCBTdXJmYWNlRmxpbmdlcjo6aW52YWxpZGF0ZUh3Y0dlb21ldHJ5KCkKQEAgLTMyMDMsNiArMzI0NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBFR0xTeW5jS0hSIHN5bmM7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIURFQlVHX1NDUkVFTlNIT1RTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jID0gZWdsQ3JlYXRlU3luY0tIUihtRUdMRGlzcGxheSwgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX0FORFJPSUQsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmF0aXZlIGZlbmNlIGZkIHdpbGwgbm90IGJlIHBvcHVsYXRlZCB1bnRpbCBmbHVzaCgpIGlzIGRvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW5kZXJFbmdpbmUoKS5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jID0gRUdMX05PX1NZTkNfS0hSOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzI0OSwxMCArMzI5Myw4IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQkFEX1ZBTFVFOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBxdWV1ZUJ1ZmZlciB0YWtlcyBvd25lcnNoaXAgb2Ygc3luY0ZkCiAgICAgICAgICAgICAgICAgd2luZG93LT5xdWV1ZUJ1ZmZlcih3aW5kb3csIGJ1ZmZlciwgc3luY0ZkKTsKLSAgICAgICAgICAgICAgICBpZiAoc3luY0ZkICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlKHN5bmNGZCk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0gQkFEX1ZBTFVFOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvU3VyZmFjZUZsaW5nZXIuaCBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL1N1cmZhY2VGbGluZ2VyLmgKaW5kZXggNzEwZGFjNy4uNGRlYjgxNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvU3VyZmFjZUZsaW5nZXIuaAorKysgYi9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9TdXJmYWNlRmxpbmdlci5oCkBAIC0yNDcsOCArMjQ3LDEyIEBACiAgICAgLy8gY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCBpbiByZXNwb25zZSB0byBzZXRQb3dlck1vZGUoKQogICAgIHZvaWQgc2V0UG93ZXJNb2RlSW50ZXJuYWwoY29uc3Qgc3A8RGlzcGxheURldmljZT4mIGh3LCBpbnQgbW9kZSk7CiAKLSAgICB2b2lkIGhhbmRsZU1lc3NhZ2VUcmFuc2FjdGlvbigpOwotICAgIHZvaWQgaGFuZGxlTWVzc2FnZUludmFsaWRhdGUoKTsKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGFjdHVhbGx5IG1vZGlmaWVkIGFueSBzdGF0ZQorICAgIGJvb2wgaGFuZGxlTWVzc2FnZVRyYW5zYWN0aW9uKCk7CisKKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgYSBuZXcgYnVmZmVyIGhhcyBiZWVuIGxhdGNoZWQgKHNlZSBoYW5kbGVQYWdlRmxpcCgpKQorICAgIGJvb2wgaGFuZGxlTWVzc2FnZUludmFsaWRhdGUoKTsKKwogICAgIHZvaWQgaGFuZGxlTWVzc2FnZVJlZnJlc2goKTsKIAogICAgIHZvaWQgaGFuZGxlVHJhbnNhY3Rpb24odWludDMyX3QgdHJhbnNhY3Rpb25GbGFncyk7CkBAIC0yNTYsMTAgKzI2MCwxMSBAQAogCiAgICAgdm9pZCB1cGRhdGVDdXJzb3JBc3luYygpOwogCi0gICAgLyogaGFuZGxlUGFnZUZpbHA6IHRoaXMgaXMgd2VyZSB3ZSBsYXRjaCBhIG5ldyBidWZmZXIKLSAgICAgKiBpZiBhdmFpbGFibGUgYW5kIGNvbXB1dGUgdGhlIGRpcnR5IHJlZ2lvbi4KKyAgICAvKiBoYW5kbGVQYWdlRmxpcCAtIGxhdGNoIGEgbmV3IGJ1ZmZlciBpZiBhdmFpbGFibGUgYW5kIGNvbXB1dGUgdGhlIGRpcnR5CisgICAgICogcmVnaW9uLiBSZXR1cm5zIHdoZXRoZXIgYSBuZXcgYnVmZmVyIGhhcyBiZWVuIGxhdGNoZWQsIGkuZS4sIHdoZXRoZXIgaXQKKyAgICAgKiBpcyBuZWNlc3NhcnkgdG8gcGVyZm9ybSBhIHJlZnJlc2ggZHVyaW5nIHRoaXMgdnN5bmMuCiAgICAgICovCi0gICAgdm9pZCBoYW5kbGVQYWdlRmxpcCgpOworICAgIGJvb2wgaGFuZGxlUGFnZUZsaXAoKTsKIAogICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAqIFRyYW5zYWN0aW9ucwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvU3VyZmFjZUZsaW5nZXJDb25zdW1lci5oIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvU3VyZmFjZUZsaW5nZXJDb25zdW1lci5oCmluZGV4IDU2MzM5ODAuLjI4ZjJmNmEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL1N1cmZhY2VGbGluZ2VyQ29uc3VtZXIuaAorKysgYi9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9TdXJmYWNlRmxpbmdlckNvbnN1bWVyLmgKQEAgLTY3LDkgKzY3LDkgQEAKIAogICAgIHNwPE5hdGl2ZUhhbmRsZT4gZ2V0U2lkZWJhbmRTdHJlYW0oKSBjb25zdDsKIAotcHJpdmF0ZToKICAgICBuc2Vjc190IGNvbXB1dGVFeHBlY3RlZFByZXNlbnQoY29uc3QgRGlzcFN5bmMmIGRpc3BTeW5jKTsKIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgb25TaWRlYmFuZFN0cmVhbUNoYW5nZWQoKTsKIAogICAgIHdwPENvbnRlbnRzQ2hhbmdlZExpc3RlbmVyPiBtQ29udGVudHNDaGFuZ2VkTGlzdGVuZXI7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9UcmFuc2Zvcm0uY3BwIGIvc2VydmljZXMvc3VyZmFjZWZsaW5nZXIvVHJhbnNmb3JtLmNwcAppbmRleCAzNDU2YWJmLi4zNWU3ZTdkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zdXJmYWNlZmxpbmdlci9UcmFuc2Zvcm0uY3BwCisrKyBiL3NlcnZpY2VzL3N1cmZhY2VmbGluZ2VyL1RyYW5zZm9ybS5jcHAKQEAgLTMwMSwxNiArMzAxLDE2IEBACiAgICAgLy8gKFQqTSleLTEgPSBNXi0xICogVF4tMQogICAgIFRyYW5zZm9ybSByZXN1bHQ7CiAgICAgaWYgKG1UeXBlIDw9IFRSQU5TTEFURSkgewotICAgICAgICAvLyAxIDAgeAotICAgICAgICAvLyAwIDEgeQotICAgICAgICAvLyAwIDAgMQorICAgICAgICAvLyAxIDAgMAorICAgICAgICAvLyAwIDEgMAorICAgICAgICAvLyB4IHkgMQogICAgICAgICByZXN1bHQgPSAqdGhpczsKICAgICAgICAgcmVzdWx0Lm1NYXRyaXhbMl1bMF0gPSAtcmVzdWx0Lm1NYXRyaXhbMl1bMF07CiAgICAgICAgIHJlc3VsdC5tTWF0cml4WzJdWzFdID0gLXJlc3VsdC5tTWF0cml4WzJdWzFdOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIGEgYyB4Ci0gICAgICAgIC8vIGIgZCB5Ci0gICAgICAgIC8vIDAgMCAxCisgICAgICAgIC8vIGEgYyAwCisgICAgICAgIC8vIGIgZCAwCisgICAgICAgIC8vIHggeSAxCiAgICAgICAgIGNvbnN0IG1hdDMzJiBNKG1NYXRyaXgpOwogICAgICAgICBjb25zdCBmbG9hdCBhID0gTVswXVswXTsKICAgICAgICAgY29uc3QgZmxvYXQgYiA9IE1bMV1bMF07CkBAIC0zMTksMTYgKzMxOSwxNyBAQAogICAgICAgICBjb25zdCBmbG9hdCB4ID0gTVsyXVswXTsKICAgICAgICAgY29uc3QgZmxvYXQgeSA9IE1bMl1bMV07CiAKLSAgICAgICAgVHJhbnNmb3JtIFIsIFQ7CiAgICAgICAgIGNvbnN0IGZsb2F0IGlkZXQgPSAxLjAgLyAoYSpkIC0gYipjKTsKLSAgICAgICAgUi5tTWF0cml4WzBdWzBdID0gIGQqaWRldDsgICAgUi5tTWF0cml4WzBdWzFdID0gLWMqaWRldDsKLSAgICAgICAgUi5tTWF0cml4WzFdWzBdID0gLWIqaWRldDsgICAgUi5tTWF0cml4WzFdWzFdID0gIGEqaWRldDsKLSAgICAgICAgUi5tVHlwZSA9IG1UeXBlICY9IH5UUkFOU0xBVEU7CisgICAgICAgIHJlc3VsdC5tTWF0cml4WzBdWzBdID0gIGQqaWRldDsKKyAgICAgICAgcmVzdWx0Lm1NYXRyaXhbMF1bMV0gPSAtYyppZGV0OworICAgICAgICByZXN1bHQubU1hdHJpeFsxXVswXSA9IC1iKmlkZXQ7CisgICAgICAgIHJlc3VsdC5tTWF0cml4WzFdWzFdID0gIGEqaWRldDsKKyAgICAgICAgcmVzdWx0Lm1UeXBlID0gbVR5cGU7CiAKLSAgICAgICAgVC5tTWF0cml4WzJdWzBdID0gLXg7Ci0gICAgICAgIFQubU1hdHJpeFsyXVsxXSA9IC15OwotICAgICAgICBULm1UeXBlID0gVFJBTlNMQVRFOwotICAgICAgICByZXN1bHQgPSAgUiAqIFQ7CisgICAgICAgIHZlYzIgVCgteCwgLXkpOworICAgICAgICBUID0gcmVzdWx0LnRyYW5zZm9ybShUKTsKKyAgICAgICAgcmVzdWx0Lm1NYXRyaXhbMl1bMF0gPSBUWzBdOworICAgICAgICByZXN1bHQubU1hdHJpeFsyXVsxXSA9IFRbMV07CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9Cg==