ZGlmZiAtLWdpdCBhL1Vib290L2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9hcmNoL2FybS9saWIvTWFrZWZpbGUgYi9VYm9vdC9ib290L2NvbW1vbi9zcmMvdWJvb3QvYXJjaC9hcm0vbGliL01ha2VmaWxlCmluZGV4IDY4OGJlYTEuLmI1NjI1YTYgMTAwNzU1Ci0tLSBhL1Vib290L2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9hcmNoL2FybS9saWIvTWFrZWZpbGUKKysrIGIvVWJvb3QvYm9vdC9jb21tb24vc3JjL3Vib290L2FyY2gvYXJtL2xpYi9NYWtlZmlsZQpAQCAtNDksOSArNDksOSBAQAogU09CSlMtJChDT05GSUdfVVNFX0FSQ0hfTUVNQ1BZKSArPSBtZW1jcHkubwogZW5kaWYKICN4Zi5saUAyMDIzLjA0LjE0IG1vZGlmeSBmb3IgWlhXLTI1IHN0YXJ0Ci1MWU5RX0NPTkZJR19WRVJTSU9OID0gIlQxMDYtVjIuMDEuMDEuMDJQNTZVMDYuQVAuMTYuMDhfQ0FQLjE2LjA4LjAxIgorTFlOUV9DT05GSUdfVkVSU0lPTiA9ICJUMTA2LVctVjIuMDEuMDEuMDJQNTZVMDYuQVAuMTUuMDVfQ0FQLjE1LjA1IgogQ0ZMQUdTICs9IC1ETFlOUV9WRVJTSU9OPVwiJChMWU5RX0NPTkZJR19WRVJTSU9OKVwiCi1MWU5RX0NPTkZJR19DT01NSVRJRCA9ICIxNzlkMWJmZjMxOWQzNzMxOTI1YzBlYjRmNDI1ZjE1NjYwNGEwYTYyIgorTFlOUV9DT05GSUdfQ09NTUlUSUQgPSAiYzMzYjE3N2M4Yjg2MWVlOTU3YjZjOGIwZGVhMDAzMjc4YTM2NzFkNiIKIENGTEFHUyArPSAtRExZTlFfQ09NTUlUSUQ9XCIkKExZTlFfQ09ORklHX0NPTU1JVElEKVwiCiAjeGYubGlAMjAyMy4wNC4xNCBtb2RpZnkgZm9yIFpYVy0yNSBlbmQKIFNSQ1MJOj0gJChHTFNPQkpTOi5vPS5TKSAkKEdMQ09CSlM6Lm89LmMpIFwKZGlmZiAtLWdpdCBhL1Vib290L2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kb3dubG9hZGVyL2NtZF9jb21wYXRfd3JpdGUuYyBiL1Vib290L2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9kb3dubG9hZGVyL2NtZF9jb21wYXRfd3JpdGUuYwppbmRleCA0ZDZhZTlkLi40ZDVlMzM5IDEwMDc1NQotLS0gYS9VYm9vdC9ib290L2NvbW1vbi9zcmMvdWJvb3QvZG93bmxvYWRlci9jbWRfY29tcGF0X3dyaXRlLmMKKysrIGIvVWJvb3QvYm9vdC9jb21tb24vc3JjL3Vib290L2Rvd25sb2FkZXIvY21kX2NvbXBhdF93cml0ZS5jCkBAIC0zNCwxMCArMzQsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoJCQkJCQkJR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vL1RfSU1HX1NJWkUgaW1nX3NpemVbSU1HX05VTV0gPSB7eyJ1Ym9vdCIsMCwwfSx7ImltYWdlZnMiLDAsMH0seyJyb290ZnMiLDAsMH0seyJjYXByb290ZnMiLDAsMH0seyJvZW0iLDAsMH19OwotVF9JTUdfU0laRSBpbWdfc2l6ZVtJTUdfTlVNX01BWF07Ci1pbnQgaW1nX251bSA9IDA7CitUX0lNR19TSVpFIGltZ19zaXplW0lNR19OVU1dID0ge3sidWJvb3QiLDAsMH0seyJpbWFnZWZzIiwwLDB9LHsicm9vdGZzIiwwLDB9LHsiY2Fwcm9vdGZzIiwwLDB9LHsib2VtIiwwLDB9fTsKIGludCBmbGFnc19wYXJ0aXRvbl93cml0ZSA9IDA7CisKIGV4dGVybiBpbnQgZ19pZnR5cGU7CiBleHRlcm4gcGFydGl0aW9uX3RhYmxlX3QgKiBnX3BhcnRpdGlvbl90YWJsZV9kbDsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NywxNCArNTYsMTEgQEAKIHsKICAgICBwYXJ0aXRpb25fZW50cnlfdCAqcGFydCA9IE5VTEw7CiAgICAgY2hhciAqcGFyID0gTlVMTDsKLQljaGFyICpwYXJfdG1wID0gTlVMTDsKICAgICBjaGFyIGFja1s2NF09ezB9OwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOwogCXVuc2lnbmVkIGludCBzaXplID0gMDsKIAl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgaSA9IDA7Ci0JdW5zaWduZWQgaW50IGxlbiA9IDA7Ci0JdW5zaWduZWQgaW50IGZvdW5kID0gMDsKIAlmbGFnc19wYXJ0aXRvbl93cml0ZSA9IDE7CiAJCiAJaWYoYXJnYzw0KQpAQCAtODQsNTUgKzgwLDIzIEBACiAJfQogCiAJLypyZWNvcmQgaW1hZ2Ugc2l6ZSovCi0JbGVuID0gc3RybGVuKHBhcik7Ci0vKiBTdGFydGVkIGJ5IEFJQ29kZXIsIHBpZDpxNTc0M2czZjYycmQ5MjkxNDE5ZTA4NmRlMDMyNzUwMmM1ZDcxMGNlICovCi0JcGFyX3RtcCA9IChjaGFyICopbWFsbG9jKGxlbiArIDEpOwotCWlmIChwYXJbbGVuIC0gMV0gPT0gJzInKSB7Ci0JCXN0cm5jcHkocGFyX3RtcCwgcGFyLCBsZW4gLSAxKTsKLQkJcGFyX3RtcFtsZW4gLSAxXSA9ICdcMCc7Ci0JfSBlbHNlIHsKLQkJc3RyY3B5KHBhcl90bXAsIHBhcik7Ci0JfQotLyogRW5kZWQgYnkgQUlDb2RlciwgcGlkOnE1NzQzZzNmNjJyZDkyOTE0MTllMDg2ZGUwMzI3NTAyYzVkNzEwY2UgKi8KLQkKLS8qIFN0YXJ0ZWQgYnkgQUlDb2RlciwgcGlkOnllNGRjbTcwMGVuOGM2ZTE0Y2RmMGFjMzkwODEzZTM2ZGMwNzU3NjUgKi8KLQlmb3IoaT0wOyBpPGltZ19udW07IGkrKykKKwlmb3IoaT0wOyBpPElNR19OVU07IGkrKykKIAl7Ci0JICAgIGlmKHN0cmNtcCgoY2hhciAqKWltZ19zaXplW2ldLm5hbWUsIHBhcl90bXApID09IDAgJiYgc3RybGVuKChjaGFyICopaW1nX3NpemVbaV0ubmFtZSkgPT0gc3RybGVuKHBhcl90bXApKQotCSAgICB7Ci0JICAgICAgICBmb3VuZCA9IDE7Ci0JICAgICAgICBpZihzdHJjbXAocGFyX3RtcCxwYXIpID09IDApCi0JICAgICAgICB7Ci0JICAgICAgICAgICAgaW1nX3NpemVbaV0uc2l6ZV9hID0gc2l6ZTsKLQkgICAgICAgICAgICBwcmludGYoInBhcnRpdGlvbiBpcyAlcyxzaXplX2EgaXMgMHgleC5cbiIscGFyLHNpemUpOwotCSAgICAgICAgfQotCSAgICAgICAgZWxzZQotCSAgICAgICAgewotCSAgICAgICAgICAgIGltZ19zaXplW2ldLnNpemVfYiA9IHNpemU7Ci0JICAgICAgICAgICAgcHJpbnRmKCJwYXJ0aXRpb24gaXMgJXMsc2l6ZV9iIGlzIDB4JXguXG4iLHBhcixzaXplKTsKLQkgICAgICAgIH0KLQkgICAgICAgIAotCSAgICAgICAgYnJlYWs7Ci0JICAgIH0KKwkJaWYobWVtY21wKChjaGFyICopaW1nX3NpemVbaV0ubmFtZSAsIHBhciwgc3RybGVuKGltZ19zaXplW2ldLm5hbWUpKSA9PSAwKXsKKwkJCWlmKCFtZW1jbXAocGFyLCJvZW1kYXRhIiw3KSkKKwkJCQlicmVhazsKKwkJCWlmKHN0cmxlbihpbWdfc2l6ZVtpXS5uYW1lKSA9PSBzdHJsZW4ocGFyKSkKKwkJCXsKKwkJCQlpbWdfc2l6ZVtpXS5zaXplX2EgPSBzaXplOworCQkJCXByaW50ZigicGFydGl0aW9uIGlzICVzLHNpemVfYSBpcyAweCV4LlxuIixwYXIsc2l6ZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaW1nX3NpemVbaV0uc2l6ZV9iID0gc2l6ZTsKKwkJCQlwcmludGYoInBhcnRpdGlvbiBpcyAlcyxzaXplX2IgaXMgMHgleC5cbiIscGFyLHNpemUpOworCQkJfQorCQl9CiAJfSAgCi0JaWYgKCFmb3VuZCkKLQl7ICAgCi0JICAgIHN0cmNweShpbWdfc2l6ZVtpbWdfbnVtXS5uYW1lLHBhcl90bXApOwotCSAgICBpZihzdHJjbXAocGFyX3RtcCxwYXIpID09IDApCi0JICAgIHsKLQkgICAgICAgIGltZ19zaXplW2ltZ19udW1dLnNpemVfYSA9IHNpemU7Ci0JICAgICAgICBwcmludGYoInBhcnRpdGlvbiBpcyAlcyxzaXplX2EgaXMgMHgleC5cbiIscGFyLHNpemUpOwotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotCSAgICAgICAgaW1nX3NpemVbaW1nX251bV0uc2l6ZV9iID0gc2l6ZTsKLQkgICAgICAgIHByaW50ZigicGFydGl0aW9uIGlzICVzLHNpemVfYiBpcyAweCV4LlxuIixwYXIsc2l6ZSk7Ci0JICAgIH0KLQkgICAgCi0JICAgIGltZ19udW0gKz0gMTsKLQl9Ci0JZnJlZShwYXJfdG1wKTsKLS8qIEVuZGVkIGJ5IEFJQ29kZXIsIHBpZDp5ZTRkY203MDBlbjhjNmUxNGNkZjBhYzM5MDgxM2UzNmRjMDc1NzY1ICovCiAJCiAjaWYgZGVmaW5lZCAoQ09ORklHX1pYMjk3NTIwVjNFX1ZFSElDTEVfREMpIHx8IGRlZmluZWQgKENPTkZJR19aWDI5NzUyMFYzRV9WRUhJQ0xFX0RDX1JFRikKIAlpZihnX25vcl9mbGFnID09IDEpCmRpZmYgLS1naXQgYS9VYm9vdC9ib290L2NvbW1vbi9zcmMvdWJvb3QvaW5jbHVkZS9wYXJ0aXRpb25fdGFibGUuaCBiL1Vib290L2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9pbmNsdWRlL3BhcnRpdGlvbl90YWJsZS5oCmluZGV4IGZlYmQzNjUuLjMwNmE2NGMgMTAwNzU1Ci0tLSBhL1Vib290L2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9pbmNsdWRlL3BhcnRpdGlvbl90YWJsZS5oCisrKyBiL1Vib290L2Jvb3QvY29tbW9uL3NyYy91Ym9vdC9pbmNsdWRlL3BhcnRpdGlvbl90YWJsZS5oCkBAIC0yMTEsNyArMjExLDcgQEAKICNkZWZpbmUgUEFSVElUSU9OX0NSQyAgICAgICAgICAgICAgIDB4MTIzNDU2NzgKICNkZWZpbmUgUEFSVElUSU9OX1NJWkUgICAgICAgICAgICAgIDBYMTAwMCAgICAgICAgICAgICAgICAgIC8qILfWx/ix7bXEtPPQoSAqLwogCi0jZGVmaW5lIElNR19OVU0gIDE1CisjZGVmaW5lIElNR19OVU0gIDUKIAogdHlwZWRlZiBzdHJ1Y3QgcGFydGl0aW9uX2VudHJ5IHsKICAgICB1bnNpZ25lZCBjaGFyCXBhcnRfbmFtZVsxNl07IApkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL2luYy9taXNjL2RydnNfdm9pY2Vwcm9jZXNzLmggYi9VYm9vdC9jcC9wcy9kcml2ZXIvaW5jL21pc2MvZHJ2c192b2ljZXByb2Nlc3MuaAppbmRleCBhY2NlYjIwLi42N2NjODRkIDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvaW5jL21pc2MvZHJ2c192b2ljZXByb2Nlc3MuaAorKysgYi9VYm9vdC9jcC9wcy9kcml2ZXIvaW5jL21pc2MvZHJ2c192b2ljZXByb2Nlc3MuaApAQCAtMjgzLDEwICsyODMsNiBAQAogCUJPT0wgZmlyc3RSZWdaQ0FURmxhZzsgLy8yNQ0KIAlUX0hhbF9FY2FsbERhdGEJZWNhbGxEYXRhOy8vMjYNCiAgICAgVUlOVDggdm9pY2VfbnZfdXBkYXRlOy8vMjcNCi0JVUlOVDggdXNlVm9pY2VCdWZmZXI7IC8vIDAgbm90IHVzZSwxIHVzZQ0KLQlVSU5UOCB2b2ljZUJ1ZmZlclR5cGU7IC8vMCBzaW5nbGUgY29yZSwgMSBkdWFsIGNvcmUNCi0NCi0JDQogfSBUX3pEcnZWb2ljZV9HYlZhcjsgLy9UX3pEcnZWb2ljZV9HYlZhcg0KIA0KIHR5cGVkZWYgc3RydWN0DQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9hdWRpb19jb25maWcvYXVkaW9SZWZfY2ZnLmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2F1ZGlvX2NvbmZpZy9hdWRpb1JlZl9jZmcuYwppbmRleCAyMGMxZGRjLi43NDg5ZDUyIDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2F1ZGlvX2NvbmZpZy9hdWRpb1JlZl9jZmcuYworKysgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2F1ZGlvX2NvbmZpZy9hdWRpb1JlZl9jZmcuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgImRydnNfZ2VuZXJhbC5oIg0KICNpbmNsdWRlICJkcnZzX2kycy5oIg0KICNpbmNsdWRlICJkcnZzX3ZvaWNlcHJvY2Vzcy5oIg0KLSNpbmNsdWRlICJoYWxfdm9pY2Vwcm9jZXNzLmgiDQogI2luY2x1ZGUgImRydnNfdm9pY2VfY29uZmlnLmgiDQogI2luY2x1ZGUgImRydnNfaTJjLmgiDQogI2luY2x1ZGUgIk52UGFyYW1fZHJ2LmgiDQpAQCAtMTMzLDcgKzEzMiw3IEBACiANCiAvLyNkZWZpbmUgQVVESU9fVVNFX0ZJWEVEX0FERFJFU1MNCiANCi0vLyNkZWZpbmUgVlBfSU5PVVRfQkFLX0JVRkZFUl9TSVpFIDB4MzAwMDAgIC8vIDB4NjAwMDANCisjZGVmaW5lIFZQX0lOT1VUX0JBS19CVUZGRVJfU0laRSAweDMwMDAwICAvLyAweDYwMDAwDQogI2RlZmluZSBWUF9JTk9VVF9OT0JBS19CVUZTSVpFICA2NDANCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkBAIC01OTYsOCArNTk1LDcgQEAKIAkvL3JldCA9IHpEcnZOYW5kX1JlYWQoT1NfRkxBU0hfVk9JQ0VfRFJWX1JXX05PTkZBQ19CQVNFX0FERFIsICBzaXplb2YoYXVkaW9udmZsYWcpLCAoKFVJTlQ4ICopKCZhdWRpb252ZmxhZykpKTsNCiAJcmV0ID0gek9zc19Odkl0ZW1SZWFkKE9TX0ZMQVNIX1ZPSUNFX0RSVl9SV19OT05GQUNfQkFTRV9BRERSLCAoKFVJTlQ4ICopKCZhdWRpb252ZmxhZykpLCAgc2l6ZW9mKGF1ZGlvbnZmbGFnKSk7DQogDQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIgekRydlZvaWNlQ29uZmlnX0luaXQgek9zc19Odkl0ZW1SZWFkIGlzVnBQYXJhbUluTnY9JWQsaXNVc2VTbGljQ29kZWM9JWQsaXNVc2VWb2ljZVByb2M9JWQsaXNVc2VUZG09JWQsaXNVc2VFY2FsbD0lZCFcbiIsIGF1ZGlvbnZmbGFnLmlzVnBQYXJhbUluTnYsIGF1ZGlvbnZmbGFnLmlzVXNlU2xpY0NvZGVjLGF1ZGlvbnZmbGFnLmlzVXNlVm9pY2VQcm9jLGF1ZGlvbnZmbGFnLmlzVXNlVGRtLGF1ZGlvbnZmbGFnLmlzVXNlRWNhbGwpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiIHpEcnZWb2ljZUNvbmZpZ19Jbml0IHpPc3NfTnZJdGVtUmVhZCBpc1ZwUGFyYW1Jbk52PSVkLGlzVXNlU2xpY0NvZGVjPSVkIVxuIiwgYXVkaW9udmZsYWcuaXNWcFBhcmFtSW5OdiwgYXVkaW9udmZsYWcuaXNVc2VTbGljQ29kZWMpOw0KIAkvL2hhbF9UZXN0VG9wSTJzQ29uZmlnKCk7DQogDQogCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9hdWRpb19saWIvYW1yL2xpYi9hcm12Ny1hL0dDQy9hbXIuYSBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvYXVkaW9fbGliL2Ftci9saWIvYXJtdjctYS9HQ0MvYW1yLmEKaW5kZXggODJhMWZjMy4uMDEzOTljMSAxMDA3NTUKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9hdWRpb19saWIvYW1yL2xpYi9hcm12Ny1hL0dDQy9hbXIuYQorKysgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2F1ZGlvX2xpYi9hbXIvbGliL2FybXY3LWEvR0NDL2Ftci5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvYXVkaW9pbnRmL2hhbF9hdWRleHRpbnRmLmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2F1ZGlvaW50Zi9oYWxfYXVkZXh0aW50Zi5jCmluZGV4IGRiNTczNDYuLmRmZjczNjQgMTAwNzU1Ci0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvYXVkaW9pbnRmL2hhbF9hdWRleHRpbnRmLmMKKysrIGIvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9hdWRpb2ludGYvaGFsX2F1ZGV4dGludGYuYwpAQCAtMTkzLDQwICsxOTMsNiBAQAogew0KIAlyZXR1cm4gZ192b2ljZVZhci5tdXRlRW47DQogfQ0KLQ0KLWludCB6RHJ2VnBfU2V0Vm9pY2VQcm9jX1dyYXAoaW50IHZhbCkNCi17DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogdmFsPSVkICFcbiIsX19mdW5jX18sdmFsKTsNCi0NCi0JZ192b2ljZVZhci5hdWRpb19jdHJsRmxhZy5pc1VzZVZvaWNlUHJvYyA9IHZhbDsNCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0NCi1pbnQgekRydlZwX0dldFZvaWNlUHJvY19XcmFwKHZvaWQpDQotew0KLQlyZXR1cm4gZ192b2ljZVZhci5hdWRpb19jdHJsRmxhZy5pc1VzZVZvaWNlUHJvYzsNCi19DQotDQotaW50IHpEcnZWcF9TZXRWb2ljZUJ1ZmZlcl9XcmFwKGludCBlbixpbnQgdHlwZSkNCi17DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogZW49JWQsdHlwZT0lZCAhXG4iLF9fZnVuY19fLGVuLHR5cGUpOw0KLQ0KLQlnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID0gZW47DQotCWdfdm9pY2VWYXIudm9pY2VCdWZmZXJUeXBlID0gdHlwZTsNCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0NCi12b2lkIHpEcnZWcF9HZXRWb2ljZUJ1ZmZlcl9XcmFwKGludCAqZW4saW50ICp0eXBlKQ0KLXsNCi0gICAgaWYoKGVuIT1OVUxMKSYmKHR5cGUhPU5VTEwpKXsNCi0JCSplbiA9IGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXI7DQotCQkqdHlwZSA9IGdfdm9pY2VWYXIudm9pY2VCdWZmZXJUeXBlOw0KLQkJDQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6IGVuPSVkLHR5cGU9JWQgIVxuIixfX2Z1bmNfXywqdHlwZSwqZW4pOw0KLSAgICB9DQotfQ0KLQ0KLQ0KIFNJTlQzMiB6RHJ2VnBfU2V0UnhNdXRlX1dyYXAoaW50IGVuYWJsZSkNCiB7DQogCXJldHVybiB6RHJ2VnBfU2V0UnhNdXRlKGVuYWJsZSwgVk9JQ0VfRE9XTkxJTkspOw0KZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvYXVkaW9pbnRmL3ZvaWNlX3Byb2NpbnRmLmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2F1ZGlvaW50Zi92b2ljZV9wcm9jaW50Zi5jCmluZGV4IDUxNDY3NTMuLjJmMGU4MDMgMTAwNzU1Ci0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvYXVkaW9pbnRmL3ZvaWNlX3Byb2NpbnRmLmMKKysrIGIvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9hdWRpb2ludGYvdm9pY2VfcHJvY2ludGYuYwpAQCAtMTUsMTAgKzE1LDYgQEAKICogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGZpbGVzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgImRydnNfZ2VuZXJhbC5oIgotCi0jaW5jbHVkZSAiZHJ2c192b2x0ZS5oIgotI2luY2x1ZGUgImRydnNfdm9pY2Vwcm9jZXNzLmgiCi0KICNpbmNsdWRlICJkcnZzX3JhbWxvZy5oIgogI2luY2x1ZGUgPG9zc19jbGliLmg+CiAjaW5jbHVkZSA8b3NzX2tlcm5lbC5oPgpAQCAtNzcsMTIgKzczLDggQEAKIAogCWdfdm9pY2VWYXIuaXNVc2VTbGljQ29kZWMgPSBnX3ZvaWNlVmFyLmF1ZGlvX2N0cmxGbGFnLmlzVXNlU2xpY0NvZGVjOwogCWdfdm9pY2VWYXIuZ19pc1VzZVRkbSA9IGdfdm9pY2VWYXIuYXVkaW9fY3RybEZsYWcuaXNVc2VUZG07Ci0JCi0JZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9IGdfdm9pY2VWYXIuYXVkaW9fY3RybEZsYWcuaXNVc2VWb2ljZUJ1ZmZlcjsgLy8gMCBub3QgdXNlLDEgdXNlCi0JZ192b2ljZVZhci52b2ljZUJ1ZmZlclR5cGUgPSBnX3ZvaWNlVmFyLmF1ZGlvX2N0cmxGbGFnLnNlbFZvaWNlQnVmZmVyVHlwZTsvLzAgc2luZ2xlIGNvcmUsIDEgZHVhbCBjb3JlCiAKLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiIFZvaWNlUHJvY19Jbml0TnZQYXJhbSBpc1VzZVZvaWNlUHJvYz0lZCxpc1VzZVNsaWNDb2RlYz0lZCxpc1VzZVRkbT0lZCx1c2VWb2ljZUJ1ZmZlcj0lZCx2b2ljZUJ1ZmZlclR5cGU9JWQhXG4iLCBnX3ZvaWNlVmFyLmF1ZGlvX2N0cmxGbGFnLmlzVXNlVm9pY2VQcm9jLCBcCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3ZvaWNlVmFyLmlzVXNlU2xpY0NvZGVjLCBnX3ZvaWNlVmFyLmF1ZGlvX2N0cmxGbGFnLmlzVXNlVGRtLGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIsZ192b2ljZVZhci52b2ljZUJ1ZmZlclR5cGUpOworCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIgVm9pY2VQcm9jX0luaXROdlBhcmFtIGlzVXNlVm9pY2VQcm9jPSVkLGlzVXNlU2xpY0NvZGVjPSVkLGlzVXNlVGRtPSVkIVxuIiwgZ192b2ljZVZhci5hdWRpb19jdHJsRmxhZy5pc1VzZVZvaWNlUHJvYywgZ192b2ljZVZhci5pc1VzZVNsaWNDb2RlYywgZ192b2ljZVZhci5hdWRpb19jdHJsRmxhZy5pc1VzZVRkbSk7CiAJaWYgKGdfdm9pY2VWYXIuYXVkaW9fY3RybEZsYWcuaXNVc2VWb2ljZVByb2MgPT0gMSkKIAl7CiAjaWZkZWYgX1VTRV9OWFBfQVVECmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2kycy9oYWxfaTJzLmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2kycy9oYWxfaTJzLmMKaW5kZXggNWVhN2MxZC4uOTgzYTkyYSAxMDA3NTUKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9pMnMvaGFsX2kycy5jCisrKyBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvaTJzL2hhbF9pMnMuYwpAQCAtNDMyMiwzNyArNDMyMiw2IEBACiAqLw0KIFZPSUQgdnBfU2V0VG9wSTJzQ29uZmlnKFZPSUQpDQogew0KLQkNCi0NCi1VSU5UMzIgQW1yUmVnQml0ID0gMDsNCi0NCi1pZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKXsgDQotDQotDQotDQotCS8qIGludGVyIGxvb3AgKi8NCi0JQW1yUmVnQml0ID0gQVJNX0kyU19MT09QX0NGRzsNCi0NCi0JQW1yUmVnQml0ICY9IDB4ZmZmZmZlMDc7DQotCUFtclJlZ0JpdCB8PSAweDAwMDAwMGE4OyAvKiAweDAwMDAwMGE4IGxvb3AgZHNwIGFmZShsb29wIGkyczEpLS1hcm0gaTJzMihsb29wIGkyczIpIDB4MDAwMDAxNTAgbG9vcCBkc3AgYXJtKGxvb3AgaTJzMSktLWFmZSBpMnMyKGxvb3AgaTJzMikqLw0KLQ0KLQlBUk1fSTJTX0xPT1BfQ0ZHID0gQW1yUmVnQml0Ow0KLQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfU2V0VG9wSTJzQ29uZmlnIEFSTV9JMlNfTE9PUF9DRkc9MHgleFxuIiwgQVJNX0kyU19MT09QX0NGRyk7DQotfQ0KLSNpZmRlZiBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgDQotCS8qIGludGVyIGxvb3AgKi8NCi0JQW1yUmVnQml0ID0gQVJNX0kyU19MT09QX0NGRzsNCi0NCi0JQW1yUmVnQml0ICY9IDB4ZmZmZmZlMDc7DQotCUFtclJlZ0JpdCB8PSAweDAwMDAwMGE4OyAvKiAweDAwMDAwMGE4IGxvb3AgZHNwIGFmZShsb29wIGkyczEpLS1hcm0gaTJzMihsb29wIGkyczIpIDB4MDAwMDAxNTAgbG9vcCBkc3AgYXJtKGxvb3AgaTJzMSktLWFmZSBpMnMyKGxvb3AgaTJzMikqLw0KLQ0KLQlBUk1fSTJTX0xPT1BfQ0ZHID0gQW1yUmVnQml0Ow0KLQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfU2V0VG9wSTJzQ29uZmlnIEFSTV9JMlNfTE9PUF9DRkc9MHgleFxuIiwgQVJNX0kyU19MT09QX0NGRyk7DQotDQotI2VuZGlmDQotDQogI2lmIDANCiAJVUlOVDMyIEFtclJlZ0JpdCA9IDA7DQogCWludCByZXQ7DQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9pbmNsdWRlL2hhbF92b2ljZWJ1ZmZlci5oIGIvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9pbmNsdWRlL2hhbF92b2ljZWJ1ZmZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOWZiZDM0Li4wMDAwMDAwCi0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvaW5jbHVkZS9oYWxfdm9pY2VidWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoQykgMjAwNywgWlRFIENvcnBvcmF0aW9uLg0KLSAqDQotICogRmlsZSBOYW1lOiAgICBoYWxfdm9pY2VidWZmZXIuaA0KLSAqIEZpbGUgTWFyazogICAgDQotKiBEZXNjcmlwdGlvbjogIFByb3ZpZGUgdm9pY2VidWZmZXIgaGFsIGZ1bmN0aW9uIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBhbmQgdHlwZSBkZWNsYXJhdGlvbi4NCi0gKiBPdGhlcnM6ICAgICAgICANCi0gKiBWZXJzaW9uOiAgICAgICBWMC41DQotICogQXV0aG9yOiAgICAgICAgeHhxDQotICogRGF0ZTogICAgICAgICAgMjAyNC0wNy0xMQ0KLSAqIEhpc3RvcnkgMTogICAgICANCi0gKiAgICAgRGF0ZTogDQotICogICAgIFZlcnNpb246DQotICogICAgIEF1dGhvcjogDQotICogICAgIE1vZGlmaWNhdGlvbjogIGFkZCBtdXRlL3JlYWQvd3JpdGUvbG9vcGJhY2suDQotICogSGlzdG9yeSAyOiANCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0hBTF9WT0lDRUJVRkZFUl9IDQotI2RlZmluZSBfSEFMX1ZPSUNFQlVGRkVSX0gNCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGZpbGVzDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb3MNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSNkZWZpbmUgVlBfQlVGX0xFTkdUSCAgMHg3RkY4MCAvLzB4RkZEODAgICAvLzB4N0ZFNDAgIC8vMHg0ZGY4MC8vICgwLjVNICAweDgwMDAwKQ0KLSNkZWZpbmUgVlBfRlJBTUVfQlVGRkVSX1NJWkUgMzIwIC8vMjBtcyA4MDBLSFoNCi0jZGVmaW5lIFZQX0kyU19CVUZGRVJfU0laRSAzMjANCi0jZGVmaW5lIFZPSUNFX1NZTkNfVElNRU9VVF9USU1FIDEwMA0KLQkNCi0JLy8jZGVmaW5lIFZQX0lOT1VUX0JBS19CVUZGRVJfU0laRSAweDMwMDAwCS8vIDB4NjAwMDANCi0jZGVmaW5lIFZQX0lOT1VUX05PQkFLX0JVRlNJWkUgIDY0MA0KLSNkZWZpbmUgVkJfTUFYX0lOVAkgICAgIDB4N2ZmZmZmZmYNCi0jZGVmaW5lIFZCX01JTl9JTlQgICAgICAgIDAgLy8oMC0yPDwzMSkvLzB4ODAwMDAwMDANCi0JDQotI2RlZmluZSBWQl9JTlRfT1ZFUkZMT1coeCkgaWYoKHggPCBWQl9NSU5fSU5UKXx8KHggPiBWQl9NQVhfSU5UKSkgIHggPSAwOw0KLQ0KLSNkZWZpbmUgUlBNU0dfQ0FQX0lEIDENCi0NCi0jZGVmaW5lIE1BWF9CVUZfU0laRQkgICAgIDY0MA0KLSNkZWZpbmUgTUFYX0JVRl9OVU0gICAgICAgIDMNCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotDQotDQotZW51bXsNCi0JVVBfTElOSywNCi0JRE9XTl9MSU5LCQ0KLX07DQotDQotc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyIHsNCi0Jdm9sYXRpbGUgdWludCByZWFkX3BvczsNCi0Jdm9sYXRpbGUgdWludCB3cml0ZV9wb3M7DQotCXZvbGF0aWxlIGNoYXIgZGF0YVtdOw0KLQ0KLX07DQotDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgIFZhcmlhYmxlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gUHJvdG90eXBlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotU0lOVDMyIHZwX09wZW5fVmJ1ZmZlcih2b2lkKTsNCi0NCi1TSU5UMzIgdnBfQ2xvc2VfVmJ1ZmZlcih2b2lkKTsNCi0NCi1TSU5UMzIgdnBfVm9pY2VJMnNTdGFydF9WYnVmZmVyKFZPSUQpOw0KLQ0KLVZPSUQgdnBfVm9pY2VJMnNTdG9wX1ZidWZmZXIoVk9JRCk7DQotDQotU0lOVDMyIHpEcnZWcF9Wb2ljZVdvcmtTdG9wX1ZidWZmZXIoVk9JRCk7DQotDQotU0lOVDMyIHZwX1ZvbHRlUmVhZFN0YXJ0X1ZidWZmZXIoVk9JRCk7DQotLy93aG9sZSByZXBsYWNlIA0KLVNJTlQzMiB2cF9Wb2x0ZVJlYWRTdG9wX1ZidWZmZXIoVk9JRCk7DQotDQotU0lOVDMyIHZwX1ZvbHRlV3JpdGVTdGFydF9WYnVmZmVyKFZPSUQpOw0KLS8vd2hvbGUgcmVwbGFjZQ0KLVNJTlQzMiB2cF9Wb2x0ZVdyaXRlU3RvcF9WYnVmZmVyKFZPSUQpOw0KLQ0KLVNJTlQzMiB2cF9Xcml0ZURhdGFUb0NvZGVjX1ZidWZmZXIoVUlOVDggKnBCdWYsIFVJTlQzMiBjb3VudCk7DQotDQotU0lOVDMyIHZwX1JlYWREYXRhRnJvbUNvZGVjX1ZidWZmZXIoVUlOVDggKnBCdWYsIFVJTlQzMiBjb3VudCk7DQotDQotU0lOVDMyIHZwX0NyZWF0ZVRocmVhZFNlbWFwaF9WYnVmZmVyKFZPSUQpOw0KLQ0KLQ0KLQ0KLQ0KLSNlbmRpZi8qX0hBTF9WT0lDRUJVRkZFUl9IKi8NCi0NCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2luY2x1ZGUvaGFsX3ZvaWNlcHJvY2Vzcy5oIGIvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9pbmNsdWRlL2hhbF92b2ljZXByb2Nlc3MuaAppbmRleCA4MTBlMTJjLi4zNzEyOTdkIDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL2luY2x1ZGUvaGFsX3ZvaWNlcHJvY2Vzcy5oCisrKyBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvaW5jbHVkZS9oYWxfdm9pY2Vwcm9jZXNzLmgKQEAgLTIzLDQyICsyMywxNCBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIA0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsIFR5cGVzDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi10eXBlZGVmIGVudW0NCi17DQotCVZCVUZfU0VNID0gMCwvL3ZvaWNlIGJ1ZmZlcg0KLQlFQ0FMTF9TRU0sCQkNCi0JU0VNX01BWA0KLX0gVF9TZW1fT3duZXI7DQotDQotdHlwZWRlZiBlbnVtDQotew0KLQlESVJfUlgsDQotCURJUl9UWCwgCQ0KLQlESVJfQUxMLA0KLQlESVJfTUFYDQotfSBUX0RhdGFfRGlyX1R5cGU7DQotDQotDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0jZGVmaW5lIFZQX0lOT1VUX0JBS19CVUZGRVJfU0laRSAweDMwMDAwICAvLyAweDYwMDAwDQotDQotLy8jZGVmaW5lIFRFU1RfV0hJVEVfTk9JU0UNCi0NCi0vLyNkZWZpbmUgIFZCX0RBVEFfTE9TU19URVNUDQotDQotDQogI2lmIDANCiAjZGVmaW5lIFZPSUNFX1RPTkVfTUlYRVJfRlVOQ1RJT04gDQogLy8jZGVmaW5lIFRFU1RfV0hJVEVfTk9JU0UNCiANCi0jZW5kaWYNCisNCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgQ29uc3RhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCkBAIC03NSw3ICs0Nyw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gUHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSNpZiAwDQogdHlwZWRlZiBlbnVtDQogew0KICAgICBWUF9JMlNfSURMRSA9IDAsDQpAQCAtODksMTMgKzYwLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gUHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotI2lmZGVmIEVDQUxMX1NVUFBPUlQNCi0NCi0NCi1TSU5UMzIgdXBkYXRlX2VjYWxsX3N0YXRlKFRfRGF0YV9EaXJfVHlwZSBkaXIpOw0KLQ0KLQ0KLSNlbmRpZg0KIA0KIA0KIA0KZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL2hhbF9ueHAuYyBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL2hhbF9ueHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggM2RmZWQyZS4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC9oYWxfbnhwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChDKSAyMDA3LCBaVEUgQ29ycG9yYXRpb24uDQotICoNCi0gKiBGaWxlIE5hbWU6DQotICogRmlsZSBNYXJrOg0KLSAqIERlc2NyaXB0aW9uOg0KLSAqIE90aGVyczoNCi0gKiBWZXJzaW9uOg0KLSAqIEF1dGhvcjogICAgICAgIGx2d2VuaHVhDQotICogRGF0ZTogICAgICAgICAgMjAxMS04LTI0DQotICogSGlzdG9yeSAxOg0KLSAqICAgICBEYXRlOiAyMDE2LTItMTYNCi0gKiAgICAgVmVyc2lvbjoNCi0gKiAgICAgQXV0aG9yOnh1eGlucWlhbmcNCi0gKiAgICAgTW9kaWZpY2F0aW9uOiBlZGl0IGZvciB1bmlvbiB2ZXJzaW9uDQotICogSGlzdG9yeSAyOg0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBmaWxlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotI2luY2x1ZGUgImRydnNfZ2VuZXJhbC5oIg0KLSNpbmNsdWRlICJOdlBhcmFtX2Rydi5oIg0KLQ0KLSNpZmRlZiBfT1NfVE9TDQotI2luY2x1ZGUgIi4vdG9zL0xWVkUuaCINCi0jaW5jbHVkZSAiLi90b3MvUEFSQU1fRGVmYXVsdC5oIg0KLSNpbmNsdWRlICIuL3Rvcy9ueHBfRHJ2TnZEYXRhLmgiDQotDQotI2VsaWYgZGVmaW5lZCBfT1NfTElOVVgNCi0jaW5jbHVkZSAiLi91Y2xpbnV4L0xWVkUuaCINCi0jaW5jbHVkZSAiLi91Y2xpbnV4L1BBUkFNX0RlZmF1bHQuaCINCi0jaW5jbHVkZSAiLi91Y2xpbnV4L254cF9EcnZOdkRhdGEuaCINCi0NCi0jZWxzZQ0KLSNpbmNsdWRlICJMVlZFLmgiDQotI2luY2x1ZGUgIlBBUkFNX0RlZmF1bHQuaCINCi0jaW5jbHVkZSAibnhwX0Rydk52RGF0YS5oIg0KLSNlbmRpZg0KLQ0KLSNpbmNsdWRlICJkcnZzX3ZvaWNlcHJvY2Vzcy5oIg0KLSNpbmNsdWRlICJkcnZzX3JhbWxvZy5oIg0KLQ0KLSNpbmNsdWRlICJoYWxfYXVkaW9pbnRmLmgiDQotI2luY2x1ZGUgIlJXTnZDb25maWcuaCINCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbCBNYWNyb3MNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSNkZWZpbmUgTUFYX0JMS19TSVpFICAgICAgICAgICAgICAgIDQwMCAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gcG9zc2libGUgYmxvY2sgc2l6ZSAqLw0KLSNkZWZpbmUgTFZWRV9OVU1fT0ZfU0FNUExFUyAgICAgICAgMTYwDQotI2RlZmluZSBWUF9QQVJBTV9JU19JTl9OViAgICAgICAgMQ0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIENvbnN0YW50cw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLy9leHRlcm4gQk9PTCBnX3ZwTXV0ZUVuOw0KLS8vZXh0ZXJuIFVJTlQ4IGdfdm9pY2VJbkdzbVRkTW9kZTsNCi0vL2V4dGVybiBVSU5UOCBnX3ZvaWNlSW5Wb2x0ZU1vZGU7DQotLy9leHRlcm4gVUlOVDggZ192b2x0ZUlzV2I7DQotLy9leHRlcm4gVUlOVDggZ19pc1VzZVNsaWNDb2RlYzsNCi1leHRlcm4gVF96RHJ2Vm9pY2VfR2JWYXIgZ192b2ljZVZhcjsNCi1zdGF0aWMgQk9PTCBnX254cElzT3BlbiA9IEZBTFNFOw0KLQ0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIFZhcmlhYmxlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotTFZNX0lOVDMyICAgSW5CdWZmZXIxNl9UeF9GRVtNQVhfQkxLX1NJWkVdOyAgICAgICAgICAgICAgICAgIC8qIFN0ZXJlbywgMTYtYml0IGFsaWduZWQgaW5wdXQgYnVmZmVyICovDQotTFZNX0lOVDE2ICAgcE5vaXNlRGF0YVs0XTsNCi0NCi1MVk1fTWVtb3J5VGFibGVfc3QgICAgICAgICAgTWVtb3J5VGFibGVfVHggPSB7MH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2R1bGUgbWVtb3J5IHRhYmxlICovDQotTFZNX01lbW9yeVRhYmxlX3N0ICAgICAgICAgIE1lbW9yeVRhYmxlX1J4ID0gezB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9kdWxlIG1lbW9yeSB0YWJsZSAqLw0KLUxWVkVfVHhfSGFuZGxlX3QgICAgICAgICAgICBoSW5zdGFuY2VfVHggPSBMVk1fTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9kdWxlIGluc3RhbmNlIGhhbmRsZSAqLw0KLUxWVkVfUnhfSGFuZGxlX3QgICAgICAgICAgICBoSW5zdGFuY2VfUnggPSBMVk1fTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9kdWxlIGluc3RhbmNlIGhhbmRsZSAqLw0KLQ0KLSNkZWZpbmUgTlVNX1ZPTF9SWCAgICAgICAgICAgICAgICAgICAoNSkgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgUnggdm9sdW1lcyAqLw0KLQ0KLS8vTFZNX0NIQVIgICAgICAgICAgICAgICAgICAgIExWVkVfVHhfUHJlc2V0X0J1ZmZlcltMVlZFX1RYX1BSRVNFVF9MRU5HVEhdOyAvKiBCeXRlIGJ1ZmZlciAqLw0KLUxWVkVfVHhfUHJlc2V0X3QgICAgICAgICAgICBMVlZFX1R4X1ByZXNldCA7IC8qIFByZXNldCBidWZmZXIgKi8NCi0vL0xWTV9DSEFSICAgICAgICAgICAgICAgICAgICBMVlZFX1J4X1ByZXNldF9CdWZmZXJbTlVNX1ZPTF9SWCpMVlZFX1JYX1BSRVNFVF9MRU5HVEhdOyAvKiBCeXRlIGJ1ZmZlciAqLw0KLUxWVkVfUnhfUHJlc2V0X3QgICAgICAgICAgICBMVlZFX1J4X1ByZXNldCA7IC8qIFByZXNldCBidWZmZXIgKi8NCi0vL0xWTV9DSEFSICAgICAgICAgICAgICAgICAgICBMVlZFX1R4X1ByZXNldF9CdWZmZXJfVm9sdGVbTFZWRV9UWF9QUkVTRVRfTEVOR1RIXTsgLyogQnl0ZSBidWZmZXIgKi8NCi0vL0xWTV9DSEFSICAgICAgICAgICAgICAgICAgICBMVlZFX1J4X1ByZXNldF9CdWZmZXJfVm9sdGVbTlVNX1ZPTF9SWCpMVlZFX1JYX1BSRVNFVF9MRU5HVEhdOyAvKiBCeXRlIGJ1ZmZlciAqLw0KLQ0KLVRfQXVkaW9fTnZQYXJhbSBnX2F1ZGlvTnZQYXJhbSA9IHswfTsNCi0NCi1zdGF0aWMgTFZNX1VJTlQzMglOdW1CeXRlc1JlYWRSeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBwcmVzZXQgZmlsZSAgUlgqLw0KLXN0YXRpYyBMVk1fVUlOVDMyCU51bUJ5dGVzUmVhZFR4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHByZXNldCBmaWxlICBUWCovDQotDQotc3RhdGljIEJPT0wgaXNGaXJzdFR4UHJvY2Vzc0VyciA9IFRSVUU7DQotc3RhdGljIEJPT0wgaXNGaXJzdFJ4UHJvY2Vzc0VyciA9IFRSVUU7DQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLy9UX1pEcnZfVm9pY2VPdXRwdXRQYXRoICBzX3ZwUGF0aG91dDsNCi0vL1RfWkRydlZvaWNlX091dHB1dFZvbExldmVsICBzX3ZwVm9sb3V0Ow0KLQ0KLVVJTlQzMiB6T3NzX052SXRlbVJlYWQoVUlOVDMyIE52SXRlbUlELCBVSU5UOCAqTnZJdGVtRGF0YSwgVUlOVDMyIE52SXRlbUxlbik7DQotVUlOVDMyIHpPc3NfTnZJdGVtV3JpdGUoVUlOVDMyIE52SXRlbUlELCBVSU5UOCAqTnZJdGVtRGF0YSwgVUlOVDMyIE52SXRlbUxlbik7DQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBEZWZpbml0aW9ucw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotU0lOVDMyIFZwX054cEluaXROdlBhcmFtKFZPSUQpDQotew0KLQlTSU5UMzIgcmV0ID0gRFJWX1NVQ0NFU1M7DQotCVNJTlQzMiBpID0gMDsNCi0NCi0JTFZWRV9WZXJzaW9uSW5mbyAgICAgICAgICAgIHBWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiBpbmZvcm1hdGlvbiAqLw0KLQlMVlZFX0dldFZlcnNpb25JbmZvKCZwVmVyc2lvbik7DQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJueHAgVmVyc2lvbiAgJXNcbiIsIHBWZXJzaW9uLlZlcnNpb25OdW1iZXIpOw0KLSNpZiAwDQotCXJldCA9IHpPc3NfTnZJdGVtUmVhZChPU19GTEFTSF9WT0lDRV9EUlZfUldfTk9ORkFDX0JBU0VfQUREUiwgKChVSU5UOCAqKSgmZ19hdWRpb052UGFyYW0uYXVkaW9fY3RybEZsYWcpKSwgIHNpemVvZihnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZykpOw0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwSW5pdE52UGFyYW0gdm9pY2UgIGZsYWcgYmFzZUFkZD0weCV4LCByZXQgPSVkICxpc1ZwUGFyYW1Jbk52PSAlZCBcbiIsIChPU19GTEFTSF9WT0lDRV9EUlZfUldfTk9ORkFDX0JBU0VfQUREUiksIFwNCi0JICAgICAgICAgICAgICAgICAgcmV0LCBnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1ZwUGFyYW1Jbk52KTsNCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cEluaXROdlBhcmFtIHZvaWNlZmxhZyBpc1ZwUGFyYW1Jbk52PSVkLGlzVXNlU2xpY0NvZGVjPSVkLGlzVXNlVm9pY2VQcm9jPSVkLGlzVXNlQ29kZWNEc3A9JWQsaXNVc2VOdldyaXRlPSVkIFxuIiwgXA0KLQkgICAgICAgICAgICAgICAgICBnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1ZwUGFyYW1Jbk52LCBnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1VzZVNsaWNDb2RlYywgZ19hdWRpb052UGFyYW0uYXVkaW9fY3RybEZsYWcuaXNVc2VWb2ljZVByb2MsIFwNCi0JICAgICAgICAgICAgICAgICAgZ19hdWRpb052UGFyYW0uYXVkaW9fY3RybEZsYWcuaXNVc2VDb2RlY0RzcCwgZ19hdWRpb052UGFyYW0uYXVkaW9fY3RybEZsYWcuaXNVc2VOdldyaXRlKTsNCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cEluaXROdlBhcmFtIHRoZSBnX2F1ZGlvTnZQYXJhbSBzaXplPSVkLGF1ZGlvX2N0cmxGbGFnIHNpemU9JWRcbiIsIFwNCi0JICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdfYXVkaW9OdlBhcmFtKSwgc2l6ZW9mKGdfYXVkaW9OdlBhcmFtLmF1ZGlvX2N0cmxGbGFnKSk7DQotDQotCWdfdm9pY2VWYXIuYXVkaW9fY3RybEZsYWcgPSBnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZzsNCi0JZ192b2ljZVZhci5pc1VzZVNsaWNDb2RlYyA9IGdfYXVkaW9OdlBhcmFtLmF1ZGlvX2N0cmxGbGFnLmlzVXNlU2xpY0NvZGVjOw0KLQlnX3ZvaWNlVmFyLmdfaXNVc2VUZG0gPSBnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1VzZVRkbTsNCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIiBWcF9OeHBJbml0TnZQYXJhbSBnX3ZvaWNlVmFyLmlzVXNlU2xpY0NvZGVjPSVkLCBnX3ZvaWNlVmFyLmdfaXNVc2VUZG09JWQhXG4iLCBnX3ZvaWNlVmFyLmlzVXNlU2xpY0NvZGVjLCBnX3ZvaWNlVmFyLmdfaXNVc2VUZG0pOw0KLSNlbmRpZg0KLQ0KLQlnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZyA9IGdfdm9pY2VWYXIuYXVkaW9fY3RybEZsYWc7DQotI2lmIDANCi0JaWYgKGdfYXVkaW9OdlBhcmFtLmF1ZGlvX2N0cmxGbGFnLmlzVnBQYXJhbUluTnYgPT0gMSkNCi0Jew0KLQkJcmV0ID0gek9zc19Odkl0ZW1SZWFkKE9TX0ZMQVNIX1ZPSUNFX1JXX05PTkZBQ19CQVNFX0FERFIsICgoVUlOVDggKikoJmdfYXVkaW9OdlBhcmFtLnZwTnhwUGFyYW1GaWxlKSksICBzaXplb2YoZ19hdWRpb052UGFyYW0udnBOeHBQYXJhbUZpbGUpKTsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBJbml0TnZQYXJhbSBSZWFkIGF1ZGlvIG52IHBhcmFtIGJhc2UgYWRkPTB4JXgsdnBOeHBQYXJhbUZpbGUgc2l6ZT0lZCBcbiIsIFwNCi0JCSAgICAgICAgICAgICAgICAgIChPU19GTEFTSF9WT0lDRV9SV19OT05GQUNfQkFTRV9BRERSKSwgc2l6ZW9mKGdfYXVkaW9OdlBhcmFtLnZwTnhwUGFyYW1GaWxlKSk7DQotDQotCX0NCi0JZWxzZQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwSW5pdE52UGFyYW0gU2V0IGFsbCBwYXRoIHRvIHRoZSBkZWZhdWx0IHBhcmFtLCB0eGJ1ZmZlciBzaXplPSVkLCByeGJ1ZmZlciBzaXplPSVkIFxuIiwgc2l6ZW9mKExWVkVfVHhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKSwgc2l6ZW9mKExWVkVfUnhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKSk7DQotCQkvLyBWcF9OeHBfUGFyYW1fRmlsZS5MVlZFX1R4X0ZpbGVfQnVmZmVyPUxWVkVfVHhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sOw0KLQkJLy9WcF9OeHBfUGFyYW1fRmlsZS5MVlZFX1J4X0ZpbGVfQnVmZmVyPUxWVkVfUnhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sOw0KLQkJZm9yIChpID0gMDsgaSA8IEFVRElPX01BWF9WUF9QQVRIOyBpKyspDQotCQl7DQotCQkJek9zc19NZW1jcHkoZ19hdWRpb052UGFyYW0udnBOeHBQYXJhbUZpbGUudnBOeHBQYXRoUGFyYW1baV0ubnhwVHhGaWxlQnVmZmVyLCBMVlZFX1R4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbCwgc2l6ZW9mKExWVkVfVHhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKSk7DQotCQkJek9zc19NZW1jcHkoZ19hdWRpb052UGFyYW0udnBOeHBQYXJhbUZpbGUudnBOeHBQYXRoUGFyYW1baV0ubnhwUnhGaWxlQnVmZmVyLCBMVlZFX1J4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbCwgc2l6ZW9mKExWVkVfUnhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKSk7DQotCQl9DQotCQl6T3NzX01lbWNweShnX2F1ZGlvTnZQYXJhbS52cE54cFBhcmFtRmlsZS5ueHBUeE5iTXV0ZUJ1ZmZlciwgTFZWRV9UeF9NdXRlX0ZpbGVfQnVmZmVyLCBzaXplb2YoTFZWRV9UeF9NdXRlX0ZpbGVfQnVmZmVyKSk7DQotCQl6T3NzX01lbWNweShnX2F1ZGlvTnZQYXJhbS52cE54cFBhcmFtRmlsZS5ueHBUeFdiTXV0ZUJ1ZmZlciwgTFZWRV9UeF9XYl9NdXRlX0ZpbGVfQnVmZmVyLCBzaXplb2YoTFZWRV9UeF9XYl9NdXRlX0ZpbGVfQnVmZmVyKSk7DQotCX0NCi0jZW5kaWYNCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cEluaXROdlBhcmFtIGlzIG92ZXIgXG4iKTsNCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotU0lOVDMyIFZwX054cE9wZW4oVUlOVDMyIGZzKQ0KLXsNCi0NCi0JTFZWRV9UeF9JbnN0YW5jZVBhcmFtc19zdCAgIEluc3RhbmNlUGFyYW1zX1R4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5zdGFuY2UgcGFyYW1ldGVycyAqLw0KLQlMVlZFX1J4X0luc3RhbmNlUGFyYW1zX3N0ICAgSW5zdGFuY2VQYXJhbXNfUng7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnN0YW5jZSBwYXJhbWV0ZXJzICovDQotCUxWVkVfUmV0dXJuU3RhdHVzX2VuICAgICAgICBMVlZFX1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZHVsZSBzdGF0dXMgcmV0dXJuICovDQotCUxWTV9JTlQzMiAgICAgICAgICAgICAgICAgICBpLCByZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHZhcmlhYmxlICovDQotDQotCWlmIChnX254cElzT3BlbiA9PSBUUlVFKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAibnhwIGFscmVhZHkgb3BlbmVkISAgXG4iKTsNCi0JCXJldHVybiBEUlZfU1VDQ0VTUzsNCi0JfQ0KLQ0KLQlpZiAoZnMgPT0gODAwMCkNCi0Jew0KLQ0KLQkJSW5zdGFuY2VQYXJhbXNfUnguU2FtcGxlUmF0ZSAgICA9IExWTV9GU184MDAwOw0KLQkJSW5zdGFuY2VQYXJhbXNfUnguRVFfSW5zdFBhcmFtcy5FUV9NYXhMZW5ndGggPSBMVlZFX01BWF9FUV9MRU5HVEhfTkI7DQotCQlJbnN0YW5jZVBhcmFtc19UeC5TYW1wbGVSYXRlICAgID0gTFZNX0ZTXzgwMDA7DQotCQlJbnN0YW5jZVBhcmFtc19UeC5NYXhCdWxrRGVsYXkgID0gTFZWRV9NQVhfQlVMS19ERUxBWTsNCi0JCUluc3RhbmNlUGFyYW1zX1R4LkVRX0luc3RQYXJhbXMuRVFfTWF4TGVuZ3RoID0gTFZWRV9NQVhfRVFfTEVOR1RIX05COw0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cE9wZW4gY29uZmcgTkIgcGFyYW0hICBcbiIsIGZzKTsNCi0JfQ0KLQllbHNlIGlmIChmcyA9PSAxNjAwMCkNCi0Jew0KLQkJSW5zdGFuY2VQYXJhbXNfUnguU2FtcGxlUmF0ZSAgICA9ICBMVk1fRlNfMTYwMDA7DQotCQlJbnN0YW5jZVBhcmFtc19SeC5FUV9JbnN0UGFyYW1zLkVRX01heExlbmd0aCA9ICBMVlZFX01BWF9FUV9MRU5HVEhfV0I7DQotCQlJbnN0YW5jZVBhcmFtc19UeC5TYW1wbGVSYXRlICAgID0gIExWTV9GU18xNjAwMDsNCi0JCUluc3RhbmNlUGFyYW1zX1R4Lk1heEJ1bGtEZWxheSAgPSAgTFZWRV9NQVhfQlVMS19ERUxBWTsNCi0JCUluc3RhbmNlUGFyYW1zX1R4LkVRX0luc3RQYXJhbXMuRVFfTWF4TGVuZ3RoID0gIExWVkVfTUFYX0VRX0xFTkdUSF9XQjsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBPcGVuIGNvbmZnIFdCIHBhcmFtICEgIFxuIiwgZnMpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cE9wZW4gbnhwIHRoZSBmcz0lZCBub3Qgc3VwcG9ydCEgIFxuIiwgZnMpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotCSAgICBBbGxvY2F0ZSBtZW1vcnkNCi0JKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0JLyoNCi0JICogR2V0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciB0aGUgVHggTW9kdWxlDQotCSAqLw0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiYmVmb3JlIExWVkVfVHhfR2V0TWVtb3J5VGFibGVcbiIpOw0KLQ0KLQlMVlZFX1N0YXR1cyA9IExWVkVfVHhfR2V0TWVtb3J5VGFibGUoTFZNX05VTEwsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtb3J5VGFibGVfVHgsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5zdGFuY2VQYXJhbXNfVHgpOw0KLQ0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9OVUxMQUREUkVTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlBhcmFtZXRlciBlcnJvciAtIG51bGwgcG9pbnRlciBlcnJvciByZXR1cm5lZCBieSBMVlZFX1R4X0dldE1lbW9yeVRhYmxlXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JaWYgKExWVkVfU3RhdHVzID09IExWVkVfT1VUT0ZSQU5HRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlBhcmFtZXRlciBlcnJvciAtIG91dCBvZiByYW5nZSBlcnJvciByZXR1cm5lZCBieSBMVlZFX1R4X0dldE1lbW9yeVRhYmxlXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0NCi0JLyoNCi0JICogQWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgdGhlIFR4IG1vZHVsZQ0KLQkgKi8NCi0JZm9yIChpID0gMDsgaSA8IExWTV9OUl9NRU1PUllfUkVHSU9OUzsgaSsrKQ0KLQl7DQotCQlpZiAoTWVtb3J5VGFibGVfVHguUmVnaW9uW2ldLlNpemUgIT0gMCkNCi0JCXsNCi0JCQlNZW1vcnlUYWJsZV9UeC5SZWdpb25baV0ucEJhc2VBZGRyZXNzID0gek9zc19NYWxsb2MoTWVtb3J5VGFibGVfVHguUmVnaW9uW2ldLlNpemUpOw0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJOeHAgdHggbWFsbG9jIHNpemUgPSAlZCIsIE1lbW9yeVRhYmxlX1R4LlJlZ2lvbltpXS5TaXplKTsNCi0NCi0JCQlpZiAoTWVtb3J5VGFibGVfVHguUmVnaW9uW2ldLnBCYXNlQWRkcmVzcyA9PSBMVk1fTlVMTCkNCi0JCQl7DQotCQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIHJlZ2lvbiAlZFxuIiwgKExWTV9JTlQxNilNZW1vcnlUYWJsZV9UeC5SZWdpb25baV0uU2l6ZSwgKExWTV9JTlQxNilpKTsNCi0JCQl9DQotCQl9DQotDQotCX0NCi0NCi0JLyoNCi0JICogR2V0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciB0aGUgUnggTW9kdWxlDQotCSAqLw0KLQ0KLQlMVlZFX1N0YXR1cyA9IExWVkVfUnhfR2V0TWVtb3J5VGFibGUoTFZNX05VTEwsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtb3J5VGFibGVfUngsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5zdGFuY2VQYXJhbXNfUngpOw0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9OVUxMQUREUkVTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlBhcmFtZXRlciBlcnJvciAtIG51bGwgcG9pbnRlciBlcnJvciByZXR1cm5lZCBieSBMVlZFX1J4X0dldE1lbW9yeVRhYmxlXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JaWYgKExWVkVfU3RhdHVzID09IExWVkVfT1VUT0ZSQU5HRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlBhcmFtZXRlciBlcnJvciAtIG91dCBvZiByYW5nZSBlcnJvciByZXR1cm5lZCBieSBMVlZFX1J4X0dldE1lbW9yeVRhYmxlXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0NCi0JLyoNCi0JICogQWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgdGhlIFJ4IG1vZHVsZQ0KLQkgKi8NCi0JZm9yIChpID0gMDsgaSA8IExWTV9OUl9NRU1PUllfUkVHSU9OUzsgaSsrKQ0KLQl7DQotCQlpZiAoTWVtb3J5VGFibGVfUnguUmVnaW9uW2ldLlNpemUgIT0gMCkNCi0JCXsNCi0JCQlNZW1vcnlUYWJsZV9SeC5SZWdpb25baV0ucEJhc2VBZGRyZXNzID0gek9zc19NYWxsb2MoTWVtb3J5VGFibGVfUnguUmVnaW9uW2ldLlNpemUpOw0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJOeHAgcnggbWFsbG9jIHNpemUgPSAlZFxuIiwgTWVtb3J5VGFibGVfUnguUmVnaW9uW2ldLlNpemUpOw0KLQ0KLQkJCWlmIChNZW1vcnlUYWJsZV9SeC5SZWdpb25baV0ucEJhc2VBZGRyZXNzID09IExWTV9OVUxMKQ0KLQkJCXsNCi0JCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgcmVnaW9uICVkXG4iLCAoTFZNX0lOVDE2KU1lbW9yeVRhYmxlX1J4LlJlZ2lvbltpXS5TaXplLCAoTFZNX0lOVDE2KWkpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQkvKg0KLQkgKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IGZvciB0aGUgbm9pc2UgZGF0YSBidWZmZXIgKDIqTFZWRV9OVU1fT0ZfU0FNUExFUykNCi0JICovDQotDQotCWhJbnN0YW5jZV9UeCA9IExWTV9OVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGlzZSB0byBOVUxMICovDQotCUxWVkVfU3RhdHVzID0gTFZWRV9UeF9HZXRJbnN0YW5jZUhhbmRsZSgmaEluc3RhbmNlX1R4LCAgICAgICAgICAgICAgLyogSW5pdCBzZXRzIHRoZSBpbnN0YW5jZSBoYW5kbGUgKi8NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNZW1vcnlUYWJsZV9UeCwNCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbnN0YW5jZVBhcmFtc19UeCk7DQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJMVlZFX1R4X0dldEluc3RhbmNlSGFuZGxlIExWVkVfU3RhdHVzPSVkXG4iLCBMVlZFX1N0YXR1cyk7DQotCWlmIChMVlZFX1N0YXR1cyA9PSBMVlZFX05VTExBRERSRVNTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiUGFyYW1ldGVyIGVycm9yIC0gbnVsbCBwb2ludGVyIGVycm9yIHJldHVybmVkIGJ5IExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGVcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9PVVRPRlJBTkdFKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiUGFyYW1ldGVyIGVycm9yIC0gb3V0IG9mIHJhbmdlIGVycm9yIHJldHVybmVkIGJ5IExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGVcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQloSW5zdGFuY2VfUnggPSBMVk1fTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpc2UgdG8gTlVMTCAqLw0KLQlMVlZFX1N0YXR1cyA9IExWVkVfUnhfR2V0SW5zdGFuY2VIYW5kbGUoJmhJbnN0YW5jZV9SeCwgICAgICAgICAgICAgIC8qIEluaXQgc2V0cyB0aGUgaW5zdGFuY2UgaGFuZGxlICovDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtb3J5VGFibGVfUngsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5zdGFuY2VQYXJhbXNfUngpOw0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiTFZWRV9SeF9HZXRJbnN0YW5jZUhhbmRsZSBMVlZFX1N0YXR1cz0lZFxuIiwgTFZWRV9TdGF0dXMpOw0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9OVUxMQUREUkVTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlBhcmFtZXRlciBlcnJvciAtIG51bGwgcG9pbnRlciBlcnJvciByZXR1cm5lZCBieSBMVlZFX1J4X0dldEluc3RhbmNlSGFuZGxlXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JaWYgKExWVkVfU3RhdHVzID09IExWVkVfT1VUT0ZSQU5HRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlBhcmFtZXRlciBlcnJvciAtIG91dCBvZiByYW5nZSBlcnJvciByZXR1cm5lZCBieSBMVlZFX1J4X0dldEluc3RhbmNlSGFuZGxlXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JTFZNX1VJTlQzMiBueHBQYXJhbVNpemUgPSAwLCBueHBQYXJhbU9mZnNldCA9IDA7DQotDQotCW54cFBhcmFtU2l6ZSA9IDQgKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotDQotCWdfYXVkaW9OdlBhcmFtLnNfbnhwUGF0aFBhcmFtID0gek9zc19NYWxsb2MobnhwUGFyYW1TaXplKTsNCi0JaWYgKGdfYXVkaW9OdlBhcmFtLnNfbnhwUGF0aFBhcmFtID09IE5VTEwpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJGYWlsZWQgdG8gYWxsb2NhdGUgZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW1cbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQlnX2F1ZGlvTnZQYXJhbS5zX254cFR4TmJNdXRlUGFyYW0gPSB6T3NzX01hbGxvYygyICogTFZXTV9UWF9GSUxFX1NJWkUpOw0KLQlpZiAoZ19hdWRpb052UGFyYW0uc19ueHBUeE5iTXV0ZVBhcmFtID09IE5VTEwpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJGYWlsZWQgdG8gYWxsb2NhdGUgZ19hdWRpb052UGFyYW0uc19ueHBUeE5iTXV0ZVBhcmFtXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JZ19hdWRpb052UGFyYW0uc19ueHBUeFdiTXV0ZVBhcmFtID0gZ19hdWRpb052UGFyYW0uc19ueHBUeE5iTXV0ZVBhcmFtICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBPcGVuIHNfbnhwUGF0aFBhcmFtPSVwLHNfbnhwVHhOYk11dGVQYXJhbT0lcFxuIiwgZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW0sIGdfYXVkaW9OdlBhcmFtLnNfbnhwVHhOYk11dGVQYXJhbSk7DQotCWlmIChnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1ZwUGFyYW1Jbk52ID09IDEpDQotCXsNCi0JCWlmIChnX3ZvaWNlVmFyLnZvaWNlTW9kZSA9PSBWT0lDRV9HU01fTU9ERSkNCi0JCXsNCi0JCQlueHBQYXJhbU9mZnNldCA9IDA7DQotCQl9DQotCQllbHNlIGlmICgoZ192b2ljZVZhci52b2ljZU1vZGUgPT0gVk9JQ0VfV0NETUFfTU9ERSkgfHwgKGdfdm9pY2VWYXIudm9pY2VNb2RlID09IFZPSUNFX1REX01PREUpKQ0KLQkJew0KLQkJCWlmIChnX3ZvaWNlVmFyLnZvbHRlSXNXYiAhPSAxKQ0KLQkJCXsNCi0JCQkJbnhwUGFyYW1PZmZzZXQgPSBueHBQYXJhbVNpemU7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCW54cFBhcmFtT2Zmc2V0ID0gMiAqIG54cFBhcmFtU2l6ZTsNCi0JCQl9DQotCQl9DQotCQllbHNlIGlmIChnX3ZvaWNlVmFyLnZvaWNlTW9kZSA9PSBWT0lDRV9MVEVfTU9ERSkNCi0JCXsNCi0JCQlpZiAoZ192b2ljZVZhci52b2x0ZUlzV2IgIT0gMSkNCi0JCQl7DQotCQkJCW54cFBhcmFtT2Zmc2V0ID0gMyAqIG54cFBhcmFtU2l6ZTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJbnhwUGFyYW1PZmZzZXQgPSA0ICogbnhwUGFyYW1TaXplOw0KLQkJCX0NCi0JCX0NCi0NCi0JCXJldCA9IHpPc3NfTnZJdGVtUmVhZChPU19GTEFTSF9WT0lDRV9SV19OT05GQUNfQkFTRV9BRERSICsgbnhwUGFyYW1PZmZzZXQsIGdfYXVkaW9OdlBhcmFtLnNfbnhwUGF0aFBhcmFtLCAgbnhwUGFyYW1TaXplKTsNCi0NCi0JCW54cFBhcmFtT2Zmc2V0ID0gNSAqIG54cFBhcmFtU2l6ZTsNCi0JCXJldCA9IHpPc3NfTnZJdGVtUmVhZChPU19GTEFTSF9WT0lDRV9SV19OT05GQUNfQkFTRV9BRERSICsgbnhwUGFyYW1PZmZzZXQsIGdfYXVkaW9OdlBhcmFtLnNfbnhwVHhOYk11dGVQYXJhbSwgIDIgKiBMVldNX1RYX0ZJTEVfU0laRSk7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwSW5pdE52UGFyYW0gUmVhZCBhdWRpbyBudiBwYXJhbSBiYXNlIGFkZD0weCV4LHZwTnhwUGFyYW1GaWxlIHNpemU9JWQgXG4iLCBcDQotCQkgICAgICAgICAgICAgICAgICAoT1NfRkxBU0hfVk9JQ0VfUldfTk9ORkFDX0JBU0VfQUREUiArIG54cFBhcmFtT2Zmc2V0KSwgbnhwUGFyYW1TaXplKTsNCi0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBJbml0TnZQYXJhbSBTZXQgYWxsIHBhdGggdG8gdGhlIGRlZmF1bHQgcGFyYW0sIHR4YnVmZmVyIHNpemU9JWQsIHJ4YnVmZmVyIHNpemU9JWQgXG4iLCBzaXplb2YoTFZWRV9UeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2wpLCBzaXplb2YoTFZWRV9SeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2wpKTsNCi0JCS8vIFZwX054cF9QYXJhbV9GaWxlLkxWVkVfVHhfRmlsZV9CdWZmZXI9TFZWRV9UeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2w7DQotCQkvL1ZwX054cF9QYXJhbV9GaWxlLkxWVkVfUnhfRmlsZV9CdWZmZXI9TFZWRV9SeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2w7DQotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQ0KLQkJew0KLQkJCXpPc3NfTWVtY3B5KGdfYXVkaW9OdlBhcmFtLnNfbnhwUGF0aFBhcmFtICsgaSAqIChMVldNX1RYX0ZJTEVfU0laRSArIExWV01fUlhfRklMRV9TSVpFKSwgTFZWRV9UeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2wsIHNpemVvZihMVlZFX1R4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbCkpOw0KLQkJCXpPc3NfTWVtY3B5KGdfYXVkaW9OdlBhcmFtLnNfbnhwUGF0aFBhcmFtICsgTFZXTV9UWF9GSUxFX1NJWkUgKyBpICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpLCBMVlZFX1J4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbCwgc2l6ZW9mKExWVkVfUnhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKSk7DQotCQl9DQotCQl6T3NzX01lbWNweShnX2F1ZGlvTnZQYXJhbS5zX254cFR4TmJNdXRlUGFyYW0sIExWVkVfVHhfTXV0ZV9GaWxlX0J1ZmZlciwgc2l6ZW9mKExWVkVfVHhfTXV0ZV9GaWxlX0J1ZmZlcikpOw0KLQkJek9zc19NZW1jcHkoZ19hdWRpb052UGFyYW0uc19ueHBUeFdiTXV0ZVBhcmFtLCBMVlZFX1R4X1diX011dGVfRmlsZV9CdWZmZXIsIHNpemVvZihMVlZFX1R4X1diX011dGVfRmlsZV9CdWZmZXIpKTsNCi0JfQ0KLQlpc0ZpcnN0VHhQcm9jZXNzRXJyID0gVFJVRTsNCi0JaXNGaXJzdFJ4UHJvY2Vzc0VyciA9IFRSVUU7DQotCWdfbnhwSXNPcGVuID0gVFJVRTsNCi0NCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0NCi1TSU5UMzIgVnBfTnhwQ2xvc2UoVk9JRCkNCi17DQotDQotCUxWVkVfUmV0dXJuU3RhdHVzX2VuICAgICAgICBMVlZFX1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZHVsZSBzdGF0dXMgcmV0dXJuICovDQotCUxWTV9JTlQzMiAgICAgICAgICAgICAgICAgICBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZGV4IHZhcmlhYmxlICovDQotDQotCUxWVkVfU3RhdHVzID0gTFZWRV9UeF9HZXRNZW1vcnlUYWJsZShoSW5zdGFuY2VfVHgsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtb3J5VGFibGVfVHgsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fTlVMTCk7DQotDQotCWlmIChMVlZFX1N0YXR1cyA9PSBMVlZFX05VTExBRERSRVNTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwQ2xvc2UgUGFyYW1ldGVyIGVycm9yIC0gbnVsbCBwb2ludGVyIGVycm9yIHJldHVybmVkIGJ5IExWVkVfVHhfR2V0TWVtb3J5VGFibGVcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9PVVRPRlJBTkdFKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwQ2xvc2UgUGFyYW1ldGVyIGVycm9yIC0gb3V0IG9mIHJhbmdlIGVycm9yIHJldHVybmVkIGJ5IExWVkVfVHhfR2V0TWVtb3J5VGFibGVcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQkvKiBGb3IgZWFjaCByZWdpb24gKi8NCi0JZm9yIChpID0gMDsgaSA8IExWTV9OUl9NRU1PUllfUkVHSU9OUzsgaSsrKQ0KLQl7DQotCQlpZiAoKE1lbW9yeVRhYmxlX1R4LlJlZ2lvbltpXS5TaXplICE9IDApICYmIChNZW1vcnlUYWJsZV9UeC5SZWdpb25baV0ucEJhc2VBZGRyZXNzICE9IExWTV9OVUxMKSkNCi0JCXsNCi0JCQl6T3NzX0ZyZWUoTWVtb3J5VGFibGVfVHguUmVnaW9uW2ldLnBCYXNlQWRkcmVzcyk7DQotCQkJTWVtb3J5VGFibGVfVHguUmVnaW9uW2ldLnBCYXNlQWRkcmVzcyA9IExWTV9OVUxMOw0KLQkJfQ0KLQl9DQotDQotCUxWVkVfU3RhdHVzID0gTFZWRV9SeF9HZXRNZW1vcnlUYWJsZShoSW5zdGFuY2VfUngsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtb3J5VGFibGVfUngsDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fTlVMTCk7DQotDQotCWlmIChMVlZFX1N0YXR1cyA9PSBMVlZFX05VTExBRERSRVNTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwQ2xvc2UgUGFyYW1ldGVyIGVycm9yIC0gbnVsbCBwb2ludGVyIGVycm9yIHJldHVybmVkIGJ5IExWVkVfUnhfR2V0TWVtb3J5VGFibGVcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9PVVRPRlJBTkdFKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwQ2xvc2UgUGFyYW1ldGVyIGVycm9yIC0gb3V0IG9mIHJhbmdlIGVycm9yIHJldHVybmVkIGJ5IExWVkVfUnhfR2V0TWVtb3J5VGFibGVcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQkvKiBGb3IgZWFjaCByZWdpb24gKi8NCi0JZm9yIChpID0gMDsgaSA8IExWTV9OUl9NRU1PUllfUkVHSU9OUzsgaSsrKQ0KLQl7DQotCQlpZiAoKE1lbW9yeVRhYmxlX1J4LlJlZ2lvbltpXS5TaXplICE9IDApICYmIChNZW1vcnlUYWJsZV9SeC5SZWdpb25baV0ucEJhc2VBZGRyZXNzICE9IExWTV9OVUxMKSkNCi0JCXsNCi0JCQl6T3NzX0ZyZWUoTWVtb3J5VGFibGVfUnguUmVnaW9uW2ldLnBCYXNlQWRkcmVzcyk7DQotCQkJTWVtb3J5VGFibGVfUnguUmVnaW9uW2ldLnBCYXNlQWRkcmVzcyA9IExWTV9OVUxMOw0KLQkJfQ0KLQl9DQotDQotCWlmIChnX2F1ZGlvTnZQYXJhbS5zX254cFBhdGhQYXJhbSAhPSBOVUxMKQ0KLQl7DQotCQl6T3NzX0ZyZWUoZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW0pOw0KLQkJZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW0gPSBOVUxMOw0KLQl9DQotCWlmIChnX2F1ZGlvTnZQYXJhbS5zX254cFR4TmJNdXRlUGFyYW0gIT0gTlVMTCkNCi0Jew0KLQkJek9zc19GcmVlKGdfYXVkaW9OdlBhcmFtLnNfbnhwVHhOYk11dGVQYXJhbSk7DQotCQlnX2F1ZGlvTnZQYXJhbS5zX254cFR4TmJNdXRlUGFyYW0gPSBOVUxMOw0KLQl9DQotDQotCWhJbnN0YW5jZV9UeCA9IExWTV9OVUxMOw0KLQloSW5zdGFuY2VfUnggPSBMVk1fTlVMTDsNCi0JZ19ueHBJc09wZW4gPSBGQUxTRTsNCi0NCi0JLy96T3NzX0ZyZWUocE5vaXNlRGF0YSk7DQotDQotLy8gICB6T3NzX1ByaW50ZihTVUJNRExfSEFMLCBQUklOVF9MRVZFTF9OT1JNQUwsIlZwX054cENsb3NlIHN1Y2Nlc3NcbiIpOw0KLQlyZXR1cm4gRFJWX1NVQ0NFU1M7DQotfQ0KLQ0KLVNJTlQzMiBWcF9OeHBHZXRQYXJhbShUX1pEcnZWb2ljZV9NT0RFIHZvaWNlTW9kZSwgVF9aRHJ2X1ZwUGF0aCBwYXRoKQ0KLXsNCi0JLy9hZGQgYnkgemhhbmdsaXhpYQ0KLQkvL1VJTlQzMiAgcmV0Oy8veGl1IGdhaSBjaHUNCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cEdldFBhcmFtICMjIyMjI2dldCBOWFAgcGFyYW1ldGVyIHN0YXJ0IyMjIyMjIyB2b2ljZU1vZGU9JWQscGF0aD0lZCBcbiIsIHZvaWNlTW9kZSwgcGF0aCk7DQotCVVJTlQzMiBwYXRoVHhPZmZzZXQsIHBhdGhSeE9mZnNldDsNCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0JLyogU2V0IHRoZSBWb2ljZSBFbmdpbmUgUGFyYW1ldGVyIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0JLyoNCi0JKiBSZWFkIHRoZSBSeCBwcmVzZXQgZmlsZSBhbmQgc2VuZCB0aGUgYnl0ZXMgdG8gdGhlIFJ4IE1vZHVsZQ0KLQkqLw0KLQ0KLQlpZiAoZ19ueHBJc09wZW4gPT0gRkFMU0UpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbSwgbnhwIGhhcyBub3QgYmVlbiBvcGVuZWQgeWV0IVxuIik7DQotCQlyZXR1cm4gRFJWX0VSUl9OT1RfT1BFTkVEOw0KLQl9DQotCQ0KLQkvKmtsb2N3b3JrIDMgIElOVkFSSUFOVF9DT05ESVRJT04uVU5SRUFDSCAgTUFYX1ZQX1BBVEi4xM6qVlBfUEFUSF9CTFVFVE9PVEggus3JvrP9IChwYXRoPDApKi8NCi0JaWYgKHBhdGggPiBWUF9QQVRIX0JMVUVUT09USCkgDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbSB0aGUgcGF0aCBlcnJvclxuIik7DQotCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQl9DQotDQotCWlmIChnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1VzZVZvaWNlUHJvYyAhPSAxKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW0gZXJyb3IgZ19hdWRpb052UGFyYW0uYXVkaW9fY3RybEZsYWcuaXNVc2VWb2ljZVByb2MgIT0gMSBcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQlwYXRoVHhPZmZzZXQgPSBwYXRoICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQlwYXRoUnhPZmZzZXQgPSBwYXRoICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotDQotCWlmIChnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1ZwUGFyYW1Jbk52ID09IDEpDQotCXsNCi0JCUxWVkVfVHhfUHJlc2V0ID0gKExWTV9DSEFSKilnX2F1ZGlvTnZQYXJhbS5zX254cFBhdGhQYXJhbSArIHBhdGhUeE9mZnNldCA7DQotCQlMVlZFX1J4X1ByZXNldCA9IChMVk1fQ0hBUiopZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW0gKyBwYXRoUnhPZmZzZXQgOw0KLQ0KLQkJTnVtQnl0ZXNSZWFkVHggPSBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCU51bUJ5dGVzUmVhZFJ4ID0gTFZXTV9SWF9GSUxFX1NJWkU7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlMVlZFX1J4X1ByZXNldCA9IExWVkVfUnhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sOw0KLQkJTFZWRV9UeF9QcmVzZXQgPSBMVlZFX1R4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbDsNCi0NCi0JCU51bUJ5dGVzUmVhZFR4ID0gc2l6ZW9mKExWVkVfVHhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKTsNCi0JCU51bUJ5dGVzUmVhZFJ4ID0gIHNpemVvZihMVlZFX1J4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbCk7DQotDQotCX0NCi0NCi0JaWYgKGdfdm9pY2VWYXIubXV0ZUVuID09IFRSVUUpDQotCXsNCi0JCWlmIChnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1ZwUGFyYW1Jbk52ID09IDEpDQotCQl7DQotCQkJaWYgKGdfdm9pY2VWYXIudm9sdGVJc1diICE9IDEpDQotCQkJew0KLQkJCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW0gc2V0IG5iIG11dGUgY29uZmlnICFcclxuIik7DQotCQkJCUxWVkVfVHhfUHJlc2V0ID0gZ19hdWRpb052UGFyYW0uc19ueHBUeE5iTXV0ZVBhcmFtOy8veGl1IGdhaSBjaHUgdG9uZyBzaGFuZw0KLQkJCQlOdW1CeXRlc1JlYWRUeCA9IExWV01fVFhfRklMRV9TSVpFOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW0gc2V0IHdiIG11dGUgY29uZmlnICFcclxuIik7DQotCQkJCUxWVkVfVHhfUHJlc2V0ID0gZ19hdWRpb052UGFyYW0uc19ueHBUeFdiTXV0ZVBhcmFtOy8veGl1IGdhaSBjaHUgdG9uZyBzaGFuZw0KLQkJCQlOdW1CeXRlc1JlYWRUeCA9IExWV01fVFhfRklMRV9TSVpFOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoZ192b2ljZVZhci52b2x0ZUlzV2IgIT0gMSkNCi0JCQl7DQotCQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbSBzZXQgbmIgbXV0ZSBjb25maWcgIVxyXG4iKTsNCi0JCQkJTFZWRV9UeF9QcmVzZXQgPSBMVlZFX1R4X011dGVfRmlsZV9CdWZmZXI7DQotCQkJCU51bUJ5dGVzUmVhZFR4ID0gc2l6ZW9mKExWVkVfVHhfTXV0ZV9GaWxlX0J1ZmZlcik7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbSBzZXQgd2IgbXV0ZSBjb25maWcgIVxyXG4iKTsNCi0JCQkJTFZWRV9UeF9QcmVzZXQgPSBMVlZFX1R4X1diX011dGVfRmlsZV9CdWZmZXI7DQotCQkJCU51bUJ5dGVzUmVhZFR4ID0gc2l6ZW9mKExWVkVfVHhfV2JfTXV0ZV9GaWxlX0J1ZmZlcik7DQotDQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbSBOdW1CeXRlc1JlYWRSeD0lZCBOdW1CeXRlc1JlYWRUeD0gJWRcbiAiLCBOdW1CeXRlc1JlYWRSeCAsIE51bUJ5dGVzUmVhZFR4KTsNCi0JLyprbG9jd29yayAzICBJTlZBUklBTlRfQ09ORElUSU9OLlVOUkVBQ0ggICBkZWxldGUgaWYqLw0KLSAgICAvKg0KLQlpZiAoKE51bUJ5dGVzUmVhZFJ4ID09IExWTV9OVUxMKSB8fCAoTnVtQnl0ZXNSZWFkVHggPT0gTFZNX05VTEwpKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwU2V0UGFyYW0gTlhQIHJlYWQgcGFyYSBpcyBudWxsICFcclxuIik7DQotCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQl9Ki8NCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLQ0KLX0NCi0NCi1TSU5UMzIgVnBfTnhwU2V0UGFyYW0oVF9aRHJ2X1ZwUGF0aCBwYXRoLCBUX1pEcnZfVnBWb2wgdm9sdW1lLCBCT09MIGlzTG9vcCkNCi17DQotCUxWVkVfUmV0dXJuU3RhdHVzX2VuICAgICAgICBMVlZFX1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZHVsZSBzdGF0dXMgcmV0dXJuICovDQotCUxWTV9VSU5UMTYgICAgICAgICAgICAgICAgICBWb2x1bWVJbmRleDsNCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtICMjIyMjI3NldCBOWFAgcGFyYW1ldGVyIHN0YXJ0IyMjIyMjIyIpOw0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQkvKiBTZXQgdGhlIFZvaWNlIEVuZ2luZSBQYXJhbWV0ZXIgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQlpZiAoZ19ueHBJc09wZW4gPT0gRkFMU0UpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBTZXRQYXJhbSwgbnhwIGhhcyBub3QgYmVlbiBvcGVuZWQgeWV0IVxuIik7DQotCQlyZXR1cm4gRFJWX0VSUl9OT1RfT1BFTkVEOw0KLQl9DQotDQotCS8qa2xvY3dvcmsgMyAgSU5WQVJJQU5UX0NPTkRJVElPTi5VTlJFQUNIICBNQVhfVlBfUEFUSLjEzqpWUF9QQVRIX0JMVUVUT09USCC6zcm+s/0gKHBhdGg8MCkqLw0KLQlpZiAocGF0aCA+IFZQX1BBVEhfQkxVRVRPT1RIKSANCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtIHRoZSBwYXRoIGVycm9yXG4iKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JVm9sdW1lSW5kZXggPSB2b2x1bWU7IC8qIE1heCBSeCB2b2x1bWUgKi8NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtIFZvbHVtZUluZGV4ICBpcyAlZFxuIiwgVm9sdW1lSW5kZXgpOw0KLQ0KLQlpZiAoKGhJbnN0YW5jZV9SeCA9PSBOVUxMKSB8fCAoTFZWRV9SeF9QcmVzZXQgPT0gTlVMTCkgfHwgKGhJbnN0YW5jZV9UeCA9PSBOVUxMKSB8fCAoTFZWRV9UeF9QcmVzZXQgPT0gTlVMTCkpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBTZXRQYXJhbSwgdGhlIGlucHV0IHBhcmFtZXRlciBpcyBOVUxMXG4iKTsNCi0JCXJldHVybiBEUlZfRVJSX0lOVkFMSURfUEFSQU07DQotCX0NCi0NCi0JTFZWRV9TdGF0dXMgPSBMVlZFX1J4X1NldFByZXNldChoSW5zdGFuY2VfUngsIExWVkVfUnhfUHJlc2V0LCBOdW1CeXRlc1JlYWRSeCwgVm9sdW1lSW5kZXgpOw0KLQlpZiAoTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwU2V0UGFyYW0gRXJyb3IgcmV0dXJuZWQgYnkgTFZWRV9SeF9TZXRQcmVzZXQ6IEVycm9yX2NvZGUgPSAlZFxuIiwgTFZWRV9TdGF0dXMpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQlMVlZFX1N0YXR1cyA9IExWVkVfVHhfU2V0UHJlc2V0KGhJbnN0YW5jZV9UeCwgTFZWRV9UeF9QcmVzZXQsIE51bUJ5dGVzUmVhZFR4LCAwKTsNCi0JaWYgKExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtIEVycm9yIHJldHVybmVkIGJ5IExWVkVfVHhfU2V0UHJlc2V0OiBFcnJvcl9jb2RlID0gJWRcbiIsIExWVkVfU3RhdHVzKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0NCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0NCi1TSU5UMzIgVnBfTnhwU2V0UGFyYW1Ub29sKFRfWkRydl9WcFBhdGggcGF0aCwgVF9aRHJ2X1ZwVm9sIHZvbHVtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHpEcnZWcF9OeHBQYXJhbXNUb29sICpOeHBQYXJhbXNUb29sLCAgIEJPT0wgaXNMb29wLCBCT09MIGlzVm9sdGUpDQotew0KLQlMVlZFX1JldHVyblN0YXR1c19lbiAgICAgICAgTFZWRV9TdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2R1bGUgc3RhdHVzIHJldHVybiAqLw0KLQkvL0xWTV9VSU5UMzIgIHJldDsvL3hpdSBnYWkgY2h1DQotCUxWTV9VSU5UMTYgICAgICAgICAgICAgICAgICBWb2x1bWVJbmRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZvbHVtZSBpbmRleCB2YXJpYWJsZSAqLw0KLQlVSU5UMzIgbnZBZGRyVHhPZmZzZXQgPSAwOw0KLQlVSU5UMzIgbnZBZGRyUnhPZmZzZXQgPSAwOw0KLQ0KLQlVSU5UMzIgcGF0aFR4T2Zmc2V0LCBwYXRoUnhPZmZzZXQ7DQotDQotCVVJTlQzMiAgcmV0ID0gRFJWX1NVQ0NFU1M7DQotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotCS8qIFNldCB0aGUgVm9pY2UgRW5naW5lIFBhcmFtZXRlciB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotCVZvbHVtZUluZGV4ID0gdm9sdW1lOyAvKiBNYXggUnggdm9sdW1lICovDQotCWlmIChnX254cElzT3BlbiA9PSBGQUxTRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtVG9vbCxueHAgaGFzIG5vdCBiZWVuIG9wZW5lZCB5ZXQhXG4iKTsNCi0JCXJldHVybiBEUlZfRVJSX05PVF9PUEVORUQ7DQotCX0NCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIiMjIyMjI3NldCBOWFAgcGFyYW1ldGVyIHN0YXJ0IyMjIyMjIyIpOw0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwU2V0UGFyYW1Ub29sIHBhdGggPSAlZCwgdm9sdW1lID0gJWRcbiIsIHBhdGgsIHZvbHVtZSk7DQotCWlmICgoTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoVHggPiBMVldNX1RYX0ZJTEVfU0laRSkgfHwgKE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4ID4gTFZXTV9SWF9GSUxFX1NJWkUpKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVGhlIGxlbmd0aCBpcyB3cm9uZyFQcmVzZXRMZW5ndGhSeD0lZCxQcmVzZXRMZW5ndGhUeD0lZCIsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4LCBOeHBQYXJhbXNUb29sLT5QcmVzZXRMZW5ndGhUeCk7DQotCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQl9DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJQcmVzZXRMZW5ndGhSeD0lZCBOdW1CeXRlc1JlYWRSeD0gJWQgdm9sdW1lPSAlZCIsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4LCBOdW1CeXRlc1JlYWRSeCwgdm9sdW1lKTsNCi0NCi0JTFZWRV9TdGF0dXMgPSBMVlZFX1J4X1NldFByZXNldChoSW5zdGFuY2VfUngsIChjb25zdCBMVlZFX1J4X1ByZXNldF90KU54cFBhcmFtc1Rvb2wtPnBQcmVzZXRSeCwgTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoUngsIFZvbHVtZUluZGV4KTsNCi0NCi0JaWYgKExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIkVycm9yIHJldHVybmVkIGJ5IExWVkVfUnhfU2V0UHJlc2V0OiBFcnJvcl9jb2RlID0gJWRcbiIsIExWVkVfU3RhdHVzKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlByZXNldExlbmd0aFR4PSVkIE51bUJ5dGVzUmVhZFR4PSAlZCIsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4LCBOdW1CeXRlc1JlYWRUeCk7DQotCUxWVkVfU3RhdHVzID0gTFZWRV9UeF9TZXRQcmVzZXQoaEluc3RhbmNlX1R4LCAoY29uc3QgTFZWRV9UeF9QcmVzZXRfdClOeHBQYXJhbXNUb29sLT5wUHJlc2V0VHgsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4LCAwKTsNCi0NCi0JaWYgKExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIkVycm9yIHJldHVybmVkIGJ5IExWVkVfVHhfU2V0UHJlc2V0OiBFcnJvcl9jb2RlID0gJWRcbiIsIExWVkVfU3RhdHVzKTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0NCi0JaWYgKGdfYXVkaW9OdlBhcmFtLmF1ZGlvX2N0cmxGbGFnLmlzVnBQYXJhbUluTnYgPT0gMSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtVG9vbCBzZXQgdm9pY2UgIHBhcmFtIGlzVnBQYXJhbUluTnYgXG4iKTsNCi0NCi0JCWlmIChnX3ZvaWNlVmFyLm11dGVFbiA9PSBUUlVFKQ0KLQkJew0KLQkJCWlmIChnX3ZvaWNlVmFyLnZvbHRlSXNXYiA9PSAxKQ0KLQkJCXsNCi0JCQkJek9zc19NZW1jcHkoZ19hdWRpb052UGFyYW0uc19ueHBUeFdiTXV0ZVBhcmFtLCBOeHBQYXJhbXNUb29sLT5wUHJlc2V0VHgsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4KTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJek9zc19NZW1jcHkoZ19hdWRpb052UGFyYW0uc19ueHBUeE5iTXV0ZVBhcmFtLCBOeHBQYXJhbXNUb29sLT5wUHJlc2V0VHgsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4KTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJcGF0aFR4T2Zmc2V0ID0gcGF0aCAqIChMVldNX1RYX0ZJTEVfU0laRSArIExWV01fUlhfRklMRV9TSVpFKTsNCi0JCQlwYXRoUnhPZmZzZXQgPSBwYXRoICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotDQotCQkJek9zc19NZW1jcHkoZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW0gKyBwYXRoVHhPZmZzZXQsIE54cFBhcmFtc1Rvb2wtPnBQcmVzZXRUeCwgTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoVHgpOw0KLQkJCXpPc3NfTWVtY3B5KGdfYXVkaW9OdlBhcmFtLnNfbnhwUGF0aFBhcmFtICsgcGF0aFJ4T2Zmc2V0LCBOeHBQYXJhbXNUb29sLT5wUHJlc2V0UngsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4KTsNCi0JCX0NCi0NCi0JCWlmIChnX2F1ZGlvTnZQYXJhbS5hdWRpb19jdHJsRmxhZy5pc1VzZU52V3JpdGUgPT0gMSkNCi0JCXsNCi0JCQlpZiAoZ192b2ljZVZhci52b2ljZU1vZGUgPT0gVk9JQ0VfR1NNX01PREUpDQotCQkJew0KLQkJCQlpZiAocGF0aCA9PSBWUF9QQVRIX0hBTkRTRVQpDQotCQkJCXsNCi0JCQkJCW52QWRkclR4T2Zmc2V0ID0gMDsNCi0JCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0NCi0NCi0JCQkJfQ0KLQkJCQllbHNlIGlmIChwYXRoID09IFZQX1BBVEhfU1BFQUtFUikNCi0JCQkJew0KLQkJCQkJbnZBZGRyVHhPZmZzZXQgPSBMVldNX1RYX0ZJTEVfU0laRSArIExWV01fUlhfRklMRV9TSVpFOw0KLQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQl9DQotCQkJCWVsc2UgaWYgKHBhdGggPT0gVlBfUEFUSF9IRUFEU0VUKQ0KLQkJCQl7DQotCQkJCQludkFkZHJUeE9mZnNldCA9IDIgKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQkJCQludkFkZHJSeE9mZnNldCA9IG52QWRkclR4T2Zmc2V0ICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotDQotCQkJCX0NCi0JCQkJZWxzZSBpZiAocGF0aCA9PSBWUF9QQVRIX0JMVUVUT09USCkNCi0JCQkJew0KLQ0KLQkJCQkJbnZBZGRyVHhPZmZzZXQgPSAzICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQl9DQotDQotCQkJfQ0KLQkJCWVsc2UgaWYgKChnX3ZvaWNlVmFyLnZvaWNlTW9kZSA9PSBWT0lDRV9XQ0RNQV9NT0RFKSB8fCAoZ192b2ljZVZhci52b2ljZU1vZGUgPT0gVk9JQ0VfVERfTU9ERSkpDQotCQkJew0KLQkJCQlpZiAoZ192b2ljZVZhci52b2x0ZUlzV2IgIT0gMSkNCi0JCQkJew0KLQkJCQkJaWYgKHBhdGggPT0gVlBfUEFUSF9IQU5EU0VUKQ0KLQkJCQkJew0KLQkJCQkJCW52QWRkclR4T2Zmc2V0ID0gNCAqIChMVldNX1RYX0ZJTEVfU0laRSArIExWV01fUlhfRklMRV9TSVpFKTsNCi0JCQkJCQludkFkZHJSeE9mZnNldCA9IG52QWRkclR4T2Zmc2V0ICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotCQkJCQl9DQotCQkJCQllbHNlIGlmIChwYXRoID09IFZQX1BBVEhfU1BFQUtFUikNCi0JCQkJCXsNCi0JCQkJCQludkFkZHJUeE9mZnNldCA9IDUgKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZSBpZiAocGF0aCA9PSBWUF9QQVRIX0hFQURTRVQpDQotCQkJCQl7DQotCQkJCQkJbnZBZGRyVHhPZmZzZXQgPSA2ICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQkJCX0NCi0JCQkJCWVsc2UgaWYgKHBhdGggPT0gVlBfUEFUSF9CTFVFVE9PVEgpDQotCQkJCQl7DQotCQkJCQkJbnZBZGRyVHhPZmZzZXQgPSA3ICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCWlmIChwYXRoID09IFZQX1BBVEhfSEFORFNFVCkNCi0JCQkJCXsNCi0JCQkJCQludkFkZHJUeE9mZnNldCA9IDggKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZSBpZiAocGF0aCA9PSBWUF9QQVRIX1NQRUFLRVIpDQotCQkJCQl7DQotCQkJCQkJbnZBZGRyVHhPZmZzZXQgPSA5ICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQkJCX0NCi0JCQkJCWVsc2UgaWYgKHBhdGggPT0gVlBfUEFUSF9IRUFEU0VUKQ0KLQkJCQkJew0KLQkJCQkJCW52QWRkclR4T2Zmc2V0ID0gMTAgKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZSBpZiAocGF0aCA9PSBWUF9QQVRIX0JMVUVUT09USCkNCi0JCQkJCXsNCi0JCQkJCQludkFkZHJUeE9mZnNldCA9IDExICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCQllbHNlIGlmIChnX3ZvaWNlVmFyLnZvaWNlTW9kZSA9PSBWT0lDRV9MVEVfTU9ERSkNCi0JCQl7DQotCQkJCWlmIChnX3ZvaWNlVmFyLnZvbHRlSXNXYiAhPSAxKQ0KLQkJCQl7DQotCQkJCQlpZiAocGF0aCA9PSBWUF9QQVRIX0hBTkRTRVQpDQotCQkJCQl7DQotCQkJCQkJbnZBZGRyVHhPZmZzZXQgPSAxMiAqIChMVldNX1RYX0ZJTEVfU0laRSArIExWV01fUlhfRklMRV9TSVpFKTsNCi0JCQkJCQludkFkZHJSeE9mZnNldCA9IG52QWRkclR4T2Zmc2V0ICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotCQkJCQl9DQotCQkJCQllbHNlIGlmIChwYXRoID09IFZQX1BBVEhfU1BFQUtFUikNCi0JCQkJCXsNCi0JCQkJCQludkFkZHJUeE9mZnNldCA9IDEzICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQkJCX0NCi0JCQkJCWVsc2UgaWYgKHBhdGggPT0gVlBfUEFUSF9IRUFEU0VUKQ0KLQkJCQkJew0KLQkJCQkJCW52QWRkclR4T2Zmc2V0ID0gMTQgKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZSBpZiAocGF0aCA9PSBWUF9QQVRIX0JMVUVUT09USCkNCi0JCQkJCXsNCi0JCQkJCQludkFkZHJUeE9mZnNldCA9IDE1ICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCWlmIChwYXRoID09IFZQX1BBVEhfSEFORFNFVCkNCi0JCQkJCXsNCi0JCQkJCQludkFkZHJUeE9mZnNldCA9IDE2ICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJCW52QWRkclJ4T2Zmc2V0ID0gbnZBZGRyVHhPZmZzZXQgKyBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQkJCX0NCi0JCQkJCWVsc2UgaWYgKHBhdGggPT0gVlBfUEFUSF9TUEVBS0VSKQ0KLQkJCQkJew0KLQkJCQkJCW52QWRkclR4T2Zmc2V0ID0gMTcgKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZSBpZiAocGF0aCA9PSBWUF9QQVRIX0hFQURTRVQpDQotCQkJCQl7DQotCQkJCQkJbnZBZGRyVHhPZmZzZXQgPSAxOCAqIChMVldNX1RYX0ZJTEVfU0laRSArIExWV01fUlhfRklMRV9TSVpFKTsNCi0JCQkJCQludkFkZHJSeE9mZnNldCA9IG52QWRkclR4T2Zmc2V0ICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotCQkJCQl9DQotCQkJCQllbHNlIGlmIChwYXRoID09IFZQX1BBVEhfQkxVRVRPT1RIKQ0KLQkJCQkJew0KLQkJCQkJCW52QWRkclR4T2Zmc2V0ID0gMTkgKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQkJCQkJbnZBZGRyUnhPZmZzZXQgPSBudkFkZHJUeE9mZnNldCArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCWlmIChnX3ZvaWNlVmFyLm11dGVFbiAhPSBUUlVFKQ0KLQkJCXsNCi0JCQkJcmV0ID0gek9zc19Odkl0ZW1Xcml0ZShPU19GTEFTSF9WT0lDRV9SV19OT05GQUNfQkFTRV9BRERSICsgbnZBZGRyVHhPZmZzZXQsIChVSU5UOCopTnhwUGFyYW1zVG9vbC0+cFByZXNldFR4LCBOeHBQYXJhbXNUb29sLT5QcmVzZXRMZW5ndGhUeCk7DQotCQkJCWlmIChaT1NTX1NVQ0NFU1MgPT0gcmV0KQ0KLQkJCQl7DQotCQkJCQlyZXQgPSBOdnJhbV9GbHVzaCgpOw0KLQkJCQl9DQotCQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBTZXRQYXJhbVRvb2wgc2V0IHR4IGNvbmZpZyB0byBudiAscGF0aD0lZCxhZGQ9MHgleCAhXHJcbiIsIHBhdGgsIE9TX0ZMQVNIX1ZPSUNFX1JXX05PTkZBQ19CQVNFX0FERFIgKyBudkFkZHJUeE9mZnNldCk7DQotCQkJfQ0KLQkJCXJldCA9IHpPc3NfTnZJdGVtV3JpdGUoT1NfRkxBU0hfVk9JQ0VfUldfTk9ORkFDX0JBU0VfQUREUiArIG52QWRkclJ4T2Zmc2V0LCAoVUlOVDgqKU54cFBhcmFtc1Rvb2wtPnBQcmVzZXRSeCwgTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoUngpOw0KLQkJCWlmIChaT1NTX1NVQ0NFU1MgPT0gcmV0KQ0KLQkJCXsNCi0JCQkJcmV0ID0gTnZyYW1fRmx1c2goKTsNCi0JCQl9DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtVG9vbCBzZXQgcnggY29uZmlnIHRvIG52ICxwYXRoPSVkLGFkZD0weCV4ICFcclxuIiwgcGF0aCwgT1NfRkxBU0hfVk9JQ0VfUldfTk9ORkFDX0JBU0VfQUREUiArIG52QWRkclR4T2Zmc2V0KTsNCi0JCQlpZiAoZ192b2ljZVZhci5tdXRlRW4gPT0gVFJVRSkNCi0JCQl7DQotCQkJCWlmIChnX3ZvaWNlVmFyLnZvbHRlSXNXYiAhPSAxKQ0KLQkJCQl7DQotCQkJCQludkFkZHJUeE9mZnNldCA9IDIwICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpOw0KLQkJCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtVG9vbCBzZXQgbmIgbXV0ZSBjb25maWcgdG8gbnYgLHBhdGg9JWQsYWRkPTB4JXggIVxyXG4iLCBwYXRoLCBPU19GTEFTSF9WT0lDRV9SV19OT05GQUNfQkFTRV9BRERSICsgbnZBZGRyVHhPZmZzZXQpOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJbnZBZGRyVHhPZmZzZXQgPSAyMCAqIChMVldNX1RYX0ZJTEVfU0laRSArIExWV01fUlhfRklMRV9TSVpFKSArIExWV01fVFhfRklMRV9TSVpFOw0KLQkJCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldFBhcmFtVG9vbCBzZXQgd2IgbXV0ZSBjb25maWcgdG8gbnYgLHBhdGg9JWQsYWRkPTB4JXggIVxyXG4iLCBwYXRoLCBPU19GTEFTSF9WT0lDRV9SV19OT05GQUNfQkFTRV9BRERSICsgbnZBZGRyVHhPZmZzZXQpOw0KLQkJCQl9DQotCQkJCXJldCA9IHpPc3NfTnZJdGVtV3JpdGUoT1NfRkxBU0hfVk9JQ0VfUldfTk9ORkFDX0JBU0VfQUREUiArIG52QWRkclR4T2Zmc2V0LCAoVUlOVDgqKU54cFBhcmFtc1Rvb2wtPnBQcmVzZXRUeCwgTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoVHgpOw0KLQkJCQlpZiAoWk9TU19TVUNDRVNTID09IHJldCkNCi0JCQkJew0KLQkJCQkJcmV0ID0gTnZyYW1fRmx1c2goKTsNCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCX0NCi0NCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBTZXRQYXJhbVRvb2wgZ2V0IHZvaWNlIG1vZGUgcGFyYW0gXG4iKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBTZXRQYXJhbVRvb2wgc2V0IHZvaWNlICBwYXJhbSBub3QgaXNWcFBhcmFtSW5OdiBcbiIpOw0KLQkJaWYgKE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4IDw9IHNpemVvZihMVlZFX1R4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbCkpDQotCQkJek9zc19NZW1jcHkoTFZWRV9UeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2wsIE54cFBhcmFtc1Rvb2wtPnBQcmVzZXRUeCwgTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoVHgpOw0KLQkJaWYgKE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4IDw9IHNpemVvZihMVlZFX1J4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbCkpDQotCQkJek9zc19NZW1jcHkoTFZWRV9SeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2wsIE54cFBhcmFtc1Rvb2wtPnBQcmVzZXRSeCwgTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoUngpOw0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cHNldFBhcmFtVG9vbCBzZXQgcGFyYW0gdG8gZGVmYXVsdCBwYXJhbSBhcnJheSAhXHJcbiIpOw0KLQl9DQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBTZXRQYXJhbVRvb2wgIFByZXNldExlbmd0aFJ4ID0gJWQgLFByZXNldExlbmd0aFR4PSAlZCFcbiIsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4LCBOeHBQYXJhbXNUb29sLT5QcmVzZXRMZW5ndGhUeCk7DQotDQotCXJldHVybiBEUlZfU1VDQ0VTUzsNCi19DQotDQotU0lOVDMyIFZwX054cEdldFBhcmFtVG9vbChUX1pEcnZfVnBQYXRoIHBhdGgsIFRfWkRydl9WcFZvbCB2b2x1bWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICB6RHJ2VnBfTnhwUGFyYW1zVG9vbCAqTnhwUGFyYW1zVG9vbCwgQk9PTCBpc0xvb3AsIEJPT0wgaXNWb2x0ZSkNCi17DQotCVVJTlQzMiBwYXRoVHhPZmZzZXQsIHBhdGhSeE9mZnNldDsNCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIiMjIyMjI2dldCBOWFAgcGFyYW1ldGVyIHN0YXJ0IyMjIyMjIyIpOw0KLQkvL0xWTV9VSU5UMzIgICAgICAgICAgICAgICAgICBOdW1CeXRlc1JlYWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyBpbiB0aGUgcHJlc2V0IGZpbGUgKi8NCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0JLyogU2V0IHRoZSBWb2ljZSBFbmdpbmUgUGFyYW1ldGVyIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0JaWYgKGdfbnhwSXNPcGVuID09IEZBTFNFKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW1Ub29sLG54cCBoYXMgbm90IGJlZW4gb3BlbmVkIHlldCFcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJfTk9UX09QRU5FRDsNCi0JfQ0KLQ0KLQlpZiAoZ19hdWRpb052UGFyYW0uYXVkaW9fY3RybEZsYWcuaXNWcFBhcmFtSW5OdiA9PSAxKQ0KLQl7DQotDQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW1Ub29sIGdldCBwYXJhIGlzVnBQYXJhbUluTnYgIVxyXG4iKTsNCi0JCXBhdGhUeE9mZnNldCA9IHBhdGggKiAoTFZXTV9UWF9GSUxFX1NJWkUgKyBMVldNX1JYX0ZJTEVfU0laRSk7DQotCQlwYXRoUnhPZmZzZXQgPSBwYXRoICogKExWV01fVFhfRklMRV9TSVpFICsgTFZXTV9SWF9GSUxFX1NJWkUpICsgTFZXTV9UWF9GSUxFX1NJWkU7DQotDQotCQlOeHBQYXJhbXNUb29sLT5wUHJlc2V0VHggPSAoY2hhciopZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW0gKyBwYXRoVHhPZmZzZXQ7DQotCQlOeHBQYXJhbXNUb29sLT5wUHJlc2V0UnggPSAoY2hhciopZ19hdWRpb052UGFyYW0uc19ueHBQYXRoUGFyYW0gKyBwYXRoUnhPZmZzZXQ7DQotDQotCQlOeHBQYXJhbXNUb29sLT5QcmVzZXRMZW5ndGhUeCA9ICBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCU54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4ID0gIExWV01fUlhfRklMRV9TSVpFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cEdldFBhcmFtVG9vbCBnZXQgcGFyYSBub3QgaXNWcFBhcmFtSW5OdiAhXHJcbiIpOw0KLQ0KLQkJTnhwUGFyYW1zVG9vbC0+cFByZXNldFR4ID0gTFZWRV9UeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2w7DQotCQlOeHBQYXJhbXNUb29sLT5wUHJlc2V0UnggPSBMVlZFX1J4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbDsNCi0JCU54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4ID0gc2l6ZW9mKExWVkVfVHhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKTsNCi0JCU54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFJ4ID0gc2l6ZW9mKExWVkVfUnhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sKTsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbVRvb2wgZ2V0IGRlZmF1bHQgcGFyYW0gIVxyXG4iKTsNCi0JfQ0KLQ0KLQlpZiAoZ192b2ljZVZhci5tdXRlRW4gPT0gVFJVRSkNCi0Jew0KLQkJaWYgKGdfYXVkaW9OdlBhcmFtLmF1ZGlvX2N0cmxGbGFnLmlzVnBQYXJhbUluTnYgPT0gMSkNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW1Ub29sIGdldCBtdXRlIGlzVnBQYXJhbUluTnYgIVxyXG4iKTsNCi0JCQlpZiAoZ192b2ljZVZhci52b2x0ZUlzV2IgIT0gMSkNCi0JCQl7DQotCQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbVRvb2wgZ2V0IG5iIG11dGUgY29uZmlnICFcclxuIik7DQotCQkJCU54cFBhcmFtc1Rvb2wtPnBQcmVzZXRUeCA9IChjaGFyKilnX2F1ZGlvTnZQYXJhbS5zX254cFR4TmJNdXRlUGFyYW07IC8veGl1IGdhaSBjaHUNCi0JCQkJTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoVHggPSBMVldNX1RYX0ZJTEVfU0laRTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cEdldFBhcmFtVG9vbCBnZXQgd2IgbXV0ZSBjb25maWcgIVxyXG4iKTsNCi0JCQkJTnhwUGFyYW1zVG9vbC0+cFByZXNldFR4ID0gKGNoYXIqKWdfYXVkaW9OdlBhcmFtLnNfbnhwVHhXYk11dGVQYXJhbTsgLy94aXUgZ2FpIGNodQ0KLQkJCQlOeHBQYXJhbXNUb29sLT5QcmVzZXRMZW5ndGhUeCA9IExWV01fVFhfRklMRV9TSVpFOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW1Ub29sIGdldCBtdXRlIG5vdCBpc1ZwUGFyYW1Jbk52ICFcclxuIik7DQotCQkJaWYgKGdfdm9pY2VWYXIudm9sdGVJc1diICE9IDEpDQotCQkJew0KLQkJCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwR2V0UGFyYW1Ub29sIGdldCBuYiBtdXRlIGNvbmZpZyAhXHJcbiIpOw0KLQkJCQlOeHBQYXJhbXNUb29sLT5wUHJlc2V0VHggPSBMVlZFX1R4X011dGVfRmlsZV9CdWZmZXI7DQotCQkJCU54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4ID0gc2l6ZW9mKExWVkVfVHhfTXV0ZV9GaWxlX0J1ZmZlcik7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbVRvb2wgZ2V0IHdiIG11dGUgY29uZmlnICFcclxuIik7DQotCQkJCU54cFBhcmFtc1Rvb2wtPnBQcmVzZXRUeCA9IExWVkVfVHhfV2JfTXV0ZV9GaWxlX0J1ZmZlcjsNCi0JCQkJTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoVHggPSBzaXplb2YoTFZWRV9UeF9XYl9NdXRlX0ZpbGVfQnVmZmVyKTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cEdldFBhcmFtVG9vbCBQcmVzZXRMZW5ndGhSeD0lZCBQcmVzZXRMZW5ndGhUeD0gJWQgIiwgTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoUngsIE54cFBhcmFtc1Rvb2wtPlByZXNldExlbmd0aFR4KTsNCi0JLyprbG9jd29yayAzICBJTlZBUklBTlRfQ09ORElUSU9OLlVOUkVBQ0ggIGRlbGV0ZSBpZiovDQotCS8qDQotCWlmICgoTnhwUGFyYW1zVG9vbC0+UHJlc2V0TGVuZ3RoUnggPT0gTFZNX05VTEwpIHx8IChOeHBQYXJhbXNUb29sLT5QcmVzZXRMZW5ndGhUeCA9PSBMVk1fTlVMTCkpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJWcF9OeHBHZXRQYXJhbVRvb2wgTlhQIHJlYWQgcGFyYSBpcyBudWxsICFcclxuIik7DQotCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQl9Ki8NCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0jaWYgMA0KLVNJTlQzMiBWcF9OeHBTZXRHYWluKFNJTlQzMiBnYWluLCBVSU5UMzIgY2hhbm5lbCwgVF9aRHJ2X1ZwUGF0aCBwYXRoKQ0KLXsNCi0JLy9MVlZFX1JldHVyblN0YXR1c19lbiAgICAgICAgTFZWRV9TdGF0dXM9TFZWRV9TVUNDRVNTOy8veGl1IGdhaSBjaHUNCi0JLy9MVk1fSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEdhaW49MDsvL3hpdSBnYWkgY2h1DQotCWlmIChnX254cElzT3BlbiA9PSBGQUxTRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFNldEdhaW4sbnhwIGhhcyBub3QgYmVlbiBvcGVuZWQgeWV0IVxuIik7DQotCQlyZXR1cm4gRFJWX0VSUl9OT1RfT1BFTkVEOw0KLQl9DQotDQotCXJldHVybiBEUlZfU1VDQ0VTUzsNCi19DQotI2VuZGlmDQotU0lOVDMyIFZwX054cFJ4UHJvY2VzcyhVSU5UOCAqKnBQUmVhZEJ1ZmZlciwgVUlOVDggKipwUFdyaXRlQnVmZmVyLCBVSU5UMTYgc2FtcGxlTnVtcykNCi17DQotCUxWTV9JTlQxNiAgICpwV3JpdGVCdWZmZXI7DQotCUxWTV9JTlQxNiAgICpwUmVhZEJ1ZmZlcjsNCi0JTFZNX0lOVDE2ICAgKnBSZWFkQnVmZmVyX0ZFOw0KLQlMVlZFX1JldHVyblN0YXR1c19lbiAgICAgICAgTFZWRV9TdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2R1bGUgc3RhdHVzIHJldHVybiAqLw0KLQ0KLQlTSU5UMzIgcmV0ID0gRFJWX1NVQ0NFU1M7DQotCWlmIChnX254cElzT3BlbiA9PSBGQUxTRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFJ4UHJvY2VzcyxueHAgaGFzIG5vdCBiZWVuIG9wZW5lZCB5ZXQhXG4iKTsNCi0JCXJldHVybiBEUlZfRVJSX05PVF9PUEVORUQ7DQotCX0NCi0NCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKiovDQotCS8qIFBST0NFU1MgVEhFIFJYIE1PRFVMRSAqLw0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0JcFJlYWRCdWZmZXIgPSAoTFZNX0lOVDE2ICAqKSgqcFBSZWFkQnVmZmVyKTsNCi0JcFdyaXRlQnVmZmVyID0gKExWTV9JTlQxNiAgKikoKnBQV3JpdGVCdWZmZXIpOw0KLQlwUmVhZEJ1ZmZlcl9GRSAgPSAoTFZNX0lOVDE2ICopJkluQnVmZmVyMTZfVHhfRkVbMF07DQotDQotCUxWVkVfU3RhdHVzID0gTFZWRV9SeF9Qcm9jZXNzKGhJbnN0YW5jZV9SeCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5zdGFuY2UgaGFuZGxlICovDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZWFkQnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGJ1ZmZlciAqLw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9pc2VEYXRhLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb2lzZSBkYXRhICovDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXcml0ZUJ1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgKi8NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTnVtcyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgcGFpcnMgdG8gcHJvY2VzcyAqLw0KLQ0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9OVUxMQUREUkVTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFJ4UHJvY2VzcyBQYXJhbWV0ZXIgZXJyb3IgLSBudWxsIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBMVlZFX1J4X1Byb2Nlc3NcbiIpOw0KLQkJcmV0ID0gRFJWX0VSUk9SOw0KLQl9DQotCWlmIChMVlZFX1N0YXR1cyA9PSBMVlZFX0lOVkFMSUROVU1TQU1QTEVTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwUnhQcm9jZXNzIEludmFsaWQgbnVtYmVyIG9mIHNhbXBsZXMsIGNoZWNrIHZhbHVlIG9yIHJhbmdlIHJldHVybmVkIGZyb20gTFZWRV9SeF9Qcm9jZXNzXG4iKTsNCi0JCXJldCA9IERSVl9FUlJPUjsNCi0JfQ0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9BTElHTk1FTlRFUlJPUikNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFJ4UHJvY2VzcyBBbGlnbm1lbnQgZXJyb3IsIGNoZWNrIGlucHV0IGFuZC9vciBvdXRwdXQgYnVmZmVyIGFsaWdubWVudCByZXR1cm5lZCBmcm9tIExWVkVfUnhfUHJvY2Vzc1xuIik7DQotCQlyZXQgPSBEUlZfRVJST1I7DQotCX0NCi0NCi0JaWYgKExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUykNCi0Jew0KLQkJaWYgKGlzRmlyc3RSeFByb2Nlc3NFcnIgPT0gVFJVRSkNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwUnhQcm9jZXNzIEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgcmV0dXJuZWQgZnJvbSBMVlZFX1J4X1Byb2Nlc3M6ICVkXG4iLCAoTFZNX0lOVDE2KUxWVkVfU3RhdHVzKTsNCi0JCQlpc0ZpcnN0UnhQcm9jZXNzRXJyID0gRkFMU0U7DQotCQl9DQotCQlyZXQgPSBEUlZfRVJST1I7DQotCX0NCi0NCi0Jek9zc19NZW1jcHkoKFZPSUQqKXBSZWFkQnVmZmVyX0ZFLCAoVk9JRCopcFdyaXRlQnVmZmVyLCBzYW1wbGVOdW1zICogc2l6ZW9mKExWTV9JTlQxNikpOw0KLS8vekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFJ4UHJvY2Vzc1xuIik7DQotCXJldCA9IERSVl9TVUNDRVNTOy8veGl1IHdhcmluZzp1bnVzZWQgcmV0DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLVNJTlQzMiBWcF9OeHBUeFByb2Nlc3MoVUlOVDggKipwUFJlYWRCdWZmZXJfTkVfTUFJTiwgVUlOVDggKipwUFJlYWRCdWZmZXJfTkVfQVVYLCBVSU5UOCAqKnBQV3JpdGVCdWZmZXIsIFVJTlQxNiBzYW1wbGVOdW1zKQ0KLXsNCi0JU0lOVDMyIHJldCA9IERSVl9TVUNDRVNTOw0KLQ0KLQlMVk1fSU5UMTYgICAqcFdyaXRlQnVmZmVyOw0KLQlMVlZFX1JldHVyblN0YXR1c19lbiAgICAgICAgTFZWRV9TdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2R1bGUgc3RhdHVzIHJldHVybiAqLw0KLQ0KLQlMVk1fSU5UMTYgICAqcFJlYWRCdWZmZXJfTkUwOw0KLQlMVk1fSU5UMTYgICAqcFJlYWRCdWZmZXJfTkUxOw0KLQlMVk1fSU5UMTYgICAqcFJlYWRCdWZmZXJfRkU7DQotDQotCWlmIChnX254cElzT3BlbiA9PSBGQUxTRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFR4UHJvY2VzcyxueHAgaGFzIG5vdCBiZWVuIG9wZW5lZCB5ZXQhXG4iKTsNCi0JCXJldHVybiBEUlZfRVJSX05PVF9PUEVORUQ7DQotCX0NCi0NCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKiovDQotCS8qIFBST0NFU1MgVEhFIFRYIE1PRFVMRSAqLw0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0JcFJlYWRCdWZmZXJfTkUwID0gKExWTV9JTlQxNiAqKSgqcFBSZWFkQnVmZmVyX05FX01BSU4pOw0KLQlpZiAocFBSZWFkQnVmZmVyX05FX0FVWCA9PSBOVUxMKQ0KLQl7DQotCQlwUmVhZEJ1ZmZlcl9ORTEgPSBOVUxMOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJcFJlYWRCdWZmZXJfTkUxID0gKExWTV9JTlQxNiAqKSgqcFBSZWFkQnVmZmVyX05FX0FVWCk7DQotCX0NCi0JcFdyaXRlQnVmZmVyICAgID0gKExWTV9JTlQxNiAqKSgqcFBXcml0ZUJ1ZmZlcik7DQotCXBSZWFkQnVmZmVyX0ZFICA9IChMVk1fSU5UMTYgKikmSW5CdWZmZXIxNl9UeF9GRVswXTsNCi0NCi0JTFZWRV9TdGF0dXMgPSBMVlZFX1R4X1Byb2Nlc3MoaEluc3RhbmNlX1R4LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnN0YW5jZSBoYW5kbGUgKi8NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJlYWRCdWZmZXJfTkUwLCAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgYnVmZmVyIHByaW1hcnkgTWljICovDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZWFkQnVmZmVyX05FMSwgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGJ1ZmZlciBzZWNvbmRhcnkgTWljICovDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZWFkQnVmZmVyX0ZFLCAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGJ1ZmZlciAqLw0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9pc2VEYXRhLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb2lzZSBkYXRhICovDQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXcml0ZUJ1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgKi8NCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTnVtcyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhbXBsZXMgcGFpcnMgdG8gcHJvY2VzcyAqLw0KLQ0KLQkvKg0KLQkgKiBDaGVjayBmb3IgZXJyb3IgYW5kIHN0b3AgaWYgbmVlZGVkDQotCSAqLw0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9OVUxMQUREUkVTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFR4UHJvY2VzcyBQYXJhbWV0ZXIgZXJyb3IgLSBudWxsIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBMVlZFX1R4X1Byb2Nlc3NcbiIpOw0KLQkJcmV0ID0gRFJWX0VSUk9SOw0KLQl9DQotCWlmIChMVlZFX1N0YXR1cyA9PSBMVlZFX0lOVkFMSUROVU1TQU1QTEVTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwVHhQcm9jZXNzIEludmFsaWQgbnVtYmVyIG9mIHNhbXBsZXMsIGNoZWNrIHZhbHVlIG9yIHJhbmdlIHJldHVybmVkIGZyb20gTFZWRV9UeF9Qcm9jZXNzXG4iKTsNCi0JCXJldCA9IERSVl9FUlJPUjsNCi0JfQ0KLQlpZiAoTFZWRV9TdGF0dXMgPT0gTFZWRV9BTElHTk1FTlRFUlJPUikNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFR4UHJvY2VzcyBBbGlnbm1lbnQgZXJyb3IsIGNoZWNrIGlucHV0IGFuZC9vciBvdXRwdXQgYnVmZmVyIGFsaWdubWVudCByZXR1cm5lZCBmcm9tIExWVkVfVHhfUHJvY2Vzc1xuIik7DQotCQlyZXQgPSBEUlZfRVJST1I7DQotCX0NCi0JaWYgKExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUykNCi0Jew0KLQ0KLQkJaWYgKGlzRmlyc3RUeFByb2Nlc3NFcnIgPT0gVFJVRSkNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiVnBfTnhwVHhQcm9jZXNzIEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgcmV0dXJuZWQgZnJvbSBMVlZFX1R4X1Byb2Nlc3M6ICVkXG4iLCAoTFZNX0lOVDE2KUxWVkVfU3RhdHVzKTsNCi0JCQlpc0ZpcnN0VHhQcm9jZXNzRXJyID0gRkFMU0U7DQotCQl9DQotCQlyZXQgPSBEUlZfRVJST1I7DQotCX0NCi0JcmV0ID0gRFJWX1NVQ0NFU1M7Ly94aXUgd2FybmluZzp1bnVzZWQgcmV0DQotCS8vekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIlZwX054cFR4UHJvY2Vzc1xuIik7DQotCXJldHVybiByZXQ7Ly94aXUNCi19DQotDQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvaGFsX254cC5oIGIvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvaGFsX254cC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5NTQ3ODIzLi4wMDAwMDAwCi0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL2hhbF9ueHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChDKSAyMDA3LCBaVEUgQ29ycG9yYXRpb24uDQotICoNCi0gKiBGaWxlIE5hbWU6ICAgIGhhbF9ueHAuaA0KLSAqIEZpbGUgTWFyazoNCi0gKiBEZXNjcmlwdGlvbjogIFByb3ZpZGUgdGhlIGludGVyZmFjZSBvZiBueHAgcHJvY2Vzc2luZyANCi0gKiBPdGhlcnM6DQotICogVmVyc2lvbjogICAgICAgVjAuNQ0KLSAqIEF1dGhvcjogICAgICAgIGx2d2VuaHVhDQotICogRGF0ZTogICAgICAgICAgMjAxMi0wNi0xMw0KLSAqIEhpc3RvcnkgMToNCi0gKiAgICAgRGF0ZToNCi0gKiAgICAgVmVyc2lvbjoNCi0gKiAgICAgQXV0aG9yOg0KLSAqICAgICBNb2RpZmljYXRpb246DQotICogSGlzdG9yeSAyOg0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotI2lmbmRlZiBfSEFMX05YUF9IDQotI2RlZmluZSBfSEFMX05YUF9IDQotLy8gYWRkZWQgYnkgemhhbmdsaXhpYQ0KLS8vI2luY2x1ZGUgIkxWVkUuaCINCi1leHRlcm4gU0lOVDMyIFZwX054cEluaXROdlBhcmFtKFZPSUQpOw0KLWV4dGVybiBTSU5UMzIgVnBfTnhwT3BlbihVSU5UMzIgZnMpOw0KLWV4dGVybiBTSU5UMzIgVnBfTnhwQ2xvc2UoVk9JRCk7DQotZXh0ZXJuIFNJTlQzMiBWcF9OeHBHZXRQYXJhbShUX1pEcnZWb2ljZV9NT0RFIHZvaWNlTW9kZSwgVF9aRHJ2X1ZwUGF0aCBwYXRoKTsNCi1leHRlcm4gU0lOVDMyIFZwX054cFNldFBhcmFtKFRfWkRydl9WcFBhdGggcGF0aCwgVF9aRHJ2X1ZwVm9sIHZvbHVtZSwgQk9PTCBpc0xvb3ApOw0KLS8vZW5kIGFkZGVkIGJ5IHpoYW5nbGl4aWENCi1leHRlcm4gU0lOVDMyIFZwX054cFNldFBhcmFtVG9vbChUX1pEcnZfVnBQYXRoIHBhdGgsIFRfWkRydl9WcFZvbCB2b2x1bWUsIHpEcnZWcF9OeHBQYXJhbXNUb29sICpOeHBQYXJhbXNUb29sLEJPT0wgaXNMb29wLEJPT0wgaXNWb2x0ZSk7DQotZXh0ZXJuIFNJTlQzMiBWcF9OeHBHZXRQYXJhbVRvb2woVF9aRHJ2X1ZwUGF0aCBwYXRoLCBUX1pEcnZfVnBWb2wgdm9sdW1lLCB6RHJ2VnBfTnhwUGFyYW1zVG9vbCAqTnhwUGFyYW1zVG9vbCxCT09MIGlzTG9vcCxCT09MIGlzVm9sdGUpOw0KLWV4dGVybiBTSU5UMzIgVnBfTnhwUnhQcm9jZXNzKFVJTlQ4ICoqcFBSZWFkQnVmZmVyLCBVSU5UOCAqKnBQV3JpdGVCdWZmZXIsVUlOVDE2IHNhbXBsZU51bXMpOw0KLWV4dGVybiBTSU5UMzIgVnBfTnhwVHhQcm9jZXNzKFVJTlQ4ICoqcFBSZWFkQnVmZmVyX05FX01BSU4sIFVJTlQ4ICoqcFBSZWFkQnVmZmVyX05FX0FVWCwgVUlOVDggKipwUFdyaXRlQnVmZmVyLFVJTlQxNiBzYW1wbGVOdW1zKTsNCi0jZW5kaWYNCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC9tYWtlZmlsZSBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL21ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNGY0ODFlLi4wMDAwMDAwCi0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL21ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotIyCw5sioy/nT0CAoQykyMDAxLNbQ0MvNqNG2ucm33dPQz965q8u+oaMNCi0jIA0KLSMgzsS8/sP7s8ajuiBtYWtlZmlsZQ0KLSMgzsS8/rHqyrajuiCx4NLrbnhwxKO/6Q0KLSMgxNrI3dWq0qqjuiANCi0jDQotIyDQ3rjEyNXG2iAgICAgsOaxvrrFICAgICDQ3rjEseq8xyAgICAg0N64xMjLCSAgICAg0N64xMTayN0gICAgICANCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSMgMjAxNS8wOC8xNwlWMS4wCSAgICAgICAgICAgICAgIHpodW95b25nc2hlbmcgICAgICAgY3JlYXRlDQotIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLWluY2x1ZGUgJChQUkpfUEFUSCkvY29uZmlnL3Byb2plY3QubWsNCi1pbmNsdWRlICQoRFJWX1BBVEgpL3dzL2Rydl9jZmcubWsNCi0NCi0NCi0jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0jIMK3vrbJ6NbDDQotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotX01ETF9OQU1FID0gbnhwDQotDQotX01ETF9TUkNfUEFUSCA9ICQoQ0hJUF9TUkNfUEFUSCkvYXVkaW9fYmFzZS8kKF9NRExfTkFNRSkNCi1fTURMX0lOQ19QQVRIID0gJChDSElQX0lOQ19QQVRIKQ0KLV9NRExfT0JKX1BBVEggPSAkKENISVBfT0JKX1BBVEgpL2F1ZGlvX2Jhc2UvJChfTURMX05BTUUpDQotDQotDQotDQotDQotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotI7j3xKO/6dLAwLW5q7myzbfOxLz+yejWww0KLSM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSBJTkNMVURFICs9ICQoX0VYVEVSTkFMX0lOQ19QQVRIKSAgXA0KLSAgICAgICAgICAgLUkkKENISVBfU1JDX1BBVEgpL2F1ZGlvX2Jhc2UvaW5jbHVkZSBcDQotICAgICAgICAgICAtSSQoX01ETF9JTkNfUEFUSCkgDQotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotI9fTz7XNs8Cp1bm2qNLlDQotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotREVGSU5FICs9IA0KLQ0KLSM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSPEo7/pzsS8/tDFz6IgDQotIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCi1fQ19TT1VSQ0UgPSAkKHdpbGRjYXJkICQoX01ETF9TUkNfUEFUSCkvKi5jKSAgICAgDQotDQotX3NfU09VUkNFID0NCi0gCSANCi1fU19TT1VSQ0UgPQ0KLQ0KLSM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSMgseDS67nm1PINCi0jPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0NCi1pbmNsdWRlICQoRlJBTUVfUEFUSCkvcnVsZXMvbWRsX3J1bGVzLm1rDQotDQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdGVzdG54cF9yeGluMnJ4b3V0LmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90ZXN0bnhwX3J4aW4ycnhvdXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmExMGRiYy4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90ZXN0bnhwX3J4aW4ycnhvdXQuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0jaW5jbHVkZSAiZHJ2c19nZW5lcmFsLmgiDQotI2luY2x1ZGUgImRydnNfdm9pY2Vwcm9jZXNzLmgiDQotI2luY2x1ZGUgImRydnNfcmFtbG9nLmgiDQotI2luY2x1ZGUgImhhbF9ueHAuaCINCi0NCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCi0NCi10eXBlZGVmIHN0cnVjdCB0ZXN0bnhwew0KLQlpbnQgZnM7DQotCWludCB2b2ljZW1vZGU7DQotCWludCB2cF9wYXRoOyANCi0JaW50IHZwX3ZvbDsNCi0JaW50IGZyYW1lY291bnQ7DQotfVRfVGVzdE54cDsNCi0NCi0jZGVmaW5lIFRFU1ROWFBfSU9DVExfUlhJTl9UT19SWE9VVF9TVEFSVAlfSU9XKCdOJywgMSwgVF9UZXN0TnhwKQ0KLSNkZWZpbmUgVEVTVE5YUF9JT0NUTF9SWElOX1RPX1JYT1VUX1NUT1AJX0lPKCdOJywgMikNCi0NCi0jZGVmaW5lIE1BWF9OWFBfQlVGCTY0MA0KLQ0KLQ0KLXN0YXRpYyBjb25zdCBjaGFyIHRlc3RueHBfc2hvcnRuYW1lW10gPSAidGVzdG54cF9kZXYiOw0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpyeGluX2J1ZiA9IE5VTEw7DQotc3RhdGljIHVuc2lnbmVkIGNoYXIgKnJ4b3V0X2J1ZiA9IE5VTEw7DQotc3RhdGljIGludCBmcmFtZWNvdW50Ow0KLXN0YXRpYyBpbnQgdGVzdG54cF9vcGVuKHN0cnVjdCBpbm9kZSAqIGlwLHN0cnVjdCBmaWxlICogZnApOw0KLXN0YXRpYyBpbnQgdGVzdG54cF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCk7DQotc3RhdGljIHNzaXplX3QgdGVzdG54cF9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZixzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKTsNCi1zdGF0aWMgc3NpemVfdCB0ZXN0bnhwX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKTsNCi1zdGF0aWMgbG9uZyB0ZXN0bnhwX2lvY3RsKHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOw0KLQotCi0KLQotLyogZmlsZSBvcGVyYXRpb25zIGZvciB0ZXN0bnhwIGRldmljZSAvZGV2L3Rlc3RueHBfZGV2aWNlICovDQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGVzdG54cF9mb3BzID0gew0KLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucmVhZCA9IHRlc3RueHBfcmVhZCwNCi0JLndyaXRlID0gdGVzdG54cF93cml0ZSwNCi0JLnVubG9ja2VkX2lvY3RsID0gdGVzdG54cF9pb2N0bCwNCi0JLm9wZW4gPSB0ZXN0bnhwX29wZW4sDQotCS5yZWxlYXNlID0gdGVzdG54cF9yZWxlYXNlLA0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0ZXN0bnhwX2RldmljZSA9IHsNCi0JLm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLAotCS5uYW1lID0gdGVzdG54cF9zaG9ydG5hbWUsDQotCS5mb3BzID0gJnRlc3RueHBfZm9wcywNCi19OwotCi0KLQotc3RhdGljIHNzaXplX3QgdGVzdG54cF9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZixzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQ0KLXsKLQ0KLQlpZihidWYgPT0gTlVMTCkNCi0JewotCQlwcl9pbmZvKCJ0ZXN0bnhwX3JlYWQgYnVmZmVyIG51bGwgXG4iKTsNCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoY291bnQ+MCkgJiYoY291bnQ8PU1BWF9OWFBfQlVGKSkgew0KLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJ4b3V0X2J1ZiwgY291bnQpKSB7DQotCQkJcHJfaW5mbygidGVzdG54cF9yZWFkIGNvcHlfdG9fdXNlciBlcnJvciBcbiIpOw0KLQkJCXJldHVybiAtRUZBVUxUOwotCQl9DQotCX1lbHNlewotCQlwcl9pbmZvKCJ0ZXN0bnhwX3JlYWQgY291bnQgZXJyb3IgXG4iKTsNCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gY291bnQ7DQotfQotCi1zdGF0aWMgc3NpemVfdCB0ZXN0bnhwX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQ0KLXsKLQlpbnQgcmV0OwotCi0JaWYoYnVmID09IE5VTEwpDQotCXsKLQkJcHJfaW5mbygidGVzdG54cF93cml0ZSBidWZmZXIgbnVsbCBcbiIpOw0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKChjb3VudCA+IDApICYmIChjb3VudCA8PSBNQVhfTlhQX0JVRikpIHsNCi0JCWlmIChjb3B5X2Zyb21fdXNlcihyeGluX2J1ZiwgYnVmLCBjb3VudCkpIHsNCi0JCQlwcl9pbmZvKCJ0ZXN0bnhwX3dyaXRlIGNvcHlfZnJvbV91c2VyIGVycm9yIFxuIik7DQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0NCi0JCQ0KLQkJVnBfTnhwUnhQcm9jZXNzKCZyeGluX2J1ZiwgJnJ4b3V0X2J1ZiwgY291bnQvMik7DQotCQkNCi0JfWVsc2V7Ci0JCXByX2luZm8oInRlc3RueHBfd3JpdGUgY291bnQgZXJyb3IgXG4iKTsNCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotCi1zdGF0aWMgbG9uZyB0ZXN0bnhwX2lvY3RsKHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpDQotewotICAgIFRfVGVzdE54cCAqcGFyYW0gPSAoVF9UZXN0TnhwICopYXJnOw0KLQlUX1Rlc3ROeHAgdGVzdG54cF9wYXJhbSA9IHswfTsNCi0JaW50IHJldCA9IDA7DQotCXByaW50aygidGVzdG54cF9pb2N0bFxuIik7DQotDQotCXN3aXRjaChjbWQpDQotCXsKLQkJY2FzZSBURVNUTlhQX0lPQ1RMX1JYSU5fVE9fUlhPVVRfU1RBUlQ6DQotCQl7DQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkKikmdGVzdG54cF9wYXJhbSwgKHZvaWQqKXBhcmFtLCBzaXplb2Yoc3RydWN0IHRlc3RueHApKSkNCi0JCQl7DQotCQkJCXJldHVybiBEUlZfRVJSX0lOVkFMSURfUEFSQU07DQotCQkJfQ0KLQkJCWZyYW1lY291bnQgPSB0ZXN0bnhwX3BhcmFtLmZyYW1lY291bnQ7DQotCQkJcmV0ID0gVnBfTnhwT3Blbih0ZXN0bnhwX3BhcmFtLmZzKTsJDQotCQkJaWYgKHJldCA9PSAwKSANCi0JCQl7DQotCQkJCXJldCA9IFZwX054cEdldFBhcmFtKHRlc3RueHBfcGFyYW0udm9pY2Vtb2RlLCB0ZXN0bnhwX3BhcmFtLnZwX3BhdGgpOw0KLQkJCQlpZiAocmV0ID09IDApDQotCQkJCXsNCi0JCQkJCXJldCA9IFZwX054cFNldFBhcmFtKHRlc3RueHBfcGFyYW0udnBfcGF0aCwgdGVzdG54cF9wYXJhbS52cF92b2wsIEZBTFNFKTsNCi0JCQkJCWlmIChyZXQgIT0gMCApDQotCQkJCQkJVnBfTnhwQ2xvc2UoKTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCVZwX054cENsb3NlKCk7DQotCQkJCX0NCi0JCQl9DQotCQkJYnJlYWs7DQotCQl9DQotCQljYXNlIFRFU1ROWFBfSU9DVExfUlhJTl9UT19SWE9VVF9TVE9QOg0KLQkJew0KLQkJCVZwX054cENsb3NlKCk7DQotCQl9DQotCQlkZWZhdWx0OgotCQl7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmV0Ow0KLX0KLQotCi0KLXN0YXRpYyBpbnQgdGVzdG54cF9vcGVuKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCkNCi17Ci0JcHJpbnRrKCJ0ZXN0bnhwX29wZW5cbiIpOw0KLQ0KLQlpZihyeGluX2J1ZiA9PSBOVUxMKQ0KLQl7DQotCQlyeGluX2J1ZiA9IGt6YWxsb2MoMiAqIE1BWF9OWFBfQlVGLCBHRlBfS0VSTkVMKTsNCi0JCWlmICghcnhpbl9idWYpDQotCQl7DQotCQkgICAgcHJfaW5mbygidGVzdG54cF9pbml0IG1hbGxvYyBlcnJvclxuIik7DQotCQkJcmV0dXJuIC1FTk9NRU07DQotCQl9DQotCQkNCi0JCXJ4b3V0X2J1ZiA9IHJ4aW5fYnVmICsgTUFYX05YUF9CVUY7DQotCX0NCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZXN0bnhwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZwKQ0KLXsKLQlwcmludGsoInRlc3RueHBfcmVsZWFzZVxuIik7DQotDQotCWlmKHJ4aW5fYnVmKQ0KLQl7Ci0JCWtmcmVlKHJ4aW5fYnVmKTsNCi0JCXJ4aW5fYnVmID0gTlVMTDsNCi0JfQotDQotCXJldHVybiAwOwotfQotCi0KLS8vIGludCBfX2luaXQgdGVzdG54cF9pbml0KHZvaWQpDQotaW50ICB0ZXN0bnhwX2luaXQodm9pZCkNCi17Ci0JaW50IHJldDsKLQlwcmludGsoInRlc3RueHAgZHJpdmVyIGluaXRpYWxpemVcbiIpOw0KLQ0KLQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ0ZXN0bnhwX2RldmljZSk7DQotCWlmIChyZXQpewotCSAgICBwcmludGsoS0VSTl9FUlIgInRlc3RueHAgZHJpdmVyIGZhaWxlZCB0byBpbml0aWFsaXplXG4iKTsNCi0JCXJldHVybiAtRUZBVUxUOwotCX0KLQ0KLSAgICByZXR1cm4gMDsKLX0KLQotCi0gdm9pZCBfX2V4aXQgdGVzdG54cF9leGl0KHZvaWQpDQotewotCW1pc2NfZGVyZWdpc3RlcigmdGVzdG54cF9kZXZpY2UpOw0KLX0KLQotLy9sYXRlX2luaXRjYWxsKHRlc3RueHBfaW5pdCk7DQotLy9tb2R1bGVfZXhpdCh0ZXN0bnhwX2V4aXQpOw0KLQ0KZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3Rvcy9MVkNfVHlwZXMuaCBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3Rvcy9MVkNfVHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMTRlZmU4Yy4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90b3MvTFZDX1R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTQgTlhQIFNvZnR3YXJlLiBBbGwgcmlnaHRzIGFyZSByZXNlcnZlZC4gICAgICAqLw0KLS8qICBSZXByb2R1Y3Rpb24gaW4gd2hvbGUgb3IgaW4gcGFydCBpcyBwcm9oaWJpdGVkIHdpdGhvdXQgdGhlIHByaW9yICAgICovDQotLyogIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgY29weXJpZ2h0IG93bmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBUaGlzIHNvZnR3YXJlIGFuZCBhbnkgY29tcGlsYXRpb24gb3IgZGVyaXZhdGl2ZSB0aGVyZW9mIGlzIGFuZCAgICAgICovDQotLyogIHNoYWxsIHJlbWFpbiB0aGUgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gb2YgTlhQIFNvZnR3YXJlIGFuZCBpcyAgICAgKi8NCi0vKiAgaGlnaGx5IGNvbmZpZGVudGlhbCBpbiBuYXR1cmUuIEFueSBhbmQgYWxsIHVzZSBoZXJlb2YgaXMgcmVzdHJpY3RlZCAqLw0KLS8qICBhbmQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGluIHRoZSAgICAgICAgICovDQotLyogIHNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IGNvbmNsdWRlZCB3aXRoIE5YUCBTb2Z0d2FyZS4gICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGlzIHRoaXMgc29mdHdhcmUgb3IgYW55IGRlcml2YXRpdmUgdGhlcmVvZiAgICovDQotLyogIHRvIGJlIGNvbWJpbmVkIHdpdGggYW55IE9wZW4gU291cmNlIFNvZnR3YXJlIGluIGFueSB3YXkgb3IgICAgICAgICAgKi8NCi0vKiAgbGljZW5zZWQgdW5kZXIgYW55IE9wZW4gTGljZW5zZSBUZXJtcyB3aXRob3V0IHRoZSBleHByZXNzIHByaW9yICAgICAqLw0KLS8qICB3cml0dGVuICBwZXJtaXNzaW9uIG9mIE5YUCBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhdXNlLCB0aGUgdGVybSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBtZWFucyAqLw0KLS8qICBhbnkgc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBPcGVuIExpY2Vuc2UgVGVybXMuIE9wZW4gICAgICAgICovDQotLyogIExpY2Vuc2UgVGVybXMgbWVhbnMgdGVybXMgaW4gYW55IGxpY2Vuc2UgdGhhdCByZXF1aXJlIGFzIGEgICAgICAgICAgKi8NCi0vKiAgY29uZGl0aW9uIG9mIHVzZSwgbW9kaWZpY2F0aW9uIGFuZC9vciBkaXN0cmlidXRpb24gb2YgYSB3b3JrICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDEuIHRoZSBtYWtpbmcgYXZhaWxhYmxlIG9mIHNvdXJjZSBjb2RlIG9yIG90aGVyIG1hdGVyaWFscyAgKi8NCi0vKiAgICAgICAgICAgICAgcHJlZmVycmVkIGZvciBtb2RpZmljYXRpb24sIG9yICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDIuIHRoZSBncmFudGluZyBvZiBwZXJtaXNzaW9uIGZvciBjcmVhdGluZyBkZXJpdmF0aXZlICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgd29ya3MsIG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDMuIHRoZSByZXByb2R1Y3Rpb24gb2YgY2VydGFpbiBub3RpY2VzIG9yIGxpY2Vuc2UgdGVybXMgICAgKi8NCi0vKiAgICAgICAgICAgICAgaW4gZGVyaXZhdGl2ZSB3b3JrcyBvciBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiwgb3IgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDQuIHRoZSBncmFudGluZyBvZiBhIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGFueSBwYXJ0eSAgICAgKi8NCi0vKiAgICAgICAgICAgICAgdW5kZXIgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHJlZ2FyZGluZyB0aGUgd29yayBhbmQvb3IgYW55IHdvcmsgdGhhdCBjb250YWlucywgaXMgY29tYmluZWQgd2l0aCwgKi8NCi0vKiAgcmVxdWlyZXMgb3Igb3RoZXJ3aXNlIGlzIGJhc2VkIG9uIHRoZSB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgZm9yIGVhc2Ugb2YgcmVjb21waWxhdGlvbiBvbmx5LiAgICAgICAgICAgKi8NCi0vKiAgTW9kaWZpY2F0aW9uIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIG9mIHRoaXMgc29mdHdhcmUgYXJlIHN0cmljdGx5ICAqLw0KLS8qICBwcm9oaWJpdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotDQotICAgICAkQXV0aG9yOiBiZXEwNzcyMCAkDQotICAgICAkUmV2aXNpb246IDU1MzU3ICQNCi0gICAgICREYXRlOiAyMDE0LTAzLTA1IDIyOjE2OjEzICswNTMwIChXZWQsIDA1IE1hciAyMDE0KSAkDQotDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqIEBmaWxlDQotICogIEhlYWRlciBmaWxlIGRlZmluaW5nIHRoZSBzdGFuZGFyZCBMaWZlVmliZXMgdHlwZXMgZm9yIHVzZSBpbiB0aGUgYXBwbGljYXRpb24gbGF5ZXINCi0gKiAgaW50ZXJmYWNlIG9mIGFsbCBMaWZlVmliZXMgbW9kdWxlcw0KLSAqLw0KLQ0KLSNpZm5kZWYgTFZNX1RZUEVTX0gNCi0jZGVmaW5lIExWTV9UWVBFU19IDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2RlZmluZSBMVk1fTlVMTCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgIC8vLzwgTlVMTCBwb2ludGVyDQotDQotI2RlZmluZSBMVk1fVFJVRSAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIC8vLzwgQm9vbGVhbiBUcnVlDQotI2RlZmluZSBMVk1fRkFMU0UgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgIC8vLzwgQm9vbGVhbiBGYWxzZQ0KLQ0KLSNkZWZpbmUgTFZNX01BWElOVF84ICAgICAgICAgICAgMTI3ICAgICAgICAgICAgICAgICAvLy88IE1heGltdW0gcG9zaXRpdmUgaW50ZWdlciBzaXplDQotI2RlZmluZSBMVk1fTUFYSU5UXzE2ICAgICAgICAgICAzMjc2NyAgICAgICAgICAgICAgIC8vLzwgTWF4aW11bSBzaWduZWQgaW50IDE2IGJpdHMgbnVtYmVyDQotI2RlZmluZSBMVk1fTUFYSU5UXzMyICAgICAgICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgIC8vLzwgTWF4aW11bSBzaWduZWQgaW50IDMyIGJpdHMgbnVtYmVyDQotI2RlZmluZSBMVk1fTUFYVUlOVF8zMiAgICAgICAgICA0Mjk0OTY3Mjk1VSAgICAgICAgIC8vLzwgTWF4aW11bSB1bi1zaWduZWQgaW50IDMyIGJpdHMgbnVtYmVyDQotDQotI2lmICggIGRlZmluZWQoVkFSSUFOVF8yNEJJVCkgKQ0KLSNkZWZpbmUgTFZNX01BWEVOVU0gICAgICAgICAgICAgODM4ODYwN0wgICAgICAgICAgICAvLy88IE1heGltdW0gdmFsdWUgZm9yIGVudW1lcmF0b3INCi0jZWxzZQ0KLSNkZWZpbmUgTFZNX01BWEVOVU0gICAgICAgICAgICAgMjE0NzQ4MzY0NyAgICAgICAgICAvLy88IE1heGltdW0gdmFsdWUgZm9yIGVudW1lcmF0b3INCi0jZW5kaWYNCi0NCi0jZGVmaW5lIExWTV9NT0RVTEVJRF9NQVNLICAgICAgIDB4RkYwMCAgICAgICAgICAgICAgLy8vPCBNYXNrIHRvIGV4dHJhY3QgdGhlIGNhbGxpbmcgbW9kdWxlIElEIGZyb20gY2FsbGJhY2tJZA0KLSNkZWZpbmUgTFZNX0VWRU5USURfTUFTSyAgICAgICAgMHgwMEZGICAgICAgICAgICAgICAvLy88IE1hc2sgdG8gZXh0cmFjdCB0aGUgY2FsbGJhY2sgZXZlbnQgZnJvbSBjYWxsYmFja0lkDQotDQotLyogTWVtb3J5IHRhYmxlKi8NCi0jZGVmaW5lIExWTV9NRU1SRUdJT05fUEVSU0lTVEVOVF9TTE9XX0RBVEEgICAgICAwICAgLy8vPCBPZmZzZXQgdG8gdGhlIGluc3RhbmNlIG1lbW9yeSByZWdpb24NCi0jZGVmaW5lIExWTV9NRU1SRUdJT05fUEVSU0lTVEVOVF9GQVNUX0RBVEEgICAgICAxICAgLy8vPCBPZmZzZXQgdG8gdGhlIHBlcnNpc3RlbnQgZGF0YSBtZW1vcnkgcmVnaW9uDQotI2RlZmluZSBMVk1fTUVNUkVHSU9OX1BFUlNJU1RFTlRfRkFTVF9DT0VGICAgICAgMiAgIC8vLzwgT2Zmc2V0IHRvIHRoZSBwZXJzaXN0ZW50IGNvZWZmaWNpZW50IG1lbW9yeSByZWdpb24NCi0jZGVmaW5lIExWTV9NRU1SRUdJT05fVEVNUE9SQVJZX0ZBU1QgICAgICAgICAgICAzICAgLy8vPCBPZmZzZXQgdG8gdGVtcG9yYXJ5IG1lbW9yeSByZWdpb24NCi0NCi0jZGVmaW5lIExWTV9OUl9NRU1PUllfUkVHSU9OUyAgICAgICAgICAgICAgICAgICA0ICAgLy8vPCBOdW1iZXIgb2YgbWVtb3J5IHJlZ2lvbnMNCi0NCi0jZGVmaW5lIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWTV9Nb2RlX2VuIGluIExWV2lyZUZvcm1hdA0KLSNkZWZpbmUgTFZNX0NPTkZJR19MVldJUkVGT1JNQVRfTEVOR1RIICg0KSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVk1fQ29uZmlnX2VuIGluIExWV2lyZUZvcm1hdA0KLSNkZWZpbmUgTFZNX0ZTX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWTV9Gc19lbiBzYW1wbGUgUmF0ZSBpbiBMVldpcmVGb3JtYXQNCi0NCi0jZGVmaW5lIExWTV9DSEFSX0xWV0lSRUZPUk1BVF9MRU5HVEggICAoMSkNCi0jZGVmaW5lIExWTV9JTlQ4X0xWV0lSRUZPUk1BVF9MRU5HVEggICAoMSkNCi0jZGVmaW5lIExWTV9VSU5UOF9MVldJUkVGT1JNQVRfTEVOR1RIICAgKDEpDQotDQotI2RlZmluZSBMVk1fSU5UMTZfTFZXSVJFRk9STUFUX0xFTkdUSCAgICgyKQ0KLSNkZWZpbmUgTFZNX1VJTlQxNl9MVldJUkVGT1JNQVRfTEVOR1RIICAgKDIpDQotDQotI2RlZmluZSBMVk1fSU5UMzJfTFZXSVJFRk9STUFUX0xFTkdUSCAgICg0KQ0KLSNkZWZpbmUgTFZNX1VJTlQzMl9MVldJUkVGT1JNQVRfTEVOR1RIICAgKDQpDQotDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIEJhc2ljIHR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmIGRlZmluZWQoQ09SRV9USUM2NCkNCi10eXBlZGVmICAgICBjaGFyICAgICAgICAgICAgICAgIExWTV9DSEFSOyAgICAgICAgICAgLy8vPCBBU0NJSSBjaGFyYWN0ZXINCi0NCi10eXBlZGVmICAgICBjaGFyICAgICAgICAgICAgICAgIExWTV9JTlQ4OyAgICAgICAgICAgLy8vPCBTaWduZWQgOC1iaXQgd29yZA0KLXR5cGVkZWYgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgTFZNX1VJTlQ4OyAgICAgICAgICAvLy88IFVuc2lnbmVkIDgtYml0IHdvcmQNCi0NCi10eXBlZGVmICAgICBzaG9ydCAgICAgICAgICAgICAgIExWTV9JTlQxNjsgICAgICAgICAgLy8vPCBTaWduZWQgMTYtYml0IHdvcmQNCi10eXBlZGVmICAgICB1bnNpZ25lZCBzaG9ydCAgICAgIExWTV9VSU5UMTY7ICAgICAgICAgLy8vPCBVbnNpZ25lZCAxNi1iaXQgd29yZA0KLQ0KLXR5cGVkZWYgICAgIGludCAgICAgICAgICAgICAgICAgTFZNX0lOVDMyOyAgICAgICAgICAvLy88IFNpZ25lZCAzMi1iaXQgd29yZA0KLXR5cGVkZWYgICAgIHVuc2lnbmVkIGludCAgICAgICAgTFZNX1VJTlQzMjsgICAgICAgICAvLy88IFVuc2lnbmVkIDMyLWJpdCB3b3JkDQotI2Vsc2UNCi0NCi0jaWYgKCAgZGVmaW5lZChWQVJJQU5UX0ZSQUMxNikgfHwgZGVmaW5lZCAoVkFSSUFOVF9SRUZSRUFMMTYpICAgKQ0KLXR5cGVkZWYgICAgIGxvbmcgICAgICAgICAgICAgICAgREFUQVRZUEU7ICAgICAgICAgICAvLy88IGxvbmcgZGF0YSB0eXBlDQotDQotdHlwZWRlZiAgICAgY2hhciAgICAgICAgICAgICAgICBMVk1fQ0hBUjsgICAgICAgICAgIC8vLzwgQVNDSUkgY2hhcmFjdGVyDQotDQotdHlwZWRlZiAgICAgY2hhciAgICAgICAgICAgICAgICBMVk1fSU5UODsgICAgICAgICAgIC8vLzwgU2lnbmVkIDgtYml0IHdvcmQNCi10eXBlZGVmICAgICB1bnNpZ25lZCBjaGFyICAgICAgIExWTV9VSU5UODsgICAgICAgICAgLy8vPCBVbnNpZ25lZCA4LWJpdCB3b3JkDQotDQotdHlwZWRlZiAgICAgbG9uZyAgICAgICAgICAgICAgICBMVk1fSU5UMTY7ICAgICAgICAgIC8vLzwgU2lnbmVkIDE2LWJpdCB3b3JkDQotdHlwZWRlZiAgICAgbG9uZyAgICAgICAgICAgICAgICBMVk1fVUlOVDE2OyAgICAgICAgIC8vLzwgVW5zaWduZWQgMTYtYml0IHdvcmQNCi0NCi10eXBlZGVmICAgICBsb25nICAgICAgICAgICAgICAgIExWTV9JTlQzMjsgICAgICAgICAgLy8vPCBTaWduZWQgMzItYml0IHdvcmQNCi10eXBlZGVmICAgICBsb25nICAgICAgICAgICAgICAgIExWTV9VSU5UMzI7ICAgICAgICAgLy8vPCBVbnNpZ25lZCAzMi1iaXQgd29yZA0KLQ0KLSNlbHNlDQotdHlwZWRlZiAgICAgY2hhciAgICAgICAgICAgICAgICBMVk1fQ0hBUjsgICAgICAgICAgIC8vLzwgQVNDSUkgY2hhcmFjdGVyDQotDQotdHlwZWRlZiAgICAgY2hhciAgICAgICAgICAgICAgICBMVk1fSU5UODsgICAgICAgICAgIC8vLzwgU2lnbmVkIDgtYml0IHdvcmQNCi10eXBlZGVmICAgICB1bnNpZ25lZCBjaGFyICAgICAgIExWTV9VSU5UODsgICAgICAgICAgLy8vPCBVbnNpZ25lZCA4LWJpdCB3b3JkDQotDQotdHlwZWRlZiAgICAgc2hvcnQgICAgICAgICAgICAgICBMVk1fSU5UMTY7ICAgICAgICAgIC8vLzwgU2lnbmVkIDE2LWJpdCB3b3JkDQotdHlwZWRlZiAgICAgdW5zaWduZWQgc2hvcnQgICAgICBMVk1fVUlOVDE2OyAgICAgICAgIC8vLzwgVW5zaWduZWQgMTYtYml0IHdvcmQNCi0NCi10eXBlZGVmICAgICBsb25nICAgICAgICAgICAgICAgICBMVk1fSU5UMzI7ICAgICAgICAgIC8vLzwgU2lnbmVkIDMyLWJpdCB3b3JkDQotdHlwZWRlZiAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgTFZNX1VJTlQzMjsgICAgICAgICAvLy88IFVuc2lnbmVkIDMyLWJpdCB3b3JkDQotI2lmICggIGRlZmluZWQoVkFSSUFOVF8yNEJJVCkgKQ0KLQ0KLSNkZWZpbmUgTFZNX01BWElOVF8yNCAgICAgICAgICAgODM4ODYwN0wgICAgICAvLy88IDI0IGJpdCBtYXggaW50DQotI2RlZmluZSBMVk1fTUlOSU5UXzI0ICAgICAgICAgIC04Mzg4NjA4TCAgICAvLy88IDI0Yml0IG1pbiBpbnQNCi0NCi0jZGVmaW5lIExWTV9NQVhJTlRfNDggICAgICAgICAgIDE0MDczNzQ4ODM1NTMyN0xMICAvLy88IDQ4Yml0IG1heCBpbnQNCi0jZGVmaW5lIExWTV9NSU5JTlRfNDggICAgICAgICAgIC0xNDA3Mzc0ODgzNTUzMjhMTCAgIC8vLzwgNDhiaXQgbWluIGludA0KLQ0KLSNlbmRpZiAvLyBWQVJJQU5UXzI0QklUDQotDQotI2VuZGlmIC8vIFZBUklBTlRfRlJBQzE2DQotDQotI2VuZGlmIC8vIENPUkVfVElDNjQNCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgU3RhbmRhcmQgRW51bWVyYXRlZCB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKioNCi1UaGUgQHJlZiBMVk1fTW9kZV9lbiBlbnVtZXJhdGVkIHR5cGUgaXMgdXNlZCB0byBzZXQgdGhlIG9wZXJhdGluZyBtb2RlIG9mIGEgcGFydGljdWxhciBmZWF0dXJlIGluc2lkZSB0aGUgTGlmZVZpYmVzIG1vZHVsZXMuDQotVGhlIGZlYXR1cmUgY2FuIGJlIHNlcGFyYXRlbHkgc2V0IHRvIGVuYWJsZSB0aGUgZmVhdHVyZSBwcm9jZXNzaW5nIChpLmUuLCBPTikgb3IgdG8gZGlzYWJsZSBhbGwgZmVhdHVyZSBwcm9jZXNzaW5nDQotbW9kdWxlcyAoaS5lLiwgT0ZGKS4NCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZNX01PREVfT0ZGICAgID0gMCwgICAgIC8vLzwgTFZNIG1vZHVsZSBkaXNhYmxlZA0KLSAgICBMVk1fTU9ERV9PTiAgICAgPSAxLCAgICAgLy8vPCBMVk0gbW9kdWxlIGVuYWJsZWQNCi0gICAgTFZNX01PREVfRFVNTVkgID0gTFZNX01BWEVOVU0NCi19IExWTV9Nb2RlX2VuOw0KLQ0KLS8qKg0KLVNldHMgc3RyZWFtIEZvcm1hdA0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVk1fU1RFUkVPICAgICAgICAgID0gMCwgICAgICAgICAgIC8vLzxTdGVyZW8gc3RyZWFtDQotICAgIExWTV9NT05PSU5TVEVSRU8gICAgPSAxLCAgICAgICAgICAgLy8vPE1vbm8gaW4gc3RlcmVvIHN0cmVhbQ0KLSAgICBMVk1fTU9OTyAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vLzxNb25vIHN0cmVhbQ0KLSAgICBMVk1fNURPVDEgICAgICAgICAgID0gMywgICAgICAgICAgIC8vLzxzdHJlYW0gNS4xIGZvcm1hdHRlZA0KLSAgICBMVk1fN0RPVDEgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vLzxzdHJlYW0gNy4xIGZvcm1hdHRlZA0KLSAgICBMVk1fU09VUkNFX0RVTU1ZICAgID0gTFZNX01BWEVOVU0NCi19IExWTV9Gb3JtYXRfZW47DQotDQotLyoqDQotU2V0cyBTcGVha2VyIHR5cGUNCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZNX1NQRUFLRVJfTU9OTyAgICA9IDAsICAgICAgICAvLy88IE1vbm8gdHlwZSBzcGVha2VyDQotICAgIExWTV9TUEVBS0VSX1NURVJFTyAgPSAxLCAgICAgICAgLy8vPCBTdGVyZW8gdHlwZSBzcGVha2VyDQotICAgIExWTV9TUEVBS0VSX0RVTU1ZICAgPSBMVk1fTUFYRU5VTQ0KLX0gTFZNX1NwZWFrZXJUeXBlX2VuOw0KLQ0KLS8qKg0KLVNldHMgV29yZCBsZW5ndGgNCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZNXzE2X0JJVCAgICAgID0gMCwgICAgICAgICAgIC8vLzwgMTYgYml0IHdvcmQgbGVuZ3RoDQotICAgIExWTV8zMl9CSVQgICAgICA9IDEsICAgICAgICAgICAvLy88IDMyIGJpdCB3b3JkIGxlbmd0aA0KLSAgICBMVk1fV09SRExFTkdUSF9EVU1NWSA9IExWTV9NQVhFTlVNDQotfSBMVk1fV29yZExlbmd0aF9lbjsNCi0NCi0vKioNCi1UaGUgTFZNIHByb2R1Y3Qgc3VwcG9ydHMgdGhlIHNhbXBsZSByYXRlcyBzcGVjaWZpZWQgaW4gQHJlZiBMVk1fRnNfZW4uIFRoZSBpbnB1dCBhbmQgb3V0cHV0IHNhbXBsZSByYXRlcyBhcmUgYWx3YXlzIHRoZSBzYW1lLg0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVk1fRlNfODAwMCAgPSAwLCAgICAgICAgICAgICAgLy8vPCA4ayBzYW1wbGluZyByYXRlDQotICAgIExWTV9GU18xMTAyNSA9IDEsICAgICAgICAgICAgICAvLy88IDExLjAyNWsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfMTIwMDAgPSAyLCAgICAgICAgICAgICAgLy8vPCAxMmsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfMTYwMDAgPSAzLCAgICAgICAgICAgICAgLy8vPCAxNmsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfMjIwNTAgPSA0LCAgICAgICAgICAgICAgLy8vPCAyMi4wNTBrIHNhbXBsaW5nIHJhdGUNCi0gICAgTFZNX0ZTXzI0MDAwID0gNSwgICAgICAgICAgICAgIC8vLzwgMjRrIHNhbXBsaW5nIHJhdGUNCi0gICAgTFZNX0ZTXzMyMDAwID0gNiwgICAgICAgICAgICAgIC8vLzwgMzJrIHNhbXBsaW5nIHJhdGUNCi0gICAgTFZNX0ZTXzQ0MTAwID0gNywgICAgICAgICAgICAgIC8vLzwgNDQuMWsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfNDgwMDAgPSA4LCAgICAgICAgICAgICAgLy8vPCA0OGsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfQ09VTlQgPSA5LCAgICAgICAgICAgICAgLy8vPCBNYXggc2FtcGxpbmcgcmF0ZSBjb3VudA0KLSAgICBMVk1fRlNfSU5WQUxJRCA9IExWTV9NQVhFTlVNLTEsDQotICAgIExWTV9GU19EVU1NWSA9IExWTV9NQVhFTlVNDQotfSBMVk1fRnNfZW47DQotDQotLyoqDQotVGhlIGVudW1lcmF0ZWQgdHlwZSBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgcmVzZXQgbW9kZSBmb3IgdGhlIG1vZHVsZS4NCi1AcmVmIExWTV9SRVNFVF9TT0ZUIGlzIHVzZWQgdG8gc2VsZWN0IGEgc29mdCByZXNldCAob3IgcGFydGlhbCByZXNldCkgYW5kIEByZWYgTFZNX1JFU0VUX0hBUkQgaXMNCi11c2VkIHRvIHNlbGVjdCBhIGhhcmQgcmVzZXQgKGZ1bGwgcmUtaW5pdGlhbGl6YXRpb24pLg0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+TU9ERTwvYj48L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+UmVzZXRUeXBlPC90ZD4NCi0gICAgICAgPHRkPkByZWYgTFZNX1JFU0VUX1NPRlQ8L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPkByZWYgTFZNX1JFU0VUX0hBUkQ8L3RkPg0KLSAgIDwvdHI+DQotPC90YWJsZT4NCi0qLw0KLSAgICBMVk1fUkVTRVRfU09GVCAgICA9IDAsICAgICAgICAgLy8vPCBSZXNldCB0eXBlIGZvciBMVk0gd2hlcmUgYSBwYXJ0aWFsIHJlc2V0IG9mIHRoZSBtb2R1bGUgc2hvdWxkIGJlIHBlcmZvcm1lZA0KLSAgICBMVk1fUkVTRVRfSEFSRCAgICA9IDEsICAgICAgICAgLy8vPCBSZXNldCB0eXBlIGZvciBMVk0gd2hlcmUgYSBmdWxsIHJlc2V0IG9mIHRoZSBtb2R1bGUgc2hvdWxkIGJlIHBlcmZvcm1lZA0KLSAgICBMVk1fUkVTRVRfRFVNTVkgICA9IExWTV9NQVhFTlVNDQotfSBMVk1fUmVzZXRUeXBlX2VuOw0KLQ0KLS8qKg0KLVRoZSBAcmVmIExWTV9NZW1vcnlUeXBlc19lbiBlbnVtZXJhdGVkIHR5cGUgaWRlbnRpZmllcyB0aGUgbWVtb3J5IHJlZ2lvbiB0eXBlcyBzbyB0aGF0IHRoZXkgY2FuIGJlIGNvcnJlY3RseSBwbGFjZWQgaW4gbWVtb3J5DQotYnkgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uDQotVGhlIG1vZHVsZSBpbml0aWFsbHkgaGFzIG5vIHBlcm1hbmVudCBtZW1vcnkgc3RvcmFnZSBhbmQgbWFrZXMgbm8gdXNlIG9mIHBlcnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gaW50ZXJuYWxseS4NCi1UaGUgY2FsbGluZyBhcHBsaWNhdGlvbiBtdXN0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG1vZHVsZSB0byB1c2UuDQotDQotRm91ciBtZW1vcnkgcmVnaW9ucyBhcmUgcmVxdWlyZWQ6DQotQGxpIEByZWYgTFZNX01FTVJFR0lPTl9QRVJTSVNURU5UX1NMT1dfREFUQSA6IHRoaXMgdHlwZSBvZiBtZW1vcnkgaXMgdXNlZCB0byBzdG9yZSBhbGwgdGhlIGNvbnRyb2wgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHNhdmVkIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGNhbGxzIHRvIHRoZSBwcm9jZXNzIGZ1bmN0aW9uLg0KLUBsaSBAcmVmIExWTV9NRU1SRUdJT05fUEVSU0lTVEVOVF9GQVNUX0RBVEEgOiB0aGlzIHR5cGUgb2YgbWVtb3J5IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBzdWNoIGFzIGZpbHRlciBoaXN0b3J5DQotQGxpIEByZWYgTFZNX01FTVJFR0lPTl9QRVJTSVNURU5UX0ZBU1RfQ09FRiA6IHRoaXMgdHlwZSBvZiBtZW1vcnkgaXMgdXNlZCB0byBzdG9yZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KLUBsaSBAcmVmIExWTV9NRU1SRUdJT05fVEVNUE9SQVJZX0ZBU1QgKHNjcmF0Y2gpOiB0aGlzIHR5cGUgb2YgbWVtb3J5IGlzIHVzZWQgdG8gc3RvcmUgdGVtcG9yYXJ5IGRhdGEuIFRoaXMgbWVtb3J5IGNhbiBiZSByZXVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGluIGJldHdlZW4gY2FsbHMgdG8gdGhlIHByb2Nlc3MgZnVuY3Rpb24uDQotDQotVGhpcyBjb2xsZWN0aW9uIG9mIG1lbW9yeSByZWdpb25zIGZvcm1zIHRoZSBtb2R1bGUgaW5zdGFuY2UuDQotDQotVHlwaWNhbGx5IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBkeW5hbWljYWxseTsgaG93ZXZlciwgaXQgY2FuIGJlIGFsbG9jYXRlZCBzdGF0aWNhbGx5IGlmIHJlcXVpcmVkLg0KLVRoZSBzaXplcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgY2FuIGJlIGZvdW5kIGJ5IHJ1bm5pbmcgdGhlIEdldE1lbW9yeVRhYmxlIGZ1bmN0aW9ucyBvbiBhIHNpbXVsYXRvciBhbmQgbm90aW5nDQotdGhlIHJldHVybmVkIHZhbHVlcy4gQWx0ZXJuYXRpdmVseSBjb250YWN0IE5YUCB3aG8gY2FuIHByb3ZpZGUgdGhlIGZpZ3VyZXMuDQotSXQgaXMgcG9zc2libGUgdGhhdCB0aGVzZSBtZW1vcnkgc2l6ZXMgd2lsbCBjaGFuZ2UgYmV0d2VlbiByZWxlYXNlIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5IGFuZCBoZW5jZSB0aGUgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBtZXRob2QgaXMgcHJlZmVycmVkIHdoZXJlIHBvc3NpYmxlLg0KLU9uIHNvbWUgdGFyZ2V0IHBsYXRmb3JtcyB0aGUgcGxhY2VtZW50IG9mIG1lbW9yeSByZWdpb25zIGlzIGNyaXRpY2FsIGZvciBhY2hpZXZpbmcgb3B0aW1hbCBwZXJmb3JtYW5jZSBvZiB0aGUgbW9kdWxlLg0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVk1fUEVSU0lTVEVOVF9TTE9XX0RBVEEgICAgPSBMVk1fTUVNUkVHSU9OX1BFUlNJU1RFTlRfU0xPV19EQVRBLCAgICAgICAvLy88IFBlcnNpc3RlbnQgc2xvdyBtZW1vcnkgcmVnaW9uDQotICAgIExWTV9QRVJTSVNURU5UX0ZBU1RfREFUQSAgICA9IExWTV9NRU1SRUdJT05fUEVSU0lTVEVOVF9GQVNUX0RBVEEsICAgICAgIC8vLzwgUGVyc2lzdGVudCBmYXN0IG1lbW9yeSByZWdpb24NCi0gICAgTFZNX1BFUlNJU1RFTlRfRkFTVF9DT0VGICAgID0gTFZNX01FTVJFR0lPTl9QRVJTSVNURU5UX0ZBU1RfQ09FRiwgICAgICAgLy8vPCBQZXJzaXN0ZW4gZmFzdCBtZW1vcnkgZm9yIGNvZWZmaWNpZW50IHN0b3JhZ2UNCi0gICAgTFZNX1RFTVBPUkFSWV9GQVNUICAgICAgICAgID0gTFZNX01FTVJFR0lPTl9URU1QT1JBUllfRkFTVCwgICAgICAgICAgICAgLy8vPCBUZW1wb3JhcnkgZmFzdCBtZW1vcnkgcmVnaW9uDQotICAgIExWTV9NRU1PUllUWVBFX0RVTU1ZICAgICAgICA9IExWTV9NQVhFTlVNDQotfSBMVk1fTWVtb3J5VHlwZXNfZW47DQotDQotLyoqDQotU2V0cyBtb2Qgb2YgQ29uZmlndXJhdGlvbg0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVk1fQ09ORklHX0hBTkRTRVQgICAgICAgICAgICA9IDAsICAgICAgICAgICAgICAgICAgLy8vPCBIYW5kc2V0IGNvbmZpZ3VyYXRpb24NCi0gICAgTFZNX0NPTkZJR19TUEVBS0VSUEhPTkUgICAgICAgPSAxLCAgICAgICAgICAgICAgICAgIC8vLzwgU3BlYWtlciBtb2QgY29uZmlndXJhdGlvbg0KLSAgICBMVk1fQ09ORklHX0VBUlBJRUNFICAgICAgICAgICA9IDIsICAgICAgICAgICAgICAgICAgLy8vPCBFYXJwaWVjZSBjb25maWd1cmF0aW9uDQotICAgIExWTV9DT05GSUdfRFVNTVkgICAgICAgICAgICAgID0gTFZNX01BWEVOVU0NCi19IExWTV9Db25maWdfZW47DQotDQotLyoqDQotVGhlIEByZWYgTFZNX01lbW9yeVJlZ2lvbl9zdCB0eXBlIGRlZmluZXMgYSBtZW1vcnkgcmVnaW9uIGJ5IHNwZWNpZnlpbmcgaXRzIHNpemUgaW4gYnl0ZXMsIGl0cyByZWdpb24gdHlwZSBhbmQgaXRzIGJhc2UgcG9pbnRlci4NCi1Ac2VlIExWTV9NZW1vcnlUeXBlc19lbg0KLSovDQotI2lmICggIGRlZmluZWQoVkFSSUFOVF8yNEJJVCkgKQ0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fSU5UMjQgICAgICAgICAgICAgICAgICAgIFNpemU7ICAgICAgICAgICAgICAgICAgIC8vLzwgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gaW4gYnl0ZXMNCi0gICAgTFZNX01lbW9yeVR5cGVzX2VuICAgICAgICAgICBUeXBlOyAgICAgICAgICAgICAgICAgICAvLy88IFR5cGUgb2YgbWVtb3J5IHJlZ2lvbg0KLSAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgKnBCYXNlQWRkcmVzczsgICAgICAgICAgIC8vLzwgUG9pbnRlciB0byB0aGUgbWVtb3J5IHJlZ2lvbiBiYXNlIGFkZHJlc3MNCi19IExWTV9NZW1vcnlSZWdpb25fc3Q7DQotI2Vsc2UNCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX1VJTlQzMiAgICAgICAgICAgICAgICAgIFNpemU7ICAgICAgICAgICAgICAgICAgIC8vLzwgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gaW4gYnl0ZXMNCi0gICAgTFZNX01lbW9yeVR5cGVzX2VuICAgICAgICAgIFR5cGU7ICAgICAgICAgICAgICAgICAgIC8vLzwgVHlwZSBvZiBtZW1vcnkgcmVnaW9uDQotICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAqcEJhc2VBZGRyZXNzOyAgICAgICAgICAvLy88IFBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gYmFzZSBhZGRyZXNzDQotfSBMVk1fTWVtb3J5UmVnaW9uX3N0Ow0KLSNlbmRpZg0KLQ0KLS8qKg0KLVRoZSBMVk1fTWVtb3J5VGFibGVfc3QgdHlwZSBkZWZpbmVzIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBtb2R1bGUgYXMgYW4gYXJyYXkgb2YgcmVnaW9uIGRlZmluaXRpb25zLg0KLVRoZSBudW1iZXIgb2YgcmVxdWlyZWQgbWVtb3J5IHJlZ2lvbnMgaXMgZ2l2ZW4gYnkgdGhlIGNvbnN0YW50IEByZWYgTFZNX05SX01FTU9SWV9SRUdJT05TDQotQHNlZSBMVk1fTWVtb3J5UmVnaW9uX3N0DQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX01lbW9yeVJlZ2lvbl9zdCAgICAgICAgIFJlZ2lvbltMVk1fTlJfTUVNT1JZX1JFR0lPTlNdOyAgLy8vPCBPbmUgZGVmaW5pdGlvbiBvZiBhbGwgbWVtb3J5IHJlZ2lvbnMNCi19IExWTV9NZW1vcnlUYWJsZV9zdDsNCi0NCi0vKioNCi1CZWF0cyBQZXIgTWludXRlIFN0cnVjdHVyZQ0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICBTaG9ydFRlcm1NaW5pbXVtOyAgICAgICAvLy88IEJlYXRzIHBlciBtaW51dGUgaW4gUTkuNiBmb3JtYXQNCi0gICAgTFZNX0lOVDE2ICAgICAgICAgICAgICAgICAgIFNob3J0VGVybUF2ZXJhZ2U7ICAgICAgIC8vLzwgQmVhdHMgcGVyIG1pbnV0ZSBpbiBROS42IGZvcm1hdA0KLSAgICBMVk1fSU5UMTYgICAgICAgICAgICAgICAgICAgU2hvcnRUZXJtTWF4aW11bTsgICAgICAgLy8vPCBCZWF0cyBwZXIgbWludXRlIGluIFE5LjYgZm9ybWF0DQotDQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICBDb25maWRlbmNlOyAgICAgICAgICAgICAvLy88IEJlYXQgY29uZmlkZW5jZSBsZXZlbDogMCA9IG5vIGNvbmZpZGVuY2UsIDMyNzY3ID0gbWF4aW11bSBjb25maWRlbmNlDQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICBTdHJlbmd0aDsgICAgICAgICAgICAgICAvLy88IEJlYXQgc3RyZW5ndGggbGV2ZWw6ICAgMCA9IG5vIGJlYXQsIDMyNzY3ID0gbWF4aW11bSBzdHJlbmd0aCBiZWF0DQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICBMb25nVGVybU1pbmltdW07ICAgICAgICAvLy88IEJlYXRzIHBlciBtaW51dGUgaW4gUTkuNiBmb3JtYXQNCi0gICAgTFZNX0lOVDE2ICAgICAgICAgICAgICAgICAgIExvbmdUZXJtQXZlcmFnZTsgICAgICAgIC8vLzwgQmVhdHMgcGVyIG1pbnV0ZSBpbiBROS42IGZvcm1hdA0KLSAgICBMVk1fSU5UMTYgICAgICAgICAgICAgICAgICAgTG9uZ1Rlcm1NYXhpbXVtOyAgICAgICAgLy8vPCBCZWF0cyBwZXIgbWludXRlIGluIFE5LjYgZm9ybWF0DQotDQotfSBMVk1fQlBNTW9kdWxlU3RhdHNfc3Q7DQotDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFN0YW5kYXJkIEZ1bmN0aW9uIFByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyoqDQotQGJyaWVmIEdlbmVyYWwgcHVycG9zZSBjYWxsYmFjayBmdW5jdGlvbg0KLQ0KLUBwYXJhbSBwQ2FsbGJhY2tEYXRhICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjYWxsYmFjayBkYXRhIHN0cnVjdHVyZQ0KLUBwYXJhbSBwR2VuZXJhbFB1cnBvc2UgICAgICAgICBHZW5lcmFsIHB1cnBvc2UgcG9pbnRlciAoZS5nLiB0byBhIGRhdGEgc3RydWN0dXJlIG5lZWRlZCBpbiB0aGUgY2FsbGJhY2spDQotQHBhcmFtIFByZXNldExlbmd0aCAgICAgICAgICAgIEdlbmVyYWwgcHVycG9zZSB2YXJpYWJsZSAoZS5nLiB0byBiZSB1c2VkIGFzIGNhbGxiYWNrIElEKQ0KLUByZXR1cm4gXHJlZiBMVk1fSU5UMzINCi0qLw0KLXR5cGVkZWYgTFZNX0lOVDMyICgqTFZNX0NhbGxiYWNrKSh2b2lkICAgICAgICAgICpwQ2FsbGJhY2tEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICpwR2VuZXJhbFB1cnBvc2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9JTlQxNiAgICAgR2VuZXJhbFB1cnBvc2UgKTsNCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgRW5kIG9mIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQotDQotI2VuZGlmICAvKiBMVk1fVFlQRVNfSCAqLw0KZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3Rvcy9MVlZFLmggYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90b3MvTFZWRS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5YzQ4ZDhlLi4wMDAwMDAwCi0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3Rvcy9MVlZFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxNCBOWFAgU29mdHdhcmUuIEFsbCByaWdodHMgYXJlIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBSZXByb2R1Y3Rpb24gaW4gd2hvbGUgb3IgaW4gcGFydCBpcyBwcm9oaWJpdGVkIHdpdGhvdXQgdGhlIHByaW9yICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICB3cml0dGVuIGNvbnNlbnQgb2YgdGhlIGNvcHlyaWdodCBvd25lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBUaGlzIHNvZnR3YXJlIGFuZCBhbnkgY29tcGlsYXRpb24gb3IgZGVyaXZhdGl2ZSB0aGVyZW9mIGlzIGFuZCAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBzaGFsbCByZW1haW4gdGhlIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIG9mIE5YUCBTb2Z0d2FyZSBhbmQgaXMgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBoaWdobHkgY29uZmlkZW50aWFsIGluIG5hdHVyZS4gQW55IGFuZCBhbGwgdXNlIGhlcmVvZiBpcyByZXN0cmljdGVkICAgICAgICAgICAgICAgICAqLw0KLS8qICBhbmQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGluIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBzb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCBjb25jbHVkZWQgd2l0aCBOWFAgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGlzIHRoaXMgc29mdHdhcmUgb3IgYW55IGRlcml2YXRpdmUgdGhlcmVvZiAgICAgICAgICAgICAgICAgICAqLw0KLS8qICB0byBiZSBjb21iaW5lZCB3aXRoIGFueSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBpbiBhbnkgd2F5IG9yICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBsaWNlbnNlZCB1bmRlciBhbnkgT3BlbiBMaWNlbnNlIFRlcm1zIHdpdGhvdXQgdGhlIGV4cHJlc3MgcHJpb3IgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICB3cml0dGVuICBwZXJtaXNzaW9uIG9mIE5YUCBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGF1c2UsIHRoZSB0ZXJtIE9wZW4gU291cmNlIFNvZnR3YXJlIG1lYW5zICAgICAgICAgICAgICAgICAqLw0KLS8qICBhbnkgc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBPcGVuIExpY2Vuc2UgVGVybXMuIE9wZW4gICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBMaWNlbnNlIFRlcm1zIG1lYW5zIHRlcm1zIGluIGFueSBsaWNlbnNlIHRoYXQgcmVxdWlyZSBhcyBhICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBjb25kaXRpb24gb2YgdXNlLCBtb2RpZmljYXRpb24gYW5kL29yIGRpc3RyaWJ1dGlvbiBvZiBhIHdvcmsgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAxLiB0aGUgbWFraW5nIGF2YWlsYWJsZSBvZiBzb3VyY2UgY29kZSBvciBvdGhlciBtYXRlcmlhbHMgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICBwcmVmZXJyZWQgZm9yIG1vZGlmaWNhdGlvbiwgb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAyLiB0aGUgZ3JhbnRpbmcgb2YgcGVybWlzc2lvbiBmb3IgY3JlYXRpbmcgZGVyaXZhdGl2ZSAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICB3b3Jrcywgb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAzLiB0aGUgcmVwcm9kdWN0aW9uIG9mIGNlcnRhaW4gbm90aWNlcyBvciBsaWNlbnNlIHRlcm1zICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICBpbiBkZXJpdmF0aXZlIHdvcmtzIG9yIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBvciAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICA0LiB0aGUgZ3JhbnRpbmcgb2YgYSByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBhbnkgcGFydHkgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICB1bmRlciBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICByZWdhcmRpbmcgdGhlIHdvcmsgYW5kL29yIGFueSB3b3JrIHRoYXQgY29udGFpbnMsIGlzIGNvbWJpbmVkIHdpdGgsICAgICAgICAgICAgICAgICAqLw0KLS8qICByZXF1aXJlcyBvciBvdGhlcndpc2UgaXMgYmFzZWQgb24gdGhlIHdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGZvciBlYXNlIG9mIHJlY29tcGlsYXRpb24gb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBNb2RpZmljYXRpb24gYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgc3RyaWN0bHkgICAgICAgICAgICAgICAgICAqLw0KLS8qICBwcm9oaWJpdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAkQXV0aG9yOiBueHA2NTI4NSAkKi8NCi0vKiAgICAgJFJldmlzaW9uOiA1NjkwOCAkKi8NCi0vKiAgICAgJERhdGU6IDIwMTQtMDQtMTAgMTc6MzA6MDIgKzA1MzAgKFRodSwgMTAgQXByIDIwMTQpICQqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8qKg0KLUBmaWxlDQotSGVhZGVyIGZpbGUgZm9yIHRoZSBhcHBsaWNhdGlvbiBsYXllciBpbnRlcmZhY2Ugb2YgdGhlIExWVkUgbW9kdWxlLg0KLVRoaXMgZmlsZXMgaW5jbHVkZXMgYWxsIGRlZmluaXRpb25zLCB0eXBlcywgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcw0KLXJlcXVpcmVkIGJ5IHRoZSBjYWxsaW5nIGxheWVyLiBBbGwgb3RoZXIgdHlwZXMsIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBhcmUNCi1wcml2YXRlLg0KLSovDQotDQotI2lmbmRlZiBfX0xWVkVfSF9fDQotI2RlZmluZSBfX0xWVkVfSF9fDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIEluY2x1ZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2luY2x1ZGUgIkxWVkVfVklELmgiDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogQmVsb3cgaW5jbHVkZSBsb2dpYyBpcyBkZXNpZ25lZCB0byByZWR1Y2UgY2hlY2tzIHRvIDEgb3IgMiBjb25kaXRpb25zIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgYmFja2VuZCBzdHJpcHBpbmcgY29kZSAqLw0KLQ0KLQ0KLQ0KLQ0KLQ0KLSNkZWZpbmUgTFZWRV9NQVhfUENNX0ZSQU1FX1NJWkUgICAgICAgICAxNjAgICAgICAgICAgICAgICAgICAgIC8vLzwgTFZWRSBtYXhpbXVtIHByb2Nlc3NpbmcgZnJhbWUgc2l6ZQ0KLQ0KLQ0KLSNkZWZpbmUgTFZWRV9OT0lTRVNBTVBMRVNfUEVSX0ZSQU1FICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBOdW1iZXIgb2Ygc2FtcGxlcyByZXF1aXJlZCBmb3Igbm9pc2UgZXN0aW1hdGlvbiBwZXIgZnJhbWUNCi0vKioNCi1AZGVmIExWVkVfUlhfUFJFU0VUX0xFTkdUSA0KLUxlbmd0aCBvZiB0aGUgTFZWRV9SeCBwcmVzZXQgYnVmZmVyIChudW1iZXIgb2YgYnl0ZXMpLg0KLUBzZWUgTFZWRV9SeF9TZXRQcmVzZXQNCi1AaW5ncm91cCBMVlZFX1J4DQotKi8NCi0jZGVmaW5lIExWVkVfUlhfUFJFU0VUX0xFTkdUSCAoTFZWSURIRUFERVJfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICsgTFZWRV9SWF9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgUlggcHJlc2V0IEJ1ZmZlciBsZW5ndGgNCi0NCi0vKioNCi1AZGVmIExWVkVfVFhfUFJFU0VUX0xFTkdUSA0KLUxlbmd0aCBvZiB0aGUgTFZWRV9UeCBwcmVzZXQgYnVmZmVyIChudW1iZXIgb2YgYnl0ZXMpLg0KLUBzZWUgTFZWRV9UeF9TZXRQcmVzZXQNCi1AaW5ncm91cCBMVlZFX1R4DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfUFJFU0VUX0xFTkdUSCAoTFZWSURIRUFERVJfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICsgTFZWRV9UWF9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgVFggcHJlc2V0IGJ1ZmZlciBsZW5ndGgNCi0NCi0NCi0vKiBEZXByZWNhdGVkIERlZmluaXRpb25zICovDQotDQotI2RlZmluZSBMVlZFX01BWF9CVUxLX0RFTEFZICAgICAgICAgICAgIExWVkVfVFhfQlVMS0RFTEFZX01BWA0KLSNkZWZpbmUgTFZWRV9SWF9NT0RFX0RVTU1ZIExWVkVfUlhfTU9ERV9FTl9EVU1NWQ0KLSNkZWZpbmUgTFZWRV9UWF9NT0RFX0RVTU1ZIExWVkVfVFhfTU9ERV9FTl9EVU1NWQ0KLQ0KLSNkZWZpbmUgTFZWRV9NQVhfVk9MX0dBSU5fREIgICAgICAgICAgICBMVlZFX1RYX1ZPTF9HQUlOX01BWA0KLSNkZWZpbmUgTFZWRV9NSU5fVk9MX0dBSU5fREIgICAgICAgICAgICBMVlZFX1RYX1ZPTF9HQUlOX01JTg0KLQ0KLSNkZWZpbmUgTFZWRV9NQVhfSFBGX0NPUk5FUl9IWiAgICAgICAgICBMVlZFX1RYX01JQ19IUEZfQ09STkVSRlJFUV9NQVgNCi0jZGVmaW5lIExWVkVfTUlOX0hQRl9DT1JORVJfSFogICAgICAgICAgTFZWRV9UWF9NSUNfSFBGX0NPUk5FUkZSRVFfTUlODQotDQotI2RlZmluZSBMVlZFX01BWF9IUEZfUlhfQ09STkVSX0haICAgICAgIExWVkVfUlhfSFBGX0NPUk5FUkZSRVFfTUFYDQotDQotI2RlZmluZSBMVlZFX01BWF9OTFBQX0xJTUlUX0RCICAgICAgICAgIExWTkxQUF9OTFBQX0xJTUlUX01BWA0KLSNkZWZpbmUgTFZWRV9NSU5fTkxQUF9MSU1JVF9EQiAgICAgICAgICBMVk5MUFBfTkxQUF9MSU1JVF9NSU4NCi0NCi0NCi0jZGVmaW5lIExWVkVfTUFYX0RSQ19MRVZFTCAgICAgICAgICAgICAgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUFYDQotI2RlZmluZSBMVlZFX01JTl9EUkNfTEVWRUwgICAgICAgICAgICAgIExWRFJDX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01JTg0KLSNkZWZpbmUgTFZWRV9NSU5fRFJDX05VTUtORUVTICAgICAgICAgICBMVkRSQ19OVU1LTkVFU19NSU4NCi0jZGVmaW5lIExWVkVfTUFYX0RSQ19OVU1LTkVFUyAgICAgICAgICAgTFZEUkNfTlVNS05FRVNfTUFYDQotI2RlZmluZSBMVlZFX01JTl9EUkNfQVRUQUNLVElNRSAgICAgICAgIExWRFJDX0FUVEFDS1RJTUVfTUlODQotI2RlZmluZSBMVlZFX01BWF9EUkNfQVRUQUNLVElNRSAgICAgICAgIExWRFJDX0FUVEFDS1RJTUVfTUFYDQotI2RlZmluZSBMVlZFX01JTl9EUkNfUkVMRUFTRVRJTUUgICAgICAgIExWRFJDX1JFTEVBU0VUSU1FX01JTg0KLSNkZWZpbmUgTFZWRV9NQVhfRFJDX1JFTEVBU0VUSU1FICAgICAgICBMVkRSQ19SRUxFQVNFVElNRV9NQVgNCi0NCi0NCi0vKiBFbmQgZGVwcmVjYXRlZCBkZWZpbmVzKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgVHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKioNCi1MVlZFX1R4IEluc3RhbmNlIEhhbmRsZQ0KLVRoaXMgaGFuZGxlIGlzIHVzZWQgYnkgbW9zdCBvZiB0aGUgTFZWRSBBUElzDQotQHNlZSBMVlZFX1R4X0dldEluc3RhbmNlSGFuZGxlDQotQGluZ3JvdXAgTFZWRV9UeA0KLSovDQotdHlwZWRlZiB2b2lkICpMVlZFX1R4X0hhbmRsZV90OyAgIC8vLzwgTFZWRSBUeCBoYW5kbGUNCi0vKioNCi1UaGlzIGhhbmRsZSBpcyB1c2VkIGJ5IG1vc3Qgb2YgdGhlIExWVkUgQVBJcw0KLUBzZWUgTFZWRV9SeF9HZXRJbnN0YW5jZUhhbmRsZQ0KLUBpbmdyb3VwIExWVkVfUngNCi0qLw0KLXR5cGVkZWYgdm9pZCAqTFZWRV9SeF9IYW5kbGVfdDsgIC8vLzwgTFZWRSBSeCBoYW5kbGUNCi0NCi0vKioNCi1UaGlzIGVudW0gdHlwZSBzcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBlcnJvciBjb2RlcyByZXR1cm5lZCBieSB0aGUgQVBJIGZ1bmN0aW9ucw0KLUZvciB0aGUgZXhhY3QgbWVhbmluZyBzZWUgdGhlIGluZGl2aWR1YWwgZnVuY3Rpb24gZGVzY3JpcHRpb25zDQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotICAgIExWVkVfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAgICAgIC8vLzwgU3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSBhIHJvdXRpbmUNCi0gICAgTFZWRV9BTElHTk1FTlRFUlJPUiAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgICAgICAgLy8vPCBNZW1vcnkgYWxpZ25tZW50IGVycm9yDQotICAgIExWVkVfTlVMTEFERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAgICAgIC8vLzwgTlVMTCBhbGxvY2F0aW9uIGFkZHJlc3MNCi0gICAgTFZWRV9PVVRPRlJBTkdFICAgICAgICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgICAgICAgLy8vPCBPdXQgb2YgcmFuZ2UgcGFyYW1ldGVyDQotICAgIExWVkVfSU5WQUxJRE5VTVNBTVBMRVMgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAgICAgIC8vLzwgSW52YWxpZCBudW1iZXIgb2Ygc2FtcGxlcw0KLSAgICBMVlZFX0lOVkFMSURfQUxHT1JJVEhNX0NPTkZJR1VSQVRJT04gICAgPSA1LCAgICAgICAgICAgICAgICAvLy88IE11dHVhbGx5IGV4Y2x1c2l2ZSBhbGdvcml0aG1zIGNvbmZpZ3VyZWQgT04NCi0gICAgTFZWRV9JTlZBTElEX1NUQVRFX0NPTkZJR1VSQVRJT04gICAgICAgID0gNiwgICAgICAgICAgICAgICAgLy8vPCBJbnZhbGlkIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0NCi0gICAgTFZWRV9QUkVTRVRfSU5WQUxJRF9CVUZGRVJfTEVOR1RIICAgICAgID0gNywgICAgICAgICAgICAgICAgLy8vPCBJbmNvcnJlY3QgbGVuZ3RoIG9mIGJ1ZmZlciB1c2VkIGluIFNldFByZXNldA0KLSAgICBMVlZFX1BSRVNFVF9JTlZBTElEX1ZPTFVNRV9JTkRFWCAgICAgICAgPSA4LCAgICAgICAgICAgICAgICAvLy88IFRoZSB2b2x1bWUgaW5kZXggZXhjZWVkcyB0aGUgYnVmZmVyIGNvbnRlbnQgaW4gU2V0UHJlc2V0DQotICAgIExWVkVfUFJFU0VUX0lOVkFMSURfQlVGRkVSX1ZFUlNJT04gICAgICA9IDksICAgICAgICAgICAgICAgIC8vLzwgVGhlIHZlcnNpb24gb2YgdGhlIHByZXNldCBidWZmZXIgZG9lcyBub3QgbWF0Y2ggdGhpcyBsaWJyYXJ5DQotICAgIExWVkVfUFJFU0VUX0lOVkFMSURfQkFTRUxJTkVfVkVSU0lPTiAgICA9IDEwLCAgICAgICAgICAgICAgIC8vLzwgSW52YWxpZCBMVlZFIEJhc2VsaW5lIFZlcnNpb24gaW4gcHJlc2V0IGJ1ZmZlcg0KLSAgICBMVlZFX1BSRVNFVF9JTlZBTElEX01BU0sgICAgICAgICAgICAgICAgPSAxMSwgICAgICAgICAgICAgICAvLy88IEludmFsaWQgYWxnb3JpdGhtIG1hc2sgaW4gcHJlc2V0IGJ1ZmZlcg0KLSAgICBMVlZFX1BSRVNFVF9JTlZBTElEX1NBTVBMRV9SQVRFICAgICAgICAgPSAxMiwgICAgICAgICAgICAgICAvLy88IEludmFsaWQgc2FtcGxlIHJhdGUgQHJlZiBMVk1fRnNfZW4gaW4gcHJlc2V0IGJ1ZmZlcg0KLSAgICBMVlZFX1BSRVNFVF9JTlZBTElEX0xWV0lSRUZPUk1BVF9NRVNTQUdFSUQgPSAxMywgICAgICAgICAgICAvLy88IEludmFsaWQgQHJlZiBMVlZJREhlYWRlcl9NZXNzYWdlSURfZW4gd2lyZSBmb3JtYXQgbWVzc2FnZSBpZCBpbiBwcmVzZXQgYnVmZmVyDQotDQotICAgIExWVkVfUkVUVVJOU1RBVFVTX0RVTU1ZICAgICAgICAgICAgICAgICA9IExWTV9NQVhFTlVNDQotfSBMVlZFX1JldHVyblN0YXR1c19lbjsNCi0NCi0vKioNCi1CeXRlIGFycmF5IGNvbnRhaW5pbmcgZW5jb2RlZCBMVlZFX1J4X0NvbnRyb2xQYXJhbXMgZm9yIG9uZSBvciBtdWx0aXBsZSB2b2x1bWVzLg0KLVRoZSBsZW5ndGggb2YgdGhpcyBhcnJheSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBAcmVmIExWVkVfUlhfUFJFU0VUX0xFTkdUSC4NCi1Ac2VlIExWVkVfUnhfU2V0UHJlc2V0DQotQGluZ3JvdXAgTFZWRV9SeA0KLSovDQotdHlwZWRlZiBMVk1fQ0hBUiogTFZWRV9SeF9QcmVzZXRfdDsgLy8vPCBMVlZFIFJ4IHByZXNldCBidWZmZXINCi0NCi0vKioNCi1CeXRlIGFycmF5IGNvbnRhaW5pbmcgZW5jb2RlZCBMVlZFX1R4X0NvbnRyb2xQYXJhbXMgZm9yIG9uZSBvciBtdWx0aXBsZSB2b2x1bWVzLg0KLVRoZSBsZW5ndGggb2YgdGhpcyBhcnJheSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBAcmVmIExWVkVfVFhfUFJFU0VUX0xFTkdUSC4NCi1Ac2VlIExWVkVfVHhfU2V0UHJlc2V0DQotQGluZ3JvdXAgTFZWRV9UeA0KLSovDQotdHlwZWRlZiBMVk1fQ0hBUiogTFZWRV9UeF9QcmVzZXRfdDsgIC8vLzwgTFZWRSBUeCBwcmVzZXQgYnVmZmVyDQotDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFN0cnVjdHVyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqDQotVGhlIGluc3RhbmNlIHBhcmFtZXRlcnMgZGVmaW5lIGNlcnRhaW4gaW1wb3J0YW50IG9wZXJhdGluZyBsaW1pdHMgcmVxdWlyZWQgYnkgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uDQotVGhlc2UgaW5zdGFuY2UgcGFyYW1ldGVycyBhZmZlY3QgaG93IG11Y2ggbWVtb3J5IGlzIHJlcXVpcmVkIGJ5IHRoZSBMVlZFIGFuZCBoZW5jZSBtdXN0IGJlIHByb3ZpZGVkDQotd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4NCi1Ac2VlIExWVkVfUnhfR2V0TWVtb3J5VGFibGUNCi1Ac2VlIExWVkVfUnhfR2V0SW5zdGFuY2VIYW5kbGUNCi1Ac2VlIExWVkVfVHhfR2V0TWVtb3J5VGFibGUNCi1Ac2VlIExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGUNCi0qLw0KLS8qKg0KLUVRIE1vZHVsZSBJbnN0YW5jZSBQYXJhbWV0ZXJzIFN0cnVjdHVyZS4NCi1Ac2VlIExWRVFfSW5zdGFuY2VQYXJhbXNfc3QNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLS8qKg0KLU1heCBTaXplIG9mIEVxdWFsaXplcg0KLVNldHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBlcXVhbGl6ZXIgaW1wdWxzZSByZXNwb25zZSB0aGF0IGNhbiBiZSB1c2VkLg0KLUl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4Lg0KLTx0YWJsZSBib3JkZXI+DQotPGNhcHRpb24+RVEgTWF4IExlbmd0aCBUYWJsZTwvY2FwdGlvbj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48Yj5Vbml0PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5RIGZvcm1hdDwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGF0YSBSYW5nZTwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGVmYXVsdCBWYWx1ZXM8L2I+PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjxiPkludGVnZXIgTGVuZ3RoIGluIFNhbXBsZXM8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPlExNi4wPC9iPjwvdGQ+DQotICAgICAgIDx0ZD5bOCxccmVmIExWRVFfRVFfTEVOR1RIX01BWF08L3RkPg0KLSAgICAgICA8dGQ+XHJlZiBMVkVRX0VRX0xFTkdUSF9ERUZBVUxUPC90ZD4NCi0gICA8L3RyPg0KLTwvdGFibGU+DQotKi8NCi0gICAgTFZNX1VJTlQxNiAgICAgICAgICAgICAgICAgICAgRVFfTWF4TGVuZ3RoOyAgLy8vPCBFUSBNYXggTGVuZ3RoDQotfSBMVkVRX0luc3RhbmNlUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLVR4IEluc3RhbmNlIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi1UaGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYXQgaW5pdGlhbGl6YXRpb24gdGltZSBhbmQgbWF5IG5vdCBiZSBjaGFuZ2VkIGR1cmluZyBwcm9jZXNzaW5nDQotQHJlZiBMVlZFX1R4X0dldEluc3RhbmNlSGFuZGxlDQotQGluZ3JvdXAgTFZWRV9UeA0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIExWTV9Gc19lbiAgICAgICAgICAgICAgICAgICBTYW1wbGVSYXRlOyAgICAgIC8vLzwgU2FtcGxlIHJhdGUNCi0vKioNCi1TZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgYnVsayBkZWxheSBiZXR3ZWVuIFJ4IGFuZCBUeCBleHByZXNzZWQgaW4gc2FtcGxlcy4NCi1UaGUgdW5pdCBvZiBNYXhCdWxrRGVsYXkgaXMgW251bWJlciBvZiBzYW1wbGVzXSBhdCB0aGUgcmVzcGVjdGl2ZSBzYW1wbGluZyByYXRlLg0KLTx0YWJsZSBib3JkZXI+DQotPGNhcHRpb24+TWF4IEJ1bGsgRGVsYXkgVGFibGU8L2NhcHRpb24+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PGI+VHlwZTwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+VW5pdDwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+USBmb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPkRhdGEgUmFuZ2U8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPkRlZmF1bHQgVmFsdWVzPC9iPjwvdGQ+DQotICAgPC90cj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48Yj5MVk1fVUlOVDE2PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5JbnRlZ2VyIExlbmd0aCBpbiBTYW1wbGVzPC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5RMTYuMDwvYj48L3RkPg0KLSAgICAgICA8dGQ+WzAsNjQwMF08L3RkPg0KLSAgICAgICA8dGQ+Tm9uZTwvdGQ+DQotICAgPC90cj4NCi08L3RhYmxlPg0KLSovDQotICAgIExWTV9VSU5UMTYgICAgICAgICAgICAgICAgICBNYXhCdWxrRGVsYXk7ICAgICAvLy88IE1heCBidWxrIGRlbGF5DQotDQotICAgIExWRVFfSW5zdGFuY2VQYXJhbXNfc3QgICAgICBFUV9JbnN0UGFyYW1zOyAgLy8vPCBFUSBpbnN0YW5jZQ0KLX0gTFZWRV9UeF9JbnN0YW5jZVBhcmFtc19zdDsNCi0NCi0vKioNCi1SeCBJbnN0YW5jZSBQYXJhbWV0ZXIgU3RydWN0dXJlDQotVGhlc2UgcGFyYW1ldGVycyBhcmUgc2V0IGF0IGluaXRpYWxpemF0aW9uIHRpbWUgYW5kIG1heSBub3QgYmUgY2hhbmdlZCBkdXJpbmcgcHJvY2Vzc2luZy4NCi1AcmVmIExWVkVfUnhfR2V0SW5zdGFuY2VIYW5kbGUNCi1AaW5ncm91cCBMVlZFX1J4DQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX0ZzX2VuICAgICAgICAgICAgICAgICAgIFNhbXBsZVJhdGU7ICAgICAgICAgICAgLy8vPCBMVlZFIHNhbXBsZSByYXRlDQotICAgIExWRVFfSW5zdGFuY2VQYXJhbXNfc3QgICAgICBFUV9JbnN0UGFyYW1zOy8vLzwgRVEgaW5zdGFuY2UNCi0NCi19IExWVkVfUnhfSW5zdGFuY2VQYXJhbXNfc3Q7DQotDQotLyoqDQotVGhlIHZlcnNpb24gaW5mb3JtYXRpb24gc3RydWN0dXJlIGNvbnRhaW5zIG9uZSBjaGFyYWN0ZXIgZmllbGQgdG8gc3RvcmUgTFZWRSB2ZXJzaW9uIG51bWJlci4NCi1BIGNhbGwgdG8gdGhlIEByZWYgTFZWRV9HZXRWZXJzaW9uSW5mbyBmdW5jdGlvbiBpcyBuZWVkZWQgdG8gcmV0cmlldmUgdGhpcyBpbmZvcm1hdGlvbi4NCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fQ0hBUiAgICAgICAgICAgICAgICAgICAgVmVyc2lvbk51bWJlcls2NF07ICAvLy88IFZlcnNpb24gbnVtYmVyIG9mIHRoZSBMaWZlVmliZXMmdHJhZGU7IFZvaWNlRXhwZXJpZW5jZSBsaWJyYXJ5DQotfSBMVlZFX1ZlcnNpb25JbmZvOw0KLQ0KLS8qKg0KLVVzZWQgdG8gcmVzZXQgTFZWRV9SeCBtb2R1bGUgYW55IHRpbWUuDQotQHJlZiBMVk1fUmVzZXRUeXBlX2VuIHBhcmFtZXRlciBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgcmVzZXQgcmVxdWlyZWQNCi1AaW5ncm91cCBMVlZFX1J4DQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX1Jlc2V0VHlwZV9lbiBSZXNldFR5cGU7ICAvLy88IFJYIFJlc2V0IFR5cGUNCi19IExWVkVfUnhfUmVzZXRQYXJhbXNfc3Q7DQotDQotLyoqDQotVXNlZCB0byByZXNldCBMVlZFX1R4IG1vZHVsZSBhbnkgdGltZS4NCi1MVk1fUmVzZXRUeXBlX2VuIHBhcmFtZXRlciBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgcmVzZXQgcmVxdWlyZWQNCi1AaW5ncm91cCBMVlZFX1R4DQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX1Jlc2V0VHlwZV9lbiBSZXNldFR5cGU7ICAgLy8vPCBUWCBSZXNldCBUeXBlDQotfSBMVlZFX1R4X1Jlc2V0UGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLUBicmllZiBSZXRyaWV2ZSB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBvZiB0aGUgTFZWRV9UeCBtb2R1bGUuDQotDQotVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdGFibGUgb2YgbWVtb3J5IHJlY29yZHMgdGhhdCBkZXNjcmliZSBzaXplLCB0eXBlIGFuZCBtZW1vcnkgc3BhY2Ugb2YgYWxsIGJ1ZmZlcnMNCi1yZXF1aXJlZCBieSB0aGUgaW5zdGFuY2UuIFRoZSBudW1iZXIgb2YgaW5pdGlhbGl6ZWQgbWVtb3J5IHJlY29yZHMgaXMgZGVmaW5lZCBieSBMVlZFX05SX01FTU9SWV9SRUdJT05TLg0KLVRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzIGFuZCBpcyBjYWxsZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzOg0KLQ0KLUBsaSBNZW1vcnkgQWxsb2NhdGlvbjogV2hlbiB0aGUgTFZWRV9HZXRNZW1vcnlUYWJsZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIGEgTlVMTCBpbnN0YW5jZSBoYW5kbGUgKGhJbnN0YW5jZSA9IExWTV9OVUxMKQ0KLSAgICB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cy4gVGhlIGJhc2UgYWRkcmVzcyBwb2ludGVycyBpbiB0aGUgbWVtb3J5IHRhYmxlIGFyZSBzZXQgdG8gTlVMTC4NCi0gICAgQWxsIGVsZW1lbnRzIG9mIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzIHN0cnVjdHVyZSAocG9pbnRlZCB0byBieSBwSW5zdFBhcmFtcykgbXVzdCBjb250YWluIHZhbGlkIHZhbHVlcyBhcyB0aGUgbWVtb3J5DQotICAgIHJlcXVpcmVtZW50cyBhcmUgYWZmZWN0ZWQgYnkgdGhlc2Ugc2V0dGluZ3MuDQotDQotQGxpIE1lbW9yeSBGcmVlOiBXaGVuIGNhbGxlZCB3aXRoIGEgbm9uLU5VTEwgaW5zdGFuY2UgaGFuZGxlIChoSW5zdGFuY2UgPSBhIHZhbGlkIGluc3RhbmNlIGhhbmRsZSkNCi0gICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVtb3J5IHRhYmxlIHVzZWQgd2hlbiB0aGUgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQuDQotICAgICAgVGhlIGJhc2UgYWRkcmVzcyBwb2ludGVycyByZXR1cm5lZCB3aWxsIGJlIHRob3NlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIHdoZW4gdGhlIG1lbW9yeQ0KLSAgICAgIHdhcyBhbGxvY2F0ZWQgYW5kIGNhbiBub3cgYmUgdXNlZCBmb3IgZnJlZWluZyBtZW1vcnkuIFRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzIChwb2ludGVkIHRvIGJ5IHBJbnN0UGFyYW1zKQ0KLSAgICAgIGFyZSBpZ25vcmVkIGFuZCB0aGUgcEluc3RQYXJhbXMgcGFyYW1ldGVyIG1heSBiZSBzZXQgdG8gTlVMTC4NCi1AbGkgSW4gY2FzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgYWxsIGVsZW1lbnRzIG9mIHRoZSBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlIGRlZmluZWQgYnkgcEluc3RQYXJhbXMNCi0gICAgbXVzdCBjb250YWluIHZhbGlkIHZhbHVlcyBhcyB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhcmUgYWZmZWN0ZWQgYnkgdGhlc2Ugc2V0dGluZ3MuDQotICAgIEluIHNvbWUgcmVsZWFzZXMgb2YgdGhlIGJ1bmRsZSBsaWJyYXJ5IG9uZSBvciBtb3JlIG1lbW9yeSByZWdpb25zIG1heSBoYXZlIGEgemVybyBzaXplLg0KLQ0KLUBwcmUgVGhlIG51bWJlciBvZiBtZW1vcnkgcmVjb3JkcyBpbiB0aGUgYXJyYXkgZGVmaW5lZCBieSBwTWVtb3J5VGFibGUgaXMgZXF1YWwgdG8gQHJlZiBMVk1fTlJfTUVNT1JZX1JFR0lPTlMuDQotQHByZSBFeGFjdGx5IEByZWYgTFZNX05SX01FTU9SWV9SRUdJT05TIG1lbW9yeSByZWNvcmRzIG9mIHBNZW1vcnlUYWJsZSBhcmUgaW5pdGlhbGl6ZWQuDQotDQotQHBvc3QgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhJbnN0YW5jZSA9IE5VTEwgdGhlIG1lbW9yeSBiYXNlIGFkZHJlc3MgcG9pbnRlcnMNCi13aWxsIGJlIE5VTEwgb24gcmV0dXJuLg0KLUBwb3N0IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZnJlZWluZyBtZW1vcnksIGhJbnN0YW5jZSA9IEluc3RhbmNlIEhhbmRsZSB0aGUNCi1tZW1vcnkgdGFibGUgcmV0dXJucyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhbmQgYmFzZSBhZGRyZXNzZXMgdXNlZCBkdXJpbmcNCi1pbml0aWFsaXNhdGlvbi4NCi0NCi1AcmV0dXJuICBMVlZFX1NVQ0NFU1MgICAgICAgICAgIHdoZW4gdGhlIGZ1bmN0aW9uIGNhbGwgc3VjY2VlZHMgYW5kIHRoZSBtZW1vcnkgdGFibGUgaXMgZmlsbGVkIGNvcnJlY3RseQ0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgd2hlbiBwTWVtb3J5VGFibGUgd2FzIE5VTEwNCi1AcmV0dXJuICBMVlZFX05VTExBRERSRVNTICAgICAgIHdoZW4gcEluc3RQYXJhbXMgd2FzIE5VTEwgYW5kIHRoZSBjYWxsIHdhcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIE5VTEwuDQotQHJldHVybiAgTFZWRV9PVVRPRlJBTkdFICAgICAgICB3aGVuIHBJbnN0UGFyYW1zIGNvbnRhaW5zIHBhcmFtZXRlcnMgb3V0IG9mIHRoZSBleGNlcHRlZCByYW5nZQ0KLQ0KLUBub3RlICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgTFZWRV9UeF9Qcm9jZXNzIGZ1bmN0aW9uLg0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi0NCi1MVlZFX1R4X0dldE1lbW9yeVRhYmxlOiBNZW1vcnkgQWxsb2NhdGlvbiBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gZ2V0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciB0aGUgTFZWRV9UeCBpbnN0YW5jZS4NCi1cY29kZQ0KLSAgICBJbnN0UGFyYW1zX1R4LlNhbXBsZVJhdGUgICAgPSBMVk1fRlNfODAwMDsNCi0gICAgLy8gSW5jbHVkZSB0aGUgb3RoZXIgaW5zdGFuY2UgcGFyYW1zIGhlcmUNCi0NCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1R4X0dldE1lbW9yeVRhYmxlICggTFZNX05VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNZW1UYWJfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbnN0UGFyYW1zX1R4ICk7DQotDQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi0NCi0gICAgZm9yKCBjMSA9IDA7IGMxIDwgTFZWRV9OUl9NRU1PUllfUkVHSU9OUzsgYzErKyApDQotICAgIHsNCi0gICAgICAgIGlmKCBNZW1UYWJfVHguUmVnaW9uW2MxXS5TaXplICE9IDAgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIE1lbVRhYl9UeC5SZWdpb25bYzFdLnBCYXNlQWRkcmVzcyA9DQotICAgICAgICAgICAgICAgIG1hbGxvYyhNZW1UYWJfVHguUmVnaW9uW2MxXS5TaXplKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotTFZWRV9UeF9HZXRNZW1vcnlUYWJsZTogRnJlZWluZyBNZW1vcnkgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGZyZWUgdGhlIG1lbW9yeSBmcm9tIHRoZSBMVlZFX1R4IGluc3RhbmNlLg0KLQ0KLVxjb2RlDQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9UeF9HZXRNZW1vcnlUYWJsZSggaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtVGFiX1R4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fTlVMTCk7DQotDQotICAgICAgICBpZiAoTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnMNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGZvciggYzEgPSAwOyBjMSA8IExWVkVfTlJfTUVNT1JZX1JFR0lPTlM7IGMxKyspDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKE1lbVRhYl9UeC5SZWdpb25bYzFdLlNpemUgIT0gMCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGZyZWUoTWVtVGFiX1R4LlJlZ2lvbltjMV0ucEJhc2VBZGRyZXNzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfVHhfR2V0TWVtb3J5VGFibGUoTFZWRV9UeF9IYW5kbGVfdCAgICAgICAgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9NZW1vcnlUYWJsZV9zdCAgICAgICAgICAgICAqcE1lbW9yeVRhYmxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9UeF9JbnN0YW5jZVBhcmFtc19zdCAgICAgICpwSW5zdGFuY2VQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBSZXRyaWV2ZSB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBvZiB0aGUgTFZWRV9SeCBtb2R1bGUuDQotDQotVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdGFibGUgb2YgbWVtb3J5IHJlY29yZHMgdGhhdCBkZXNjcmliZSBzaXplLCB0eXBlIGFuZCBtZW1vcnkgc3BhY2Ugb2YgYWxsIGJ1ZmZlcnMNCi1yZXF1aXJlZCBieSB0aGUgaW5zdGFuY2UuIFRoZSBudW1iZXIgb2YgaW5pdGlhbGl6ZWQgbWVtb3J5IHJlY29yZHMgaXMgZGVmaW5lZCBieSBMVlZFX05SX01FTU9SWV9SRUdJT05TLg0KLVRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdHdvIHB1cnBvc2VzIGFuZCBpcyBjYWxsZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzOg0KLQ0KLUBsaSBNZW1vcnkgQWxsb2NhdGlvbjogV2hlbiB0aGUgTFZWRV9HZXRNZW1vcnlUYWJsZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIGEgTlVMTCBpbnN0YW5jZSBoYW5kbGUgKGhJbnN0YW5jZSA9IExWTV9OVUxMKQ0KLSAgICB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cy4gVGhlIGJhc2UgYWRkcmVzcyBwb2ludGVycyBpbiB0aGUgbWVtb3J5IHRhYmxlIGFyZSBzZXQgdG8gTlVMTC4NCi0gICAgQWxsIGVsZW1lbnRzIG9mIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzIHN0cnVjdHVyZSAocG9pbnRlZCB0byBieSBwSW5zdFBhcmFtcykgbXVzdCBjb250YWluIHZhbGlkIHZhbHVlcyBhcyB0aGUgbWVtb3J5DQotICAgIHJlcXVpcmVtZW50cyBhcmUgYWZmZWN0ZWQgYnkgdGhlc2Ugc2V0dGluZ3MuDQotDQotQGxpIE1lbW9yeSBGcmVlOiBXaGVuIGNhbGxlZCB3aXRoIGEgbm9uLU5VTEwgaW5zdGFuY2UgaGFuZGxlIChoSW5zdGFuY2UgPSBhIHZhbGlkIGluc3RhbmNlIGhhbmRsZSkNCi0gICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVtb3J5IHRhYmxlIHVzZWQgd2hlbiB0aGUgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQuDQotICAgICAgVGhlIGJhc2UgYWRkcmVzcyBwb2ludGVycyByZXR1cm5lZCB3aWxsIGJlIHRob3NlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIHdoZW4gdGhlIG1lbW9yeQ0KLSAgICAgIHdhcyBhbGxvY2F0ZWQgYW5kIGNhbiBub3cgYmUgdXNlZCBmb3IgZnJlZWluZyBtZW1vcnkuIFRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzIChwb2ludGVkIHRvIGJ5IHBJbnN0UGFyYW1zKQ0KLSAgICAgIGFyZSBpZ25vcmVkIGFuZCB0aGUgcEluc3RQYXJhbXMgcGFyYW1ldGVyIG1heSBiZSBzZXQgdG8gTlVMTC4NCi1AbGkgSW4gY2FzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgYWxsIGVsZW1lbnRzIG9mIHRoZSBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlIGRlZmluZWQgYnkgcEluc3RQYXJhbXMNCi0gICAgbXVzdCBjb250YWluIHZhbGlkIHZhbHVlcyBhcyB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhcmUgYWZmZWN0ZWQgYnkgdGhlc2Ugc2V0dGluZ3MuDQotICAgIEluIHNvbWUgcmVsZWFzZXMgb2YgdGhlIGJ1bmRsZSBsaWJyYXJ5IG9uZSBvciBtb3JlIG1lbW9yeSByZWdpb25zIG1heSBoYXZlIGEgemVybyBzaXplLg0KLQ0KLUBwcmUgVGhlIG51bWJlciBvZiBtZW1vcnkgcmVjb3JkcyBpbiB0aGUgYXJyYXkgZGVmaW5lZCBieSBwTWVtb3J5VGFibGUgaXMgZXF1YWwgdG8gQHJlZiBMVk1fTlJfTUVNT1JZX1JFR0lPTlMuDQotQHByZSBFeGFjdGx5IEByZWYgTFZNX05SX01FTU9SWV9SRUdJT05TIG1lbW9yeSByZWNvcmRzIG9mIHBNZW1vcnlUYWJsZSBhcmUgaW5pdGlhbGl6ZWQuDQotDQotQHBvc3QgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhJbnN0YW5jZSA9IE5VTEwgdGhlIG1lbW9yeSBiYXNlIGFkZHJlc3MgcG9pbnRlcnMNCi13aWxsIGJlIE5VTEwgb24gcmV0dXJuLg0KLUBwb3N0IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZnJlZWluZyBtZW1vcnksIGhJbnN0YW5jZSA9IEluc3RhbmNlIEhhbmRsZSB0aGUNCi1tZW1vcnkgdGFibGUgcmV0dXJucyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhbmQgYmFzZSBhZGRyZXNzZXMgdXNlZCBkdXJpbmcNCi1pbml0aWFsaXNhdGlvbi4NCi0NCi1AcmV0dXJuICBMVlZFX1NVQ0NFU1MgICAgICAgICAgIHdoZW4gdGhlIGZ1bmN0aW9uIGNhbGwgc3VjY2VlZHMgYW5kIHRoZSBtZW1vcnkgdGFibGUgaXMgZmlsbGVkIGNvcnJlY3RseQ0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgd2hlbiBwTWVtb3J5VGFibGUgd2FzIE5VTEwNCi1AcmV0dXJuICBMVlZFX05VTExBRERSRVNTICAgICAgIHdoZW4gcEluc3RQYXJhbXMgd2FzIE5VTEwgYW5kIHRoZSBjYWxsIHdhcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIE5VTEwuDQotQHJldHVybiAgTFZWRV9PVVRPRlJBTkdFICAgICAgICB3aGVuIHBJbnN0UGFyYW1zIGNvbnRhaW5zIHBhcmFtZXRlcnMgb3V0IG9mIHRoZSBleGNlcHRlZCByYW5nZQ0KLQ0KLUBub3RlICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uLg0KLQ0KLUBpbmdyb3VwIExWVkVfUngNCi0NCi1MVlZFX1J4X0dldE1lbW9yeVRhYmxlOiBNZW1vcnkgQWxsb2NhdGlvbiBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gZ2V0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciB0aGUgTFZWRV9SeCBpbnN0YW5jZS4NCi0NCi1cY29kZQ0KLSAgICBJbnN0UGFyYW1zX1J4LlNhbXBsZVJhdGUgICAgPSBMVk1fRlNfODAwMDsNCi0gICAgLy8gSW5jbHVkZSB0aGUgb3RoZXIgaW5zdGFuY2UgcGFyYW1zIGhlcmUNCi0NCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1J4X0dldE1lbW9yeVRhYmxlICggTFZNX05VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNZW1UYWJfUngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbnN0UGFyYW1zX1J4ICk7DQotDQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi0NCi0gICAgZm9yKCBjMSA9IDA7IGMxIDwgTFZWRV9OUl9NRU1PUllfUkVHSU9OUzsgYzErKyApDQotICAgIHsNCi0gICAgICAgIGlmKCBNZW1UYWJfUnguUmVnaW9uW2MxXS5TaXplICE9IDAgKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIE1lbVRhYl9SeC5SZWdpb25bYzFdLnBCYXNlQWRkcmVzcyA9DQotICAgICAgICAgICAgICAgIG1hbGxvYyhNZW1UYWJfUnguUmVnaW9uW2MxXS5TaXplKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotTFZWRV9SeF9HZXRNZW1vcnlUYWJsZTogRnJlZWluZyBNZW1vcnkgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGZyZWUgdGhlIG1lbW9yeSBmcm9tIHRoZSBMVlZFX1J4IGluc3RhbmNlLg0KLQ0KLVxjb2RlDQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9SeF9HZXRNZW1vcnlUYWJsZSggaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtVGFiX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fTlVMTCk7DQotDQotICAgICAgICBpZiAoTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnMNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGZvciggYzEgPSAwOyBjMSA8IExWVkVfTlJfTUVNT1JZX1JFR0lPTlM7IGMxKyspDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKE1lbVRhYl9SeC5SZWdpb25bYzFdLlNpemUgIT0gMCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGZyZWUoTWVtVGFiX1J4LlJlZ2lvbltjMV0ucEJhc2VBZGRyZXNzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotXGVuZGNvZGUNCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfR2V0TWVtb3J5VGFibGUoTFZWRV9SeF9IYW5kbGVfdCAgICAgICAgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9NZW1vcnlUYWJsZV9zdCAgICAgICAgICAgICAqcE1lbW9yeVRhYmxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9SeF9JbnN0YW5jZVBhcmFtc19zdCAgICAgICpwSW5zdGFuY2VQYXJhbXMpOw0KLQ0KLQ0KLS8qKg0KLUBicmllZiBDcmVhdGVkIGhhbmRsZSB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIExWVkVfVHggbW9kdWxlDQotDQotVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgTFZWRV9UeCBpbnN0YW5jZS4gQWxsIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgc2V0IHRvIGludmFsaWQgdmFsdWVzLg0KLVRoZSBtZW1vcnkgdGFibGUgcG9pbnRlZCB0byBieSBwTWVtb3J5VGFibGUgbXVzdCBiZSBjcmVhdGVkLiBJZiB0aGUgbWVtb3J5IHRhYmxlIGlzIG5vdCBjb3JyZWN0IHRoZW4gYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4NCi1UaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBvZiB0aGUgUnggYW5kIFR4IHVuaXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgaW5zdGFuY2UgcGFyYW1ldGVycyBzdXBwbGllZCBhbmQgc28gdGhlDQotaW5zdGFuY2UgcGFyYW1ldGVycyBwcm92aWRlZCBpbiB0aGlzIGZ1bmN0aW9uIGNhbGwgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aG9zZSB1c2VkIGluIHRoZSBAcmVmIExWVkVfVHhfR2V0TWVtb3J5VGFibGUgZnVuY3Rpb24gY2FsbHMNCi11c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4NCi0NCi1AcHJlIFRoZSBtZW1vcnkgcmVjb3JkcyB0YWJsZXMgZGVmaW5lZCBieSBwTWVtb3J5VGFibGUgY29udGFpbnMgcG9pbnRlcnMgdG8gbm9uLW92ZXJsYXBwaW5nIGJ1ZmZlcnMNCi13aXRoIHRoZSBzaXplIGFzIHJlcXVlc3RlZCB2aWEgdGhlIHByaW9yIGNhbGxzIHRvIHRoZSBMVlZFX1R4X0dldE1lbW9yeVRhYmxlIGZ1bmN0aW9ucy4NCi1AcHJlIFRoZSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIgc3RydWN0dXJlIGRlZmluZWQgYnkgcEluc3RQYXJhbXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdHJ1Y3R1cmUgcGFzc2VkDQotdG8gcHJpb3IgY2FsbCB0byBAcmVmIExWVkVfVHhfR2V0TWVtb3J5VGFibGUgZnVuY3Rpb25zLg0KLQ0KLQ0KLUBwYXJhbSAgcGhJbnN0YW5jZSAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW5zdGFuY2UgaGFuZGxlLg0KLUBwYXJhbSAgcE1lbW9yeVRhYmxlICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgbWVtb3J5IGRlZmluaXRpb24gdGFibGUuDQotQHBhcmFtICBwSW5zdGFuY2VQYXJhbXMgICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzLg0KLQ0KLUByZXR1cm4gIExWVkVfU1VDQ0VTUyAgICAgICAgICAgd2hlbiBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bA0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgV2hlbiBwaEluc3RhbmNlIG9yIHBNZW1vcnlUYWJsZSBvciBwSW5zdGFuY2VQYXJhbXMgaXMgTlVMTC4NCi1AcmV0dXJuICBMVlZFX05VTExBRERSRVNTICAgICAgIHdoZW4gb25lIG9yIG1vcmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIHdpdGggYSBub24temVybyBzaXplIGhhcyBiZWVuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIE5VTEwgYmFzZSBhZGRyZXNzIHBvaW50ZXIuDQotQHJldHVybiBMVlZFX09VVE9GUkFOR0UgICAgICAgICB3aGVuIHBJbnN0UGFyYW1zIGNvbnRhaW5zIHBhcmFtZXRlcnMgb3V0IG9mIHRoZSBleGNlcHRlZCByYW5nZQ0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi0NCi0gTFZWRV9UeF9HZXRJbnN0YW5jZUhhbmRsZSBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gaW5pdGlhbGl6ZSBMVlZFX1R4X0dldEluc3RhbmNlSGFuZGxlLg0KLQ0KLVxjb2RlDQotICAgIGhJbnN0YW5jZV9UeCA9IExWTV9OVUxMOw0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGUoICZoSW5zdGFuY2VfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1lbVRhYl9UeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5zdFBhcmFtc19UeCApOw0KLSAgICBpZiggTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi0NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1R4X0dldEluc3RhbmNlSGFuZGxlKExWVkVfVHhfSGFuZGxlX3QgICAgICAgICAgICAgICAgKnBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fTWVtb3J5VGFibGVfc3QgICAgICAgICAgICAgICpwTWVtb3J5VGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1R4X0luc3RhbmNlUGFyYW1zX3N0ICAgICAgICpwSW5zdGFuY2VQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBDcmVhdGVkIGhhbmRsZSB0byB0aGUgaW5zdGFuY2Ugb2YgdGhlIExWVkVfUnggbW9kdWxlDQotDQotVGhpcyBmdW5jdGlvbnMgaXMgdXNlZCB0byBjcmVhdGUgTFZWRV9SeCBpbnN0YW5jZS4gQWxsIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgc2V0IHRvIGludmFsaWQgdmFsdWVzLg0KLVRoZSBtZW1vcnkgdGFibGUgcG9pbnRlZCB0byBieSBwTWVtb3J5VGFibGUgbXVzdCBiZSBjcmVhdGVkLiBJZiB0aGUgbWVtb3J5IHRhYmxlIGlzIG5vdCBjb3JyZWN0IHRoZW4gYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4NCi1UaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBvZiB0aGUgUnggYW5kIFJ4IHVuaXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgaW5zdGFuY2UgcGFyYW1ldGVycyBzdXBwbGllZCBhbmQgc28gdGhlDQotaW5zdGFuY2UgcGFyYW1ldGVycyBwcm92aWRlZCBpbiB0aGlzIGZ1bmN0aW9uIGNhbGwgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aG9zZSB1c2VkIGluIHRoZSBAcmVmIExWVkVfUnhfR2V0TWVtb3J5VGFibGUgZnVuY3Rpb24gY2FsbHMNCi11c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4NCi0NCi1AcHJlIFRoZSBtZW1vcnkgcmVjb3JkcyB0YWJsZXMgZGVmaW5lZCBieSBwTWVtb3J5VGFibGUgY29udGFpbnMgcG9pbnRlcnMgdG8gbm9uLW92ZXJsYXBwaW5nIGJ1ZmZlcnMNCi13aXRoIHRoZSBzaXplIGFzIHJlcXVlc3RlZCB2aWEgdGhlIHByaW9yIGNhbGxzIHRvIHRoZSBMVlZFX1J4X0dldE1lbW9yeVRhYmxlIGZ1bmN0aW9ucy4NCi1AcHJlIFRoZSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIgc3RydWN0dXJlIGRlZmluZWQgYnkgcEluc3RQYXJhbXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdHJ1Y3R1cmUgcGFzc2VkDQotdG8gcHJpb3IgY2FsbCB0byBAcmVmIExWVkVfUnhfR2V0TWVtb3J5VGFibGUgZnVuY3Rpb25zLg0KLQ0KLQ0KLUBwYXJhbSAgcGhJbnN0YW5jZSAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW5zdGFuY2UgaGFuZGxlLg0KLUBwYXJhbSAgcE1lbW9yeVRhYmxlICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgbWVtb3J5IGRlZmluaXRpb24gdGFibGUuDQotQHBhcmFtICBwSW5zdGFuY2VQYXJhbXMgICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzLg0KLQ0KLUByZXR1cm4gIExWVkVfU1VDQ0VTUyAgICAgICAgICAgd2hlbiBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bA0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgV2hlbiBwaEluc3RhbmNlIG9yIHBNZW1vcnlUYWJsZSBvciBwSW5zdGFuY2VQYXJhbXMgaXMgTlVMTC4NCi1AcmV0dXJuICBMVlZFX05VTExBRERSRVNTICAgICAgIHdoZW4gb25lIG9yIG1vcmUgb2YgdGhlIG1lbW9yeSByZWdpb25zIHdpdGggYSBub24temVybyBzaXplIGhhcyBiZWVuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIE5VTEwgYmFzZSBhZGRyZXNzIHBvaW50ZXIuDQotQHJldHVybiBMVlZFX09VVE9GUkFOR0UgICAgICAgICB3aGVuIHBJbnN0UGFyYW1zIGNvbnRhaW5zIHBhcmFtZXRlcnMgb3V0IG9mIHRoZSBleGNlcHRlZCByYW5nZQ0KLQ0KLUBpbmdyb3VwIExWVkVfUngNCi0NCi0gTFZWRV9SeF9HZXRJbnN0YW5jZUhhbmRsZSBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gaW5pdGlhbGl6ZSBMVlZFX1J4X0dldEluc3RhbmNlSGFuZGxlLg0KLQ0KLVxjb2RlDQotICAgIGhJbnN0YW5jZV9SeCA9IExWTV9OVUxMOw0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfUnhfR2V0SW5zdGFuY2VIYW5kbGUoICZoSW5zdGFuY2VfUngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1lbVRhYl9SeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5zdFBhcmFtc19SeCApOw0KLSAgICBpZiggTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi0NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1J4X0dldEluc3RhbmNlSGFuZGxlKExWVkVfUnhfSGFuZGxlX3QgICAgICAgICAgICAgICAgKnBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fTWVtb3J5VGFibGVfc3QgICAgICAgICAgICAgICpwTWVtb3J5VGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1J4X0luc3RhbmNlUGFyYW1zX3N0ICAgICAgICpwSW5zdGFuY2VQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBSZXRyaWV2ZSB0aGUgY3VycmVudCBMVlZFX1R4IGNvbnRyb2wgcGFyYW1ldGVycy4NCi0NCi1UaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIExWVkVfVHggaW50byB0aGUgc3VwcGxpZWQNCi1wYXJhbWV0ZXIgc3RydWN0dXJlLCBwQ29udHJvbFBhcmFtcy4gVGhlIHZhbHVlcyByZXR1cm5lZCBhcmUgdGhlIHZhbHVlcyBnaXZlbiBpbiB0aGUgbGFzdCBzdWNjZXNzZnVsDQotY2FsbCB0byB0aGUgTFZWRV9UeF9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbi4NCi0NCi1AcGFyYW0gaEluc3RhbmNlICAgICAgICAgICAgICBJbnN0YW5jZSBoYW5kbGUNCi1AcGFyYW0gcENvbnRyb2xQYXJhbXMgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sIHBhcmFtZXRlcnMNCi0NCi1AcHJlICAgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotQHByZSAgIHBDb250cm9sUGFyYW1zIHNob3VsZCBiZSBhbGxvY2F0ZWQgYnkgY2FsbGVyLg0KLUBwb3N0ICBwQ29udHJvbFBhcmFtcyB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZXMgZ2l2ZW4gaW4gdGhlIGxhc3Qgc3VjY2Vzc2Z1bCBjYWxsIHRvDQotICAgICAgIHRoZSBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uLiBUaGV5IGFyZSBub3QgbmVjZXNzYXJpbHkgdGhlIHZhbHVlcw0KLSAgICAgICB1c2VkIGluIHRoZSBsYXN0IGNhbGwgdG8gdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbiwgdGhpcyB3aWxsIGJlIHRoZSBjYXNlIGlmDQotICAgICAgIExWVkVfVHhfU2V0Q29udHJvbFBhcmFtZXRlcnMgaGFzIGJlZW4gY2FsbGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gTFZWRV9UeF9Qcm9jZXNzLg0KLQ0KLUByZXR1cm4gTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBDb250cm9sUGFyYW1zIGlzIE5VTEwNCi0NCi1Abm90ZSBUaGUgTFZWRV9UeF9HZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nLg0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi0NCi1MVlZFX1R4X0dldENvbnRyb2xQYXJhbWV0ZXJzIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBnZXQgZGlmZmVyZW50IGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIExWVkVfVHggaW5zdGFuY2UuDQotDQotXGNvZGUNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1R4X0dldENvbnRyb2xQYXJhbWV0ZXJzKCAmaEluc3RhbmNlX1R4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb250cm9sUGFyYW1zX1R4ICk7DQotDQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfVHhfR2V0Q29udHJvbFBhcmFtZXRlcnMoICAgTFZWRV9UeF9IYW5kbGVfdCAgICAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0ICAgKnBDb250cm9sUGFyYW1zKTsNCi0NCi0vKioNCi1AYnJpZWYgUmV0cmlldmUgdGhlIGN1cnJlbnQgTFZWRV9SeCBjb250cm9sIHBhcmFtZXRlcnMuDQotDQotVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBmcm9tIHRoZSBMVlZFX1R4IGludG8gdGhlIHN1cHBsaWVkDQotcGFyYW1ldGVyIHN0cnVjdHVyZSwgcENvbnRyb2xQYXJhbXMuIFRoZSB2YWx1ZXMgcmV0dXJuZWQgYXJlIHRoZSB2YWx1ZXMgZ2l2ZW4gaW4gdGhlIGxhc3Qgc3VjY2Vzc2Z1bA0KLWNhbGwgdG8gdGhlIExWVkVfUnhfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24uDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgICAgICAgICAgSW5zdGFuY2UgaGFuZGxlDQotQHBhcmFtIHBDb250cm9sUGFyYW1zICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbCBwYXJhbWV0ZXJzDQotDQotQHByZSAgIGhJbnN0YW5jZSBzaG91bGQgYmUgdmFsaWQgaGFuZGxlLg0KLUBwcmUgICBwQ29udHJvbFBhcmFtcyBzaG91bGQgYmUgYWxsb2NhdGVkIGJ5IGNhbGxlci4NCi1AcG9zdCAgcENvbnRyb2xQYXJhbXMgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgdmFsdWVzIGdpdmVuIGluIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgY2FsbCB0bw0KLSAgICAgICB0aGUgTFZWRV9SeF9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbi4gVGhleSBhcmUgbm90IG5lY2Vzc2FyaWx5IHRoZSB2YWx1ZXMNCi0gICAgICAgdXNlZCBpbiB0aGUgbGFzdCBjYWxsIHRvIHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24sIHRoaXMgd2lsbCBiZSB0aGUgY2FzZSBpZg0KLSAgICAgICBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzIGhhcyBiZWVuIGNhbGxlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIExWVkVfVHhfUHJvY2Vzcy4NCi0NCi1AcmV0dXJuIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSBvciBwQ29udHJvbFBhcmFtcyBpcyBOVUxMDQotDQotQG5vdGUgVGhlIExWVkVfUnhfR2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZy4NCi0NCi1AaW5ncm91cCBMVlZFX1J4DQotDQotTFZWRV9SeF9HZXRDb250cm9sUGFyYW1ldGVycyBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gZ2V0IGRpZmZlcmVudCBjb250cm9sIHBhcmFtZXRlcnMgZm9yIHRoZSBMVlZFX1J4IGluc3RhbmNlLg0KLQ0KLVxjb2RlDQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9SeF9HZXRDb250cm9sUGFyYW1ldGVycyggJmhJbnN0YW5jZV9SeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29udHJvbFBhcmFtc19SeCApOw0KLQ0KLSAgICBpZiggTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi0NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1J4X0dldENvbnRyb2xQYXJhbWV0ZXJzKCAgIExWVkVfUnhfSGFuZGxlX3QgICAgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdCAgICpwQ29udHJvbFBhcmFtcyk7DQotDQotLyoqDQotQGJyaWVmIFNldHMgb3IgY2hhbmdlcyB0aGUgTFZWRV9UeCBtb2R1bGUgcGFyYW1ldGVycyB1c2luZyBDLXN0cmN1dHVyZS4NCi0NCi1UaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBuZXcgc2V0IG9mIHBhcmFtZXRlcnMgYW5kIG1ha2VzIGEgbG9jYWwgY29weSB3aXRoaW4NCi1MVlZFX1R4IGJ1dCB0aGUgcGFyYW1ldGVycyBhcmUgb25seSBhcHBsaWVkIG9uIHRoZSBuZXh0IGNhbGwgb2YgdGhlIExWVkVfVHhfUHJvY2Vzcw0KLWZ1bmN0aW9uLiBXaGVuIGEgcGFyYW1ldGVyIGlzIHVuY2hhbmdlZCBubyBhY3Rpb24gaXMgdGFrZW4uIFRoaXMgZnVuY3Rpb24gY2FuDQotYmUgY2FsbGVkIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgcHJvY2Vzc2luZywgZXZlbiB3aGVuIHRoZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24NCi1pcyBydW5uaW5nLiBMaWZlVmliZXMmdHJhZGU7IFZvaWNlRXhwZXJpZW5jZSBjb250cm9sIHBhcmFtZXRlcnMgY2FuIGJlIHNldCB1c2luZyB0d28gbWV0aG9kcy4NCi1Db250cm9sIFBhcmFtZXRlcnMgY2FuIGJlIHBvcHVsYXRlZCBpbiBhIFwiQ1wiIHN0eWxlIHN0cnVjdHVyZSAoYXMgZXhwbGFpbmVkIGluIGV4YW1wbGUpIGFuZCB0aGVuIHNlbnQgdG8gdGhlIGxpYnJhcnkuDQotQW5vdGhlciBtZXRob2QgaXMgdG8gcG9wdWxhdGUgY29udHJvbCBwYXJhbWV0ZXJzIGluIGEgYnl0ZSBhcnJheSBjYWxsZWQgUHJlc2V0IEJ1ZmZlciwgc2VlIEByZWYgTFZWRV9UeF9TZXRQcmVzZXQgZm9yIGV4YW1wbGUgdXNhZ2UuDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgICAgICAgICAgIEluc3RhbmNlIEhhbmRsZQ0KLUBwYXJhbSBwTmV3UGFyYW1zICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgcGFyYW1ldGVyIHN0cnVjdHVyZQ0KLQ0KLUBwcmUgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotDQotQHJldHVybiBMVlZFX1NVQ0NFU1MgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2Ugb3IgcE5ld1BhcmFtcyBpcyBOVUxMDQotQHJldHVybiBMVlZFX09VVE9GUkFOR0UgICAgICAgV2hlbiBwTmV3UGFyYW1zIGNvbnRhaW5zIHBhcmFtZXRlcnMgb2YgYWN0aXZhdGVkIG1vZHVsZXMgdGhhdCBhcmUgb3V0IG9mIHRoZSBleGNlcHRlZCByYW5nZQ0KLUByZXR1cm4gTFZWRV9JTlZBTElEX0FMR09SSVRITV9DT05GSUdVUkFUSU9OICBXaGVuIHR3byBtdXR1YWwgZXhjbHVzaXZlIGFsZ29yaXRobXMgYXJlIGJvdGggY29uZmlndXJlZCBPTiBhdCBydW4tdGltZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4sIE5vaXNlVm9pZCBhbmQgSGFuZHNGcmVlKQ0KLQ0KLQ0KLUBub3RlIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludGVycnVwdGVkIGJ5IHRoZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24NCi0NCi1AaW5ncm91cCBMVlZFX1R4DQotDQotTFZWRV9UeF9HZXRDb250cm9sUGFyYW1ldGVyczogU2V0dGluZyBDb250cm9sIFBhcmFtZXRlcnMgdXNpbmcgQy1TdHlsZSBzdHJ1Y3R1cmUgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHNldCBkaWZmZXJlbnQgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgTFZWRV9UeCBpbnN0YW5jZS4NCi0NCi1cY29kZQ0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfVHhfR2V0Q29udHJvbFBhcmFtZXRlcnMoICZoSW5zdGFuY2VfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRyb2xQYXJhbXNfVHggKTsNCi0NCi0gICAgaWYoIExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLQ0KLSAgICAgQ2hhbmdlIFBhcmFtZXRlcnMgYXMgcmVxdWlyZWQNCi0gICAgQ29udHJvbFBhcmFtc19UeC5WT0xfR2FpbiAgICAgICAgID0gVk9MX1RBQkxFW2ldOw0KLSAgICBDb250cm9sUGFyYW1zX1R4LlZDX0NvbnRyb2xQYXJhbXMgPSBWQ19UQUJMRVtpXTsNCi0NCi0gICAgLy8gVXBkYXRlIGluc3RhbmNlIHdpdGggbmV3IHBhcmFtZXRlcnMNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzKCAmaEluc3RhbmNlX1R4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb250cm9sUGFyYW1zX1R4ICk7DQotDQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi1cZW5kY29kZQ0KLQ0KLSovDQotDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9UeF9TZXRDb250cm9sUGFyYW1ldGVycyggICBMVlZFX1R4X0hhbmRsZV90ICAgICAgICAgICBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWVkVfVHhfQ29udHJvbFBhcmFtc19zdCAqIGNvbnN0IHBOZXdQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBTZXRzIG9yIGNoYW5nZXMgdGhlIExWVkVfUnggbW9kdWxlIHBhcmFtZXRlcnMgdXNpbmcgQy1zdHJ1Y3R1cmUuDQotDQotVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgbmV3IHNldCBvZiBwYXJhbWV0ZXJzIGFuZCBtYWtlcyBhIGxvY2FsIGNvcHkgd2l0aGluDQotTFZWRV9SeCBidXQgdGhlIHBhcmFtZXRlcnMgYXJlIG9ubHkgYXBwbGllZCBvbiB0aGUgbmV4dCBjYWxsIG9mIHRoZSBMVlZFX1J4X1Byb2Nlc3MNCi1mdW5jdGlvbi4gV2hlbiBhIHBhcmFtZXRlciBpcyB1bmNoYW5nZWQgbm8gYWN0aW9uIGlzIHRha2VuLiBUaGlzIGZ1bmN0aW9uIGNhbg0KLWJlIGNhbGxlZCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHByb2Nlc3NpbmcsIGV2ZW4gd2hlbiB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uDQotaXMgcnVubmluZy4gTGlmZVZpYmVzJnRyYWRlOyBWb2ljZUV4cGVyaWVuY2UgY29udHJvbCBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgdXNpbmcgdHdvIG1ldGhvZHMuDQotQ29udHJvbCBQYXJhbWV0ZXJzIGNhbiBiZSBwb3B1bGF0ZWQgaW4gYSBcIkNcIiBzdHlsZSBzdHJ1Y3R1cmUgKGFzIGV4cGxhaW5lZCBpbiBleGFtcGxlKSBhbmQgdGhlbiBzZW50IHRvIHRoZSBsaWJyYXJ5Lg0KLUFub3RoZXIgbWV0aG9kIGlzIHRvIHBvcHVsYXRlIGNvbnRyb2wgcGFyYW1ldGVycyBpbiBhIGJ5dGUgYXJyYXkgY2FsbGVkIFByZXNldCBCdWZmZXIsIHNlZSBAcmVmIExWVkVfUnhfU2V0UHJlc2V0IGZvciBleGFtcGxlIHVzYWdlLg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICAgICAgICAgICBJbnN0YW5jZSBIYW5kbGUNCi1AcGFyYW0gcE5ld1BhcmFtcyAgICAgICAgICAgICAgUG9pbnRlciB0byBhIHBhcmFtZXRlciBzdHJ1Y3R1cmUNCi0NCi1AcHJlIGhJbnN0YW5jZSBzaG91bGQgYmUgdmFsaWQgaGFuZGxlLg0KLQ0KLUByZXR1cm4gTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBOZXdQYXJhbXMgaXMgTlVMTA0KLUByZXR1cm4gTFZWRV9PVVRPRlJBTkdFICAgICAgIFdoZW4gcE5ld1BhcmFtcyBjb250YWlucyBwYXJhbWV0ZXJzIG9mIGFjdGl2YXRlZCBtb2R1bGVzIHRoYXQgYXJlIG91dCBvZiB0aGUgZXhjZXB0ZWQgcmFuZ2UNCi1AcmV0dXJuIExWVkVfSU5WQUxJRF9BTEdPUklUSE1fQ09ORklHVVJBVElPTiAgV2hlbiB0d28gbXV0dWFsIGV4Y2x1c2l2ZSBhbGdvcml0aG1zIGFyZSBib3RoIGNvbmZpZ3VyZWQgT04gYXQgcnVuLXRpbWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuLCBOb2lzZVZvaWQgYW5kIEhhbmRzRnJlZSkNCi0NCi0NCi1Abm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uDQotDQotQGluZ3JvdXAgTFZWRV9SeA0KLQ0KLUxWVkVfUnhfR2V0Q29udHJvbFBhcmFtZXRlcnM6IFNldHRpbmcgQ29udHJvbCBQYXJhbWV0ZXJzIHVzaW5nIEMtU3R5bGUgc3RydWN0dXJlIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBzZXQgZGlmZmVyZW50IGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIExWVkVfUnggaW5zdGFuY2UuDQotDQotXGNvZGUNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1J4X0dldENvbnRyb2xQYXJhbWV0ZXJzKCAmaEluc3RhbmNlX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb250cm9sUGFyYW1zX1J4ICk7DQotDQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi0NCi0gICAgIENoYW5nZSBQYXJhbWV0ZXJzIGFzIHJlcXVpcmVkDQotICAgIENvbnRyb2xQYXJhbXNfUnguVk9MX0dhaW4gICAgICAgICA9IFZPTF9UQUJMRVtpXTsNCi0gICAgQ29udHJvbFBhcmFtc19SeC5WQ19Db250cm9sUGFyYW1zID0gVkNfVEFCTEVbaV07DQotDQotICAgIC8vIFVwZGF0ZSBpbnN0YW5jZSB3aXRoIG5ldyBwYXJhbWV0ZXJzDQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9SeF9TZXRDb250cm9sUGFyYW1ldGVycyggJmhJbnN0YW5jZV9SeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29udHJvbFBhcmFtc19SeCApOw0KLQ0KLSAgICBpZiggTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfU2V0Q29udHJvbFBhcmFtZXRlcnMoICAgTFZWRV9SeF9IYW5kbGVfdCAgICAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QgKiBjb25zdCBwTmV3UGFyYW1zKTsNCi0NCi0vKioNCi1AYnJpZWYgUmV0cmlldmUgdGhlIGN1cnJlbnQgTFZWRV9UeCBzdGF0dXMgcGFyYW1ldGVycy4NCi0NCi1UaGlzIGZ1bmN0aW9uIGNvcGllcyBpbnRlcm5hbCBzdGF0dXMgdmFyaWFibGVzIGludG8gdGhlIHN1cHBsaWVkIHN0YXR1cw0KLXBhcmFtZXRlciBzdHJ1Y3R1cmVzLg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICBJbnN0YW5jZSBoYW5kbGUNCi1AcGFyYW0gcFN0YXR1c1BhcmFtcyAgUG9pbnRlciB0byB0aGUgc3RhdHVzIHBhcmFtZXRlcnMNCi0NCi1AcHJlICAgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotQHByZSAgIHBTdGF0dXNQYXJhbXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBieSBjYWxsZXIuDQotQHBvc3QgIHBTdGF0dXNQYXJhbXMgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgbGF0ZXN0IHN0YXR1cyB2YWx1ZXMgb2YgTFZWRV9UeC4NCi0NCi1AcmV0dXJuIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSBvciBwU3RhdHVzUGFyYW1zIGlzIE5VTEwNCi0NCi1Abm90ZSBUaGUgTFZWRV9UeF9HZXRTdGF0dXNQYXJhbWV0ZXJzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcuDQotVGhpcyBmdW5jdGlvbiBjYW4gcnVuIGluIGRpZmZlcmVudCB0aHJlYWRzIHRoYW4gdGhlIHByb2Nlc3MgZnVuY3Rpb25zLg0KLQ0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi0NCi1MVlZFX1R4X0dldFN0YXR1c1BhcmFtZXRlcnM6IEdldCBJbnRlcm5hbCBBbGdvcml0aG0gU3RhdHVzIEF0dHJpYnV0ZXMgRXhhbXBsZToNCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBMVlZFX1R4X0dldFN0YXR1c1BhcmFtZXRlcnMgZnVuY3Rpb24gY2FsbC4NCi0NCi1cY29kZQ0KLSAgICBMVlZFX1R4X1N0YXR1c1BhcmFtc19zdCAgVHhfTW9uaXRvcjsNCi0gICAgU3RhdHVzPUxWVkVfVHhfR2V0U3RhdHVzUGFyYW1ldGVycyhoSW5zdGFuY2VfVHgsJlR4X01vbml0b3IpOw0KLSAgICBpZiAoU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgLy8gRXJyb3IgSGFuZGxpbmcNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi0NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1R4X0dldFN0YXR1c1BhcmFtZXRlcnMoICAgIExWVkVfVHhfSGFuZGxlX3QgICAgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWVkVfVHhfU3RhdHVzUGFyYW1zX3N0ICAgICpwU3RhdHVzUGFyYW1zKTsNCi0NCi0vKioNCi1AYnJpZWYgUmV0cmlldmUgdGhlIGN1cnJlbnQgTFZWRV9SeCBzdGF0dXMgcGFyYW1ldGVycy4NCi0NCi1UaGlzIGZ1bmN0aW9uIGNvcGllcyBpbnRlcm5hbCBzdGF0dXMgdmFyaWFibGVzIGludG8gdGhlIHN1cHBsaWVkIHN0YXR1cw0KLXBhcmFtZXRlciBzdHJ1Y3R1cmVzLg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICBJbnN0YW5jZSBoYW5kbGUNCi1AcGFyYW0gcFN0YXR1c1BhcmFtcyAgUG9pbnRlciB0byB0aGUgc3RhdHVzIHBhcmFtZXRlcnMNCi0NCi1AcHJlICAgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotQHByZSAgIHBTdGF0dXNQYXJhbXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBieSBjYWxsZXIuDQotQHBvc3QgIHBTdGF0dXNQYXJhbXMgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgbGF0ZXN0IHN0YXR1cyB2YWx1ZXMgb2YgTFZWRV9SeC4NCi0NCi1AcmV0dXJuIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSBvciBwU3RhdHVzUGFyYW1zIGlzIE5VTEwNCi0NCi1Abm90ZSBUaGUgTFZWRV9SeF9HZXRTdGF0dXNQYXJhbWV0ZXJzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcuDQotVGhpcyBmdW5jdGlvbiBjYW4gcnVuIGluIGRpZmZlcmVudCB0aHJlYWRzIHRoYW4gdGhlIHByb2Nlc3MgZnVuY3Rpb25zLg0KLQ0KLUBpbmdyb3VwIExWVkVfUngNCi0NCi1MVlZFX1J4X0dldFN0YXR1c1BhcmFtZXRlcnM6IEdldCBJbnRlcm5hbCBBbGdvcml0aG0gU3RhdHVzIEF0dHJpYnV0ZXMgRXhhbXBsZToNCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBMVlZFX1J4X0dldFN0YXR1c1BhcmFtZXRlcnMgZnVuY3Rpb24gY2FsbC4NCi0NCi1cY29kZQ0KLSAgICBMVlZFX1J4X1N0YXR1c1BhcmFtc19zdCAgUnhfTW9uaXRvcjsNCi0gICAgU3RhdHVzPUxWVkVfUnhfR2V0U3RhdHVzUGFyYW1ldGVycyhoSW5zdGFuY2VfUngsJlJ4X01vbml0b3IpOw0KLSAgICBpZiAoU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgLy8gRXJyb3IgSGFuZGxpbmcNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi0NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1J4X0dldFN0YXR1c1BhcmFtZXRlcnMoICAgIExWVkVfUnhfSGFuZGxlX3QgICAgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWVkVfUnhfU3RhdHVzUGFyYW1zX3N0ICAgICpwU3RhdHVzUGFyYW1zKTsNCi0NCi0vKioNCi1AYnJpZWYgUmVzZXRzIHRoZSBMVlZFX1R4IG1vZHVsZS4NCi0NCi1UaGUgTFZWRV9UeCBtb2R1bGUgaW5zdGFuY2UgbWVtb3J5IGNvbnRhaW5zIGRhdGEgd2hpY2ggZGVwZW5kIG9uIHRoZSBpbnB1dA0KLXNhbXBsZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIHByZXZpb3VzbHkuICBUaGVzZSBkYXRhIGFyZSBidWZmZXJzDQotdXNlZCBmb3IgZmlsdGVyIHRhYnMgYW5kIGRlbGF5IGxpbmVzIGFuZCBhbHNvIGFkYXB0aXZlIGNvZWZmaWNpZW50cyBvZiB0aGUNCi1hbGdvcml0aG0uICBUaGUgTFZWRV9UeF9SZXNldEluc3RhbmNlIGZ1bmN0aW9uIHJlc2V0cyB0aGlzIGlucHV0IGRlcGVuZGVudCBkYXRhLg0KLQ0KLVRoZSBMVlZFX1R4X1Jlc2V0SW5zdGFuY2UgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBpcyBhDQotZGlzY29udGludWl0eSBpbiB0aGUgaW5wdXQgYXVkaW8gc3RyZWFtLiAgQSBkaXNjb250aW51aXR5IG1lYW5zIHRoYXQgdGhlDQotY3VycmVudCBibG9jayBvZiBzYW1wbGVzIGlzIG5vdCBjb250aWd1b3VzIHdpdGggdGhlIHByZXZpb3VzIGJsb2NrIG9mIHNhbXBsZXMuDQotRXhhbXBsZXMgYXJlDQotQGxpIENhbGxpbmcgdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbiBhZnRlciBhIHBlcmlvZCBvZiBpbmFjdGl2aXR5DQotQGxpIEJ1ZmZlciB1bmRlcnJ1biBvciBvdmVyZmxvdyBpbiB0aGUgYXVkaW8gZHJpdmVyDQotVGhlIExWVkVfUmVzZXRJbnN0YW5jZSBmdW5jdGlvbiBvZiB0aGUgVHggYW5kL29yIFR4IFVuaXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkgYXMgcmUtYWRhcHRhdGlvbg0KLW9mIGludGVybmFsIGFsZ29yaXRobXMgd2lsbCBvY2N1ci4NCi1UaGUgTFZWRV9SZXNldEluc3RhbmNlIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLCBldmVuIHdoZW4gTFZWRV9Qcm9jZXNzIGlzIHJ1bm5pbmcuIFRoZSByZXNldCB3aWxsIGJlDQotYXBwbGllZCBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY2FsbCBvZiB0aGUgTFZWRV9UeF9Qcm9jZXNzIGZ1bmN0aW9uLg0KLQ0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICAgICAgICAgICBJbnN0YW5jZSBIYW5kbGUNCi1AcGFyYW0gcFJlc2V0UGFyYW1zICAgICAgICAgICAgUmVzZXQgVHlwZQ0KLQ0KLUBwcmUgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotDQotQHBvc3QgRGVwZW5kaW5nIG9uIHRoZSBSZXNldFR5cGUgdmFsdWUsIHRoZSBMVlZFX1R4X1Jlc2V0SW5zdGFuY2UgZnVuY3Rpb24gY2FuDQotcGVyZm9ybToNCi1AbGkgU29mdCByZXNldDogcGFydGlhbCByZXNldCBvZiBpbnRlcm5hbCBidWZmZXJzIGFuZCBhZGFwdGl2ZSBiZWhhdmlvci4gVG8gYmUgdXNlZCBmb3IgdmVyeSBzaG9ydA0KLWludGVycnVwdGlvbiBvciBkaXNjb250aW51aXR5LCBlLmcuLCBidWZmZXIgdW5kZXItcnVuIG9yIG92ZXJmbG93IGluIHRoZSBhdWRpbyBkcml2ZXIgaW5mbHVlbmNpbmcgdGhlIGVjaG8gcGF0aCBkZWxheS4NCi1AbGkgSGFyZCByZXNldDogZnVsbCByZXNldCBvZiBhbGwgaW50ZXJuYWwgYnVmZmVycyBhbmQgYWRhcHRpdmUgYmVoYXZpb3IuIFRvIGJlIHVzZWQgZm9yIGxvbmcNCi1pbnRlcnJ1cHRpb24gb3IgZGlzY29udGludWl0eSwgZS5nLiwgYmVmb3JlIGNhbGxpbmcgdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbiBhZnRlciBhIGxvbmcgcGVyaW9kIG9mIGluYWN0aXZpdHkNCi1pbiBiZXR3ZWVuIGNhbGxzIGluIGNhc2UgaW5zdGFuY2Ugd2FzIG5vdCBmcmVlZC4NCi0NCi1AcmV0dXJuIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSBvciBwUmVzZXRQYXJhbXMgaXMgTlVMTA0KLUByZXR1cm4gTFZWRV9PVVRPRlJBTkdFICAgICAgIFdoZW4gY29udGVudCBvZiBwUmVzZXRQYXJhbXMgaXMgaW52YWxpZA0KLQ0KLUBub3RlIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludGVycnVwdGVkIGJ5IHRoZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24NCi0NCi1AaW5ncm91cCBMVlZFX1R4DQotDQotTFZWRV9UeF9SZXNldEluc3RhbmNlIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgTFZWRV9UeF9SZXNldEluc3RhbmNlLg0KLVxjb2RlDQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9UeF9SZXNldEluc3RhbmNlKGhJbnN0YW5jZSwgcFJlc2V0UGFyYW1zKTsNCi0NCi0gICAgaWYgKExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUykNCi0gICAgew0KLSAgICAgICAgLy8gSGFuZGxlIExWVkVfVHhfUmVzZXRJbnN0YW5jZSBlcnJvcnMNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1R4X1Jlc2V0SW5zdGFuY2UoICBMVlZFX1R4X0hhbmRsZV90ICAgICAgICBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9UeF9SZXNldFBhcmFtc19zdCAqcFJlc2V0UGFyYW1zICApOw0KLQ0KLS8qKg0KLUBicmllZiBSZXNldHMgdGhlIExWVkVfUnggbW9kdWxlLg0KLQ0KLVRoZSBMVlZFX1J4IG1vZHVsZSBpbnN0YW5jZSBtZW1vcnkgY29udGFpbnMgZGF0YSB3aGljaCBkZXBlbmQgb24gdGhlIGlucHV0DQotc2FtcGxlcyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgcHJldmlvdXNseS4gIFRoZXNlIGRhdGEgYXJlIGJ1ZmZlcnMNCi11c2VkIGZvciBmaWx0ZXIgdGFicyBhbmQgZGVsYXkgbGluZXMgYW5kIGFsc28gYWRhcHRpdmUgY29lZmZpY2llbnRzIG9mIHRoZQ0KLWFsZ29yaXRobS4gIFRoZSBMVlZFX1J4X1Jlc2V0SW5zdGFuY2UgZnVuY3Rpb24gcmVzZXRzIHRoaXMgaW5wdXQgZGVwZW5kZW50IGRhdGEuDQotDQotVGhlIExWVkVfUnhfUmVzZXRJbnN0YW5jZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIGENCi1kaXNjb250aW51aXR5IGluIHRoZSBpbnB1dCBhdWRpbyBzdHJlYW0uICBBIGRpc2NvbnRpbnVpdHkgbWVhbnMgdGhhdCB0aGUNCi1jdXJyZW50IGJsb2NrIG9mIHNhbXBsZXMgaXMgbm90IGNvbnRpZ3VvdXMgd2l0aCB0aGUgcHJldmlvdXMgYmxvY2sgb2Ygc2FtcGxlcy4NCi1FeGFtcGxlcyBhcmUNCi1AbGkgQ2FsbGluZyB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uIGFmdGVyIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkNCi1AbGkgQnVmZmVyIHVuZGVycnVuIG9yIG92ZXJmbG93IGluIHRoZSBhdWRpbyBkcml2ZXINCi1UaGUgTFZWRV9SZXNldEluc3RhbmNlIGZ1bmN0aW9uIG9mIHRoZSBSeCBhbmQvb3IgVHggVW5pdCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBhcyByZS1hZGFwdGF0aW9uDQotb2YgaW50ZXJuYWwgYWxnb3JpdGhtcyB3aWxsIG9jY3VyLg0KLVRoZSBMVlZFX1Jlc2V0SW5zdGFuY2UgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIGV2ZW4gd2hlbiBMVlZFX1Byb2Nlc3MgaXMgcnVubmluZy4gVGhlIHJlc2V0IHdpbGwgYmUNCi1hcHBsaWVkIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjYWxsIG9mIHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24uDQotDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgICAgICAgICAgIEluc3RhbmNlIEhhbmRsZQ0KLUBwYXJhbSBwUmVzZXRQYXJhbXMgICAgICAgICAgICBSZXNldCBUeXBlDQotDQotQHByZSBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi0NCi1AcG9zdCBEZXBlbmRpbmcgb24gdGhlIFJlc2V0VHlwZSB2YWx1ZSwgdGhlIExWVkVfUnhfUmVzZXRJbnN0YW5jZSBmdW5jdGlvbiBjYW4NCi1wZXJmb3JtOg0KLUBsaSBTb2Z0IHJlc2V0OiBwYXJ0aWFsIHJlc2V0IG9mIGludGVybmFsIGJ1ZmZlcnMgYW5kIGFkYXB0aXZlIGJlaGF2aW9yLiBUbyBiZSB1c2VkIGZvciB2ZXJ5IHNob3J0DQotaW50ZXJydXB0aW9uIG9yIGRpc2NvbnRpbnVpdHksIGUuZy4sIGJ1ZmZlciB1bmRlci1ydW4gb3Igb3ZlcmZsb3cgaW4gdGhlIGF1ZGlvIGRyaXZlciBpbmZsdWVuY2luZyB0aGUgZWNobyBwYXRoIGRlbGF5Lg0KLUBsaSBIYXJkIHJlc2V0OiBmdWxsIHJlc2V0IG9mIGFsbCBpbnRlcm5hbCBidWZmZXJzIGFuZCBhZGFwdGl2ZSBiZWhhdmlvci4gVG8gYmUgdXNlZCBmb3IgbG9uZw0KLWludGVycnVwdGlvbiBvciBkaXNjb250aW51aXR5LCBlLmcuLCBiZWZvcmUgY2FsbGluZyB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uIGFmdGVyIGEgbG9uZyBwZXJpb2Qgb2YgaW5hY3Rpdml0eQ0KLWluIGJldHdlZW4gY2FsbHMgaW4gY2FzZSBpbnN0YW5jZSB3YXMgbm90IGZyZWVkLg0KLQ0KLUByZXR1cm4gTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBSZXNldFBhcmFtcyBpcyBOVUxMDQotQHJldHVybiBMVlZFX09VVE9GUkFOR0UgICAgICAgV2hlbiBjb250ZW50IG9mIHBSZXNldFBhcmFtcyBpcyBpbnZhbGlkDQotDQotQG5vdGUgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIExWVkVfUnhfUHJvY2VzcyBmdW5jdGlvbg0KLQ0KLUBpbmdyb3VwIExWVkVfUngNCi0NCi1MVlZFX1J4X1Jlc2V0SW5zdGFuY2UgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBMVlZFX1J4X1Jlc2V0SW5zdGFuY2UuDQotXGNvZGUNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1J4X1Jlc2V0SW5zdGFuY2UoaEluc3RhbmNlLCBwUmVzZXRQYXJhbXMpOw0KLQ0KLSAgICBpZiAoTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgTFZWRV9SeF9SZXNldEluc3RhbmNlIGVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfUmVzZXRJbnN0YW5jZSggIExWVkVfUnhfSGFuZGxlX3QgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1J4X1Jlc2V0UGFyYW1zX3N0ICpwUmVzZXRQYXJhbXMgICk7DQotDQotLyoqDQotQGJyaWVmIFByb2Nlc3NlcyBhIGJsb2NrIG9mIHNhbXBsZXMgYnkgdGhlIExWVkVfVHggbW9kdWxlLg0KLQ0KLVRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSBibG9jayBvZiBzYW1wbGVzIGFzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgY3VycmVudA0KLXBhcmFtZXRlciBzZXR0aW5ncy4gSWYgbmV3IHBhcmFtZXRlcnMgaGF2ZSBiZWVuIGdpdmVuIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8NCi1MVlZFX1R4X1Byb2Nlc3MgdGhlbiB0aGVzZSB3aWxsIGJlIGFwcGxpZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHByb2Nlc3MgY2FsbC4NCi0NCi1AcGFyYW0gaEluc3RhbmNlICAgICAgSW5zdGFuY2UgSGFuZGxlDQotQHBhcmFtIHBJbkRhdGFNaWMwICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IHNwZWVjaCBzYW1wbGUgYnVmZmVyIChwaW1hcnkgbWljcm9waG9uZSkuDQotQHBhcmFtIHBJbkRhdGFNaWMxICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IHNwZWVjaCBzYW1wbGUgYnVmZmVyIChzZWNvbmRhcnkgbWljcm9waG9uZSkuDQotQHBhcmFtIHBSZWZEYXRhICAgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IGZhcmVuZCByZWZlcmVuY2UgYnVmZmVyLg0KLUBwYXJhbSBwTm9pc2VEYXRhICAgICBQb2ludGVyIHRvIHRoZSBvdXRwdXQgbm9pc2UgcmVmZXJlbmNlIGJ1ZmZlci4NCi1AcGFyYW0gcE91dERhdGEgICAgICAgUG9pbnRlciB0byB0aGUgb3V0cHV0IHNhbXBsZSBidWZmZXIuDQotQHBhcmFtIE51bVNhbXBsZXMgICAgIFRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzIHNob3VsZCBiZSBpbnRlZ2VyIG11bHRpcGxlKG4pIG9mIHZhbHVlcyBpbiB0YWJsZS4NCi0gICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYSBmcnF1ZW5jeSBkZXBlbmRhbnQgcGFyYW10ZXIuDQotPHRhYmxlIGJvcmRlcj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48Yj5Vbml0PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5RIGZvcm1hdDwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGF0YSBSYW5nZTwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGVmYXVsdCBWYWx1ZXM8L2I+PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjxiPlNhbXBsZXM8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPlExNi4wPC9iPjwvdGQ+DQotICAgICAgIDx0ZD5ueDgwIGZvciA4a0h6PC90ZD4NCi0gICAgICAgPHRkPjgwIGZvciA4a0h6PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+bngxNjAgZm9yIDE2a0h6PC90ZD4NCi0gICAgICAgPHRkPjE2MCBmb3IgMTZrSHo8L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD5ueDI0MCBmb3IgMjRrSHo8L3RkPg0KLSAgICAgICA8dGQ+MjQwIGZvciAyNGtIejwvdGQ+DQotICAgPC90cj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPm54MzIwIGZvciAzMmtIejwvdGQ+DQotICAgICAgIDx0ZD4zMjAgZm9yIDMya0h6PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+bng0ODAgZm9yIDQ4a0h6PC90ZD4NCi0gICAgICAgPHRkPjQ4MCBmb3IgNDhrSHo8L3RkPg0KLSAgIDwvdHI+DQotPC90YWJsZT4NCi0NCi1AcHJlIGhJbnN0YW5jZSBzaG91bGQgYmUgdmFsaWQgaGFuZGxlLg0KLUBwcmUgTFZWRV9UeF9TZXRDb250cm9sUGFyYW1ldGVycyBzaG91bGQgYmUgY2FsbGVkIHN1Y2Nlc3NmdWxseSBvbmNlIGJlZm9yZS4NCi10aGUgZmlyc3QgY2FsbCB0byBMVlZFX1R4X1Byb2Nlc3MNCi1AcHJlIHBJbkRhdGEgaXMgZmlsbGVkIHdpdGggdGhlIGlucHV0IHNhbXBsZXMgdG8gcHJvY2Vzcy4NCi0NCi1AcG9zdCBwT3V0RGF0YSBjb250YWlucyB0aGUgcHJvY2Vzc2VkIHNhbXBsZXMuDQotDQotQHJldHVybiBMVlZFX1NVQ0NFU1MgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2UsIHBJbkRhdGEgb3IgcE91dERhdGEgaXMgTlVMTA0KLUByZXR1cm4gTFZWRV9JTlZBTElETlVNU0FNUExFUyBXaGVuIHRoZSBOdW1TYW1wbGVzIGlzIG91dHNpZGUgdGhlIGFsbG93ZWQNCi1yYW5nZQ0KLUByZXR1cm4gTFZWRV9JTlZBTElEX1NUQVRFX0NPTkZJR1VSQVRJT04gV2hlbiBpbnZhbGlkIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gZm91bmQNCi0NCi1AaW5ncm91cCBMVlZFX1R4DQotDQotTFZWRV9UeF9Qcm9jZXNzIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgTFZWRV9UeF9Qcm9jZXNzIGZ1bmN0aW9uIGNhbGwNCi0NCi1cY29kZQ0KLSAgICAvLyBUeCBQcm9jZXNzaW5nDQotICAgIExWVkVfU1RBVFVTID0gTFZWRV9UeF9Qcm9jZXNzKCBoSW5zdGFuY2VfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSW5EYXRhX1R4MCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbkRhdGFfVHgxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEluRGF0YV9SZWYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9pc2VEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE91dERhdGFfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1TYW1wbGVzICk7DQotICAgIGlmIChMVlZFX1NUQVRVUyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgIC8vIEVycm9yIEhhbmRsaW5nDQotICAgIH0NCi1cZW5kY29kZQ0KLQ0KLSovDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9UeF9Qcm9jZXNzKCAgIExWVkVfVHhfSGFuZGxlX3QgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMVk1fSU5UMTYgICAgICpwSW5EYXRhTWljMCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZNX0lOVDE2ICAgICAqcEluRGF0YU1pYzEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWTV9JTlQxNiAgICAgKnBSZWZEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fSU5UMTYgICAgICAgICAgICpwTm9pc2VEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fSU5UMTYgICAgICAgICAgICpwT3V0RGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZNX1VJTlQxNiAgICBOdW1TYW1wbGVzKTsNCi0NCi0vKioNCi1AYnJpZWYgUHJvY2Vzc2VzIGEgYmxvY2sgb2Ygc2FtcGxlcyBieSB0aGUgTFZWRV9SeCBtb2R1bGUuDQotDQotVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIGJsb2NrIG9mIHNhbXBsZXMgYXMgY29uZmlndXJlZCB3aXRoIHRoZSBjdXJyZW50DQotcGFyYW1ldGVyIHNldHRpbmdzLiBJZiBuZXcgcGFyYW1ldGVycyBoYXZlIGJlZW4gZ2l2ZW4gc2luY2UgdGhlIGxhc3QgY2FsbCB0bw0KLUxWVkVfUnhfUHJvY2VzcyB0aGVuIHRoZXNlIHdpbGwgYmUgYXBwbGllZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgcHJvY2VzcyBjYWxsLg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICBJbnN0YW5jZSBIYW5kbGUNCi1AcGFyYW0gcEluRGF0YSAgICAgICAgUG9pbnRlciB0byB0aGUgaW5wdXQgc2FtcGxlIGJ1ZmZlcg0KLUBwYXJhbSBwTm9pc2VEYXRhICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBub2lzZSBidWZmZXIgKGZvciBMVlZDIG9ubHkpLiBQb2ludGVyIHRvIHRoZSBpbnB1dCBub2lzZSByZWZlcmVuY2UgYnVmZmVyLg0KLSAgICAgICAgICAgICAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzOiBOb2lzZURhdGFCdWZmZXJTaXplID0gMiAoc2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyIGluIG1zKSAvIDEwbXMNCi0gICAgICAgICAgICAgICAgICAgICAgICBpLmUuIGZvciAyMCBtcyBpbnB1dCBidWZmZXIsIHRoZSBOb2lzZURhdGEgYnVmZmVyIHNpemUgc2hvdWxkIGJlIDQuDQotDQotQHBhcmFtIHBPdXREYXRhICAgICAgIFBvaW50ZXIgdG8gdGhlIG91dHB1dCBzYW1wbGUgYnVmZmVyDQotQHBhcmFtIE51bVNhbXBsZXMgICAgIFRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBwcm9jZXNzIHNob3VsZCBiZSBpbnRlZ2VyIG11bHRpcGxlKG4pIG9mIHZhbHVlcyBpbiB0YWJsZS4NCi0gICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYSBmcnF1ZW5jeSBkZXBlbmRhbnQgcGFyYW10ZXIuDQotPHRhYmxlIGJvcmRlcj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48Yj5Vbml0PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5RIGZvcm1hdDwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGF0YSBSYW5nZTwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGVmYXVsdCBWYWx1ZXM8L2I+PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjxiPlNhbXBsZXM8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPlExNi4wPC9iPjwvdGQ+DQotICAgICAgIDx0ZD5ueDgwIGZvciA4a0h6PC90ZD4NCi0gICAgICAgPHRkPjgwIGZvciA4a0h6PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+bngxNjAgZm9yIDE2a0h6PC90ZD4NCi0gICAgICAgPHRkPjE2MCBmb3IgMTZrSHo8L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD5ueDI0MCBmb3IgMjRrSHo8L3RkPg0KLSAgICAgICA8dGQ+MjQwIGZvciAyNGtIejwvdGQ+DQotICAgPC90cj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPm54MzIwIGZvciAzMmtIejwvdGQ+DQotICAgICAgIDx0ZD4zMjAgZm9yIDMya0h6PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+bng0ODAgZm9yIDQ4a0h6PC90ZD4NCi0gICAgICAgPHRkPjQ4MCBmb3IgNDhrSHo8L3RkPg0KLSAgIDwvdHI+DQotPC90YWJsZT4NCi0NCi1AcHJlIGhJbnN0YW5jZSBzaG91bGQgYmUgdmFsaWQgaGFuZGxlLg0KLUBwcmUgTFZWRV9SeF9TZXRDb250cm9sUGFyYW1ldGVycyBzaG91bGQgYmUgY2FsbGVkIHN1Y2Nlc3NmdWxseSBvbmNlIGJlZm9yZS4NCi10aGUgZmlyc3QgY2FsbCB0byBMVlZFX1J4X1Byb2Nlc3MNCi1AcHJlIHBJbkRhdGEgaXMgZmlsbGVkIHdpdGggdGhlIGlucHV0IHNhbXBsZXMgdG8gcHJvY2Vzcy4NCi0NCi1AcG9zdCBwT3V0RGF0YSBjb250YWlucyB0aGUgcHJvY2Vzc2VkIHNhbXBsZXMuDQotDQotQHJldHVybiBMVlZFX1NVQ0NFU1MgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2UsIHBJbkRhdGEgb3IgcE91dERhdGEgaXMgTlVMTA0KLUByZXR1cm4gTFZWRV9JTlZBTElETlVNU0FNUExFUyBXaGVuIHRoZSBOdW1TYW1wbGVzIGlzIG91dHNpZGUgdGhlIGFsbG93ZWQNCi1yYW5nZQ0KLUByZXR1cm4gTFZWRV9JTlZBTElEX1NUQVRFX0NPTkZJR1VSQVRJT04gV2hlbiBpbnZhbGlkIHN0YXRlIG9mIHRoZSBhbGdvcml0aG0gZm91bmQNCi0NCi1AaW5ncm91cCBMVlZFX1J4DQotDQotTFZWRV9SeF9Qcm9jZXNzIEV4YW1wbGU6DQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uIGNhbGwuDQotDQotXGNvZGUNCi0gICAgLy8gUnggUHJvY2Vzc2luZw0KLSAgICBMVlZFX1NUQVRVUyA9IExWVkVfUnhfUHJvY2VzcyggaEluc3RhbmNlX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEluRGF0YV9SeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2lzZURhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwT3V0RGF0YV9SeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVNhbXBsZXMgKTsNCi0NCi0gICAgaWYgKExWVkVfU1RBVFVTICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgLy8gRXJyb3IgSGFuZGxpbmcNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi0NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1J4X1Byb2Nlc3MoICAgTFZWRV9SeF9IYW5kbGVfdCAgICBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWTV9JTlQxNiAgICAgKnBJbkRhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWTV9JTlQxNiAgICAgKnBOb2lzZURhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9JTlQxNiAgICAgICAgICAgKnBPdXREYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMVk1fVUlOVDE2ICAgIE51bVNhbXBsZXMpOw0KLQ0KLQ0KLS8qKg0KLVxicmllZiBnZXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIGN1cnJlbnQgb2YgTFZWRSBsaWJyYXJ5Lg0KLQ0KLVRoaXMgZnVuY3Rpb24gcmV0dXJucywgdG8gaG9zdCwgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBMVlZFIGxpYnJhcnkNCi1AcGFyYW0gIHBWZXJzaW9uICAgICAgICAgICAgICAgIHZlcnNpb24gaW5mbw0KLQ0KLUByZXR1cm4gIExWVkVfU1VDQ0VTUyAgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiAgTFZWRV9OVUxMQUREUkVTUyAgICAgICBXaGVuIG9uZSBvZiBoSW5zdGFuY2UsIHBJbkRhdGEgb3IgcE91dERhdGEgaXMgTlVMTA0KLQ0KLUxWVkVfR2V0VmVyc2lvbkluZm90IEV4YW1wbGU6DQotDQotXGNvZGUNCi0gICAgLy9HZXQgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24NCi0gICAgTFZWRV9WZXJzaW9uSW5mbyAgICAgVmVyc2lvbkluZm87DQotICAgIExWVkVfR2V0VmVyc2lvbkluZm8oJlZlcnNpb25JbmZvKTsNCi1cZW5kY29kZQ0KLQ0KLSovDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9HZXRWZXJzaW9uSW5mbyggTFZWRV9WZXJzaW9uSW5mbyAqcFZlcnNpb24gKTsNCi0NCi0vKioNCi1AYnJpZWYgU2V0cyBvciBjaGFuZ2VzIHRoZSBMVlZFX1R4IG1vZHVsZSBwYXJhbWV0ZXJzIHRocm91Z2ggYSBQcmVzZXQgQnVmZmVyLg0KLQ0KLVNldHMgb3IgY2hhbmdlcyB0aGUgTFZWRV9UeCBtb2R1bGUgcGFyYW1ldGVycyB0aHJvdWdoIGEgUHJlc2V0IEJ1ZmZlci4gVG8gc2V0IHBhcmFtZXRlcnMgdXNpbmcgXCJDXCIgc3RydWN0dXJlIHNlZQ0KLUByZWYgTFZWRV9UeF9TZXRDb250cm9sUGFyYW1ldGVycw0KLVRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIG5ldyBzZXQgb2YgcGFyYW1ldGVycyBhbmQgbWFrZXMgYSBsb2NhbCBjb3B5IHdpdGhpbiB0aGUNCi1MVlZFX1R4IG1vZHVsZSBidXQgdGhlIHBhcmFtZXRlcnMgYXJlIG9ubHkgYXBwbGllZCBvbiB0aGUgbmV4dCBjYWxsIG9mIHRoZSBMVlZFX1R4X1Byb2Nlc3MNCi1mdW5jdGlvbi4gV2hlbiBubyBwYXJhbWV0ZXJzIGFyZSBjaGFuZ2VkLCBubyBhY3Rpb24gaXMgdGFrZW4uIFRoaXMgZnVuY3Rpb24gY2FuDQotYmUgY2FsbGVkIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgcHJvY2Vzc2luZywgZXZlbiB3aGVuIHRoZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24NCi1pcyBydW5uaW5nLg0KLVRoZSBuZXcgcGFyYW1ldGVycyBhcmUgc3VwcGxpZWQgaW4gdGhlIGZvcm0gYSBAcmVmIExWVkVfVHhfUHJlc2V0X3QgKEJ5dGUgYXJyYXkpLg0KLVRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgYXJyYXkgc2hhbGwgYmUgYSBtdWx0aXBsZSBvZiBAcmVmIExWVkVfVFhfUFJFU0VUX0xFTkdUSC4NCi0NCi1AcGFyYW0gaEluc3RhbmNlICAgICAgICAgICAgICAgSW5zdGFuY2UgSGFuZGxlDQotQHBhcmFtIHBQcmVzZXQgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBQcmVzZXQgYnVmZmVyDQotQHBhcmFtIFByZXNldExlbmd0aCAgICAgICAgICAgIExlbmd0aCBpbiBieXRlcyBvZiB0aGUgUHJlc2V0IGJ1ZmZlcg0KLUBwYXJhbSBWb2x1bWVJbmRleCAgICAgICAgICAgICBWb2x1bWUgaW5kZXggdG8gYmUgc2VsZWN0ZWQgZnJvbSB0aGUgUHJlc2V0IGJ1ZmZlcg0KLQ0KLUBwcmUgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotDQotQHJldHVybiBAcmVmIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIEByZWYgTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBQcmVzZXQgaXMgTlVMTA0KLUByZXR1cm4gQHJlZiBMVlZFX09VVE9GUkFOR0UgICAgICAgV2hlbiBQcmVzZXRMZW5ndGggb3IgYW55IG9mIHRoZSBuZXcgcGFyYW1ldGVycyBpcyBvdXQgb2YgcmFuZ2UNCi1AcmV0dXJuIEByZWYgTFZWRV9JTlZBTElEX0FMR09SSVRITV9DT05GSUdVUkFUSU9OIFdoZW4gbXV0dWFsbHkgZXhjbHVzaXZlIGFsZ29yaXRobXMgYXJlIGVuYWJsZWQgaW4gdGhlIHBhcmFtZXRlcnMgYXQgdGhlIHNhbWUgdGltZQ0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX0JVRkZFUl9MRU5HVEggV2hlbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgaXMgc21hbGxlciB0aGFuIExWVkVfVFhfUFJFU0VUX0xFTkdUSA0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX1ZPTFVNRV9JTkRFWCBXaGVuIHRoZSB2b2x1bWUgaW5kZXggZXhjZWVkcyB0aGUgYnVmZmVyIGNvbnRlbnQNCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9CVUZGRVJfVkVSU0lPTiBXaGVuIHRoZSB2ZXJzaW9uIG9mIHRoZSBmb3JtYXQgb2YgdGhlIHByZXNldCBidWZmZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkNCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9CQVNFTElORV9WRVJTSU9OIFdoZW4gdGhlIGJhc2VsaW5lIHZlcnNpb24gb2YgdGhlIHByb3ZpZGVkIHByZXNldCBidWZmZXIgYW5kIHRoZSBiYXNlbGluZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvIG5vdCBtYXRjaC4gSXMgdGhlIHByZXNldCBnZW5lcmF0ZWQgZm9yIHRoaXMgbGlicmFyeSA/DQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfTUFTSyBXaGVuIHRoZSBhbGdvcml0aG0gbWFzayBvZiB0aGUgcHJvdmlkZWQgcHJlc2V0IGJ1ZmZlciBhbmQgdGhlIGFsZ29yaXRobSBtYXNrIG9mIHRoZSBsaWJyYXJ5IGRvIG5vdCBtYXRjaC4gSXMgdGhlIHByZXNldCBnZW5lcmF0ZWQgZm9yIHRoaXMgbGlicmFyeSA/DQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfU0FNUExFX1JBVEUgV2hlbiB0aGUgc2FtcGxlIHJhdGUgQHJlZiBMVk1fRnNfZW4gb2YgdGhlIHByZXNldCBkb2VzIG5vdCBtYXRjaCB0aGUgc2FtcGxlIHJhdGUgb2YgdGhlIGhJbnN0YW5jZQ0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX0xWV0lSRUZPUk1BVF9NRVNTQUdFSUQgIFdoZW4gdGhlIExWV2lyZWZvcm1hdCBtZXNzYWdlIGlkIEByZWYgTFZWSURIZWFkZXJfTWVzc2FnZUlEX2VuIG9mIHRoZSBwcmVzZXQgaXMgbm90IHZhbGlkDQotDQotQG5vdGUgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbg0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi1MVlZFX1R4X1NldFByZXNldDogU2V0dGluZyBDb250cm9sIFBhcmFtZXRlcnMgdXNpbmcgUHJlc2V0IEJ1ZmZlciBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gc2V0IGRpZmZlcmVudCBjb250cm9sIHBhcmFtZXRlcnMgZm9yIHRoZSBMVlZFX1R4IGluc3RhbmNlIHVzaW5nIFByZXNldCBCdWZmZXIuDQotDQotXGNvZGUNCi0gICAgTFZNX0NIQVIgTFZWRV9UeF9QcmVzZXRfQnVmZmVyW0xWVkVfVFhfUFJFU0VUX0xFTkdUSF07DQotICAgIExWVkVfVHhfUHJlc2V0X3QgY29uc3QgTFZWRV9UeF9QcmVzZXQgPSBMVlZFX1R4X1ByZXNldF9CdWZmZXI7DQotDQotICAgIEZJTEUgKlBSRVNFVEZJTEVfVHg7DQotICAgIExWTV9JTlQzMiBSZWFkQnl0ZXMgPSAwOw0KLQ0KLSAgICBQUkVTRVRGSUxFX1R4PWZvcGVuKGZpbGVuYW1lLCAicmIiICk7DQotDQotICAgIC8vIFJlYWQgdGhlIHByZXNldCBidWZmZXINCi0gICAgUmVhZEJ5dGVzID0gZnJlYWQoIExWVkVfVHhfUHJlc2V0X0J1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihMVk1fQ0hBUiksDQotICAgICAgICAgICAgICAgICAgICAgICAoTFZNX1VJTlQzMilMVlZFX1RYX1BSRVNFVF9MRU5HVEgsDQotICAgICAgICAgICAgICAgICAgICAgICBQUkVTRVRGSUxFX1R4ICk7DQotDQotICAgIGZjbG9zZShQUkVTRVRGSUxFX1R4KTsNCi0NCi0gICAgIC8vIFVwZGF0ZSBpbnN0YW5jZSB3aXRoIG5ldyBwcmVzZXQgYnVmZmVyDQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9UeF9TZXRQcmVzZXQoIGhJbnN0YW5jZV9UeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9UeF9QcmVzZXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRCeXRlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7DQotDQotICAgIGlmICggTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0NCi0NCi0qLw0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfVHhfU2V0UHJlc2V0KExWVkVfVHhfSGFuZGxlX3QgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWVkVfVHhfUHJlc2V0X3QgcFByZXNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fVUlOVDMyIFByZXNldExlbmd0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fVUlOVDE2IFZvbHVtZUluZGV4KTsNCi0NCi0vKioNCi1AYnJpZWYgU2V0cyBvciBjaGFuZ2VzIHRoZSBMVlZFX1J4IG1vZHVsZSBwYXJhbWV0ZXJzIHRocm91Z2ggYSBQcmVzZXQgQnVmZmVyDQotDQotU2V0cyBvciBjaGFuZ2VzIHRoZSBMVlZFX1J4IG1vZHVsZSBwYXJhbWV0ZXJzIHRocm91Z2ggYSBQcmVzZXQgQnVmZmVyLiBUbyBzZXQgcGFyYW1ldGVycyB1c2luZyBcIkNcIiBzdHJ1Y3R1cmUgc2VlDQotQHJlZiBMVlZFX1J4X1NldENvbnRyb2xQYXJhbWV0ZXJzDQotVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgbmV3IHNldCBvZiBwYXJhbWV0ZXJzIGFuZCBtYWtlcyBhIGxvY2FsIGNvcHkgd2l0aGluIHRoZQ0KLUxWVkVfUnggbW9kdWxlIGJ1dCB0aGUgcGFyYW1ldGVycyBhcmUgb25seSBhcHBsaWVkIG9uIHRoZSBuZXh0IGNhbGwgb2YgdGhlIExWVkVfUnhfUHJvY2Vzcw0KLWZ1bmN0aW9uLiBXaGVuIG5vIHBhcmFtZXRlcnMgYXJlIGNoYW5nZWQsIG5vIGFjdGlvbiBpcyB0YWtlbi4gVGhpcyBmdW5jdGlvbiBjYW4NCi1iZSBjYWxsZWQgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSBwcm9jZXNzaW5nLCBldmVuIHdoZW4gdGhlIExWVkVfUnhfUHJvY2VzcyBmdW5jdGlvbg0KLWlzIHJ1bm5pbmcuDQotVGhlIG5ldyBwYXJhbWV0ZXJzIGFyZSBzdXBwbGllZCBpbiB0aGUgZm9ybSBhIEByZWYgTFZWRV9SeF9QcmVzZXRfdCAoQnl0ZSBhcnJheSkuDQotVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBhcnJheSBzaGFsbCBiZSBhIG11bHRpcGxlIG9mIEByZWYgTFZWRV9SWF9QUkVTRVRfTEVOR1RILg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICAgICAgICAgICBJbnN0YW5jZSBIYW5kbGUNCi1AcGFyYW0gcFByZXNldCAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIFByZXNldCBidWZmZXINCi1AcGFyYW0gUHJlc2V0TGVuZ3RoICAgICAgICAgICAgTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBQcmVzZXQgYnVmZmVyDQotQHBhcmFtIFZvbHVtZUluZGV4ICAgICAgICAgICAgIFZvbHVtZSBpbmRleCB0byBiZSBzZWxlY3RlZCBmcm9tIHRoZSBQcmVzZXQgYnVmZmVyDQotDQotQHByZSBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi0NCi1AcmV0dXJuIEByZWYgTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gQHJlZiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2Ugb3IgcFByZXNldCBpcyBOVUxMDQotQHJldHVybiBAcmVmIExWVkVfT1VUT0ZSQU5HRSAgICAgICBXaGVuIFByZXNldExlbmd0aCBvciBhbnkgb2YgdGhlIG5ldyBwYXJhbWV0ZXJzIGlzIG91dCBvZiByYW5nZQ0KLUByZXR1cm4gQHJlZiBMVlZFX0lOVkFMSURfQUxHT1JJVEhNX0NPTkZJR1VSQVRJT04gV2hlbiBtdXR1YWxseSBleGNsdXNpdmUgYWxnb3JpdGhtcyBhcmUgZW5hYmxlZCBpbiB0aGUgcGFyYW1ldGVycyBhdCB0aGUgc2FtZSB0aW1lDQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfQlVGRkVSX0xFTkdUSCBXaGVuIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gTFZWRV9SWF9QUkVTRVRfTEVOR1RIDQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfVk9MVU1FX0lOREVYIFdoZW4gdGhlIHZvbHVtZSBpbmRleCBleGNlZWRzIHRoZSBidWZmZXIgY29udGVudA0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX0JVRkZFUl9WRVJTSU9OIFdoZW4gdGhlIHZlcnNpb24gb2YgdGhlIGZvcm1hdCBvZiB0aGUgcHJlc2V0IGJ1ZmZlciBkb2VzIG5vdCBtYXRjaCB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeQ0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX0JBU0VMSU5FX1ZFUlNJT04gV2hlbiB0aGUgYmFzZWxpbmUgdmVyc2lvbiBvZiB0aGUgcHJvdmlkZWQgcHJlc2V0IGJ1ZmZlciBhbmQgdGhlIGJhc2VsaW5lIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG8gbm90IG1hdGNoLiBJcyB0aGUgcHJlc2V0IGdlbmVyYXRlZCBmb3IgdGhpcyBsaWJyYXJ5ID8NCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9NQVNLIFdoZW4gdGhlIGFsZ29yaXRobSBtYXNrIG9mIHRoZSBwcm92aWRlZCBwcmVzZXQgYnVmZmVyIGFuZCB0aGUgYWxnb3JpdGhtIG1hc2sgb2YgdGhlIGxpYnJhcnkgZG8gbm90IG1hdGNoLiBJcyB0aGUgcHJlc2V0IGdlbmVyYXRlZCBmb3IgdGhpcyBsaWJyYXJ5ID8NCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9TQU1QTEVfUkFURSBXaGVuIHRoZSBzYW1wbGUgcmF0ZSBAcmVmIExWTV9Gc19lbiBvZiB0aGUgcHJlc2V0IGRvZXMgbm90IG1hdGNoIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgaEluc3RhbmNlDQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfTFZXSVJFRk9STUFUX01FU1NBR0VJRCAgV2hlbiB0aGUgTFZXaXJlZm9ybWF0IG1lc3NhZ2UgaWQgQHJlZiBMVlZJREhlYWRlcl9NZXNzYWdlSURfZW4gb2YgdGhlIHByZXNldCBpcyBub3QgdmFsaWQNCi0NCi1Abm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uDQotDQotQGluZ3JvdXAgTFZWRV9SeA0KLQ0KLUxWVkVfUnhfU2V0UHJlc2V0OiBTZXR0aW5nIENvbnRyb2wgUGFyYW1ldGVycyB1c2luZyBQcmVzZXQgQnVmZmVyIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBzZXQgZGlmZmVyZW50IGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIExWVkVfUnggaW5zdGFuY2UgdXNpbmcgUHJlc2V0IEJ1ZmZlci4NCi0NCi1cY29kZQ0KLSAgICAjZGVmaW5lIE5VTV9WT0xVTUVTICg1KQ0KLSAgICBMVk1fQ0hBUiBMVlZFX1J4X1ByZXNldF9CdWZmZXJbTlVNX1ZPTFVNRVMqTFZWRV9SWF9QUkVTRVRfTEVOR1RIXTsNCi0gICAgTFZWRV9SeF9QcmVzZXRfdCBjb25zdCBMVlZFX1J4X1ByZXNldCA9IExWVkVfUnhfUHJlc2V0X0J1ZmZlcjsNCi0NCi0gICAgRklMRSAqUFJFU0VURklMRV9SeDsNCi0gICAgTFZNX0lOVDMyIFJlYWRCeXRlcyA9IDA7DQotICAgIExWTV9VSU5UMTYgVm9sdW1lSW5kZXggPSAzOw0KLQ0KLSAgICBQUkVTRVRGSUxFX1J4PWZvcGVuKGZpbGVuYW1lLCAicmIiICk7DQotDQotICAgIC8vIFJlYWQgdGhlIHByZXNldCBidWZmZXINCi0gICAgUmVhZEJ5dGVzID0gZnJlYWQoIExWVkVfUnhfUHJlc2V0X0J1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihMVk1fQ0hBUiksDQotICAgICAgICAgICAgICAgICAgICAgICAoTFZNX1VJTlQzMikoTlVNX1ZPTFVNRVMqTFZWRV9SWF9QUkVTRVRfTEVOR1RIKSwNCi0gICAgICAgICAgICAgICAgICAgICAgIFBSRVNFVEZJTEVfUnggKTsNCi0NCi0gICAgZmNsb3NlKFBSRVNFVEZJTEVfUngpOw0KLQ0KLSAgICAgLy8gVXBkYXRlIGluc3RhbmNlIHdpdGggbmV3IHByZXNldCBidWZmZXINCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1J4X1NldFByZXNldCggaEluc3RhbmNlX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1J4X1ByZXNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZEJ5dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVJbmRleCk7DQotDQotICAgIGlmICggTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfU2V0UHJlc2V0KExWVkVfUnhfSGFuZGxlX3QgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWVkVfUnhfUHJlc2V0X3QgcFByZXNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fVUlOVDMyIFByZXNldExlbmd0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVk1fVUlOVDE2IFZvbHVtZUluZGV4KTsNCi0NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQotDQotI2VuZGlmICAgICAgLyogX19MVlZFX0hfXyAqLw0KLQ0KLS8qIEVuZCBvZiBmaWxlICovDQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdG9zL0xWVkVfVklELmggYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90b3MvTFZWRV9WSUQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOThhMTQ2MS4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90b3MvTFZWRV9WSUQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0NTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogIENvcHlyaWdodCAoYykgMjAwNC0yMDE1IE5YUCBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFJlcHJvZHVjdGlvbiBpbiB3aG9sZSBvciBpbiBwYXJ0IGlzIHByb2hpYml0ZWQgd2l0aG91dCB0aGUgcHJpb3IgICAgICAgICAgICAgICAgICAgICovDQotLyogIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgY29weXJpZ2h0IG93bmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFRoaXMgc29mdHdhcmUgYW5kIGFueSBjb21waWxhdGlvbiBvciBkZXJpdmF0aXZlIHRoZXJlb2YgaXMgYW5kICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHNoYWxsIHJlbWFpbiB0aGUgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gb2YgTlhQIFNvZnR3YXJlIGFuZCBpcyAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGhpZ2hseSBjb25maWRlbnRpYWwgaW4gbmF0dXJlLiBBbnkgYW5kIGFsbCB1c2UgaGVyZW9mIGlzIHJlc3RyaWN0ZWQgICAgICAgICAgICAgICAgICovDQotLyogIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IGNvbmNsdWRlZCB3aXRoIE5YUCBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgaXMgdGhpcyBzb2Z0d2FyZSBvciBhbnkgZGVyaXZhdGl2ZSB0aGVyZW9mICAgICAgICAgICAgICAgICAgICovDQotLyogIHRvIGJlIGNvbWJpbmVkIHdpdGggYW55IE9wZW4gU291cmNlIFNvZnR3YXJlIGluIGFueSB3YXkgb3IgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGxpY2Vuc2VkIHVuZGVyIGFueSBPcGVuIExpY2Vuc2UgVGVybXMgd2l0aG91dCB0aGUgZXhwcmVzcyBwcmlvciAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHdyaXR0ZW4gIHBlcm1pc3Npb24gb2YgTlhQIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGNsYXVzZSwgdGhlIHRlcm0gT3BlbiBTb3VyY2UgU29mdHdhcmUgbWVhbnMgICAgICAgICAgICAgICAgICovDQotLyogIGFueSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIE9wZW4gTGljZW5zZSBUZXJtcy4gT3BlbiAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIExpY2Vuc2UgVGVybXMgbWVhbnMgdGVybXMgaW4gYW55IGxpY2Vuc2UgdGhhdCByZXF1aXJlIGFzIGEgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGNvbmRpdGlvbiBvZiB1c2UsIG1vZGlmaWNhdGlvbiBhbmQvb3IgZGlzdHJpYnV0aW9uIG9mIGEgd29yayAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDEuIHRoZSBtYWtpbmcgYXZhaWxhYmxlIG9mIHNvdXJjZSBjb2RlIG9yIG90aGVyIG1hdGVyaWFscyAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIHByZWZlcnJlZCBmb3IgbW9kaWZpY2F0aW9uLCBvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDIuIHRoZSBncmFudGluZyBvZiBwZXJtaXNzaW9uIGZvciBjcmVhdGluZyBkZXJpdmF0aXZlICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIHdvcmtzLCBvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDMuIHRoZSByZXByb2R1Y3Rpb24gb2YgY2VydGFpbiBub3RpY2VzIG9yIGxpY2Vuc2UgdGVybXMgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIGluIGRlcml2YXRpdmUgd29ya3Mgb3IgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24sIG9yICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDQuIHRoZSBncmFudGluZyBvZiBhIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGFueSBwYXJ0eSAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIHVuZGVyIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHJlZ2FyZGluZyB0aGUgd29yayBhbmQvb3IgYW55IHdvcmsgdGhhdCBjb250YWlucywgaXMgY29tYmluZWQgd2l0aCwgICAgICAgICAgICAgICAgICovDQotLyogIHJlcXVpcmVzIG9yIG90aGVyd2lzZSBpcyBiYXNlZCBvbiB0aGUgd29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgZm9yIGVhc2Ugb2YgcmVjb21waWxhdGlvbiBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIE1vZGlmaWNhdGlvbiBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBzdHJpY3RseSAgICAgICAgICAgICAgICAgICovDQotLyogIHByb2hpYml0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICRBdXRob3I6IG54cDY1Mjg1ICQqLw0KLS8qICAgICAkUmV2aXNpb246IDQ5MzkwICQqLw0KLS8qICAgICAkRGF0ZTogMjAxMy0xMC0xNiAxODozNDozNSArMDUzMCAoV2VkLCAxNiBPY3QgMjAxMykgJCovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqIEBmaWxlDQotICogIEhlYWRlciBmaWxlIGZvciB0aGUgYXBwbGljYXRpb24gbGF5ZXIgaW50ZXJmYWNlIG9mIHRoZSBSRUxfTFZWRV9IRl9OVjFfVkNfQUdDX1JYX0RSQ19SWF9XQiBtb2R1bGUNCi0gKg0KLSAqICBUaGUgc3VmZml4IFZJRCBpbiBoZWFkZXIgZmlsZSBzdGFuZHMgZm9yIFZvaWNlIEludGVyZmFjZSBEZWZpbml0aW9uDQotICogIFRoaXMgZmlsZXMgaW5jbHVkZXMgYWxsIGRlZmluaXRpb25zLCB0eXBlcywgYW5kIHN0cnVjdHVyZXMgcmVxdWlyZWQgYnkgdGhlIGNhbGxpbmcNCi0gKiAgbGF5ZXIuIFB1YmxpYyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIHByb3RveXBlcyBoZWFkZXIgZmlsZXMuDQotICogIEFsbCBvdGhlciB0eXBlcywgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZSBwcml2YXRlLg0KLSAqLw0KLQ0KLSNpZm5kZWYgX19SRUxfTFZWRV9IRl9OVjFfVkNfQUdDX1JYX0RSQ19SWF9XQl9WSURQUF9IX18NCi0jZGVmaW5lIF9fUkVMX0xWVkVfSEZfTlYxX1ZDX0FHQ19SWF9EUkNfUlhfV0JfVklEUFBfSF9fDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIEluY2x1ZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotI2luY2x1ZGUgIkxWQ19UeXBlcy5oIg0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1JYX0xWRkVOU19NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+RmFyIEVuZCBOb2lzZSBTdXBwcmVzc2lvbiBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9SWF9IUEZfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjQ8L3RkPg0KLSAgICAgICAgPHRkPkhpZ2ggUGFzcyBGaWx0ZXIgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfUlhfTFZOR19NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPk5vaXNlIEdhdGUgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfUlhfRVFfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjY0PC90ZD4NCi0gICAgICAgIDx0ZD5FcXVhbGl6ZXIgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfUlhfQUdDX01BU0sxPC90ZD4NCi0gICAgICAgIDx0ZD4xMjg8L3RkPg0KLSAgICAgICAgPHRkPkF1dG9tYXRpYyBHYWluIENvbnRyb2wgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfUlhfRFJDX01BU0sxPC90ZD4NCi0gICAgICAgIDx0ZD4yNTY8L3RkPg0KLSAgICAgICAgPHRkPkR5bmFtaWMgUmFuZ2UgQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9SWF9WT0xfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjUxMjwvdGQ+DQotICAgICAgICA8dGQ+Vm9sdW1lIENvbnRyb2wgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfUlhfTFZWQ19NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MTAyNDwvdGQ+DQotICAgICAgICA8dGQ+Vm9pY2VDbGFyaXR5IGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUng8L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm07DQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfUnhfTFZGRU5TX01BU0sxDQotKiBGYXIgRW5kIE5vaXNlIFN1cHByZXNzaW9uIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUngNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0xWRkVOU19NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMSkNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9SeF9IUEZfTUFTSzENCi0qIEhpZ2ggUGFzcyBGaWx0ZXIgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfSFBGX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1J4X0xWTkdfTUFTSzENCi0qIE5vaXNlIEdhdGUgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTFZOR19NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMTYpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfUnhfRVFfTUFTSzENCi0qIEVxdWFsaXplciBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9FUV9NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pNjQpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfUnhfQUdDX01BU0sxDQotKiBBdXRvbWF0aWMgR2FpbiBDb250cm9sIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUngNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0FHQ19NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMTI4KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1J4X0RSQ19NQVNLMQ0KLSogRHluYW1pYyBSYW5nZSBDb250cm9sIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUngNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0RSQ19NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMjU2KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1J4X1ZPTF9NQVNLMQ0KLSogVm9sdW1lIENvbnRyb2wgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfVk9MX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSk1MTIpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfUnhfTFZWQ19NQVNLMQ0KLSogVm9pY2VDbGFyaXR5IGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUngNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0xWVkNfTUFTSzEgKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTEwMjQpDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzFfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMV9CTV9NSU4gKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzFfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9MVkZFTlNfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkxKQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9IUEZfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSk0KQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9MVk5HX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMTYpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0VRX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pNjQpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0FHQ19NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTEyOCkNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfRFJDX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMjU2KQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9WT0xfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSk1MTIpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0xWVkNfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkxMDI0KQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMV9CTV9NQVggKExWVklESEVBREVSX0xWVkVfUlhfTFZGRU5TX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfUlhfSFBGX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfUlhfTFZOR19NQVNLMV9GT1JNQVggfCBMVlZJREhFQURFUl9MVlZFX1JYX0VRX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfUlhfQUdDX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfUlhfRFJDX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfUlhfVk9MX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfUlhfTFZWQ19NQVNLMV9GT1JNQVggfCAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMCkpDQotLyoqDQotPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPk5hbWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5WYWx1ZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibTsNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMl9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazJfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX01BU0syX0JNX01JTiAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazJfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMl9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazJfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX01BU0syX0JNX01BWCAoKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2syX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1RYX0xWSEZfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjE8L3RkPg0KLSAgICAgICAgPHRkPkhhbmRzRnJlZSBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9UWF9FUV9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+RXF1YWxpemVyIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHg8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1RYX0xWV01fTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPldoaXNwZXJNb2RlIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHg8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1RYX0RSQ19NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPkR5bmFtaWMgUmFuZ2UgQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9UWF9WT0xfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjMyPC90ZD4NCi0gICAgICAgIDx0ZD5Wb2x1bWUgQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9UWF9IUEZfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+SFBGIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHg8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1RYX0xWTlZfMDFfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjUxMjwvdGQ+DQotICAgICAgICA8dGQ+Tm9pc2VWb2lkIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHg8L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm07DQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfVHhfTFZIRl9NQVNLMQ0KLSogSGFuZHNGcmVlIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHgNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0xWSEZfTUFTSzEgKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTEpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfVHhfRVFfTUFTSzENCi0qIEVxdWFsaXplciBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9FUV9NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pNCkNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9UeF9MVldNX01BU0sxDQotKiBXaGlzcGVyTW9kZSBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9MVldNX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1R4X0RSQ19NQVNLMQ0KLSogRHluYW1pYyBSYW5nZSBDb250cm9sIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHgNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0RSQ19NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMTYpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfVHhfVk9MX01BU0sxDQotKiBWb2x1bWUgQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9WT0xfTUFTSzEgKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTMyKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1R4X0hQRl9NQVNLMQ0KLSogSFBGIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHgNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0hQRl9NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMTI4KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1R4X0xWTlZfMDFfTUFTSzENCi0qIE5vaXNlVm9pZCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9MVk5WXzAxX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSk1MTIpDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfVFhfTUFTSzFfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMV9CTV9NSU4gKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfVFhfTUFTSzFfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9MVkhGX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMSkNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfRVFfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSk0KQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9MVldNX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pOCkNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfRFJDX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMTYpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX1ZPTF9NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTMyKQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9IUEZfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSkxMjgpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0xWTlZfMDFfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSk1MTIpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX01BU0sxX0JNX01BWCAoTFZWSURIRUFERVJfTFZWRV9UWF9MVkhGX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfVFhfRVFfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9UWF9MVldNX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfVFhfRFJDX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfVFhfVk9MX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfVFhfSFBGX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfVFhfTFZOVl8wMV9NQVNLMV9GT1JNQVggfCAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMCkpDQotLyoqDQotPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPk5hbWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5WYWx1ZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMl9ibTsNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMl9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazJfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMl9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX01BU0syX0JNX01JTiAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazJfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMl9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazJfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMl9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX01BU0syX0JNX01BWCAoKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2syX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19XSURFQkFORF9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+V2lkZUJhbmQgY29uZmlndXJhdGlvbiBpcyBwcmVzZW50IGluIHRoZSBMVlZFPC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibTsNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfV0lERUJBTkRfTUFTSzENCi0qIFdpZGVCYW5kIGNvbmZpZ3VyYXRpb24gaXMgcHJlc2VudCBpbiB0aGUgTFZWRQ0KLSogQHNlZSBMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19XSURFQkFORF9NQVNLMSAoKExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtKTIpDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0sxX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazFfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzFfQk1fTUlOICgoTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazFfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzFfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibQ0KLSogQHNlZSBMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19XSURFQkFORF9NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibSkyKQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzFfQk1fTUFYIChMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19XSURFQkFORF9NQVNLMV9GT1JNQVggfCAoKExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtOw0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19NQVNLMl9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0JNX01JTiAoKExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtKTApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazJfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazJfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzJfQk1fTUFYICgoKExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfQVZMPC90ZD4NCi0gICAgICAgIDx0ZD4yPC90ZD4NCi0gICAgICAgIDx0ZD5UdXJucyBvbiBvciBvZmYgdGhlIEFHQy4gSWYgb2ZmIGJvdGggQUdDIGFuZCBMaW1pdGVyIGFyZSBieXBhc3NlZC48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfQVZMX0FEQVBUPC90ZD4NCi0gICAgICAgIDx0ZD40PC90ZD4NCi0gICAgICAgIDx0ZD5BbGxvd3MgdHVybmluZyBvZmYgdGhlIGRlcGVuZGVuY3kgb2YgdGhlIEFHQyB1cG9uIHRoZSBuZWFyZW5kIG5vaXNlIGxldmVsLiBXaGVuIHR1cm5lZCBvZmYsIHRoZSBBR0MgdXNlcyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzLjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfTU9ERV9BVkxfU1BERVRFQ1Q8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPkFsbG93cyBkaXNhYmxpbmcgc3BlZWNoIGRldGVjdGlvbiBpbiB0aGUgQUdDLiBXaGVuIHR1cm5lZCBvZmYsIHRoZSBBR0MgYWRhcHRzIGl0cyBnYWluIGFsbCB0aGUgdGltZS48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfTElNSVRFUjwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPlR1cm5zIG9uIG9yIG9mZiB0aGUgbGltaXRlci48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfTFBGPC90ZD4NCi0gICAgICAgIDx0ZD4zMjwvdGQ+DQotICAgICAgICA8dGQ+VHVybnMgb24gb3Igb2ZmIHRoZSBsb3ctcGFzcyBmaWx0ZXIuPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19NT0RFX0hQRjwvdGQ+DQotICAgICAgICA8dGQ+NjQ8L3RkPg0KLSAgICAgICAgPHRkPlR1cm5zIG9uIG9yIG9mZiB0aGUgaGlnaC1wYXNzIGZpbHRlci48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfVkM8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+VHVybnMgb24gb3Igb2ZmIHRoZSBWb2ljZUNsYXJpdHkgZ2Fpbi48L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVkNfTW9kZVdvcmRfYm07DQotLyoqDQotKiBAZGVmIExWVkNfTU9ERV9BVkwNCi0qIFR1cm5zIG9uIG9yIG9mZiB0aGUgQUdDLiBJZiBvZmYgYm90aCBBR0MgYW5kIExpbWl0ZXIgYXJlIGJ5cGFzc2VkLg0KLSogQHNlZSBMVlZDX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWVkNfTU9ERV9BVkwgKChMVlZDX01vZGVXb3JkX2JtKTIpDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERV9BVkxfQURBUFQNCi0qIEFsbG93cyB0dXJuaW5nIG9mZiB0aGUgZGVwZW5kZW5jeSBvZiB0aGUgQUdDIHVwb24gdGhlIG5lYXJlbmQgbm9pc2UgbGV2ZWwuIFdoZW4gdHVybmVkIG9mZiwgdGhlIEFHQyB1c2VzIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX0FWTF9BREFQVCAoKExWVkNfTW9kZVdvcmRfYm0pNCkNCi0vKioNCi0qIEBkZWYgTFZWQ19NT0RFX0FWTF9TUERFVEVDVA0KLSogQWxsb3dzIGRpc2FibGluZyBzcGVlY2ggZGV0ZWN0aW9uIGluIHRoZSBBR0MuIFdoZW4gdHVybmVkIG9mZiwgdGhlIEFHQyBhZGFwdHMgaXRzIGdhaW4gYWxsIHRoZSB0aW1lLg0KLSogQHNlZSBMVlZDX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWVkNfTU9ERV9BVkxfU1BERVRFQ1QgKChMVlZDX01vZGVXb3JkX2JtKTgpDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERV9MSU1JVEVSDQotKiBUdXJucyBvbiBvciBvZmYgdGhlIGxpbWl0ZXIuDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX0xJTUlURVIgKChMVlZDX01vZGVXb3JkX2JtKTE2KQ0KLS8qKg0KLSogQGRlZiBMVlZDX01PREVfTFBGDQotKiBUdXJucyBvbiBvciBvZmYgdGhlIGxvdy1wYXNzIGZpbHRlci4NCi0qIEBzZWUgTFZWQ19Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVlZDX01PREVfTFBGICgoTFZWQ19Nb2RlV29yZF9ibSkzMikNCi0vKioNCi0qIEBkZWYgTFZWQ19NT0RFX0hQRg0KLSogVHVybnMgb24gb3Igb2ZmIHRoZSBoaWdoLXBhc3MgZmlsdGVyLg0KLSogQHNlZSBMVlZDX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWVkNfTU9ERV9IUEYgKChMVlZDX01vZGVXb3JkX2JtKTY0KQ0KLS8qKg0KLSogQGRlZiBMVlZDX01PREVfVkMNCi0qIFR1cm5zIG9uIG9yIG9mZiB0aGUgVm9pY2VDbGFyaXR5IGdhaW4uDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX1ZDICgoTFZWQ19Nb2RlV29yZF9ibSkxMjgpDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERVdPUkRfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVlZDX01vZGVXb3JkX2JtDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFV09SRF9CTV9NSU4gKChMVlZDX01vZGVXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERVdPUkRfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVlZDX01vZGVXb3JkX2JtDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX0FWTF9GT1JNQVggKChMVlZDX01vZGVXb3JkX2JtKTIpDQotI2RlZmluZSBMVlZDX01PREVfQVZMX0FEQVBUX0ZPUk1BWCAoKExWVkNfTW9kZVdvcmRfYm0pNCkNCi0jZGVmaW5lIExWVkNfTU9ERV9BVkxfU1BERVRFQ1RfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSk4KQ0KLSNkZWZpbmUgTFZWQ19NT0RFX0xJTUlURVJfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSkxNikNCi0jZGVmaW5lIExWVkNfTU9ERV9MUEZfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSkzMikNCi0jZGVmaW5lIExWVkNfTU9ERV9IUEZfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSk2NCkNCi0jZGVmaW5lIExWVkNfTU9ERV9WQ19GT1JNQVggKChMVlZDX01vZGVXb3JkX2JtKTEyOCkNCi0jZGVmaW5lIExWVkNfTU9ERVdPUkRfQk1fTUFYIChMVlZDX01PREVfQVZMX0ZPUk1BWCB8IExWVkNfTU9ERV9BVkxfQURBUFRfRk9STUFYIHwgTFZWQ19NT0RFX0FWTF9TUERFVEVDVF9GT1JNQVggfCBMVlZDX01PREVfTElNSVRFUl9GT1JNQVggfCBMVlZDX01PREVfTFBGX0ZPUk1BWCB8IExWVkNfTU9ERV9IUEZfRk9STUFYIHwgTFZWQ19NT0RFX1ZDX0ZPUk1BWCB8ICgoTFZWQ19Nb2RlV29yZF9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZGRU5TX01PREVfSFM8L3RkPg0KLSAgICAgICAgPHRkPjE8L3RkPg0KLSAgICAgICAgPHRkPlN3aXRjaCBPTiBhbmQgT0ZGIEhvcm4gU3VwcHJlc3Nvci4gQ3VycmVudGx5IEhvcm4gU3VwcHJlc3NvciBpcyBub3Qgc3VwcG9ydGVkLjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZGRU5TX01vZGVXb3JkX2JtOw0KLS8qKg0KLSogQGRlZiBMVkZFTlNfTU9ERV9IUw0KLSogU3dpdGNoIE9OIGFuZCBPRkYgSG9ybiBTdXBwcmVzc29yLiBDdXJyZW50bHkgSG9ybiBTdXBwcmVzc29yIGlzIG5vdCBzdXBwb3J0ZWQuDQotKiBAc2VlIExWRkVOU19Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkZFTlNfTU9ERV9IUyAoKExWRkVOU19Nb2RlV29yZF9ibSkxKQ0KLS8qKg0KLSogQGRlZiBMVkZFTlNfTU9ERVdPUkRfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVkZFTlNfTW9kZVdvcmRfYm0NCi0qIEBzZWUgTFZGRU5TX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWRkVOU19NT0RFV09SRF9CTV9NSU4gKChMVkZFTlNfTW9kZVdvcmRfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZGRU5TX01PREVXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZGRU5TX01vZGVXb3JkX2JtDQotKiBAc2VlIExWRkVOU19Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkZFTlNfTU9ERV9IU19GT1JNQVggKChMVkZFTlNfTW9kZVdvcmRfYm0pMSkNCi0jZGVmaW5lIExWRkVOU19NT0RFV09SRF9CTV9NQVggKExWRkVOU19NT0RFX0hTX0ZPUk1BWCB8ICgoTFZGRU5TX01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX01PREVfQVZMPC90ZD4NCi0gICAgICAgIDx0ZD4xPC90ZD4NCi0gICAgICAgIDx0ZD5UdXJucyBvbiBvciBvZmYgdGhlIEFWTC4gSWYgb2ZmLCBib3RoIEFHQyBhbmQgTGltaXRlciBhcmUgYnlwYXNzZWQ8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX01PREVfU1BERVRFQ1Q8L3RkPg0KLSAgICAgICAgPHRkPjI8L3RkPg0KLSAgICAgICAgPHRkPkFsbG93cyBkaXNhYmxpbmcgc3BlZWNoIGRldGVjdGlvbiBpbiB0aGUgQVZMLiBXaGVuIHR1cm5lZCBvZmYsIHRoZSBBR0MgYWRhcHRzIGl0cyBnYWluIGFsbCB0aGUgdGltZS48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX01PREVfTElNSVRFUjwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+VHVybnMgb24gb3Igb2ZmIHRoZSBsaW1pdGVyLjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWV01fTU9ERV9FWFRfU1BERVRFQ1Q8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPlVzZWQgdG8gdGVsbCB0aGUgV2hpc3Blck1vZGUgbW9kdWxlIGlmIGFuIGV4dGVybmFsIHNwZWVjaCBkZXRlY3Rpb24gaXMgYXZhaWxhYmxlIChJZiAwLCB0aGVyZSBpcyBubyBleHRlcm5hbCBzcGVlY2ggZGV0ZWN0b3IpLjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZXTV9Nb2RlV29yZF9ibTsNCi0vKioNCi0qIEBkZWYgTFZXTV9NT0RFX0FWTA0KLSogVHVybnMgb24gb3Igb2ZmIHRoZSBBVkwuIElmIG9mZiwgYm90aCBBR0MgYW5kIExpbWl0ZXIgYXJlIGJ5cGFzc2VkDQotKiBAc2VlIExWV01fTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZXTV9NT0RFX0FWTCAoKExWV01fTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgTFZXTV9NT0RFX1NQREVURUNUDQotKiBBbGxvd3MgZGlzYWJsaW5nIHNwZWVjaCBkZXRlY3Rpb24gaW4gdGhlIEFWTC4gV2hlbiB0dXJuZWQgb2ZmLCB0aGUgQUdDIGFkYXB0cyBpdHMgZ2FpbiBhbGwgdGhlIHRpbWUuDQotKiBAc2VlIExWV01fTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZXTV9NT0RFX1NQREVURUNUICgoTFZXTV9Nb2RlV29yZF9ibSkyKQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVfTElNSVRFUg0KLSogVHVybnMgb24gb3Igb2ZmIHRoZSBsaW1pdGVyLg0KLSogQHNlZSBMVldNX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWV01fTU9ERV9MSU1JVEVSICgoTFZXTV9Nb2RlV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVfRVhUX1NQREVURUNUDQotKiBVc2VkIHRvIHRlbGwgdGhlIFdoaXNwZXJNb2RlIG1vZHVsZSBpZiBhbiBleHRlcm5hbCBzcGVlY2ggZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSAoSWYgMCwgdGhlcmUgaXMgbm8gZXh0ZXJuYWwgc3BlZWNoIGRldGVjdG9yKS4NCi0qIEBzZWUgTFZXTV9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVldNX01PREVfRVhUX1NQREVURUNUICgoTFZXTV9Nb2RlV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVXT1JEX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZXTV9Nb2RlV29yZF9ibQ0KLSogQHNlZSBMVldNX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWV01fTU9ERVdPUkRfQk1fTUlOICgoTFZXTV9Nb2RlV29yZF9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZXTV9Nb2RlV29yZF9ibQ0KLSogQHNlZSBMVldNX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWV01fTU9ERV9BVkxfRk9STUFYICgoTFZXTV9Nb2RlV29yZF9ibSkxKQ0KLSNkZWZpbmUgTFZXTV9NT0RFX1NQREVURUNUX0ZPUk1BWCAoKExWV01fTW9kZVdvcmRfYm0pMikNCi0jZGVmaW5lIExWV01fTU9ERV9MSU1JVEVSX0ZPUk1BWCAoKExWV01fTW9kZVdvcmRfYm0pNCkNCi0jZGVmaW5lIExWV01fTU9ERV9FWFRfU1BERVRFQ1RfRk9STUFYICgoTFZXTV9Nb2RlV29yZF9ibSk4KQ0KLSNkZWZpbmUgTFZXTV9NT0RFV09SRF9CTV9NQVggKExWV01fTU9ERV9BVkxfRk9STUFYIHwgTFZXTV9NT0RFX1NQREVURUNUX0ZPUk1BWCB8IExWV01fTU9ERV9MSU1JVEVSX0ZPUk1BWCB8IExWV01fTU9ERV9FWFRfU1BERVRFQ1RfRk9STUFYIHwgKChMVldNX01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX05MTVMwPC90ZD4NCi0gICAgICAgIDx0ZD4xPC90ZD4NCi0gICAgICAgIDx0ZD5OTE1TMCBmdW5jdGlvbmFsaXR5PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERV9OTE1TMTwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+TkxNUzEgZnVuY3Rpb25hbGl0eTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREVfQkVBTUZPUk1FUjwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+Rml0ZXItYW5kLVN1bSBCZWFtZm9ybWVyIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX1BDRDwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+U3dpdGNoIGJldHdlZW4gUENEIChQYXRoIGNoYW5nZSBkZXRlY3RvcikgYW5kIEJTRCAoQnJvYWRzaWRlIGRldGVjdG9yKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREVfR1NDPC90ZD4NCi0gICAgICAgIDx0ZD4xNjwvdGQ+DQotICAgICAgICA8dGQ+R2VuZXJhbGl6ZWQgU2lkZWxvYmUgQ2FuY2VsbGVyIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX0ROTlM8L3RkPg0KLSAgICAgICAgPHRkPjMyPC90ZD4NCi0gICAgICAgIDx0ZD5EeW5hbWljIE5vbi1zdGF0aW9uYXJ5IE5vaXNlIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX0RFUzwvdGQ+DQotICAgICAgICA8dGQ+NjQ8L3RkPg0KLSAgICAgICAgPHRkPkR5bmFtaWMgRWNobyBTdXBwcmVzc2lvbiBmdW5jdGlvbmFsaXR5PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERV9OUzwvdGQ+DQotICAgICAgICA8dGQ+MTI4PC90ZD4NCi0gICAgICAgIDx0ZD5TdGF0aW9uYXJ5IE5vaXNlIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX05TX048L3RkPg0KLSAgICAgICAgPHRkPjI1NjwvdGQ+DQotICAgICAgICA8dGQ+Tm9uLXN0YXRpb25hcnkgTm9pc2UgU3VwcHJlc3Npb24gZnVuY3Rpb25hbGl0eTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREVfQ0FMPC90ZD4NCi0gICAgICAgIDx0ZD4yMDQ4PC90ZD4NCi0gICAgICAgIDx0ZD5Td2l0Y2ggYmV0d2VlbiBpbml0aWFsIG9yIGNvbnRpbnVvdXMgY2FsaWJyYXRpb248L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX0hCPC90ZD4NCi0gICAgICAgIDx0ZD4xNjM4NDwvdGQ+DQotICAgICAgICA8dGQ+SGlnaCBCYW5kIG11dGUvYWN0aXZhdGVkPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERV9IUzwvdGQ+DQotICAgICAgICA8dGQ+MzI3Njg8L3RkPg0KLSAgICAgICAgPHRkPkhvcm4gU3VwcHJlc3NvciBmdW5jdGlvbmFsaXR5IChpZiBhdmFpbGFibGUpPC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVk5WX01vZGVXb3JkX2JtOw0KLS8qKg0KLSogQGRlZiBNT0RFX05MTVMwDQotKiBOTE1TMCBmdW5jdGlvbmFsaXR5DQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9OTE1TMCAoKExWTlZfTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgTU9ERV9OTE1TMQ0KLSogTkxNUzEgZnVuY3Rpb25hbGl0eQ0KLSogQHNlZSBMVk5WX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREVfTkxNUzEgKChMVk5WX01vZGVXb3JkX2JtKTIpDQotLyoqDQotKiBAZGVmIE1PREVfQkVBTUZPUk1FUg0KLSogRml0ZXItYW5kLVN1bSBCZWFtZm9ybWVyIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0JFQU1GT1JNRVIgKChMVk5WX01vZGVXb3JkX2JtKTQpDQotLyoqDQotKiBAZGVmIE1PREVfUENEDQotKiBTd2l0Y2ggYmV0d2VlbiBQQ0QgKFBhdGggY2hhbmdlIGRldGVjdG9yKSBhbmQgQlNEIChCcm9hZHNpZGUgZGV0ZWN0b3IpDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9QQ0QgKChMVk5WX01vZGVXb3JkX2JtKTgpDQotLyoqDQotKiBAZGVmIE1PREVfR1NDDQotKiBHZW5lcmFsaXplZCBTaWRlbG9iZSBDYW5jZWxsZXIgZnVuY3Rpb25hbGl0eQ0KLSogQHNlZSBMVk5WX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREVfR1NDICgoTFZOVl9Nb2RlV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgTU9ERV9ETk5TDQotKiBEeW5hbWljIE5vbi1zdGF0aW9uYXJ5IE5vaXNlIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0ROTlMgKChMVk5WX01vZGVXb3JkX2JtKTMyKQ0KLS8qKg0KLSogQGRlZiBNT0RFX0RFUw0KLSogRHluYW1pYyBFY2hvIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0RFUyAoKExWTlZfTW9kZVdvcmRfYm0pNjQpDQotLyoqDQotKiBAZGVmIE1PREVfTlMNCi0qIFN0YXRpb25hcnkgTm9pc2UgU3VwcHJlc3Npb24gZnVuY3Rpb25hbGl0eQ0KLSogQHNlZSBMVk5WX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREVfTlMgKChMVk5WX01vZGVXb3JkX2JtKTEyOCkNCi0vKioNCi0qIEBkZWYgTU9ERV9OU19ODQotKiBOb24tc3RhdGlvbmFyeSBOb2lzZSBTdXBwcmVzc2lvbiBmdW5jdGlvbmFsaXR5DQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9OU19OICgoTFZOVl9Nb2RlV29yZF9ibSkyNTYpDQotLyoqDQotKiBAZGVmIE1PREVfQ0FMDQotKiBTd2l0Y2ggYmV0d2VlbiBpbml0aWFsIG9yIGNvbnRpbnVvdXMgY2FsaWJyYXRpb24NCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0NBTCAoKExWTlZfTW9kZVdvcmRfYm0pMjA0OCkNCi0vKioNCi0qIEBkZWYgTU9ERV9IQg0KLSogSGlnaCBCYW5kIG11dGUvYWN0aXZhdGVkDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9IQiAoKExWTlZfTW9kZVdvcmRfYm0pMTYzODQpDQotLyoqDQotKiBAZGVmIE1PREVfSFMNCi0qIEhvcm4gU3VwcHJlc3NvciBmdW5jdGlvbmFsaXR5IChpZiBhdmFpbGFibGUpDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9IUyAoKExWTlZfTW9kZVdvcmRfYm0pMzI3NjgpDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERVdPUkRfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVk5WX01vZGVXb3JkX2JtDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9NT0RFV09SRF9CTV9NSU4gKChMVk5WX01vZGVXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERVdPUkRfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVk5WX01vZGVXb3JkX2JtDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9OTE1TMF9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTEpDQotI2RlZmluZSBNT0RFX05MTVMxX0ZPUk1BWCAoKExWTlZfTW9kZVdvcmRfYm0pMikNCi0jZGVmaW5lIE1PREVfQkVBTUZPUk1FUl9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTQpDQotI2RlZmluZSBNT0RFX1BDRF9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTgpDQotI2RlZmluZSBNT0RFX0dTQ19GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTE2KQ0KLSNkZWZpbmUgTU9ERV9ETk5TX0ZPUk1BWCAoKExWTlZfTW9kZVdvcmRfYm0pMzIpDQotI2RlZmluZSBNT0RFX0RFU19GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTY0KQ0KLSNkZWZpbmUgTU9ERV9OU19GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTEyOCkNCi0jZGVmaW5lIE1PREVfTlNfTl9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTI1NikNCi0jZGVmaW5lIE1PREVfQ0FMX0ZPUk1BWCAoKExWTlZfTW9kZVdvcmRfYm0pMjA0OCkNCi0jZGVmaW5lIE1PREVfSEJfRk9STUFYICgoTFZOVl9Nb2RlV29yZF9ibSkxNjM4NCkNCi0jZGVmaW5lIE1PREVfSFNfRk9STUFYICgoTFZOVl9Nb2RlV29yZF9ibSkzMjc2OCkNCi0jZGVmaW5lIExWTlZfTU9ERVdPUkRfQk1fTUFYIChNT0RFX05MTVMwX0ZPUk1BWCB8IE1PREVfTkxNUzFfRk9STUFYIHwgTU9ERV9CRUFNRk9STUVSX0ZPUk1BWCB8IE1PREVfUENEX0ZPUk1BWCB8IE1PREVfR1NDX0ZPUk1BWCB8IE1PREVfRE5OU19GT1JNQVggfCBNT0RFX0RFU19GT1JNQVggfCBNT0RFX05TX0ZPUk1BWCB8IE1PREVfTlNfTl9GT1JNQVggfCBNT0RFX0NBTF9GT1JNQVggfCBNT0RFX0hCX0ZPUk1BWCB8IE1PREVfSFNfRk9STUFYIHwgKChMVk5WX01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFMl9GU0JfQ0FSRElPSUQ8L3RkPg0KLSAgICAgICAgPHRkPjE8L3RkPg0KLSAgICAgICAgPHRkPkZTQiB1cGRhdGUgYmFzZWQgb24gc3BlZWNoIGRldGVjdGlvbiBpbiBjYXJkaW9pZDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREUyX0ZTQl9XSVRISU5CRUFNPC90ZD4NCi0gICAgICAgIDx0ZD4yPC90ZD4NCi0gICAgICAgIDx0ZD5GU0IgdXBkYXRlIGJhc2VkIG9uIHdpdGhpbmJlYW0gZGV0ZWN0aW9uPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERTJfQ0FMX1VQREFURTwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+U3dpdGNoIGZvciBjYWxpYnJhdGlvbiBmdW5jdGlvbmFsaXR5IGJldHdlZW4gdXBkYXRlZCBvciBub3QtdXBkYXRlZDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREUyX0JFQU1EQU1BR0U8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPk1pY3JvcGhvbmUgY292ZXJhZ2UgcHJvdGVjdGlvbjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZOVl9Nb2RlMldvcmRfYm07DQotLyoqDQotKiBAZGVmIE1PREUyX0ZTQl9DQVJESU9JRA0KLSogRlNCIHVwZGF0ZSBiYXNlZCBvbiBzcGVlY2ggZGV0ZWN0aW9uIGluIGNhcmRpb2lkDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREUyX0ZTQl9DQVJESU9JRCAoKExWTlZfTW9kZTJXb3JkX2JtKTEpDQotLyoqDQotKiBAZGVmIE1PREUyX0ZTQl9XSVRISU5CRUFNDQotKiBGU0IgdXBkYXRlIGJhc2VkIG9uIHdpdGhpbmJlYW0gZGV0ZWN0aW9uDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREUyX0ZTQl9XSVRISU5CRUFNICgoTFZOVl9Nb2RlMldvcmRfYm0pMikNCi0vKioNCi0qIEBkZWYgTU9ERTJfQ0FMX1VQREFURQ0KLSogU3dpdGNoIGZvciBjYWxpYnJhdGlvbiBmdW5jdGlvbmFsaXR5IGJldHdlZW4gdXBkYXRlZCBvciBub3QtdXBkYXRlZA0KLSogQHNlZSBMVk5WX01vZGUyV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFMl9DQUxfVVBEQVRFICgoTFZOVl9Nb2RlMldvcmRfYm0pNCkNCi0vKioNCi0qIEBkZWYgTU9ERTJfQkVBTURBTUFHRQ0KLSogTWljcm9waG9uZSBjb3ZlcmFnZSBwcm90ZWN0aW9uDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREUyX0JFQU1EQU1BR0UgKChMVk5WX01vZGUyV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX01PREUyV09SRF9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWTlZfTW9kZTJXb3JkX2JtDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfTU9ERTJXT1JEX0JNX01JTiAoKExWTlZfTW9kZTJXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERTJXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZOVl9Nb2RlMldvcmRfYm0NCi0qIEBzZWUgTFZOVl9Nb2RlMldvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERTJfRlNCX0NBUkRJT0lEX0ZPUk1BWCAoKExWTlZfTW9kZTJXb3JkX2JtKTEpDQotI2RlZmluZSBNT0RFMl9GU0JfV0lUSElOQkVBTV9GT1JNQVggKChMVk5WX01vZGUyV29yZF9ibSkyKQ0KLSNkZWZpbmUgTU9ERTJfQ0FMX1VQREFURV9GT1JNQVggKChMVk5WX01vZGUyV29yZF9ibSk0KQ0KLSNkZWZpbmUgTU9ERTJfQkVBTURBTUFHRV9GT1JNQVggKChMVk5WX01vZGUyV29yZF9ibSk4KQ0KLSNkZWZpbmUgTFZOVl9NT0RFMldPUkRfQk1fTUFYIChNT0RFMl9GU0JfQ0FSRElPSURfRk9STUFYIHwgTU9ERTJfRlNCX1dJVEhJTkJFQU1fRk9STUFYIHwgTU9ERTJfQ0FMX1VQREFURV9GT1JNQVggfCBNT0RFMl9CRUFNREFNQUdFX0ZPUk1BWCB8ICgoTFZOVl9Nb2RlMldvcmRfYm0pMCkpDQotLyoqDQotPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPk5hbWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5WYWx1ZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIFRVTklOR19NT0RFX05MTVMxPC90ZD4NCi0gICAgICAgIDx0ZD4xPC90ZD4NCi0gICAgICAgIDx0ZD5OTE1TMSBvdXRwdXQ8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9GU0I8L3RkPg0KLSAgICAgICAgPHRkPjI8L3RkPg0KLSAgICAgICAgPHRkPkZTQiBub2lzZSByZWZlcmVuY2Ugb3V0cHV0PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgVFVOSU5HX01PREVfV0lUSElOQkVBTTwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+VHVuaW5nIGJlZXAgd2hlbiBXaXRoaW5iZWFtPTE8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9VUERBVEVPTk9GRjwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPlR1bmluZyBiZWVwIHdoZW4gRlNCIGlzIHVwZGF0ZWQ8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9DQUxfTUlDUE9XPC90ZD4NCi0gICAgICAgIDx0ZD42NDwvdGQ+DQotICAgICAgICA8dGQ+VHVuaW5nIGJlZXAgd2hlbiBNaWNQb3cgaXMgbG93ZXIgdGhhbiBDYWxfbWljUG93Rmxvb3JNaW48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9CUk9BRFNJREU8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+VHVuaW5nIGJlZXAgd2hlbiBicm9hZHNpZGUgaXMgZGV0ZWN0ZWQ8L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWTlZfVHVuaW5nTW9kZVdvcmRfYm07DQotLyoqDQotKiBAZGVmIFRVTklOR19NT0RFX05MTVMxDQotKiBOTE1TMSBvdXRwdXQNCi0qIEBzZWUgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBUVU5JTkdfTU9ERV9OTE1TMSAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfRlNCDQotKiBGU0Igbm9pc2UgcmVmZXJlbmNlIG91dHB1dA0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX0ZTQiAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMikNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfV0lUSElOQkVBTQ0KLSogVHVuaW5nIGJlZXAgd2hlbiBXaXRoaW5iZWFtPTENCi0qIEBzZWUgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBUVU5JTkdfTU9ERV9XSVRISU5CRUFNICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBUVU5JTkdfTU9ERV9VUERBVEVPTk9GRg0KLSogVHVuaW5nIGJlZXAgd2hlbiBGU0IgaXMgdXBkYXRlZA0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX1VQREFURU9OT0ZGICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfQ0FMX01JQ1BPVw0KLSogVHVuaW5nIGJlZXAgd2hlbiBNaWNQb3cgaXMgbG93ZXIgdGhhbiBDYWxfbWljUG93Rmxvb3JNaW4NCi0qIEBzZWUgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBUVU5JTkdfTU9ERV9DQUxfTUlDUE9XICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSk2NCkNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfQlJPQURTSURFDQotKiBUdW5pbmcgYmVlcCB3aGVuIGJyb2Fkc2lkZSBpcyBkZXRlY3RlZA0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX0JST0FEU0lERSAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMTI4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1RVTklOR01PREVXT1JEX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfVFVOSU5HTU9ERVdPUkRfQk1fTUlOICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1RVTklOR01PREVXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX05MTVMxX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMSkNCi0jZGVmaW5lIFRVTklOR19NT0RFX0ZTQl9GT1JNQVggKChMVk5WX1R1bmluZ01vZGVXb3JkX2JtKTIpDQotI2RlZmluZSBUVU5JTkdfTU9ERV9XSVRISU5CRUFNX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pOCkNCi0jZGVmaW5lIFRVTklOR19NT0RFX1VQREFURU9OT0ZGX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMTYpDQotI2RlZmluZSBUVU5JTkdfTU9ERV9DQUxfTUlDUE9XX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pNjQpDQotI2RlZmluZSBUVU5JTkdfTU9ERV9CUk9BRFNJREVfRk9STUFYICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSkxMjgpDQotI2RlZmluZSBMVk5WX1RVTklOR01PREVXT1JEX0JNX01BWCAoVFVOSU5HX01PREVfTkxNUzFfRk9STUFYIHwgVFVOSU5HX01PREVfRlNCX0ZPUk1BWCB8IFRVTklOR19NT0RFX1dJVEhJTkJFQU1fRk9STUFYIHwgVFVOSU5HX01PREVfVVBEQVRFT05PRkZfRk9STUFYIHwgVFVOSU5HX01PREVfQ0FMX01JQ1BPV19GT1JNQVggfCBUVU5JTkdfTU9ERV9CUk9BRFNJREVfRk9STUFYIHwgKChMVk5WX1R1bmluZ01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19MT1NUX0JFQU08L3RkPg0KLSAgICAgICAgPHRkPjE8L3RkPg0KLSAgICAgICAgPHRkPkxvc3RCZWFtIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19NSUNfQ09WPC90ZD4NCi0gICAgICAgIDx0ZD4yPC90ZD4NCi0gICAgICAgIDx0ZD5NaWNyb3Bob25lIENvdmVyYWdlIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19GU0JfVVBEQVRFPC90ZD4NCi0gICAgICAgIDx0ZD40PC90ZD4NCi0gICAgICAgIDx0ZD5GU0IgdXBkYXRlczwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfU1RBVFVTX0JFQU1fREFNQUdFPC90ZD4NCi0gICAgICAgIDx0ZD44PC90ZD4NCi0gICAgICAgIDx0ZD5CZWFtRGFtYWdlIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19HU0NfVVBEQVRFPC90ZD4NCi0gICAgICAgIDx0ZD4xNjwvdGQ+DQotICAgICAgICA8dGQ+R1NDIHVwZGF0ZXM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19ETk5TX1dCRUFNPC90ZD4NCi0gICAgICAgIDx0ZD4zMjwvdGQ+DQotICAgICAgICA8dGQ+RE5OUyBXaXRoaW5CZWFtIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19ETk5TX0FDVElWSVRZPC90ZD4NCi0gICAgICAgIDx0ZD42NDwvdGQ+DQotICAgICAgICA8dGQ+RE5OUyBhY3Rpdml0eSBkZXRlY3Rpb25zPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfQ0FMX01JQ1BPVzwvdGQ+DQotICAgICAgICA8dGQ+MTI4PC90ZD4NCi0gICAgICAgIDx0ZD5DYWxpYnJhdGlvbiBNaWNyb3Bob25lIFBvd2VyPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfTUlDUE9XU1A8L3RkPg0KLSAgICAgICAgPHRkPjI1NjwvdGQ+DQotICAgICAgICA8dGQ+KExWMTAwOCkgTWljUG93IFNwZWVjaCBkZXRlY3Rpb25zPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUc8L3RkPg0KLSAgICAgICAgPHRkPjUxMjwvdGQ+DQotICAgICAgICA8dGQ+KExWMjM3MCkgQnJvYWRzaWRlIGRldGVjdGlvbiBmbGFnPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfQ0FMX1VQREFURUQ8L3RkPg0KLSAgICAgICAgPHRkPjEwMjQ8L3RkPg0KLSAgICAgICAgPHRkPihMVjgyMzcpIENhbGlicmF0aW9uIHVwZGF0ZWQgZmxhZzwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfU1RBVFVTX1dCRUFNX0ZJWDwvdGQ+DQotICAgICAgICA8dGQ+MjA0ODwvdGQ+DQotICAgICAgICA8dGQ+V2l0aGluQmVhbSBkZXRlY3Rpb24gZm9yIEZpeGVkIEJlYW1mb3JtZXIgKGlmIGF2YWlsYWJsZSkuPC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVk5WX1N0YXR1c1dvcmRfYm07DQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX0xPU1RfQkVBTQ0KLSogTG9zdEJlYW0gZGV0ZWN0aW9ucw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfTE9TVF9CRUFNICgoTFZOVl9TdGF0dXNXb3JkX2JtKTEpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX01JQ19DT1YNCi0qIE1pY3JvcGhvbmUgQ292ZXJhZ2UgZGV0ZWN0aW9ucw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfTUlDX0NPViAoKExWTlZfU3RhdHVzV29yZF9ibSkyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19GU0JfVVBEQVRFDQotKiBGU0IgdXBkYXRlcw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfRlNCX1VQREFURSAoKExWTlZfU3RhdHVzV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19CRUFNX0RBTUFHRQ0KLSogQmVhbURhbWFnZSBkZXRlY3Rpb25zDQotKiBAc2VlIExWTlZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVk5WX1NUQVRVU19CRUFNX0RBTUFHRSAoKExWTlZfU3RhdHVzV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19HU0NfVVBEQVRFDQotKiBHU0MgdXBkYXRlcw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfR1NDX1VQREFURSAoKExWTlZfU3RhdHVzV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfRE5OU19XQkVBTQ0KLSogRE5OUyBXaXRoaW5CZWFtIGRldGVjdGlvbnMNCi0qIEBzZWUgTFZOVl9TdGF0dXNXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX0ROTlNfV0JFQU0gKChMVk5WX1N0YXR1c1dvcmRfYm0pMzIpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX0ROTlNfQUNUSVZJVFkNCi0qIEROTlMgYWN0aXZpdHkgZGV0ZWN0aW9ucw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfRE5OU19BQ1RJVklUWSAoKExWTlZfU3RhdHVzV29yZF9ibSk2NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfQ0FMX01JQ1BPVw0KLSogQ2FsaWJyYXRpb24gTWljcm9waG9uZSBQb3dlcg0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQ0FMX01JQ1BPVyAoKExWTlZfU3RhdHVzV29yZF9ibSkxMjgpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX01JQ1BPV1NQDQotKiAoTFYxMDA4KSBNaWNQb3cgU3BlZWNoIGRldGVjdGlvbnMNCi0qIEBzZWUgTFZOVl9TdGF0dXNXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX01JQ1BPV1NQICgoTFZOVl9TdGF0dXNXb3JkX2JtKTI1NikNCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUcNCi0qIChMVjIzNzApIEJyb2Fkc2lkZSBkZXRlY3Rpb24gZmxhZw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUcgKChMVk5WX1N0YXR1c1dvcmRfYm0pNTEyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19DQUxfVVBEQVRFRA0KLSogKExWODIzNykgQ2FsaWJyYXRpb24gdXBkYXRlZCBmbGFnDQotKiBAc2VlIExWTlZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVk5WX1NUQVRVU19DQUxfVVBEQVRFRCAoKExWTlZfU3RhdHVzV29yZF9ibSkxMDI0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19XQkVBTV9maXgNCi0qIFdpdGhpbkJlYW0gZGV0ZWN0aW9uIGZvciBGaXhlZCBCZWFtZm9ybWVyIChpZiBhdmFpbGFibGUpLg0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfV0JFQU1fRklYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTIwNDgpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTV09SRF9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWTlZfU3RhdHVzV29yZF9ibQ0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNXT1JEX0JNX01JTiAoKExWTlZfU3RhdHVzV29yZF9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU1dPUkRfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qIEBzZWUgTFZOVl9TdGF0dXNXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX0xPU1RfQkVBTV9GT1JNQVggKChMVk5WX1N0YXR1c1dvcmRfYm0pMSkNCi0jZGVmaW5lIExWTlZfU1RBVFVTX01JQ19DT1ZfRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTIpDQotI2RlZmluZSBMVk5WX1NUQVRVU19GU0JfVVBEQVRFX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSk0KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQkVBTV9EQU1BR0VfRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTgpDQotI2RlZmluZSBMVk5WX1NUQVRVU19HU0NfVVBEQVRFX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkxNikNCi0jZGVmaW5lIExWTlZfU1RBVFVTX0ROTlNfV0JFQU1fRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTMyKQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfRE5OU19BQ1RJVklUWV9GT1JNQVggKChMVk5WX1N0YXR1c1dvcmRfYm0pNjQpDQotI2RlZmluZSBMVk5WX1NUQVRVU19DQUxfTUlDUE9XX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkxMjgpDQotI2RlZmluZSBMVk5WX1NUQVRVU19NSUNQT1dTUF9GT1JNQVggKChMVk5WX1N0YXR1c1dvcmRfYm0pMjU2KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUdfRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTUxMikNCi0jZGVmaW5lIExWTlZfU1RBVFVTX0NBTF9VUERBVEVEX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkxMDI0KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfV0JFQU1fRklYX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkyMDQ4KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNXT1JEX0JNX01BWCAoTFZOVl9TVEFUVVNfTE9TVF9CRUFNX0ZPUk1BWCB8IExWTlZfU1RBVFVTX01JQ19DT1ZfRk9STUFYIHwgTFZOVl9TVEFUVVNfRlNCX1VQREFURV9GT1JNQVggfCBMVk5WX1NUQVRVU19CRUFNX0RBTUFHRV9GT1JNQVggfCBMVk5WX1NUQVRVU19HU0NfVVBEQVRFX0ZPUk1BWCB8IExWTlZfU1RBVFVTX0ROTlNfV0JFQU1fRk9STUFYIHwgTFZOVl9TVEFUVVNfRE5OU19BQ1RJVklUWV9GT1JNQVggfCBMVk5WX1NUQVRVU19DQUxfTUlDUE9XX0ZPUk1BWCB8IExWTlZfU1RBVFVTX01JQ1BPV1NQX0ZPUk1BWCB8IExWTlZfU1RBVFVTX0JST0FEU0lERV9GTEFHX0ZPUk1BWCB8IExWTlZfU1RBVFVTX0NBTF9VUERBVEVEX0ZPUk1BWCB8IExWTlZfU1RBVFVTX1dCRUFNX0ZJWF9GT1JNQVggfCAoKExWTlZfU3RhdHVzV29yZF9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRTwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+UENEIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfQ0xJUDwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+U1BERVRfeF9jbGlwIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfRkFSX1NQRUFLUzwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+U1BERVRfZmFyIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLUzwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+U1BERVRfbWljIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfSEJfTVVURTwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPk11dGUgaGlnaCBiYW5kICg0a0h6LThrSHopLiBTaG91bGQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdC48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0NPTlRST0xfVFVORV9UQl9NVVRFPC90ZD4NCi0gICAgICAgIDx0ZD4zMjwvdGQ+DQotICAgICAgICA8dGQ+TXV0ZSB0b3AgYmFuZCAoYWJvdmUgOGtIeikuIFNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZIRl9UdW5pbmdNb2RlV29yZDsNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRQ0KLSogUENEIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRSAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMSkNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfQ0xJUA0KLSogU1BERVRfeF9jbGlwIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfQ0xJUCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMikNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfRkFSX1NQRUFLUw0KLSogU1BERVRfZmFyIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfRkFSX1NQRUFLUyAoKExWSEZfVHVuaW5nTW9kZVdvcmQpNCkNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLUw0KLSogU1BERVRfbWljIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLUyAoKExWSEZfVHVuaW5nTW9kZVdvcmQpOCkNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfSEJfTVVURQ0KLSogTXV0ZSBoaWdoIGJhbmQgKDRrSHotOGtIeikuIFNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0Lg0KLSogQHNlZSBMVkhGX1R1bmluZ01vZGVXb3JkDQotKi8NCi0jZGVmaW5lIExWSEZfQ09OVFJPTF9UVU5FX0hCX01VVEUgKChMVkhGX1R1bmluZ01vZGVXb3JkKTE2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0NPTlRST0xfVFVORV9UQl9NVVRFDQotKiBNdXRlIHRvcCBiYW5kIChhYm92ZSA4a0h6KS4gU2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfVEJfTVVURSAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMzIpDQotLyoqDQotKiBAZGVmIExWSEZfVFVOSU5HTU9ERVdPUkRfTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVkhGX1R1bmluZ01vZGVXb3JkDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9UVU5JTkdNT0RFV09SRF9NSU4gKChMVkhGX1R1bmluZ01vZGVXb3JkKTApDQotLyoqDQotKiBAZGVmIExWSEZfVFVOSU5HTU9ERVdPUkRfTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVkhGX1R1bmluZ01vZGVXb3JkDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRV9GT1JNQVggKChMVkhGX1R1bmluZ01vZGVXb3JkKTEpDQotI2RlZmluZSBMVkhGX0NPTlRST0xfVFVORV9DTElQX0ZPUk1BWCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMikNCi0jZGVmaW5lIExWSEZfQ09OVFJPTF9UVU5FX0ZBUl9TUEVBS1NfRk9STUFYICgoTFZIRl9UdW5pbmdNb2RlV29yZCk0KQ0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLU19GT1JNQVggKChMVkhGX1R1bmluZ01vZGVXb3JkKTgpDQotI2RlZmluZSBMVkhGX0NPTlRST0xfVFVORV9IQl9NVVRFX0ZPUk1BWCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMTYpDQotI2RlZmluZSBMVkhGX0NPTlRST0xfVFVORV9UQl9NVVRFX0ZPUk1BWCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMzIpDQotI2RlZmluZSBMVkhGX1RVTklOR01PREVXT1JEX01BWCAoTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRV9GT1JNQVggfCBMVkhGX0NPTlRST0xfVFVORV9DTElQX0ZPUk1BWCB8IExWSEZfQ09OVFJPTF9UVU5FX0ZBUl9TUEVBS1NfRk9STUFYIHwgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLU19GT1JNQVggfCBMVkhGX0NPTlRST0xfVFVORV9IQl9NVVRFX0ZPUk1BWCB8IExWSEZfQ09OVFJPTF9UVU5FX1RCX01VVEVfRk9STUFYIHwgKChMVkhGX1R1bmluZ01vZGVXb3JkKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfTkxNUzwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+TkxNUyBmdW5jdGlvbmFsaXR5PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX0RFUzwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+REVTIChEeW5hbWljIEVjaG8gU3VwcHJlc3Npb24pPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX05TPC90ZD4NCi0gICAgICAgIDx0ZD40PC90ZD4NCi0gICAgICAgIDx0ZD5OUyAoTm9pc2UgU3VwcHJlc3Npb24pPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX0NOSTwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+Q05JIChDb21mb3J0IE5vaXNlIEluamVjdGlvbik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfTkxFUzwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPk5MRVMgKE5vbiBMaW5lYXIgRWNobyBTdXBwcmVzc2lvbik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfUENEX0RUPC90ZD4NCi0gICAgICAgIDx0ZD42NDwvdGQ+DQotICAgICAgICA8dGQ+RFQgKERvdWJsZSBUYWxrKSBwcm90ZWN0aW9uIGFmdGVyIFBDRDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTU9ERV9QQ0Q8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+UENEIChQYXRoIENoYW5nZSBEZXRlY3Rvcik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfSU5JVF9FUzwvdGQ+DQotICAgICAgICA8dGQ+MjU2PC90ZD4NCi0gICAgICAgIDx0ZD5Jbml0aWFsIGVjaG8gc3VwcHJlc3Npb24gc2V0dGluZyBieSBQQ0RfZ2FtbWFfZV9yZXNjdWU8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfSFM8L3RkPg0KLSAgICAgICAgPHRkPjUxMjwvdGQ+DQotICAgICAgICA8dGQ+SG9yblN1cHByZXNzaW9uIChpZiBhdmFpbGFibGUpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX1BSRU5MTVM8L3RkPg0KLSAgICAgICAgPHRkPjQwOTY8L3RkPg0KLSAgICAgICAgPHRkPlByZS1OTE1TIHByZXByb2Nlc3Npbmc8L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWSEZfTW9kZVdvcmRfYm07DQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9OTE1TDQotKiBOTE1TIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfTkxNUyAoKExWSEZfTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX0RFUw0KLSogREVTIChEeW5hbWljIEVjaG8gU3VwcHJlc3Npb24pDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX0RFUyAoKExWSEZfTW9kZVdvcmRfYm0pMikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX05TDQotKiBOUyAoTm9pc2UgU3VwcHJlc3Npb24pDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX05TICgoTFZIRl9Nb2RlV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX01PREVfQ05JDQotKiBDTkkgKENvbWZvcnQgTm9pc2UgSW5qZWN0aW9uKQ0KLSogQHNlZSBMVkhGX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWSEZfTU9ERV9DTkkgKChMVkhGX01vZGVXb3JkX2JtKTgpDQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9OTEVTDQotKiBOTEVTIChOb24gTGluZWFyIEVjaG8gU3VwcHJlc3Npb24pDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX05MRVMgKChMVkhGX01vZGVXb3JkX2JtKTE2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX01PREVfUENEX0RUDQotKiBEVCAoRG91YmxlIFRhbGspIHByb3RlY3Rpb24gYWZ0ZXIgUENEDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX1BDRF9EVCAoKExWSEZfTW9kZVdvcmRfYm0pNjQpDQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9QQ0QNCi0qIFBDRCAoUGF0aCBDaGFuZ2UgRGV0ZWN0b3IpDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX1BDRCAoKExWSEZfTW9kZVdvcmRfYm0pMTI4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX01PREVfSU5JVF9FUw0KLSogSW5pdGlhbCBlY2hvIHN1cHByZXNzaW9uIHNldHRpbmcgYnkgUENEX2dhbW1hX2VfcmVzY3VlDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX0lOSVRfRVMgKChMVkhGX01vZGVXb3JkX2JtKTI1NikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX0hTDQotKiBIb3JuU3VwcHJlc3Npb24gKGlmIGF2YWlsYWJsZSkNCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfSFMgKChMVkhGX01vZGVXb3JkX2JtKTUxMikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX1BSRU5MTVMNCi0qIFByZS1OTE1TIHByZXByb2Nlc3NpbmcNCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfUFJFTkxNUyAoKExWSEZfTW9kZVdvcmRfYm0pNDA5NikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFV09SRF9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWSEZfTW9kZVdvcmRfYm0NCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVXT1JEX0JNX01JTiAoKExWSEZfTW9kZVdvcmRfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFV09SRF9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWSEZfTW9kZVdvcmRfYm0NCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfTkxNU19GT1JNQVggKChMVkhGX01vZGVXb3JkX2JtKTEpDQotI2RlZmluZSBMVkhGX01PREVfREVTX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pMikNCi0jZGVmaW5lIExWSEZfTU9ERV9OU19GT1JNQVggKChMVkhGX01vZGVXb3JkX2JtKTQpDQotI2RlZmluZSBMVkhGX01PREVfQ05JX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pOCkNCi0jZGVmaW5lIExWSEZfTU9ERV9OTEVTX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pMTYpDQotI2RlZmluZSBMVkhGX01PREVfUENEX0RUX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pNjQpDQotI2RlZmluZSBMVkhGX01PREVfUENEX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pMTI4KQ0KLSNkZWZpbmUgTFZIRl9NT0RFX0lOSVRfRVNfRk9STUFYICgoTFZIRl9Nb2RlV29yZF9ibSkyNTYpDQotI2RlZmluZSBMVkhGX01PREVfSFNfRk9STUFYICgoTFZIRl9Nb2RlV29yZF9ibSk1MTIpDQotI2RlZmluZSBMVkhGX01PREVfUFJFTkxNU19GT1JNQVggKChMVkhGX01vZGVXb3JkX2JtKTQwOTYpDQotI2RlZmluZSBMVkhGX01PREVXT1JEX0JNX01BWCAoTFZIRl9NT0RFX05MTVNfRk9STUFYIHwgTFZIRl9NT0RFX0RFU19GT1JNQVggfCBMVkhGX01PREVfTlNfRk9STUFYIHwgTFZIRl9NT0RFX0NOSV9GT1JNQVggfCBMVkhGX01PREVfTkxFU19GT1JNQVggfCBMVkhGX01PREVfUENEX0RUX0ZPUk1BWCB8IExWSEZfTU9ERV9QQ0RfRk9STUFYIHwgTFZIRl9NT0RFX0lOSVRfRVNfRk9STUFYIHwgTFZIRl9NT0RFX0hTX0ZPUk1BWCB8IExWSEZfTU9ERV9QUkVOTE1TX0ZPUk1BWCB8ICgoTFZIRl9Nb2RlV29yZF9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TVEFUVVNfRkFSX1NQRUFLUzwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+RmFyRW5kIGlzIHNwZWFraW5nPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TVEFUVVNfRkFSX1NUQVJUUzwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+RmFyRW5kIHN0YXJ0cyB0byBzcGVhazwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1RBVFVTX01JQ19TUEVBS1M8L3RkPg0KLSAgICAgICAgPHRkPjQ8L3RkPg0KLSAgICAgICAgPHRkPk1pYyBhY3Rpdml0eSBkZXRlY3RlZDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1RBVFVTX0NMSVA8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPkNsaXBwaW5nIERldGVjdGVkPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TVEFUVVNfUEFUSENIQU5HRTwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPlBhdGggQ2hhbmdlIGRldGVjdGVkPC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVkhGX1N0YXR1c1dvcmRfYm07DQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTX0ZBUl9TUEVBS1MNCi0qIEZhckVuZCBpcyBzcGVha2luZw0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfRkFSX1NQRUFLUyAoKExWSEZfU3RhdHVzV29yZF9ibSkxKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NUQVRVU19GQVJfU1RBUlRTDQotKiBGYXJFbmQgc3RhcnRzIHRvIHNwZWFrDQotKiBAc2VlIExWSEZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX1NUQVRVU19GQVJfU1RBUlRTICgoTFZIRl9TdGF0dXNXb3JkX2JtKTIpDQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTX01JQ19TUEVBS1MNCi0qIE1pYyBhY3Rpdml0eSBkZXRlY3RlZA0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfTUlDX1NQRUFLUyAoKExWSEZfU3RhdHVzV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NUQVRVU19DTElQDQotKiBDbGlwcGluZyBEZXRlY3RlZA0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfQ0xJUCAoKExWSEZfU3RhdHVzV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NUQVRVU19QQVRIQ0hBTkdFDQotKiBQYXRoIENoYW5nZSBkZXRlY3RlZA0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfUEFUSENIQU5HRSAoKExWSEZfU3RhdHVzV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgTFZIRl9TVEFUVVNXT1JEX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZIRl9TdGF0dXNXb3JkX2JtDQotKiBAc2VlIExWSEZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX1NUQVRVU1dPUkRfQk1fTUlOICgoTFZIRl9TdGF0dXNXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTV09SRF9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWSEZfU3RhdHVzV29yZF9ibQ0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfRkFSX1NQRUFLU19GT1JNQVggKChMVkhGX1N0YXR1c1dvcmRfYm0pMSkNCi0jZGVmaW5lIExWSEZfU1RBVFVTX0ZBUl9TVEFSVFNfRk9STUFYICgoTFZIRl9TdGF0dXNXb3JkX2JtKTIpDQotI2RlZmluZSBMVkhGX1NUQVRVU19NSUNfU1BFQUtTX0ZPUk1BWCAoKExWSEZfU3RhdHVzV29yZF9ibSk0KQ0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfQ0xJUF9GT1JNQVggKChMVkhGX1N0YXR1c1dvcmRfYm0pOCkNCi0jZGVmaW5lIExWSEZfU1RBVFVTX1BBVEhDSEFOR0VfRk9STUFYICgoTFZIRl9TdGF0dXNXb3JkX2JtKTE2KQ0KLSNkZWZpbmUgTFZIRl9TVEFUVVNXT1JEX0JNX01BWCAoTFZIRl9TVEFUVVNfRkFSX1NQRUFLU19GT1JNQVggfCBMVkhGX1NUQVRVU19GQVJfU1RBUlRTX0ZPUk1BWCB8IExWSEZfU1RBVFVTX01JQ19TUEVBS1NfRk9STUFYIHwgTFZIRl9TVEFUVVNfQ0xJUF9GT1JNQVggfCBMVkhGX1NUQVRVU19QQVRIQ0hBTkdFX0ZPUk1BWCB8ICgoTFZIRl9TdGF0dXNXb3JkX2JtKTApKQ0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMV9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzJfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMl9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2syX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkNfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZWQ19Nb2RlV29yZF9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkZFTlNfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZGRU5TX01vZGVXb3JkX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWV01fTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZXTV9Nb2RlV29yZF9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVk5WX01PREVXT1JEX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWTlZfTW9kZVdvcmRfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZOVl9NT0RFMldPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZOVl9Nb2RlMldvcmRfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZOVl9UVU5JTkdNT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVk5WX1R1bmluZ01vZGVXb3JkX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTlZfU1RBVFVTV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVk5WX1N0YXR1c1dvcmRfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZIRl9UVU5JTkdNT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVkhGX1R1bmluZ01vZGVXb3JkIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWSEZfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZIRl9Nb2RlV29yZF9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkhGX1NUQVRVU1dPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZIRl9TdGF0dXNXb3JkX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWTV9Nb2RlX2VuIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTV9DT05GSUdfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZNX0NvbmZpZ19lbiBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVk1fRlNfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZNX0ZzX2VuIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX01FU1NBR0VJRF9MVldJUkVGT1JNQVRfTEVOR1RIICg0KSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZJREhlYWRlcl9NZXNzYWdlSURfZW4gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfUkVUVVJOU1RBVFVTX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX1JldHVyblN0YXR1c19lbiBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVlZFX1JYX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZWRV9SeF9Nb2RlX2VuIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkVfVFhfTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIICg0KSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZFX1R4X01vZGVfZW4gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICg3IFwNCi0gKyBMVlZJREhFQURFUl9MVlZFX1JYX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzJfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVlZJREhFQURFUl9MVlZFX1RYX01BU0syX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX01FU1NBR0VJRF9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk1fRlNfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWVklESGVhZGVyIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyMiBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZWQ19NT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgTFZWQyBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkZFTlNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyIFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkZFTlNfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWRkVOUyBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVldNX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoMTQgXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWV01fTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWV00gQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZEUkNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyOCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWRFJDIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTkdfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyNiBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWTkcgQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZOTFBQX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWTkxQUCBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkVRX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoMTMwKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgTFZFUSBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVlZPTF9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIgXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVlZPTCBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkhQRl9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIgXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVkhQRiBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVk1VVEVfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIChMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgTFZNVVRFIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkVfUlhfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICg0IFwNCi0gKyBMVlZFX1JYX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZGRU5TX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZOTFBQX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZWQ19DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWRVFfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkRSQ19DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWV01fQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk5HX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWVkVfUnggQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZOVl9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKDEyMiBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZOVl9NT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk5WX01PREUyV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk5WX1RVTklOR01PREVXT1JEX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVk5WIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWSEZfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICg3OCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZIRl9NT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkhGX1RVTklOR01PREVXT1JEX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVkhGIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWQkRfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICg0IFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgTFZCRCBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVlZFX1RYX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoOCBcDQotICsgTFZWRV9UWF9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWSEZfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk5WX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZXTV9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWRVFfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkRSQ19DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVlZFX1R4IENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEhlYWRlclZlcnNpb24NCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9IRUFERVJWRVJTSU9OX0RFRkFVTFQgKDMpDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0hFQURFUlZFUlNJT05fTUlODQotKiBNaW5WYWx1ZSBvZiBIZWFkZXJWZXJzaW9uDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0hFQURFUlZFUlNJT05fTUFYDQotKiBNYXhWYWx1ZSBvZiBIZWFkZXJWZXJzaW9uDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9NQVggKDI1NSkNCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQmFzZWxpbmVWZXJzaW9uDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX0RFRkFVTFQgKDUxOTA2ODE2KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9CQVNFTElORVZFUlNJT05fTUlODQotKiBNaW5WYWx1ZSBvZiBCYXNlbGluZVZlcnNpb24NCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9CQVNFTElORVZFUlNJT05fTUlOICgxKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9CQVNFTElORVZFUlNJT05fTUFYDQotKiBNYXhWYWx1ZSBvZiBCYXNlbGluZVZlcnNpb24NCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9CQVNFTElORVZFUlNJT05fTUFYICg0Mjk0OTY3Mjk1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9MVlZFX1JYX0FMR09NQVNLMV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIExWVkVfUnhfQWxnb01hc2sxDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9BTEdPTUFTSzFfREVGQVVMVCAoTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMV9CTV9NQVgpDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfUlhfQUxHT01BU0syX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTFZWRV9SeF9BbGdvTWFzazINCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0FMR09NQVNLMl9ERUZBVUxUIChMVlZJREhFQURFUl9MVlZFX1JYX01BU0syX0JNX01BWCkNCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9UWF9BTEdPTUFTSzFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBMVlZFX1R4X0FsZ29NYXNrMQ0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfQUxHT01BU0sxX0RFRkFVTFQgKExWVklESEVBREVSX0xWVkVfVFhfTUFTSzFfQk1fTUFYKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9MVlZFX1RYX0FMR09NQVNLMl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIExWVkVfVHhfQWxnb01hc2syDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9BTEdPTUFTSzJfREVGQVVMVCAoTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMl9CTV9NQVgpDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfQ09ORklHX0FMR09NQVNLMV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIExWVkVfQ29uZmlnX0FsZ29NYXNrMQ0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfQ09ORklHX0FMR09NQVNLMV9ERUZBVUxUIChMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19NQVNLMV9CTV9NQVgpDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfQ09ORklHX0FMR09NQVNLMl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIExWVkVfQ29uZmlnX0FsZ29NYXNrMg0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfQ09ORklHX0FMR09NQVNLMl9ERUZBVUxUIChMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19NQVNLMl9CTV9NQVgpDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX01FU1NBR0VJRF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1lc3NhZ2VJRA0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX01FU1NBR0VJRF9ERUZBVUxUIChMVlZFX1JYX1BSRVNFVCkNCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfU0FNUExFUkFURV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFNhbXBsZVJhdGUNCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9TQU1QTEVSQVRFX0RFRkFVTFQgKExWTV9GU184MDAwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9WT0xVTUVJTkRFWF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZvbHVtZUluZGV4DQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfTUlODQotKiBNaW5WYWx1ZSBvZiBWb2x1bWVJbmRleA0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX1ZPTFVNRUlOREVYX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfTUFYDQotKiBNYXhWYWx1ZSBvZiBWb2x1bWVJbmRleA0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX1ZPTFVNRUlOREVYX01BWCAoMjU1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9OVU1WT0xVTUVTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTnVtVm9sdW1lcw0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX05VTVZPTFVNRVNfREVGQVVMVCAoMSkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTlVNVk9MVU1FU19NSU4NCi0qIE1pblZhbHVlIG9mIE51bVZvbHVtZXMNCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9OVU1WT0xVTUVTX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTlVNVk9MVU1FU19NQVgNCi0qIE1heFZhbHVlIG9mIE51bVZvbHVtZXMNCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9OVU1WT0xVTUVTX01BWCAoMjU1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZDX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZDX01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBtb2RlDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX01PREVfREVGQVVMVCAoMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19HQUlOX0xJTl9NQVhfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBHYWluX0xpbl9NYXgNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfR0FJTl9MSU5fTUFYX0RFRkFVTFQgKDEyODYpDQotLyoqDQotKiBAZGVmIExWVkNfR0FJTl9MSU5fTUFYX01JTg0KLSogTWluVmFsdWUgb2YgR2Fpbl9MaW5fTWF4DQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0dBSU5fTElOX01BWF9NSU4gKDUxMikNCi0vKioNCi0qIEBkZWYgTFZWQ19HQUlOX0xJTl9NQVhfTUFYDQotKiBNYXhWYWx1ZSBvZiBHYWluX0xpbl9NYXgNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfR0FJTl9MSU5fTUFYX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWVkNfTk9JU0VfU0VOU0lUSVZJVFlfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOb2lzZV9TZW5zaXRpdml0eQ0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9ERUZBVUxUICgyMDAwMCkNCi0vKioNCi0qIEBkZWYgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9NSU4NCi0qIE1pblZhbHVlIG9mIE5vaXNlX1NlbnNpdGl2aXR5DQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX05PSVNFX1NFTlNJVElWSVRZX01JTiAoLTY3MDkpDQotLyoqDQotKiBAZGVmIExWVkNfTk9JU0VfU0VOU0lUSVZJVFlfTUFYDQotKiBNYXhWYWx1ZSBvZiBOb2lzZV9TZW5zaXRpdml0eQ0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9UQVJHRVRfTEVWRUxfTElOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX1RhcmdldF9sZXZlbF9saW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX1RBUkdFVF9MRVZFTF9MSU5fREVGQVVMVCAoMTYzODQpDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX1RBUkdFVF9MRVZFTF9MSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfVGFyZ2V0X2xldmVsX2xpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfVEFSR0VUX0xFVkVMX0xJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX1RBUkdFVF9MRVZFTF9MSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfVGFyZ2V0X2xldmVsX2xpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfVEFSR0VUX0xFVkVMX0xJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9NSU5HQUlOTElOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX01pbkdhaW5MaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX01JTkdBSU5MSU5fREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9NSU5HQUlOTElOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX01pbkdhaW5MaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX01JTkdBSU5MSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9NSU5HQUlOTElOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX01pbkdhaW5MaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX01JTkdBSU5MSU5fTUFYICg1MTIpDQotDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX01BWEdBSU5MSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfTWF4R2Fpbkxpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTUFYR0FJTkxJTl9ERUZBVUxUICg4MTkyKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9NQVhHQUlOTElOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX01heEdhaW5MaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX01BWEdBSU5MSU5fTUlOICg1MTIpDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX01BWEdBSU5MSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfTWF4R2Fpbkxpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTUFYR0FJTkxJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9OT01JTkFMR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9Ob21pbmFsR2Fpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTk9NSU5BTEdBSU5fREVGQVVMVCAoNTEyKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9OT01JTkFMR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9Ob21pbmFsR2Fpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTk9NSU5BTEdBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9OT01JTkFMR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9Ob21pbmFsR2Fpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTk9NSU5BTEdBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfQVRUQUNLX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX0F0dGFjaw0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfQVRUQUNLX0RFRkFVTFQgKDEyMDU1KQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9BVFRBQ0tfTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfQXR0YWNrDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9BVFRBQ0tfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9BVFRBQ0tfTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfQXR0YWNrDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9BVFRBQ0tfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfUkVMRUFTRV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9SZWxlYXNlDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9SRUxFQVNFX0RFRkFVTFQgKDMyNjA0KQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9SRUxFQVNFX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX1JlbGVhc2UNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX1JFTEVBU0VfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9SRUxFQVNFX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX1JlbGVhc2UNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX1JFTEVBU0VfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfUkVMRUFTRU1BWF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9SZWxlYXNlTWF4DQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9SRUxFQVNFTUFYX0RFRkFVTFQgKDMyNDQxKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9SRUxFQVNFTUFYX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX1JlbGVhc2VNYXgNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX1JFTEVBU0VNQVhfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9SRUxFQVNFTUFYX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX1JlbGVhc2VNYXgNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX1JFTEVBU0VNQVhfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX0xpbWl0X01heE91dHB1dExpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX0RFRkFVTFQgKDIzMTcwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfTGltaXRfTWF4T3V0cHV0TGluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfTGltaXRfTWF4T3V0cHV0TGluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19TUERFVEVDVF9USFJFU0hPTERfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTcERldGVjdF9UaHJlc2hvbGQNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfU1BERVRFQ1RfVEhSRVNIT0xEX0RFRkFVTFQgKDEwMjQpDQotLyoqDQotKiBAZGVmIExWVkNfU1BERVRFQ1RfVEhSRVNIT0xEX01JTg0KLSogTWluVmFsdWUgb2YgU3BEZXRlY3RfVGhyZXNob2xkDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX1NQREVURUNUX1RIUkVTSE9MRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVkNfU1BERVRFQ1RfVEhSRVNIT0xEX01BWA0KLSogTWF4VmFsdWUgb2YgU3BEZXRlY3RfVGhyZXNob2xkDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX1NQREVURUNUX1RIUkVTSE9MRF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkZFTlNfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZGRU5TX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZGRU5TX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkZFTlNfRkVOU19MSU1JVF9OU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEZFTlNfbGltaXRfTlMNCi0qIEBzZWUgTFZGRU5TX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZGRU5TX0ZFTlNfTElNSVRfTlNfREVGQVVMVCAoMTA5NzYpDQotLyoqDQotKiBAZGVmIExWRkVOU19GRU5TX0xJTUlUX05TX01JTg0KLSogTWluVmFsdWUgb2YgRkVOU19saW1pdF9OUw0KLSogQHNlZSBMVkZFTlNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkZFTlNfRkVOU19MSU1JVF9OU19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWRkVOU19GRU5TX0xJTUlUX05TX01BWA0KLSogTWF4VmFsdWUgb2YgRkVOU19saW1pdF9OUw0KLSogQHNlZSBMVkZFTlNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkZFTlNfRkVOU19MSU1JVF9OU19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkZFTlNfTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1vZGUNCi0qIEBzZWUgTFZGRU5TX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZGRU5TX01PREVfREVGQVVMVCAoMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZXTV9PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZXTV9NT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgbW9kZQ0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9NT0RFX0RFRkFVTFQgKDcpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX1RBUkdFVF9MRVZFTF9MSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfVGFyZ2V0X2xldmVsX2xpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9ERUZBVUxUICgxNjM4NCkNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9UYXJnZXRfbGV2ZWxfbGluDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9UQVJHRVRfTEVWRUxfTElOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9UYXJnZXRfbGV2ZWxfbGluDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9UQVJHRVRfTEVWRUxfTElOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX01JTkdBSU5MSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfTWluR2Fpbkxpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTUlOR0FJTkxJTl9ERUZBVUxUICgxMjgpDQotLyoqDQotKiBAZGVmIExWV01fQVZMX01JTkdBSU5MSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfTWluR2Fpbkxpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTUlOR0FJTkxJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWV01fQVZMX01JTkdBSU5MSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfTWluR2Fpbkxpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTUlOR0FJTkxJTl9NQVggKDUxMikNCi0NCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfTUFYR0FJTkxJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9NYXhHYWluTGluDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9NQVhHQUlOTElOX0RFRkFVTFQgKDgxODkpDQotLyoqDQotKiBAZGVmIExWV01fQVZMX01BWEdBSU5MSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfTWF4R2Fpbkxpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTUFYR0FJTkxJTl9NSU4gKDUxMikNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfTUFYR0FJTkxJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9NYXhHYWluTGluDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9NQVhHQUlOTElOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0FUVEFDS19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9BdHRhY2sNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0FUVEFDS19ERUZBVUxUICgyNTUyMCkNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfQVRUQUNLX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX0F0dGFjaw0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfQVRUQUNLX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfQVRUQUNLX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX0F0dGFjaw0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfQVRUQUNLX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX1JFTEVBU0VfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfUmVsZWFzZQ0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfUkVMRUFTRV9ERUZBVUxUICgzMjY4NSkNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfUkVMRUFTRV9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9SZWxlYXNlDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9SRUxFQVNFX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfUkVMRUFTRV9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9SZWxlYXNlDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9SRUxFQVNFX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0xJTUlUX01BWE9VVFBVVExJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9MaW1pdF9NYXhPdXRwdXRMaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0xJTUlUX01BWE9VVFBVVExJTl9ERUZBVUxUICgyMzE5NykNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX0xpbWl0X01heE91dHB1dExpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX0xpbWl0X01heE91dHB1dExpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWV01fU1BERVRFQ1RfVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgU3BEZXRlY3RfVGhyZXNob2xkDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9ERUZBVUxUICg5MjE2KQ0KLS8qKg0KLSogQGRlZiBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIFNwRGV0ZWN0X1RocmVzaG9sZA0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9TUERFVEVDVF9USFJFU0hPTERfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIFNwRGV0ZWN0X1RocmVzaG9sZA0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9TUERFVEVDVF9USFJFU0hPTERfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZEUkNfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZEUkNfTlVNS05FRVNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOdW1LbmVlcw0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX05VTUtORUVTX0RFRkFVTFQgKDUpDQotLyoqDQotKiBAZGVmIExWRFJDX05VTUtORUVTX01JTg0KLSogTWluVmFsdWUgb2YgTnVtS25lZXMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19OVU1LTkVFU19NSU4gKDEpDQotLyoqDQotKiBAZGVmIExWRFJDX05VTUtORUVTX01BWA0KLSogTWF4VmFsdWUgb2YgTnVtS25lZXMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19OVU1LTkVFU19NQVggKDUpDQotDQotLyoqDQotKiBAZGVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQ29tcHJlc3NvckN1cnZlSW5wdXRMZXZlbHMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19ERUZBVUxUIHstOTYsLTcwLC01MCwgLTI0LCAwfQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NSU4NCi0qIE1pblZhbHVlIG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUlOICgtOTYpDQotLyoqDQotKiBAZGVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01BWA0KLSogTWF4VmFsdWUgb2YgQ29tcHJlc3NvckN1cnZlSW5wdXRMZXZlbHMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NQVggKDApDQotLyoqDQotKiBAZGVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0xFTkdUSA0KLSogTGVuZ3RoIG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTEVOR1RIICg1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBDb21wcmVzc29yQ3VydmVPdXRwdXRMZXZlbHMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfREVGQVVMVCB7LTk2LC03MCwtMzgsLTEyLDB9DQotLyoqDQotKiBAZGVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NSU4NCi0qIE1pblZhbHVlIG9mIENvbXByZXNzb3JDdXJ2ZU91dHB1dExldmVscw0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NSU4gKC05NikNCi0vKioNCi0qIEBkZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX01BWA0KLSogTWF4VmFsdWUgb2YgQ29tcHJlc3NvckN1cnZlT3V0cHV0TGV2ZWxzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX01BWCAoMCkNCi0vKioNCi0qIEBkZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX0xFTkdUSA0KLSogTGVuZ3RoIG9mIENvbXByZXNzb3JDdXJ2ZU91dHB1dExldmVscw0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19MRU5HVEggKDUpDQotDQotLyoqDQotKiBAZGVmIExWRFJDX0FUVEFDS1RJTUVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBdHRhY2tUaW1lDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQVRUQUNLVElNRV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZEUkNfQVRUQUNLVElNRV9NSU4NCi0qIE1pblZhbHVlIG9mIEF0dGFja1RpbWUNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19BVFRBQ0tUSU1FX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZEUkNfQVRUQUNLVElNRV9NQVgNCi0qIE1heFZhbHVlIG9mIEF0dGFja1RpbWUNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19BVFRBQ0tUSU1FX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWRFJDX1JFTEVBU0VUSU1FX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUmVsZWFzZVRpbWUNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19SRUxFQVNFVElNRV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZEUkNfUkVMRUFTRVRJTUVfTUlODQotKiBNaW5WYWx1ZSBvZiBSZWxlYXNlVGltZQ0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX1JFTEVBU0VUSU1FX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZEUkNfUkVMRUFTRVRJTUVfTUFYDQotKiBNYXhWYWx1ZSBvZiBSZWxlYXNlVGltZQ0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX1JFTEVBU0VUSU1FX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWRFJDX0xJTUlURVJPUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTGltaXRlck9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19MSU1JVEVST1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWRFJDX0xJTUlUTEVWRUxfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBMaW1pdExldmVsDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfTElNSVRMRVZFTF9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19MSU1JVExFVkVMX01JTg0KLSogTWluVmFsdWUgb2YgTGltaXRMZXZlbA0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0xJTUlUTEVWRUxfTUlOICgtOTYpDQotLyoqDQotKiBAZGVmIExWRFJDX0xJTUlUTEVWRUxfTUFYDQotKiBNYXhWYWx1ZSBvZiBMaW1pdExldmVsDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfTElNSVRMRVZFTF9NQVggKDApDQotDQotLyoqDQotKiBAZGVmIExWTkdfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWTkdfTlVNS05FRVNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOdW1LbmVlcw0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19OVU1LTkVFU19ERUZBVUxUICg1KQ0KLS8qKg0KLSogQGRlZiBMVk5HX05VTUtORUVTX01JTg0KLSogTWluVmFsdWUgb2YgTnVtS25lZXMNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfTlVNS05FRVNfTUlOICgxKQ0KLS8qKg0KLSogQGRlZiBMVk5HX05VTUtORUVTX01BWA0KLSogTWF4VmFsdWUgb2YgTnVtS25lZXMNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfTlVNS05FRVNfTUFYICg1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQ29tcHJlc3NvckN1cnZlSW5wdXRMZXZlbHMNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfREVGQVVMVCB7LTgwLC03MCwtNTAsIC0yNCwgMH0NCi0vKioNCi0qIEBkZWYgTFZOR19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NSU4NCi0qIE1pblZhbHVlIG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01JTiAoLTk2KQ0KLS8qKg0KLSogQGRlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01BWA0KLSogTWF4VmFsdWUgb2YgQ29tcHJlc3NvckN1cnZlSW5wdXRMZXZlbHMNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUFYICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0xFTkdUSA0KLSogTGVuZ3RoIG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0xFTkdUSCAoNSkNCi0NCi0vKioNCi0qIEBkZWYgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBDb21wcmVzc29yQ3VydmVPdXRwdXRMZXZlbHMNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX0RFRkFVTFQgey05NiwtODAsLTUwLCAtMjQsIDB9DQotLyoqDQotKiBAZGVmIExWTkdfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX01JTg0KLSogTWluVmFsdWUgb2YgQ29tcHJlc3NvckN1cnZlT3V0cHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NSU4gKC05NikNCi0vKioNCi0qIEBkZWYgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTUFYDQotKiBNYXhWYWx1ZSBvZiBDb21wcmVzc29yQ3VydmVPdXRwdXRMZXZlbHMNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX01BWCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTEVOR1RIDQotKiBMZW5ndGggb2YgQ29tcHJlc3NvckN1cnZlT3V0cHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19MRU5HVEggKDUpDQotDQotLyoqDQotKiBAZGVmIExWTkdfQVRUQUNLVElNRV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEF0dGFja1RpbWUNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfQVRUQUNLVElNRV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZOR19BVFRBQ0tUSU1FX01JTg0KLSogTWluVmFsdWUgb2YgQXR0YWNrVGltZQ0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19BVFRBQ0tUSU1FX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOR19BVFRBQ0tUSU1FX01BWA0KLSogTWF4VmFsdWUgb2YgQXR0YWNrVGltZQ0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19BVFRBQ0tUSU1FX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTkdfUkVMRUFTRVRJTUVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBSZWxlYXNlVGltZQ0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19SRUxFQVNFVElNRV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZOR19SRUxFQVNFVElNRV9NSU4NCi0qIE1pblZhbHVlIG9mIFJlbGVhc2VUaW1lDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX1JFTEVBU0VUSU1FX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOR19SRUxFQVNFVElNRV9NQVgNCi0qIE1heFZhbHVlIG9mIFJlbGVhc2VUaW1lDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX1JFTEVBU0VUSU1FX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTkxQUF9OTFBQX0xJTUlUX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxQUF9MaW1pdA0KLSogQHNlZSBMVk5MUFBfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5MUFBfTkxQUF9MSU1JVF9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5MUFBfTkxQUF9MSU1JVF9NSU4NCi0qIE1pblZhbHVlIG9mIE5MUFBfTGltaXQNCi0qIEBzZWUgTFZOTFBQX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOTFBQX05MUFBfTElNSVRfTUlOICgtMjQpDQotLyoqDQotKiBAZGVmIExWTkxQUF9OTFBQX0xJTUlUX01BWA0KLSogTWF4VmFsdWUgb2YgTkxQUF9MaW1pdA0KLSogQHNlZSBMVk5MUFBfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5MUFBfTkxQUF9MSU1JVF9NQVggKDApDQotDQotLyoqDQotKiBAZGVmIExWTkxQUF9OTFBQX0hQRl9DT1JORVJGUkVRX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxQUF9IUEZfQ29ybmVyRnJlcQ0KLSogQHNlZSBMVk5MUFBfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZOTFBQX05MUFBfSFBGX0NPUk5FUkZSRVFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTFBQX0hQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWTkxQUF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkxQUF9OTFBQX0hQRl9DT1JORVJGUkVRX01JTiAoNTApDQotLyoqDQotKiBAZGVmIExWTkxQUF9OTFBQX0hQRl9DT1JORVJGUkVRX01BWA0KLSogTWF4VmFsdWUgb2YgTkxQUF9IUEZfQ29ybmVyRnJlcQ0KLSogQHNlZSBMVk5MUFBfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9NQVggKDEwMDApDQotDQotLyoqDQotKiBAZGVmIExWRVFfRVFfTEVOR1RIX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRVFfTGVuZ3RoDQotKiBAc2VlIExWRVFfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkVRX0VRX0xFTkdUSF9ERUZBVUxUICg2NCkNCi0vKioNCi0qIEBkZWYgTFZFUV9FUV9MRU5HVEhfTUlODQotKiBNaW5WYWx1ZSBvZiBFUV9MZW5ndGgNCi0qIEBzZWUgTFZFUV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRVFfRVFfTEVOR1RIX01JTiAoOCkNCi0vKioNCi0qIEBkZWYgTFZFUV9FUV9MRU5HVEhfTUFYDQotKiBNYXhWYWx1ZSBvZiBFUV9MZW5ndGgNCi0qIEBzZWUgTFZFUV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRVFfRVFfTEVOR1RIX01BWCAoNjQpDQotDQotLyoqDQotKiBAZGVmIExWRVFfRVFfQ09FRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBFUV9Db2Vmcw0KLSogQHNlZSBMVkVRX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZFUV9FUV9DT0VGU19ERUZBVUxUIHs0MDk2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwfQ0KLS8qKg0KLSogQGRlZiBMVkVRX0VRX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgRVFfQ29lZnMNCi0qIEBzZWUgTFZFUV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRVFfRVFfQ09FRlNfTUlOICgtMzI3NjgpDQotLyoqDQotKiBAZGVmIExWRVFfRVFfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBFUV9Db2Vmcw0KLSogQHNlZSBMVkVRX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZFUV9FUV9DT0VGU19NQVggKDMyNzY3KQ0KLS8qKg0KLSogQGRlZiBMVkVRX0VRX0NPRUZTX0xFTkdUSA0KLSogTGVuZ3RoIG9mIEVRX0NvZWZzDQotKiBAc2VlIExWRVFfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkVRX0VRX0NPRUZTX0xFTkdUSCAoNjQpDQotDQotLyoqDQotKiBAZGVmIExWVk9MX1ZPTF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgVk9MX09wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZWT0xfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZPTF9WT0xfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWVk9MX1ZPTF9HQUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgVk9MX0dhaW4NCi0qIEBzZWUgTFZWT0xfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZPTF9WT0xfR0FJTl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZPTF9WT0xfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIFZPTF9HYWluDQotKiBAc2VlIExWVk9MX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWT0xfVk9MX0dBSU5fTUlOICgtOTYpDQotLyoqDQotKiBAZGVmIExWVk9MX1ZPTF9HQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgVk9MX0dhaW4NCi0qIEBzZWUgTFZWT0xfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZPTF9WT0xfR0FJTl9NQVggKDI0KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhQRl9IUEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEhQRl9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWSFBGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIUEZfSFBGX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhQRl9IUEZfQ09STkVSRlJFUV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEhQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWSFBGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIUEZfSFBGX0NPUk5FUkZSRVFfREVGQVVMVCAoNTApDQotLyoqDQotKiBAZGVmIExWSFBGX0hQRl9DT1JORVJGUkVRX01JTg0KLSogTWluVmFsdWUgb2YgSFBGX0Nvcm5lckZyZXENCi0qIEBzZWUgTFZIUEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhQRl9IUEZfQ09STkVSRlJFUV9NSU4gKDUwKQ0KLS8qKg0KLSogQGRlZiBMVkhQRl9IUEZfQ09STkVSRlJFUV9NQVgNCi0qIE1heFZhbHVlIG9mIEhQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWSFBGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIUEZfSFBGX0NPUk5FUkZSRVFfTUFYICgxNTAwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk1VVEVfTVVURV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE11dGUNCi0qIEBzZWUgTFZNVVRFX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZNVVRFX01VVEVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZFX1JYX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZWRV9SWF9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9NVVRFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTXV0ZQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9NVVRFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9WT0xfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX1ZPTF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9WT0xfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX1ZPTF9HQUlOX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfUlhfVk9MX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBWT0xfR2Fpbg0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9WT0xfR0FJTl9NSU4gKC05NikNCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9WT0xfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX1ZPTF9HQUlOX01BWCAoMjQpDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfTkxQUF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxQUF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX05MUFBfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEVRX09wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZWRV9SeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfUlhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfSFBGX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBIUEZfT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9IUEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfSFBGX0NPUk5FUkZSRVFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBIUEZfQ29ybmVyRnJlcQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9NSU4NCi0qIE1pblZhbHVlIG9mIEhQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX0hQRl9DT1JORVJGUkVRX01JTiAoNTApDQotLyoqDQotKiBAZGVmIExWVkVfUlhfSFBGX0NPUk5FUkZSRVFfTUFYDQotKiBNYXhWYWx1ZSBvZiBIUEZfQ29ybmVyRnJlcQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9NQVggKDE1MDApDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWTlZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1vZGUNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTU9ERV9ERUZBVUxUICgxODkzNSkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9NT0RFMl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1vZGUyDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX01PREUyX0RFRkFVTFQgKDE0KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1RVTklOR19NT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgVHVuaW5nX21vZGUNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfVFVOSU5HX01PREVfREVGQVVMVCAoMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9JTlBVVF9HQUlOX01JQzBfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBJbnB1dF9HYWluX01pYzANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfSU5QVVRfR0FJTl9NSUMwX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfSU5QVVRfR0FJTl9NSUMwX01JTg0KLSogTWluVmFsdWUgb2YgSW5wdXRfR2Fpbl9NaWMwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0lOUFVUX0dBSU5fTUlDMF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfSU5QVVRfR0FJTl9NSUMwX01BWA0KLSogTWF4VmFsdWUgb2YgSW5wdXRfR2Fpbl9NaWMwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0lOUFVUX0dBSU5fTUlDMF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0lOUFVUX0dBSU5fTUlDMV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIElucHV0X0dhaW5fTWljMQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9JTlBVVF9HQUlOX01JQzFfREVGQVVMVCAoODE5MikNCi0vKioNCi0qIEBkZWYgTFZOVl9JTlBVVF9HQUlOX01JQzFfTUlODQotKiBNaW5WYWx1ZSBvZiBJbnB1dF9HYWluX01pYzENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfSU5QVVRfR0FJTl9NSUMxX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9JTlBVVF9HQUlOX01JQzFfTUFYDQotKiBNYXhWYWx1ZSBvZiBJbnB1dF9HYWluX01pYzENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfSU5QVVRfR0FJTl9NSUMxX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfT1VUUFVUX0dBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPdXRwdXRfR2Fpbg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9PVVRQVVRfR0FJTl9ERUZBVUxUICgyMDQ4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX09VVFBVVF9HQUlOX01JTg0KLSogTWluVmFsdWUgb2YgT3V0cHV0X0dhaW4NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfT1VUUFVUX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX09VVFBVVF9HQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgT3V0cHV0X0dhaW4NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfT1VUUFVUX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9MQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNUzBfTEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9UQVBTX0RFRkFVTFQgKDMyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMF9MQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0xCX1RBUFNfTUlOICgxNikNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9MQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfTEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9UQVBTX01BWCAoNjQpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9MQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9UV09BTFBIQV9ERUZBVUxUICg4MTkyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX1RXT0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfTEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX1RXT0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfTEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9MQl9FUkxfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9MQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfTEJfRVJMX0RFRkFVTFQgKDEwMDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfTEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfTEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0xCX0VSTF9NSU4gKDY0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVMwX0xCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9FUkxfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9IQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNUzBfSEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9UQVBTX0RFRkFVTFQgKDI0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMF9IQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0hCX1RBUFNfTUlOICgxNikNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9IQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfSEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9UQVBTX01BWCAoNjQpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfSEJfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9IQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9UV09BTFBIQV9ERUZBVUxUICg4MTkyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX1RXT0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfSEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfSEJfVFdPQUxQSEFfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX1RXT0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfSEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfSEJfVFdPQUxQSEFfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9IQl9FUkxfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9IQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfSEJfRVJMX0RFRkFVTFQgKDEwMDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfSEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfSEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0hCX0VSTF9NSU4gKDY0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVMwX0hCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9FUkxfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9QUkVTRVRfQ09FRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfUFJFU0VUX0NPRUZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfUFJFU0VUX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfcHJlc2V0X2NvZWZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX1BSRVNFVF9DT0VGU19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfUFJFU0VUX0NPRUZTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfcHJlc2V0X2NvZWZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX1BSRVNFVF9DT0VGU19NQVggKDIpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfT0ZGU0VUX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNUzBfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX09GRlNFVF9ERUZBVUxUICg3NzYpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfT0ZGU0VUX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX09GRlNFVF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfT0ZGU0VUX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX09GRlNFVF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0xCX1RBUFNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMV9MQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX1RBUFNfREVGQVVMVCAoMzIpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfVEFQU19NSU4NCi0qIE1pblZhbHVlIG9mIE5MTVMxX0xCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfTEJfVEFQU19NSU4gKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0xCX1RBUFNfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9MQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX1RBUFNfTUFYICgzMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0xCX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX1RXT0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfVFdPQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9MQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfVFdPQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9MQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0xCX0VSTF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0xCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9MQl9FUkxfREVGQVVMVCAoMTAwMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9MQl9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9MQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfTEJfRVJMX01JTiAoNjQpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzFfTEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX0VSTF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0hCX1RBUFNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMV9IQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX1RBUFNfREVGQVVMVCAoMjQpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfVEFQU19NSU4NCi0qIE1pblZhbHVlIG9mIE5MTVMxX0hCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfSEJfVEFQU19NSU4gKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0hCX1RBUFNfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9IQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX1RBUFNfTUFYICgzMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0hCX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX1RXT0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfVFdPQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9IQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfVFdPQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9IQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0hCX0VSTF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0hCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9IQl9FUkxfREVGQVVMVCAoMTAwMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9IQl9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9IQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfSEJfRVJMX01JTiAoNjQpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzFfSEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX0VSTF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX1BSRVNFVF9DT0VGU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX3ByZXNldF9jb2Vmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfUFJFU0VUX0NPRUZTX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfUFJFU0VUX0NPRUZTX01BWCAoMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9PRkZTRVRfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMV9vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfT0ZGU0VUX0RFRkFVTFQgKDc3NikNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9PRkZTRVRfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfT0ZGU0VUX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9PRkZTRVRfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfT0ZGU0VUX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQ0FMX21pY1Bvd0Zsb29yTWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9ERUZBVUxUICgxNTApDQotLyoqDQotKiBAZGVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX01JTg0KLSogTWluVmFsdWUgb2YgQ0FMX21pY1Bvd0Zsb29yTWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX01BWA0KLSogTWF4VmFsdWUgb2YgQ0FMX21pY1Bvd0Zsb29yTWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1dHVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgV2dUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfV0dUSFJFU0hPTERfREVGQVVMVCAoMzI3NjcpDQotLyoqDQotKiBAZGVmIExWTlZfV0dUSFJFU0hPTERfTUlODQotKiBNaW5WYWx1ZSBvZiBXZ1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9XR1RIUkVTSE9MRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfV0dUSFJFU0hPTERfTUFYDQotKiBNYXhWYWx1ZSBvZiBXZ1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9XR1RIUkVTSE9MRF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX01QVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTXBUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTVBUSFJFU0hPTERfREVGQVVMVCAoNjU1NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9NUFRIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIE1wVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX01QVEhSRVNIT0xEX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9NUFRIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIE1wVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX01QVEhSRVNIT0xEX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX0lOSVRfVEFCTEUwX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRlNCX2luaXRfdGFibGUwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMF9ERUZBVUxUIHszMjc2NywgMCwgMCwgMCwgMCwgMCwgMCwgMH0NCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTUlODQotKiBNaW5WYWx1ZSBvZiBGU0JfaW5pdF90YWJsZTANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX0lOSVRfVEFCTEUwX01JTiAoLTMyNzY4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMF9NQVgNCi0qIE1heFZhbHVlIG9mIEZTQl9pbml0X3RhYmxlMA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTUFYICgzMjc2NykNCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTEVOR1RIDQotKiBMZW5ndGggb2YgRlNCX2luaXRfdGFibGUwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMF9MRU5HVEggKDgpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX0lOSVRfVEFCTEUxX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRlNCX2luaXRfdGFibGUxDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMV9ERUZBVUxUIHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMV9NSU4NCi0qIE1pblZhbHVlIG9mIEZTQl9pbml0X3RhYmxlMQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfSU5JVF9UQUJMRTFfTUlOICgtMzI3NjgpDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX0lOSVRfVEFCTEUxX01BWA0KLSogTWF4VmFsdWUgb2YgRlNCX2luaXRfdGFibGUxDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMV9NQVggKDMyNzY3KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMV9MRU5HVEgNCi0qIExlbmd0aCBvZiBGU0JfaW5pdF90YWJsZTENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX0lOSVRfVEFCTEUxX0xFTkdUSCAoOCkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVEFQU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEZTQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9UQVBTX0RFRkFVTFQgKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9UQVBTX01JTg0KLSogTWluVmFsdWUgb2YgRlNCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RBUFNfTUlOICg4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgRlNCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RBUFNfTUFYICgxNikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBGU0JfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RXT0FMUEhBX0RFRkFVTFQgKDY1NSkNCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVFdPQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBGU0JfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RXT0FMUEhBX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVFdPQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBGU0JfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RXT0FMUEhBX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX1JFRl9HQUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRlNCX3JlZl9nYWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9SRUZfR0FJTl9ERUZBVUxUICgxMDI0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9SRUZfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEZTQl9yZWZfZ2Fpbg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfUkVGX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9SRUZfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEZTQl9yZWZfZ2Fpbg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfUkVGX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9HU0NfVEFQU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEdTQ190YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19UQVBTX0RFRkFVTFQgKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19UQVBTX01JTg0KLSogTWluVmFsdWUgb2YgR1NDX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX1RBUFNfTUlOICg4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgR1NDX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX1RBUFNfTUFYICg0OCkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9HU0NfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBHU0NfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX1RXT0FMUEhBX0RFRkFVTFQgKDE2MzgpDQotLyoqDQotKiBAZGVmIExWTlZfR1NDX1RXT0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgR1NDX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19UV09BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfR1NDX1RXT0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgR1NDX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19UV09BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19FUkxfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBHU0NfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19FUkxfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBHU0NfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9HU0NfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgR1NDX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9HU0NfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfR1NDX09GRlNFVF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEdTQ19vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX09GRlNFVF9ERUZBVUxUICgxNjM4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19PRkZTRVRfTUlODQotKiBNaW5WYWx1ZSBvZiBHU0Nfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19PRkZTRVRfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19PRkZTRVRfTUFYDQotKiBNYXhWYWx1ZSBvZiBHU0Nfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19PRkZTRVRfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUhJX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvR2FtbWFIaQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9HQU1NQUhJX0RFRkFVTFQgKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0VjaG9HYW1tYUhpDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0VjaG9HYW1tYUhpDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUxPX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvR2FtbWFMbw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9HQU1NQUxPX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfRWNob0dhbW1hTG8NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfRWNob0dhbW1hTG8NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT0FMUEhBUkVWX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvQWxwaGFSZXYNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfREVGQVVMVCAoMTIwMDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0VjaG9BbHBoYVJldg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9BTFBIQVJFVl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0VjaG9BbHBoYVJldg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9BTFBIQVJFVl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvVGFpbFBvcnRpb24NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPVEFJTFBPUlRJT05fREVGQVVMVCAoNzAwMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9UQUlMUE9SVElPTl9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfRWNob1RhaWxQb3J0aW9uDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9UQUlMUE9SVElPTl9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfRWNob1RhaWxQb3J0aW9uDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OTEFUVEVOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19ObEF0dGVuDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTkxBVFRFTl9ERUZBVUxUICgyNTYpDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OTEFUVEVOX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19ObEF0dGVuDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTkxBVFRFTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OTEFUVEVOX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19ObEF0dGVuDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTkxBVFRFTl9NQVggKDIwNDgpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBTU1BU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEROTlNfTm9pc2VHYW1tYVMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBTU1BU19ERUZBVUxUICgxMTQ3MCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hUw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hUw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBTU1BTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEROTlNfTm9pc2VHYW1tYU4NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBTU1BTl9ERUZBVUxUICgxNjM4NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19Ob2lzZUdhaW5NaW5TDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOU19ERUZBVUxUICgxMTE0MCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTlNfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX05vaXNlR2Fpbk1pblMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX05vaXNlR2Fpbk1pblMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5OX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19Ob2lzZUdhaW5NaW5ODQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOTl9ERUZBVUxUICg2NTU0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOTl9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfTm9pc2VHYWluTWluTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FJTk1JTk5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOTl9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfTm9pc2VHYWluTWluTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FJTk1JTk5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFQklBU0NPTVBfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBETk5TX05vaXNlQmlhc0NvbXANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX0RFRkFVTFQgKDk4MzApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19Ob2lzZUJpYXNDb21wDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VCSUFTQ09NUF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19Ob2lzZUJpYXNDb21wDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VCSUFTQ09NUF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfR0FJTkVUQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEROTlNfR2FpbkV0YQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0dBSU5FVEFfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfR0FJTkVUQV9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfR2FpbkV0YQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0dBSU5FVEFfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfR0FJTkVUQV9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfR2FpbkV0YQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0dBSU5FVEFfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0FDVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19BY1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0FDVEhSRVNIT0xEX0RFRkFVTFQgKDEyMjg4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0FjVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0FjVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX1dCVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19XYlRocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX1dCVEhSRVNIT0xEX0RFRkFVTFQgKDkyMTYpDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfV2JUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfV2JUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBETk5TX0xvc3RCZWFtVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfREVGQVVMVCAoMzIwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0xvc3RCZWFtVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0xvc3RCZWFtVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfQkVUQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFBDRF9iZXRhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BDRF9CRVRBX0RFRkFVTFQgKDIzMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfQkVUQV9NSU4NCi0qIE1pblZhbHVlIG9mIFBDRF9iZXRhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BDRF9CRVRBX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfQkVUQV9NQVgNCi0qIE1heFZhbHVlIG9mIFBDRF9iZXRhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BDRF9CRVRBX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfUENEX1RIUkVTSE9MRF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFBDRF9UaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENEX1RIUkVTSE9MRF9ERUZBVUxUICgyNjIxMykNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfVEhSRVNIT0xEX01JTg0KLSogTWluVmFsdWUgb2YgUENEX1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0RfVEhSRVNIT0xEX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfVEhSRVNIT0xEX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0RfVEhSRVNIT0xEX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1vZGUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTU9ERV9ERUZBVUxUICg0NjA3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1RVTklOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBUdW5pbmdNb2RlDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1RVTklOR01PREVfREVGQVVMVCAoMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9JTlBVVEdBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBJbnB1dEdhaW4NCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfSU5QVVRHQUlOX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWSEZfSU5QVVRHQUlOX01JTg0KLSogTWluVmFsdWUgb2YgSW5wdXRHYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0lOUFVUR0FJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfSU5QVVRHQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgSW5wdXRHYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0lOUFVUR0FJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX09VVFBVVEdBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPdXRwdXRHYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX09VVFBVVEdBSU5fREVGQVVMVCAoMjA0OCkNCi0vKioNCi0qIEBkZWYgTFZIRl9PVVRQVVRHQUlOX01JTg0KLSogTWluVmFsdWUgb2YgT3V0cHV0R2Fpbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9PVVRQVVRHQUlOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9PVVRQVVRHQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgT3V0cHV0R2Fpbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9PVVRQVVRHQUlOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MSU1JVF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVNfbGltaXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MSU1JVF9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfTElNSVRfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX2xpbWl0DQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTElNSVRfTUlOICgtMjQpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MSU1JVF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVNfbGltaXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MSU1JVF9NQVggKDApDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19MQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfVEFQU19ERUZBVUxUICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0xCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0xCX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MQl9UQVBTX01JTiAoMTYpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19MQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfVEFQU19NQVggKDIwMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVNfTEJfdHdvX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfVFdPX0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UV09fQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0xCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UV09fQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TX0xCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfTEJfRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19MQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MQl9FUkxfREVGQVVMVCAoMTI4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfTEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19MQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MQl9FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0xCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVNfTEJfZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19IQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfVEFQU19ERUZBVUxUICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0hCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0hCX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19IQl9UQVBTX01JTiAoMTYpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19IQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfVEFQU19NQVggKDEzNikNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0hCX1RXT19BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVNfSEJfdHdvX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfVFdPX0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UV09fQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0hCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0hCX1RXT19BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UV09fQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TX0hCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0hCX1RXT19BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfSEJfRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19IQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19IQl9FUkxfREVGQVVMVCAoMTI4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfSEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19IQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19IQl9FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0hCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVNfSEJfZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TX3ByZXNldF9jb2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX1BSRVNFVF9DT0VGU19ERUZBVUxUICgxKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfUFJFU0VUX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfUFJFU0VUX0NPRUZTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfTUFYICgyKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfT0ZGU0VUX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19vZmZzZXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19PRkZTRVRfREVGQVVMVCAoNzY3KQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfT0ZGU0VUX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19vZmZzZXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19PRkZTRVRfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfT0ZGU0VUX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19vZmZzZXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19PRkZTRVRfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3RhaWxfYWxwaGFfTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX0FMUEhBX0xCX0RFRkFVTFQgKDI1Mzk1KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9MQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfdGFpbF9hbHBoYV9MQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9MQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfdGFpbF9hbHBoYV9MQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9MQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfdGFpbF9wb3J0aW9uX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0xCX0RFRkFVTFQgKDI5NDkxKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0xCX01JTg0KLSogTWluVmFsdWUgb2YgREVOU190YWlsX3BvcnRpb25fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX1BPUlRJT05fTEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0xCX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU190YWlsX3BvcnRpb25fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX1BPUlRJT05fTEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfZV9oaWdoX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX0RFRkFVTFQgKDUxMikNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfZ2FtbWFfZV9oaWdoX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfZ2FtbWFfZV9oaWdoX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU19nYW1tYV9lX2R0X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9ERUZBVUxUICgyNTYpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX01JTg0KLSogTWluVmFsdWUgb2YgREVOU19nYW1tYV9lX2R0X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU19nYW1tYV9lX2R0X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX2dhbW1hX2VfbG93X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX2dhbW1hX2VfbG93X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX2dhbW1hX2VfbG93X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX05MX0FUVEVOX0xCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU19OTF9hdHRlbl9MQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05MX0FUVEVOX0xCX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19OTF9BVFRFTl9MQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfTkxfYXR0ZW5fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19OTF9BVFRFTl9MQl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19OTF9BVFRFTl9MQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfTkxfYXR0ZW5fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19OTF9BVFRFTl9MQl9NQVggKDIwNDgpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU190YWlsX2FscGhhX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9BTFBIQV9IQl9ERUZBVUxUICgyNTM5NSkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfSEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX3RhaWxfYWxwaGFfSEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfSEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX3RhaWxfYWxwaGFfSEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19UQUlMX1BPUlRJT05fSEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3RhaWxfcG9ydGlvbl9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9ERUZBVUxUICgyOTQ5MSkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfdGFpbF9wb3J0aW9uX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0hCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfdGFpbF9wb3J0aW9uX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0hCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX2dhbW1hX2VfaGlnaF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9ERUZBVUxUICg1MTIpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX2dhbW1hX2VfaGlnaF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX2dhbW1hX2VfaGlnaF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfZV9kdF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfZ2FtbWFfZV9kdF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfZ2FtbWFfZV9kdF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU19nYW1tYV9lX2xvd19IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX0RFRkFVTFQgKDI1NikNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01JTg0KLSogTWluVmFsdWUgb2YgREVOU19nYW1tYV9lX2xvd19IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU19nYW1tYV9lX2xvd19IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19OTF9BVFRFTl9IQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfTkxfYXR0ZW5fSEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19OTF9BVFRFTl9IQl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX05MX2F0dGVuX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX05MX2F0dGVuX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUFYICgyMDQ4KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfZV9hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfQUxQSEFfREVGQVVMVCAoMjQwMDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgREVOU19nYW1tYV9lX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU19nYW1tYV9lX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX05fREVGQVVMVCAoMjgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfTl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfZ2FtbWFfbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX05fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfTl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfZ2FtbWFfbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX05fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3NwZGV0X25lYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19TUERFVF9ORUFSX0RFRkFVTFQgKDUxMikNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX3NwZGV0X25lYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19TUERFVF9ORUFSX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX3NwZGV0X25lYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19TUERFVF9ORUFSX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19TUERFVF9BQ1RfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3NwZGV0X2FjdA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1NQREVUX0FDVF9ERUZBVUxUICg3NjgpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19TUERFVF9BQ1RfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX3NwZGV0X2FjdA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1NQREVUX0FDVF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19TUERFVF9BQ1RfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX3NwZGV0X2FjdA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1NQREVUX0FDVF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTElNSVRfTlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX2xpbWl0X25zDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfTElNSVRfTlNfREVGQVVMVCAoMTAzNjEpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19MSU1JVF9OU19NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfbGltaXRfbnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19MSU1JVF9OU19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19MSU1JVF9OU19NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfbGltaXRfbnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19MSU1JVF9OU19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfQ05JX0dBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX0NOSV9HYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfQ05JX0dBSU5fREVGQVVMVCAoMTYzODQpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19DTklfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfQ05JX0dhaW4NCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19DTklfR0FJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19DTklfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfQ05JX0dhaW4NCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19DTklfR0FJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfTkZFX2Jsb2Nrc2l6ZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfREVGQVVMVCAoMTUwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfTkZFX2Jsb2Nrc2l6ZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfTkZFX2Jsb2Nrc2l6ZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9TUERFVF9GQVJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTUERFVF9mYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfU1BERVRfRkFSX0RFRkFVTFQgKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX0ZBUl9NSU4NCi0qIE1pblZhbHVlIG9mIFNQREVUX2Zhcg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9GQVJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX0ZBUl9NQVgNCi0qIE1heFZhbHVlIG9mIFNQREVUX2Zhcg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9GQVJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9TUERFVF9NSUNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTUERFVF9taWMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfU1BERVRfTUlDX0RFRkFVTFQgKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX01JQ19NSU4NCi0qIE1pblZhbHVlIG9mIFNQREVUX21pYw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9NSUNfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX01JQ19NQVgNCi0qIE1heFZhbHVlIG9mIFNQREVUX21pYw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9NSUNfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9TUERFVF9YX0NMSVBfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTUERFVF94X2NsaXANCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfU1BERVRfWF9DTElQX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWSEZfU1BERVRfWF9DTElQX01JTg0KLSogTWluVmFsdWUgb2YgU1BERVRfeF9jbGlwDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1NQREVUX1hfQ0xJUF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfU1BERVRfWF9DTElQX01BWA0KLSogTWF4VmFsdWUgb2YgU1BERVRfeF9jbGlwDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1NQREVUX1hfQ0xJUF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9USFJFU0hPTERfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBQQ0RfdGhyZXNob2xkDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9USFJFU0hPTERfREVGQVVMVCAoMjAwMDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX1RIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIFBDRF90aHJlc2hvbGQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RIUkVTSE9MRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX1RIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIFBDRF90aHJlc2hvbGQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RIUkVTSE9MRF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUENEX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RBUFNfREVGQVVMVCAoMTYpDQotLyoqDQotKiBAZGVmIExWSEZfUENEX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBQQ0RfdGFwcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfVEFQU19NSU4gKDE2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RBUFNfTUFYICg2NCkNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUENEX2VybA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX0RFRkFVTFQgKDY0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBQQ0RfZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX2VybA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfUENEX01JTklNVU1fRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUENEX21pbmltdW1fZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9NSU5JTVVNX0VSTF9ERUZBVUxUICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfTUlOSU1VTV9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBQQ0RfbWluaW11bV9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX01JTklNVU1fRVJMX01JTiAoNjQpDQotLyoqDQotKiBAZGVmIExWSEZfUENEX01JTklNVU1fRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX21pbmltdW1fZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9NSU5JTVVNX0VSTF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9FUkxfU1RFUF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFBDRF9lcmxfc3RlcA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX1NURVBfREVGQVVMVCAoMTY4MDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX0VSTF9TVEVQX01JTg0KLSogTWluVmFsdWUgb2YgUENEX2VybF9zdGVwDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9FUkxfU1RFUF9NSU4gKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9FUkxfU1RFUF9NQVgNCi0qIE1heFZhbHVlIG9mIFBDRF9lcmxfc3RlcA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX1NURVBfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfR0FNTUFfRV9SRVNDVUVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBQQ0RfZ2FtbWFfZV9yZXNjdWUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX0dBTU1BX0VfUkVTQ1VFX0RFRkFVTFQgKDUwMDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX0dBTU1BX0VfUkVTQ1VFX01JTg0KLSogTWluVmFsdWUgb2YgUENEX2dhbW1hX2VfcmVzY3VlDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9HQU1NQV9FX1JFU0NVRV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX0dBTU1BX0VfUkVTQ1VFX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX2dhbW1hX2VfcmVzY3VlDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9HQU1NQV9FX1JFU0NVRV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkJEX0JEX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBCRF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWQkRfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkJEX0JEX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkJEX0JVTEtERUxBWV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEJ1bGtEZWxheQ0KLSogQHNlZSBMVkJEX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZCRF9CVUxLREVMQVlfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZCRF9CVUxLREVMQVlfTUlODQotKiBNaW5WYWx1ZSBvZiBCdWxrRGVsYXkNCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQlVMS0RFTEFZX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZCRF9CVUxLREVMQVlfTUFYDQotKiBNYXhWYWx1ZSBvZiBCdWxrRGVsYXkNCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQlVMS0RFTEFZX01BWCAoNjQwMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZCRF9CRF9HQUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQkRfR2Fpbg0KLSogQHNlZSBMVkJEX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZCRF9CRF9HQUlOX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWQkRfQkRfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEJEX0dhaW4NCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQkRfR0FJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWQkRfQkRfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEJEX0dhaW4NCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQkRfR0FJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZWRV9UWF9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9NVVRFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTXV0ZQ0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9NVVRFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9CRF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQkRfT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9CRF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9CVUxLREVMQVlfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBCdWxrRGVsYXkNCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfQlVMS0RFTEFZX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfQlVMS0RFTEFZX01JTg0KLSogTWluVmFsdWUgb2YgQnVsa0RlbGF5DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JVTEtERUxBWV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfQlVMS0RFTEFZX01BWA0KLSogTWF4VmFsdWUgb2YgQnVsa0RlbGF5DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JVTEtERUxBWV9NQVggKDY0MDApDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfQkRfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEJEX0dhaW4NCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfQkRfR0FJTl9ERUZBVUxUICg4MTkyKQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX0JEX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBCRF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JEX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX0JEX0dBSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBCRF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JEX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9WT0xfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX1ZPTF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9WT0xfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX1ZPTF9HQUlOX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfVk9MX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBWT0xfR2Fpbg0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9WT0xfR0FJTl9NSU4gKC05NikNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9WT0xfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX1ZPTF9HQUlOX01BWCAoMjQpDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfSFBGX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBIUEZfT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9IUEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTUlDX0hQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX01JQ19IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9NSUNfSFBGX0NPUk5FUkZSRVFfTUlODQotKiBNaW5WYWx1ZSBvZiBNSUNfSFBGX0Nvcm5lckZyZXENCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX01JTiAoNTApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX01BWA0KLSogTWF4VmFsdWUgb2YgTUlDX0hQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX01JQ19IUEZfQ09STkVSRlJFUV9NQVggKDE1MDApDQotDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEVRX09wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLy9hZGIgYnkgeHV4aW5xaWFuZyAgMjAxNTA1MTkNCi0jZGVmaW5lIExWVkVfTUFYX0VRX0xFTkdUSF9OQiAgICAgICAgICAgICAgICAzMiAgICAgICAgICAgLyogTWF4aW11bSBlcXVhbGlzZXIgbGVuZ3RoIGZvciBuYXJyb3diYW5kIGNvbmZpZ3VyYXRpb24gKi8NCi0jZGVmaW5lIExWVkVfTUFYX0VRX0xFTkdUSF9XQiAgICAgICAgICAgICAgICA2NCAgICAgICAgICAgLyogTWF4aW11bSBlcXVhbGlzZXIgbGVuZ3RoIGZvciB3aWRlYmFuZCBjb25maWd1cmF0aW9uICovDQotDQotDQotLyoqDQotKiBAZGVmIExWVkNfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEdhaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfR0FJTl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBHYWluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0dBSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBHYWluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19TUERFVEVDVEVEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgU3BEZXRlY3RlZA0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19TUERFVEVDVEVEX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkNfU1BERVRFQ1RFRF9NSU4NCi0qIE1pblZhbHVlIG9mIFNwRGV0ZWN0ZWQNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfU1BERVRFQ1RFRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVkNfU1BERVRFQ1RFRF9NQVgNCi0qIE1heFZhbHVlIG9mIFNwRGV0ZWN0ZWQNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfU1BERVRFQ1RFRF9NQVggKDEpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0dBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfR2Fpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfR0FJTl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9HQUlOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX0dhaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9HQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX0dhaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0dBSU5fTUFYICgzMjc2NykNCi0NCi0NCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9EVU1NWV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIGR1bW15DQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX0RVTU1ZX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfUlhfRFVNTVlfTUlODQotKiBNaW5WYWx1ZSBvZiBkdW1teQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9EVU1NWV9NSU4gKC0xMjgpDQotLyoqDQotKiBAZGVmIExWVkVfUlhfRFVNTVlfTUFYDQotKiBNYXhWYWx1ZSBvZiBkdW1teQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9EVU1NWV9NQVggKDEyNykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBzdGF0dXMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX0RFRkFVTFQgKDApDQotDQotLyoqDQotKiBAZGVmIExWTlZfRFVNTVlfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBEdW1teQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9EVU1NWV9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0RVTU1ZX01JTg0KLSogTWluVmFsdWUgb2YgRHVtbXkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRFVNTVlfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0RVTU1ZX01BWA0KLSogTWF4VmFsdWUgb2YgRHVtbXkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRFVNTVlfTUFYICgwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMF9MQl9DT0VGRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwTkxNUzBfTEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMF9MQl9DT0VGRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzBfTEJfQ09FRkZTX01JTg0KLSogTWluVmFsdWUgb2YgcE5MTVMwX0xCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzBfTEJfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMwX0xCX0NPRUZGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBOTE1TMF9MQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMwX0xCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMwX0hCX0NPRUZGU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBOTE1TMF9IQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMwX0hCX0NPRUZGU19ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMF9IQl9DT0VGRlNfTUlODQotKiBNaW5WYWx1ZSBvZiBwTkxNUzBfSEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMF9IQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzBfSEJfQ09FRkZTX01BWA0KLSogTWF4VmFsdWUgb2YgcE5MTVMwX0hCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzBfSEJfQ09FRkZTX01BWCAoMjE0NzQ4MzY0NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzFfTEJfQ09FRkZTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcE5MTVMxX0xCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzFfTEJfQ09FRkZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMxX0xCX0NPRUZGU19NSU4NCi0qIE1pblZhbHVlIG9mIHBOTE1TMV9MQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMxX0xCX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMV9MQl9DT0VGRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBwTkxNUzFfTEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMV9MQl9DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMV9IQl9DT0VGRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwTkxNUzFfSEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMV9IQl9DT0VGRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzFfSEJfQ09FRkZTX01JTg0KLSogTWluVmFsdWUgb2YgcE5MTVMxX0hCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzFfSEJfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMxX0hCX0NPRUZGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBOTE1TMV9IQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMxX0hCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfUEZTQl9DT0VGRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwRlNCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QRlNCX0NPRUZGU19ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BGU0JfQ09FRkZTX01JTg0KLSogTWluVmFsdWUgb2YgcEZTQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUEZTQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QRlNCX0NPRUZGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBGU0JfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BGU0JfQ09FRkZTX01BWCAoMjE0NzQ4MzY0NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QR1NDX0NPRUZGU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBHU0NfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BHU0NfQ09FRkZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUEdTQ19DT0VGRlNfTUlODQotKiBNaW5WYWx1ZSBvZiBwR1NDX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QR1NDX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BHU0NfQ09FRkZTX01BWA0KLSogTWF4VmFsdWUgb2YgcEdTQ19Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUEdTQ19DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BNSUNQT1dTUF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBNaWNQb3dTcA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTUlDUE9XU1BfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTUlDUE9XU1BfTUlODQotKiBNaW5WYWx1ZSBvZiBwTWljUG93U3ANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE1JQ1BPV1NQX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTUlDUE9XU1BfTUFYDQotKiBNYXhWYWx1ZSBvZiBwTWljUG93U3ANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE1JQ1BPV1NQX01BWCAoMSkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0FMRkFDVE9SX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcENhbEZhY3Rvcg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0FMRkFDVE9SX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUENBTEZBQ1RPUl9NSU4NCi0qIE1pblZhbHVlIG9mIHBDYWxGYWN0b3INCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTEZBQ1RPUl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfUENBTEZBQ1RPUl9NQVgNCi0qIE1heFZhbHVlIG9mIHBDYWxGYWN0b3INCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTEZBQ1RPUl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BDQUxSRUFEWV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBDYWxSZWFkeQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0FMUkVBRFlfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0FMUkVBRFlfTUlODQotKiBNaW5WYWx1ZSBvZiBwQ2FsUmVhZHkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTFJFQURZX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0FMUkVBRFlfTUFYDQotKiBNYXhWYWx1ZSBvZiBwQ2FsUmVhZHkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTFJFQURZX01BWCAoMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QQlJPQURTSURFX0lOVEVSQ0NfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwQnJvYWRzaWRlX2ludGVyQ0MNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUEJST0FEU0lERV9JTlRFUkNDX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUEJST0FEU0lERV9JTlRFUkNDX01JTg0KLSogTWluVmFsdWUgb2YgcEJyb2Fkc2lkZV9pbnRlckNDDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfUEJST0FEU0lERV9JTlRFUkNDX01BWA0KLSogTWF4VmFsdWUgb2YgcEJyb2Fkc2lkZV9pbnRlckNDDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0dBTU1BRV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIGdhbW1hZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9HQU1NQUVfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9HQU1NQUVfTUlODQotKiBNaW5WYWx1ZSBvZiBnYW1tYWUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfR0FNTUFFX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9HQU1NQUVfTUFYDQotKiBNYXhWYWx1ZSBvZiBnYW1tYWUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfR0FNTUFFX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2Ygc3RhdHVzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1NUQVRVU19ERUZBVUxUICgwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BOTE1TX0xCX0NPRUZTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcE5MTVNfTEJfQ29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUE5MTVNfTEJfQ09FRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QTkxNU19MQl9DT0VGU19NSU4NCi0qIE1pblZhbHVlIG9mIHBOTE1TX0xCX0NvZWZzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BOTE1TX0xCX0NPRUZTX01JTiAoLTIxNDc0ODM2NDgpDQotLyoqDQotKiBAZGVmIExWSEZfUE5MTVNfTEJfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBwTkxNU19MQl9Db2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QTkxNU19MQl9DT0VGU19NQVggKDIxNDc0ODM2NDcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfUE5MTVNfSEJfQ09FRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwTkxNU19IQl9Db2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QTkxNU19IQl9DT0VGU19ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BOTE1TX0hCX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgcE5MTVNfSEJfQ29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUE5MTVNfSEJfQ09FRlNfTUlOICgtMjE0NzQ4MzY0OCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QTkxNU19IQl9DT0VGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBOTE1TX0hCX0NvZWZzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BOTE1TX0hCX0NPRUZTX01BWCAoMjE0NzQ4MzY0NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9QUENEX0NPRUZTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcFBDRF9Db2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QUENEX0NPRUZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWSEZfUFBDRF9DT0VGU19NSU4NCi0qIE1pblZhbHVlIG9mIHBQQ0RfQ29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUFBDRF9DT0VGU19NSU4gKC0yMTQ3NDgzNjQ4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BQQ0RfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBwUENEX0NvZWZzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BQQ0RfQ09FRlNfTUFYICgyMTQ3NDgzNjQ3KQ0KLQ0KLQ0KLQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX0RVTU1ZX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgZHVtbXkNCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfRFVNTVlfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9EVU1NWV9NSU4NCi0qIE1pblZhbHVlIG9mIGR1bW15DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0RVTU1ZX01JTiAoLTEyOCkNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9EVU1NWV9NQVgNCi0qIE1heFZhbHVlIG9mIGR1bW15DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0RVTU1ZX01BWCAoMTI3KQ0KLQ0KLS8qKg0KLSogRW51bSB0eXBlIGZvciBMVlZJREhlYWRlcl9NZXNzYWdlSURfZW4NCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZWRV9SWF9QUkVTRVQgPSAwLCAvLy88IFZJRCBoZWFkZXIgTWVzc2FnZSBJRCBmb3IgTFZWRV9SeCBwcmVzZXRzDQotICAgIExWVkVfVFhfUFJFU0VUID0gMSwgLy8vPCBWSUQgaGVhZGVyIE1lc3NhZ2UgSUQgZm9yIExWVkVfVHggUHJlc2V0cw0KLSAgICBMVlZJREhFQURFUl9NRVNTQUdFSURfRU5fRFVNTVkgPSBMVk1fTUFYRU5VTQ0KLX0gTFZWSURIZWFkZXJfTWVzc2FnZUlEX2VuOw0KLQ0KLS8qKg0KLSogRW51bSB0eXBlIGZvciBMVlZJREhlYWRlcl9SZXR1cm5TdGF0dXNfZW4NCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZWSURIRUFERVJfTlVMTEFERFJFU1MgPSAwLCAvLy88IExWVklESGVhZGVyIG1vZHVsZSByZXR1cm5zIE5VTEwgYWRkcmVzcyBlcnJvcg0KLSAgICBMVlZJREhFQURFUl9TVUNDRVNTID0gMSwgLy8vPCBMVlZJREhlYWRlciBtb2R1bGUgcmV0dXJucyB3aXRoIHN1Y2Nlc3MNCi0gICAgTFZWSURIRUFERVJfUkVUVVJOU1RBVFVTX0VOX0RVTU1ZID0gTFZNX01BWEVOVU0NCi19IExWVklESGVhZGVyX1JldHVyblN0YXR1c19lbjsNCi0NCi0vKioNCi0qIEVudW0gdHlwZSBmb3IgTFZWRV9SeF9Nb2RlX2VuDQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotICAgIExWVkVfUlhfTU9ERV9PRkYgPSAwLCAvLy88IFJ4IHZvaWNlIGVuZ2luZSBpcyB0dXJuZWQgb2ZmDQotICAgIExWVkVfUlhfTU9ERV9PTiA9IDEsIC8vLzwgUnggdm9pY2UgaW4gd2lsbCBydW4NCi0gICAgTFZWRV9SWF9NT0RFX0JZUEFTUyA9IDIsIC8vLzwgUnggdm9pY2UgZW5naW5lIHdpbGwgcnVuIGJ1dCBvdXRwdXQgd2lsbCBiZSBpZ25vcmVkDQotICAgIExWVkVfUlhfTU9ERV9FTl9EVU1NWSA9IExWTV9NQVhFTlVNDQotfSBMVlZFX1J4X01vZGVfZW47DQotDQotLyoqDQotKiBFbnVtIHR5cGUgZm9yIExWVkVfVHhfTW9kZV9lbg0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVlZFX1RYX01PREVfT0ZGID0gMCwgLy8vPCBUeCBpbiBMVlZFIGVuZ2luZSBpcyBkaXNhYmxlZA0KLSAgICBMVlZFX1RYX01PREVfT04gPSAxLCAvLy88IFRYIGluIExWVkUgaXMgZW5hYmxlZA0KLSAgICBMVlZFX1RYX01PREVfQllQQVNTX01JQzAgPSAyLCAvLy88IFRYIGluIExWVkUgZW5naW5lIHdpbGwgcnVuIGJ1dCBvdXRwdXQgd2lsbCBiZSBNaWMwIHNpZ25hbA0KLSAgICBMVlZFX1RYX01PREVfQllQQVNTX01JQzEgPSAzLCAvLy88IFR4IGluIExWVkUgZW5naW5lIHdpbGwgcnVuIGJ1dCBvdXRwdXQgd2lsbCBiZSBNaWMxIHNpZ25hbA0KLSAgICBMVlZFX1RYX01PREVfQllQQVNTX1JFRiA9IDQsIC8vLzwgVHggaW4gTFZWRSBlbmdpbmUgd2lsbCBydW4gYnV0IG91dHB1dCB3aWxsIGJlIFJlZiBzaWduYWwNCi0gICAgTFZWRV9UWF9NT0RFX0VOX0RVTU1ZID0gTFZNX01BWEVOVU0NCi19IExWVkVfVHhfTW9kZV9lbjsNCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgU3RydWN0dXJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKioNCi0qIFRoZSBzdGF0dXMgcGFyYW1ldGVycyBhcmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBtb2R1bGUuDQotKiBAc2VlIExWVkNfR2V0U3RhdHVzUGFyYW1ldGVycw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUaGUgaW50ZXJuYWwgZ2FpbiBzZXR0aW5nIHVzZWQgYnkgVm9pY2VDbGFyaXR5Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19HQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19HQUlOX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBHYWluOyAgICAgICAgICAvLy88IEdhaW4NCi0NCi0gICAgLyoqDQotICAgIDAgKG5vIGRldGVjdGlvbikgb3IgMSAoZGV0ZWN0aW9uKS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX1NQREVURUNURURfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX1NQREVURUNURURfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19TUERFVEVDVEVEX01BWCAoMSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgU3BEZXRlY3RlZDsgICAgICAgICAgLy8vPCBUaGUgc3BlZWNoIGRldGVjdG9yIGZsYWcuDQotDQotfSBMVlZDX1N0YXR1c1BhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBzdGF0dXMgcGFyYW1ldGVycyBhcmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBtb2R1bGUuDQotKiBAc2VlIExWV01fR2V0U3RhdHVzUGFyYW1ldGVycw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUaGUgaW50ZXJuYWwgZ2FpbiBzZXR0aW5nIHVzZWQgYnkgV2hpc3Blck1vZGUgaW4gZEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjYuOTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9HQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfR0FJTl9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9HQUlOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9HYWluOyAgICAgICAgICAvLy88IGdhaW4gKGRCKQ0KLQ0KLX0gTFZXTV9TdGF0dXNQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgc3RhdHVzIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLg0KLSogQHNlZSBMVlZFX1J4X0dldFN0YXR1c1BhcmFtZXRlcnMNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgVm9pY2UgQ2xhcml0eSBTdGF0dXMgUGFyYW1ldGVyIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZWQ19TdGF0dXNQYXJhbXNfc3QgVkNfU3RhdHVzUGFyYW1zOyAgICAgICAgICAvLy88IFZvaWNlIENsYXJpdHkgU3RhdHVzIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi0NCi0gICAgLyoqDQotICAgIFdoaXNwZXIgTW9kZSBTdGF0dXMgUGFyYW1ldGVyIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZXTV9TdGF0dXNQYXJhbXNfc3QgV01fU3RhdHVzUGFyYW1zOyAgICAgICAgICAvLy88IFdoaXNwZXIgTW9kZSBTdGF0dXMgUGFyYW1ldGVyIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgRHVtbXkgUGFyYW0uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuNzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX0RVTU1ZX01JTiAoLTEyOCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9SWF9EVU1NWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX0RVTU1ZX01BWCAoMTI3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQ4IGR1bW15OyAgICAgICAgICAvLy88IER1bW15IFBhcmFtDQotDQotfSBMVlZFX1J4X1N0YXR1c1BhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBzdGF0dXMgcGFyYW1ldGVycyBhcmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBtb2R1bGUuDQotKiBAc2VlIExWTlZfR2V0U3RhdHVzUGFyYW1ldGVycw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBCaXQgbWFzayBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIExWTlYsIHVzZWQgZm9yIGRlYnVnZ2luZy4NCi0gICAgKi8NCi0gICAgTFZOVl9TdGF0dXNXb3JkX2JtIHN0YXR1czsgICAgICAgICAgLy8vPCBjdXJyZW50IHN0YXRlDQotDQotICAgIC8qKg0KLSAgICBUbyBrZWVwIGNvcnJlY3QgbWVtb3J5IGFsaWdubWVudC4gVG8gYmUgcmVtb3ZlZCB3aGVuIExWTlZfU3RhdHVzV29yZF9ibSBoYXMNCi0gICAgYmVjb21lIGludDMyIGFzIGl0IHNob3VsZC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0RVTU1ZX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9EVU1NWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0RVTU1ZX01BWCAoMCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRHVtbXk7ICAgICAgICAgIC8vLzwgRHVtbXkgZm9yIG1lbW9yeSBhbGlnbm1lbnQuDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHByaW1hcnkgbG93LWJhbmQgKDAtNGtIeikgTkxNUyBmaWx0ZXINCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MS4zMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMF9MQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzBfTEJfQ09FRkZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMwX0xCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDMyKiBwTkxNUzBfTEJfQ29lZmZzOyAgICAgICAgICAvLy88IE5MTVMwIGxvd2JhbmQgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBwcmltYXJ5IGhpZ2gtYmFuZCAoNC04a0h6KSBOTE1TIGZpbHRlcg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjMwPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMwX0hCX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMF9IQl9DT0VGRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzBfSEJfQ09FRkZTX01BWCAoMjE0NzQ4MzY0Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMzIqIHBOTE1TMF9IQl9Db2VmZnM7ICAgICAgICAgIC8vLzwgTkxNUzAgaGlnaGJhbmQgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBzZWNvbmRhcnkgbG93LWJhbmQgKDAtNGtIeikgTkxNUyBmaWx0ZXINCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MS4zMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMV9MQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzFfTEJfQ09FRkZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMxX0xCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDMyKiBwTkxNUzFfTEJfQ29lZmZzOyAgICAgICAgICAvLy88IE5MTVMxIGxvd2JhbmQgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBzZWNvbmRhcnkgaGlnaC1iYW5kICg0LThrSHopIE5MTVMgZmlsdGVyDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMzA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzFfSEJfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMxX0hCX0NPRUZGU19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMV9IQl9DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQzMiogcE5MTVMxX0hCX0NvZWZmczsgICAgICAgICAgLy8vPCBOTE1TMSBoaWdoYmFuZCBmaWx0ZXIgY29lZmZpY2llbnRzDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEZTQjAgYW5kIEZTQjEgZmlsdGVycw0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BGU0JfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUEZTQl9DT0VGRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QRlNCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDMyKiBwRlNCX0NvZWZmczsgICAgICAgICAgLy8vPCBGU0IwIGFuZCBGU0IxIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBHU0MgZmlsdGVyDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMzA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QR1NDX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BHU0NfQ09FRkZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUEdTQ19DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQzMiogcEdTQ19Db2VmZnM7ICAgICAgICAgIC8vLzwgR1NDIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgTWljUG93U3AgZGV0ZWN0aW9uIGZsYWcNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BNSUNQT1dTUF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE1JQ1BPV1NQX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE1JQ1BPV1NQX01BWCAoMSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYqIHBNaWNQb3dTcDsgICAgICAgICAgLy8vPCBNaWNQb3cgU3BlZWNoIGRldGVjdGlvbiBmbGFnDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBvZiBDYWxpYnJhdGlvbiBmYWN0b3INCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDQUxGQUNUT1JfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDQUxGQUNUT1JfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQ0FMRkFDVE9SX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2KiBwQ2FsRmFjdG9yOyAgICAgICAgICAvLy88IENhbGlicmF0aW9uIGZhY3RvciB2YWx1ZQ0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgdmFyaWFibGUgb2YgQ2FsaWJyYXRpb24gcmVhZHkNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDQUxSRUFEWV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENBTFJFQURZX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENBTFJFQURZX01BWCAoMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYqIHBDYWxSZWFkeTsgICAgICAgICAgLy8vPCBDYWxpYnJhdGlvbiByZWFkeSB2YWx1ZQ0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgaW50ZXItY2hhbm5lbCBjb3JyZWxhdGlvbiB2YWx1ZSB1c2VkIGluIGJyb2Fkc2lkZSBkZXRlY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQlJPQURTSURFX0lOVEVSQ0NfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiogcEJyb2Fkc2lkZV9pbnRlckNDOyAgICAgICAgICAvLy88IEJyb2Fkc2lkZSBjb3JyZWxhdGlvbg0KLQ0KLX0gTFZOVl9TdGF0dXNQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgc3RhdHVzIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLg0KLSogQHNlZSBMVkhGX0dldFN0YXR1c1BhcmFtZXRlcnMNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgQ3VycmVudCB2YWx1ZSBvZiB0aGUgZWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjUuMTA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9HQU1NQUVfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0dBTU1BRV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0dBTU1BRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBnYW1tYWU7ICAgICAgICAgIC8vLzwgbXVsdGlwbGljYXRvciBmYWN0b3Igb2YgZWNobyBzdXBwcmVzc2lvbg0KLQ0KLSAgICAvKioNCi0gICAgQml0IG1hc2sgZGVzY3JpYmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBMVkhGLCB1c2VkIGZvciBkZWJ1Z2dpbmcuDQotICAgICovDQotICAgIExWSEZfU3RhdHVzV29yZF9ibSBzdGF0dXM7ICAgICAgICAgIC8vLzwgY3VycmVudCBzdGF0ZQ0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBMQiBOTE1TLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjMwPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUE5MTVNfTEJfQ09FRlNfTUlOICgtMjE0NzQ4MzY0OCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QTkxNU19MQl9DT0VGU19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BOTE1TX0xCX0NPRUZTX01BWCAoMjE0NzQ4MzY0Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMzIqIHBOTE1TX0xCX0NvZWZzOyAgICAgICAgICAvLy88IE5MTVMgbG93YmFuZCBmaWx0ZXIgY29lZmZpY2llbnRzDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEhCIE5MTVMuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMzA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QTkxNU19IQl9DT0VGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BOTE1TX0hCX0NPRUZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUE5MTVNfSEJfQ09FRlNfTUFYICgyMTQ3NDgzNjQ3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQzMiogcE5MTVNfSEJfQ29lZnM7ICAgICAgICAgIC8vLzwgTkxNUyBoaWdoYmFuZCBmaWx0ZXIgY29lZmZpY2llbnRzDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIFBDRCBOTE1TLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjMwPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUFBDRF9DT0VGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BQQ0RfQ09FRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QUENEX0NPRUZTX01BWCAoMjE0NzQ4MzY0Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMzIqIHBQQ0RfQ29lZnM7ICAgICAgICAgIC8vLzwgUENEIE5MTVMgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLX0gTFZIRl9TdGF0dXNQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgc3RhdHVzIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLg0KLSogQHNlZSBMVlZFX1R4X0dldFN0YXR1c1BhcmFtZXRlcnMNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgSGFuZHNGcmVlIFN0YXR1cyBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVkhGX1N0YXR1c1BhcmFtc19zdCBIRl9TdGF0dXNQYXJhbXM7ICAgICAgICAgIC8vLzwgSGFuZHNGcmVlIFN0YXR1cyBQYXJhbWV0ZXJzIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgTm9pc2VWb2lkIFN0YXR1cyBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVk5WX1N0YXR1c1BhcmFtc19zdCBOVl9TdGF0dXNQYXJhbXM7ICAgICAgICAgIC8vLzwgTm9pc2VWb2lkIFN0YXR1cyBQYXJhbWV0ZXJzIFN0cnVjdHJ1ZQ0KLQ0KLSAgICAvKioNCi0gICAgV2hpc3Blck1vZGUgU3RhdHVzIFBhcmFtZXRlciBTdHJ1Y3R1cmUuDQotICAgICovDQotICAgIExWV01fU3RhdHVzUGFyYW1zX3N0IFdNX1N0YXR1c1BhcmFtczsgICAgICAgICAgLy8vPCBXaGlzcGVyTW9kZSBTdGF0dXMgUGFyYW1ldGVyIFN0cnVjdHJ1ZQ0KLQ0KLSAgICAvKioNCi0gICAgRHVtbXkgUGFyYW0uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuNzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0RVTU1ZX01JTiAoLTEyOCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9EVU1NWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0RVTU1ZX01BWCAoMTI3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQ4IGR1bW15OyAgICAgICAgICAvLy88IER1bW15IFBhcmFtDQotDQotfSBMVlZFX1R4X1N0YXR1c1BhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVlZJREhlYWRlcl9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZWSURIZWFkZXJfUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWVklESGVhZGVyX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWVklESGVhZGVyX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgVGhpcyBudW1iZXIgYWx3YXlzIGluY3JlbWVudHMgYnkgb25lIHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIHRoZSBoZWFkZXIgZm9ybWF0Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD44LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0hFQURFUlZFUlNJT05fREVGQVVMVCAoMyk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9NQVggKDI1NSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDggSGVhZGVyVmVyc2lvbjsgICAgICAgICAgLy8vPCBIZWFkZXIgRm9ybWF0IFZlcnNpb24NCi0NCi0gICAgLyoqDQotICAgIEluaXRpYWxseSBUaGlzIHZhcmlhYmxlIGhvbGRzIHZhbHVlIG9mIHRoZSBiYXNlbGluZSB2ZXJzaW9uLiBUaGUgdmFsdWUgaXMgaW4NCi0gICAgZm9ybWF0IG9mIHh4eXl6enBwIHdoZXJlIHh4IGlzIG1ham9yIG51bWJlciBvZiB0aGUgbGlicmFyeSwgeXkgaXMgbWlub3IgbnVtYmVyLA0KLSAgICB6eiBpcyBzZWNvbmQgbWlub3IgbnVtYmVyIGFuZCBwcCBpcyBwYXRjaCBudW1iZXIgb2YgdGhlIGJhc2VsaW5lLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4zMi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0JBU0VMSU5FVkVSU0lPTl9NSU4gKDEpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0JBU0VMSU5FVkVSU0lPTl9ERUZBVUxUICg1MTkwNjgxNik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX01BWCAoNDI5NDk2NzI5NSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDMyIEJhc2VsaW5lVmVyc2lvbjsgICAgICAgICAgLy8vPCBUaGlzIGlzIExWVkUgdGFnZ2VkIHZlcnNpb24gbmFtZQ0KLQ0KLSAgICAvKioNCi0gICAgRmlyc3QgTFZWRV9SeCBhbGdvcml0aG0gbWFzayB3aGljaCBob2xkcyBpbmZvcm1hdGlvbiBvZiB3aGljaCBMVlZFX1J4DQotICAgIGFsZ29yaXRobXMgYXJlIHByZXNlbnQuDQotICAgICovDQotICAgIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0gTFZWRV9SeF9BbGdvTWFzazE7ICAgICAgICAgIC8vLzwgVGhpcyB2YXJpYWJsZSBmb3JtcyBmaXJzdCBwYXJ0IG9mIExWVkVfUnggYWxnb3JpdGhtIG1hc2sNCi0NCi0gICAgLyoqDQotICAgIFNlY29uZCBMVlZFX1J4IGFsZ29yaXRobSBtYXNrIHdoaWNoIGhvbGRzIGluZm9ybWF0aW9uIG9mIHdoaWNoIExWVkVfUngNCi0gICAgYWxnb3JpdGhtcyBhcmUgcHJlc2VudC4NCi0gICAgKi8NCi0gICAgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibSBMVlZFX1J4X0FsZ29NYXNrMjsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIHNlY29uZCBwYXJ0IG9mIExWVkVfUnggYWxnb3JpdGhtIG1hc2sNCi0NCi0gICAgLyoqDQotICAgIEZpcnN0IExWVkVfVHggYWxnb3JpdGhtIG1hc2sgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb24gb2Ygd2hpY2ggTFZWRV9UeA0KLSAgICBhbGdvcml0aG1zIGFyZSBwcmVzZW50Lg0KLSAgICAqLw0KLSAgICBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtIExWVkVfVHhfQWxnb01hc2sxOyAgICAgICAgICAvLy88IFRoaXMgdmFyaWFibGUgZm9ybXMgZmlyc3QgcGFydCBvZiBMVlZFX1R4IG1hc2sNCi0NCi0gICAgLyoqDQotICAgIFNlY29uZCBMVlZFX1R4IGFsZ29yaXRobSBtYXNrIHdoaWNoIGhvbGRzIGluZm9ybWF0aW9uIG9mIHdoaWNoIExWVkVfVHgNCi0gICAgYWxnb3JpdGhtcyBhcmUgcHJlc2VudC4NCi0gICAgKi8NCi0gICAgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMl9ibSBMVlZFX1R4X0FsZ29NYXNrMjsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIHNlY29uZCBwYXJ0IG9mIExWVkVfVHggbWFzaw0KLQ0KLSAgICAvKioNCi0gICAgRmlyc3QgTFZWRSBjb25maWd1cmF0aW9uIG1hc2sgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb24gb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMNCi0gICAgb2YgTFZWRV9UeCBhbmQgTFZWRV9SeCBhbGdvcml0aG0gYXJlIHByZXNlbnQuDQotICAgICovDQotICAgIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtIExWVkVfQ29uZmlnX0FsZ29NYXNrMTsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIGZpcnN0IHBhcnQgb2YgY29tbW9uIExWVkVfVHggYW5kIExWVkVfUnggY29uZmlndXJhdGlvbiBtYXNrDQotDQotICAgIC8qKg0KLSAgICBTZWNvbmQgTFZWRSBjb25maWd1cmF0aW9uIG1hc2sgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb24gb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMNCi0gICAgb2YgTFZWRV9UeCBhbmQgTFZWRV9SeCBhbGdvcml0aG0gYXJlIHByZXNlbnQuDQotICAgICovDQotICAgIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtIExWVkVfQ29uZmlnX0FsZ29NYXNrMjsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIHNlY29uZCBwYXJ0IG9mIGNvbW1vbiBMVlZFX1R4IGFuZCBMVlZFX1J4IGNvbmZpZ3VyYXRpb24gbWFzaw0KLQ0KLSAgICAvKioNCi0gICAgTWVzc2dlIElEIGlzIHVzZWQgdG8gaWRlbnRpZnkgc3RyZWFtDQotICAgICovDQotICAgIExWVklESGVhZGVyX01lc3NhZ2VJRF9lbiBNZXNzYWdlSUQ7ICAgICAgICAgIC8vLzwgVGhpcyBwYXJhbSBob2xkcyBtZXNzYWdlIElEIG9mIHRoZSBidWZmZXINCi0NCi0gICAgLyoqDQotICAgIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgc2FtcGxlIHJhdGUgaW5mb3JtYXRpb24gb2YgdGhlIGJ1ZmZlci4NCi0gICAgKi8NCi0gICAgTFZNX0ZzX2VuIFNhbXBsZVJhdGU7ICAgICAgICAgIC8vLzwgU2FtcGxlIHJhdGUgaW5mb3JtYXRpb24gb2YgdGhlIGJ1ZmZlci4NCi0NCi0gICAgLyoqDQotICAgIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgdm9sdW1lIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN1YnNlcXVlbnQgZGF0YS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OC4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX1ZPTFVNRUlOREVYX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfTUFYICgyNTUpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQ4IFZvbHVtZUluZGV4OyAgICAgICAgICAvLy88IFZvbHVtZSBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdWJzZXF1ZW50IGRhdGEuDQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgaG93IG1hbnkgdm9sdW1lcyBhcmUgcHJlc2VudCBpbiB0aGUgYmluYXJ5IGZpbGUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjguMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9OVU1WT0xVTUVTX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTlVNVk9MVU1FU19ERUZBVUxUICgxKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9OVU1WT0xVTUVTX01BWCAoMjU1KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UOCBOdW1Wb2x1bWVzOyAgICAgICAgICAvLy88IE51bWJlciBvZiB2b2x1bWVzIHByZXNlbnQgaW4gdGhlIGJpbmFyeSBmaWxlLg0KLQ0KLX0gTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVlZDX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVlZDX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVlZDX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWVkNfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBDb250cm9sIHRoZSBvcGVyYXRpbmcgbW9kZSAoT04vT0ZGKSBvZiB0aGUgYWxnb3JpdGhtLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBPcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBUaGUgbW9kZSB3b3JkIHRvIGVuYWJsZS9kaXNhYmxlIGludGVybmFsIGFsZ29yaXRobSBibG9ja3Mgb2YgVm9pY2VDbGFyaXR5Lg0KLSAgICAqLw0KLSAgICBMVlZDX01vZGVXb3JkX2JtIG1vZGU7ICAgICAgICAgIC8vLzwgTW9kZSB3b3JkDQotDQotICAgIC8qKg0KLSAgICBNYXhpbXVtIEdhaW4gYXBwbGllZCB0byB0aGUgc2lnbmFsLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19HQUlOX0xJTl9NQVhfTUlOICg1MTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfR0FJTl9MSU5fTUFYX0RFRkFVTFQgKDEyODYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfR0FJTl9MSU5fTUFYX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEdhaW5fTGluX01heDsgICAgICAgICAgLy8vPCBNYXhpbXVtIEdhaW4uDQotDQotICAgIC8qKg0KLSAgICBUaGUgTm9pc2VfU2Vuc2l0aXZpdHkgcGFyYW1ldGVyIHNldHMgaG93IHNlbnNpdGl2ZSBWb2ljZUNsYXJpdHkgd2lsbCBiZSB0byB0aGUNCi0gICAgYmFja2dyb3VuZCBub2lzZSBsZXZlbC4gVGhlIE5vaXNlX1NlbnNpdGl2aXR5IHBhcmFtZXRlciBhbGxvd3MgYWRqdXN0aW5nIHRoZQ0KLSAgICBzZW5zaXRpdml0eSBvZiB0aG9zZSBwcm9jZXNzaW5nIGJsb2NrcyB0byB0aGUgbmVhcmVuZCBub2lzZSBsZXZlbC4gRm9yIGhpZ2gNCi0gICAgdmFsdWVzIG9mIHRoZSBOb2lzZV9TZW5zaXRpdml0eSB0aGUgZWZmZWN0IG9mIHRoZSBtZW50aW9uZWQgcHJvY2Vzc2luZyBibG9ja3MNCi0gICAgd2lsbCBiZSBiaWcsIGV2ZW4gYXQgbG93IHRvIG1vZGVyYXRlIG5lYXJlbmQgbm9pc2UgbGV2ZWxzLiBGb3IgbG93IHZhbHVlcyBvZg0KLSAgICB0aGUgTm9pc2VfU2Vuc2l0aXZpdHkgdGhlIGVmZmVjdCBvZiB0aGUgcHJvY2Vzc2luZyBibG9ja3Mgd2lsbCBiZSBzbWFsbGVyLCBldmVuDQotICAgIGZvciBoaWdoIG5lYXJlbmQgbm9pc2UgbGV2ZWxzLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfTk9JU0VfU0VOU0lUSVZJVFlfTUlOICgtNjcwOSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9ERUZBVUxUICgyMDAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOb2lzZV9TZW5zaXRpdml0eTsgICAgICAgICAgLy8vPCBOb2lzZSBTZW5zaXRpdml0eS4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBkZXNpcmVkIG91dHB1dCBsZXZlbCBvZiB0aGUgQUdDLiA8YnI+DQotICAgIEFWTF9UYXJnZXRfbGV2ZWxfbGluID0gXGYkMzI3NjcqMTBee1RhcmdldF9MZXZlbF9kQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9UQVJHRVRfTEVWRUxfTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfVEFSR0VUX0xFVkVMX0xJTl9ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfVEFSR0VUX0xFVkVMX0xJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfVGFyZ2V0X2xldmVsX2xpbjsgICAgICAgICAgLy8vPCBUaGUgZGVzaXJlZCBvdXRwdXQgbGV2ZWwgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbWFsIGF0dGVudWF0aW9uIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX01pbkdhaW5MaW4gPSBcZiQ1MTIqMTBee01pbkdhaW5fZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjYuOTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9NSU5HQUlOTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfTUlOR0FJTkxJTl9ERUZBVUxUICgyNTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX01JTkdBSU5MSU5fTUFYICg1MTIpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9NaW5HYWluTGluOyAgICAgICAgICAvLy88IFRoZSBtYXhpbWFsIGF0dGVudWF0aW9uIG9mIHRoZSBBR0MuDQotDQotICAgIC8qKg0KLSAgICBUaGUgbWF4aW1hbCBnYWluIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX01heEdhaW5MaW4gPSBcZiQ1MTIqMTBee01heEdhaW5fZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjYuOTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9NQVhHQUlOTElOX01JTiAoNTEyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9NQVhHQUlOTElOX0RFRkFVTFQgKDgxOTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX01BWEdBSU5MSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX01heEdhaW5MaW47ICAgICAgICAgIC8vLzwgVGhlIG1heGltYWwgZ2FpbiBvZiB0aGUgQUdDLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIG5vbWluYWwgZ2FpbiBvZiB0aGUgQUdDLjxicj4NCi0gICAgQVZMX05vbWluYWxHYWluID0gXGYkNTEyKjEwXntOb21pbmFsR2Fpbl9kQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ni45PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX05PTUlOQUxHQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfTk9NSU5BTEdBSU5fREVGQVVMVCAoNTEyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9OT01JTkFMR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfTm9taW5hbEdhaW47ICAgICAgICAgIC8vLzwgVGhlIG5vbWluYWwgZ2FpbiBvZiB0aGUgQUdDLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGdhaW4gb2YgdGhlIEFHQyBpcyBzbW9vdGhlZCBhY3Jvc3MgdGltZS4gVGhlIHRpbWUgY29uc3RhbnQgb2YgdGhlIHNtb290aGluZw0KLSAgICBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nLiBXaGVuIGEgc3VkZGVuIGxvdWQNCi0gICAgc2lnbmFsIGlzIGVuY291bnRlcmVkIChlLmcuIGF0dGFjayBvZiBzcGVlY2gpLCB0aGUgYXR0YWNrIHRpbWUgaXMgdXNlZC4gV2hlbg0KLSAgICB0aGUgZ2FpbiBpcyBpbmNyZWFzaW5nIChlLmcuIGxvbmcgcGVyaW9kIG9mIHdoaXNwZXJlZCBzcGVlY2gpLCB0aGUgcmVsZWFzZSB0aW1lDQotICAgIGlzIHVzZWQuIDxicj4NCi0NCi0gICAgQVZMX0F0dGFjayA9IFxmJDMyNzY3KlxleHAoLTEvKDEwMCpBdHRhY2tUaW1lU2VjKSlcZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9BVFRBQ0tfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9BVFRBQ0tfREVGQVVMVCAoMTIwNTUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX0FUVEFDS19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfQXR0YWNrOyAgICAgICAgICAvLy88IFRoZSBhdHRhY2sgdGltZSBvZiB0aGUgQUdDLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGdhaW4gb2YgdGhlIEFHQyBpcyBzbW9vdGhlZCBhY3Jvc3MgdGltZS4gVGhlIHRpbWUgY29uc3RhbnQgb2YgdGhlIHNtb290aGluZw0KLSAgICBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nLiBXaGVuIGEgc3VkZGVuIGxvdWQNCi0gICAgc2lnbmFsIGlzIGVuY291bnRlcmVkIChlLmcuIGF0dGFjayBvZiBzcGVlY2gpLCB0aGUgYXR0YWNrIHRpbWUgaXMgdXNlZC4gV2hlbg0KLSAgICB0aGUgZ2FpbiBpcyBpbmNyZWFzaW5nIChlLmcuIGxvbmcgcGVyaW9kIG9mIHdoaXNwZXJlZCBzcGVlY2gpLCB0aGUgcmVsZWFzZSB0aW1lDQotICAgIGlzIHVzZWQuIDxicj4NCi0NCi0gICAgQVZMX1JlbGVhc2UgPSBcZiQzMjc2NypcZXhwKC0xLygxMDAqUmVsZWFzZVRpbWVTZWMpKVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX1JFTEVBU0VfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9SRUxFQVNFX0RFRkFVTFQgKDMyNjA0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9SRUxFQVNFX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9SZWxlYXNlOyAgICAgICAgICAvLy88IFRoZSByZWxlYXNlIHRpbWUgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSByZWxlYXNlIHRpbWUgYXQgbWF4aW11bSBub2lzZSBsZXZlbC48YnI+DQotDQotICAgIEFWTF9SZWxlYXNlTWF4ID0gXGYkMzI3NjcqXGV4cCgtMS8oMTAwKlJlbGVhc2VNYXhUaW1lU2VjKSlcZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9SRUxFQVNFTUFYX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfUkVMRUFTRU1BWF9ERUZBVUxUICgzMjQ0MSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfUkVMRUFTRU1BWF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfUmVsZWFzZU1heDsgICAgICAgICAgLy8vPCBUaGUgcmVsZWFzZSB0aW1lIGF0IG1heGltdW0gbm9pc2UgbGV2ZWwuDQotDQotICAgIC8qKg0KLSAgICBBVkxfTGltaXRfTWF4T3V0cHV0TGluID0gXGYkMzI3NjcqMTBee1RhcmdldExpbWl0ZXJMZXZlbGRCLzIwfVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX0xJTUlUX01BWE9VVFBVVExJTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX0xJTUlUX01BWE9VVFBVVExJTl9ERUZBVUxUICgyMzE3MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9MaW1pdF9NYXhPdXRwdXRMaW47ICAgICAgICAgIC8vLzwgVGhlIGxldmVsIHRvIHdoaWNoIHRoZSBzaWduYWwgd2lsbCBiZSBsaW1pdGVkLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGhpZ2hlciB0aGUgdmFsdWUgb2YgdGhlIHRocmVzaG9sZCwgdGhlIGxlc3Mgc3BlZWNoIGRldGVjdGlvbnMgd2lsbCBvY2N1ci4NCi0gICAgPGJyPg0KLSAgICBTcERldGVjdF9UaHJlc2hvbGQgPSBcZiQ1MTIgKiBbMCw2NF1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ni45PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfU1BERVRFQ1RfVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19TUERFVEVDVF9USFJFU0hPTERfREVGQVVMVCAoMTAyNCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19TUERFVEVDVF9USFJFU0hPTERfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgU3BEZXRlY3RfVGhyZXNob2xkOyAgICAgICAgICAvLy88IFRoZSB0aHJlc2hvbGQgdXNlZCBpbiB0aGUgc3BlZWNoIGRldGVjdG9yIG9mIFZvaWNlQ2xhcml0eS4NCi0NCi19IExWVkNfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVkZFTlNfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWRkVOU19Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZGRU5TX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWRkVOU19Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE9wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgT3BlcmF0aW5nIE1vZGUNCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBub2lzZSBzdXBwcmVzc2lvbi4gPGJyPg0KLSAgICBVbml0OiBkQjxicj4NCi0gICAgRkVOU19saW1pdF9ucyA9IFxmJDMyNzY3KjEwXnstbWF4IG5vaXNlIHJlZHVjdGlvbltkQl0vMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZGRU5TX0ZFTlNfTElNSVRfTlNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkZFTlNfRkVOU19MSU1JVF9OU19ERUZBVUxUICgxMDk3Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZGRU5TX0ZFTlNfTElNSVRfTlNfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRkVOU19saW1pdF9OUzsgICAgICAgICAgLy8vPCBGRU5TIE5vaXNlIFN1cHByZXNzaW9uIExpbWl0DQotDQotICAgIC8qKg0KLSAgICBUaGUgbW9kZSB3b3JkIHRvIGNvbnRyb2wgdGhlIGludGVybmFsIG9wZXJhdGlvbiBvZiBGRU5TLg0KLSAgICAqLw0KLSAgICBMVkZFTlNfTW9kZVdvcmRfYm0gTW9kZTsgICAgICAgICAgLy8vPCBNb2RlIHdvcmQNCi0NCi19IExWRkVOU19Db250cm9sUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWV01fU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWV01fUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWV01fU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZXTV9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIENvbnRyb2wgdGhlIG9wZXJhdGluZyBtb2RlIChPTi9PRkYpIG9mIHRoZSBhbGdvcml0aG0uDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE9wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgT3BlcmF0aW5nIG1vZGUNCi0NCi0gICAgLyoqDQotICAgIFRoZSBtb2RlIHdvcmQgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJuYWwgYWxnb3JpdGhtIGJsb2NrcyBvZiBXaGlzcGVyTW9kZS4NCi0gICAgKi8NCi0gICAgTFZXTV9Nb2RlV29yZF9ibSBtb2RlOyAgICAgICAgICAvLy88IE1vZGUgd29yZA0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGRlc2lyZWQgb3V0cHV0IGxldmVsIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX1RhcmdldF9sZXZlbF9saW4gPSBcZiQzMjc2NyoxMF57VGFyZ2V0TGV2ZWxkQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9UQVJHRVRfTEVWRUxfTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfVGFyZ2V0X2xldmVsX2xpbjsgICAgICAgICAgLy8vPCBUaGUgZGVzaXJlZCBvdXRwdXQgbGV2ZWwgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbWFsIGF0dGVudWF0aW9uIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX01pbkdhaW5MaW4gPSBcZiQ1MTIqMTBee01pbkdhaW5kQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ni45PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWV01fQVZMX01JTkdBSU5MSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9NSU5HQUlOTElOX0RFRkFVTFQgKDEyOCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTUlOR0FJTkxJTl9NQVggKDUxMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX01pbkdhaW5MaW47ICAgICAgICAgIC8vLzwgVGhlIG1heGltYWwgYXR0ZW51YXRpb24gb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbWFsIGdhaW4gb2YgdGhlIEFHQy4gPGJyPg0KLSAgICBBVkxfTWF4R2FpbkxpbiA9IFxmJDUxMioxMF57TWF4R2FpbmRCLzIwfVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTUFYR0FJTkxJTl9NSU4gKDUxMik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTUFYR0FJTkxJTl9ERUZBVUxUICg4MTg5KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9NQVhHQUlOTElOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9NYXhHYWluTGluOyAgICAgICAgICAvLy88IFRoZSBtYXhpbWFsIGdhaW4gb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBnYWluIG9mIHRoZSBBR0MgaXMgc21vb3RoZWQgYWNyb3NzIHRpbWUuIFRoZSB0aW1lIGNvbnN0YW50IG9mIHRoZSBzbW9vdGhpbmcNCi0gICAgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBnYWluIGlzIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZy4gV2hlbiBhIHN1ZGRlbiBsb3VkDQotICAgIHNpZ25hbCBpcyBlbmNvdW50ZXJlZCAoZS5nLiBhdHRhY2sgb2Ygc3BlZWNoKSwgdGhlIGF0dGFjayB0aW1lIGlzIHVzZWQuIFdoZW4NCi0gICAgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyAoZS5nLiBsb25nIHBlcmlvZCBvZiB3aGlzcGVyZWQgc3BlZWNoKSwgdGhlIHJlbGVhc2UgdGltZQ0KLSAgICBpcyB1c2VkLiA8YnI+DQotDQotICAgIEFWTF9BdHRhY2sgPSBcZiQzMjc2NypcZXhwKC0xLygxMDAqQXR0YWNrVGltZVNlYykpXGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfQVRUQUNLX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfQVRUQUNLX0RFRkFVTFQgKDI1NTIwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9BVFRBQ0tfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX0F0dGFjazsgICAgICAgICAgLy8vPCBUaGUgYXR0YWNrIHRpbWUgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBnYWluIG9mIHRoZSBBR0MgaXMgc21vb3RoZWQgYWNyb3NzIHRpbWUuIFRoZSB0aW1lIGNvbnN0YW50IG9mIHRoZSBzbW9vdGhpbmcNCi0gICAgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBnYWluIGlzIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZy4gV2hlbiBhIHN1ZGRlbiBsb3VkDQotICAgIHNpZ25hbCBpcyBlbmNvdW50ZXJlZCAoZS5nLiBhdHRhY2sgb2Ygc3BlZWNoKSwgdGhlIGF0dGFjayB0aW1lIGlzIHVzZWQuIFdoZW4NCi0gICAgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyAoZS5nLiBsb25nIHBlcmlvZCBvZiB3aGlzcGVyZWQgc3BlZWNoKSwgdGhlIHJlbGVhc2UgdGltZQ0KLSAgICBpcyB1c2VkLiA8YnI+DQotDQotICAgIEFWTF9SZWxlYXNlID0gXGYkMzI3NjcqXGV4cCgtMS8oMTAwKlJlbGVhc1RpbWVTZWMpKVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWV01fQVZMX1JFTEVBU0VfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9SRUxFQVNFX0RFRkFVTFQgKDMyNjg1KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9SRUxFQVNFX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9SZWxlYXNlOyAgICAgICAgICAvLy88IFRoZSByZWxlYXNlIHRpbWUgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIEFWTF9MaW1pdF9NYXhPdXRwdXRMaW4gPSBcZiQzMjc2NyoxMF57VGFyZ2V0TGltaXRlckxldmVsZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX0RFRkFVTFQgKDIzMTk3KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX0xpbWl0X01heE91dHB1dExpbjsgICAgICAgICAgLy8vPCBUaGUgbGV2ZWwgdG8gd2hpY2ggdGhlIHNpZ25hbCB3aWxsIGJlIGxpbWl0ZWQuDQotDQotICAgIC8qKg0KLSAgICBUaGUgaGlnaGVyIHRoZSB2YWx1ZSBvZiB0aGUgdGhyZXNob2xkLCB0aGUgbGVzcyBzcGVlY2ggZGV0ZWN0aW9ucyB3aWxsIG9jY3VyLg0KLSAgICA8YnI+DQotICAgIFNwRGV0ZWN0X1RocmVzaG9sZCA9IFxmJDUxMiAqIFswLDY0XVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9TUERFVEVDVF9USFJFU0hPTERfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9ERUZBVUxUICg5MjE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBTcERldGVjdF9UaHJlc2hvbGQ7ICAgICAgICAgIC8vLzwgVGhlIHRocmVzaG9sZCB1c2VkIGluIHRoZSBzcGVlY2ggZGV0ZWN0b3Igb2YgV2hpc3Blck1vZGUuDQotDQotfSBMVldNX0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgY29udHJvbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG92ZXJhbGwgbW9kdWxlIGJlaGF2aW9yLiBUaGVzZSBwYXJhbWV0ZXJzIG1heQ0KLSogYmUgY2hhbmdlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZyB1c2luZyB0aGUgTFZEUkNfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWRFJDX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVkRSQ19TZXRDb250cm9sUGFyYW1ldGVycw0KLSogQHNlZSBMVkRSQ19Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIE9wZXJhdGluZyBtb2RlIGZvciBEUkMNCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBPcGVyYXRpbmcgbW9kZQ0KLQ0KLSAgICAvKioNCi0gICAgU2V0cyB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zIChrbmVlIHBvaW50cykgaW4gdGhlIGNvbXByZXNzb3IgY3VydmUNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19OVU1LTkVFU19NSU4gKDEpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX05VTUtORUVTX0RFRkFVTFQgKDUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX05VTUtORUVTX01BWCAoNSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IE51bUtuZWVzOyAgICAgICAgICAvLy88IE51bWJlciBvZiBLbmVlIHBvaW50cyBpbiBjb21wcmVzc29yIGN1cnZlDQotDQotICAgIC8qKg0KLSAgICBBbiBhcnJheSBvZiBzaXplIDUobWF4aW11bSkgY29udGFpbmluZyB0aGUga25lZSBwb2ludHMgc3BlY2lmaWVkIGJ5IHRoZQ0KLSAgICBjb21wcmVzc2lvbiBjdXJ2ZSBpbiBkQkZzLiBUaGUgbnVtYmVyIG9mIGtuZWUgcG9pbnRzIGluIHVzZSBpcyBsaW1pdGVkIGJ5IHRoZQ0KLSAgICBOdW1LbmVlcyBwYXJhbWV0ZXIuIFRoIGlucHV0IGxldmVsIGZvciB0aGUgZmlyc3Qga25lZSBzaG91bGQgYmUgZXF1YWwgdG8gb3INCi0gICAgbGFyZ2VyIHRoYW4gLTk2ZEIsIGFuZCB0aGUgaW5wdXQgbGV2ZWwgZm9yIHRoZSBsYXN0IGtuZWUgc2hvdWxkIGJlIDBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NSU4gKC05Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfREVGQVVMVCB7LTk2LC03MCwtNTAsIC0yNCwgMH08L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVsc1tMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19MRU5HVEhdOyAgICAgICAgICAvLy88IENvbXByZXNzb3IgQ3VydmUgSW5wdXQgTGV2ZWxzDQotDQotICAgIC8qKg0KLSAgICBBbiBhcnJheSBvZiBzaXplIDUobWF4aW11bSkgY29udGFpbmluZyB0aGUga25lZSBwb2ludHMgc3BlY2lmaWVkIGJ5IHRoZQ0KLSAgICBjb21wcmVzc2lvbiBjdXJ2ZSBpbiBkQkZzLiBUaGUgbnVtYmVyIG9mIGtuZWUgcG9pbnRzIGluIHVzZSBpcyBsaW1pdGVkIGJ5IHRoZQ0KLSAgICBOdW1LbmVlcyBwYXJhbWV0ZXIuIFRoZSBvdXRwdXQgbGV2ZWwgZm9yIHRoZSBmaXJzdCBrbmVlIHNob3VsZCBiZSBlcXVhbCB0byBvcg0KLSAgICBsYXJnZXIgdGhhbiAtOTZkQiwgYW5kIHRoZSBvdXRwdXQgbGV2ZWwgZm9yIHRoZSBsYXN0IGtuZWUgc2hvdWxkIGJlIGVxdWFsIHRvIG9yDQotICAgIHNtYWxsZXIgdGhhbiAwZEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX01JTiAoLTk2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfREVGQVVMVCB7LTk2LC03MCwtMzgsLTEyLDB9PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NQVggKDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IENvbXByZXNzb3JDdXJ2ZU91dHB1dExldmVsc1tMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTEVOR1RIXTsgICAgICAgICAgLy8vPCBDb21wcmVzc29yIEN1cnZlIE91dHB1dCBMZXZlbHMNCi0NCi0gICAgLyoqDQotICAgIFRoZSBBdHRhY2tUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBpbmNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBBdHRhY2tUaW1lIGlzIHNwZWNpZmllZCBpbiBpbmNyZW1lbnRzIG9mIDEwMLVzDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQVRUQUNLVElNRV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX0FUVEFDS1RJTUVfREVGQVVMVCAoNTApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX0FUVEFDS1RJTUVfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQXR0YWNrVGltZTsgICAgICAgICAgLy8vPCBBdHRhY2sgVGltZQ0KLQ0KLSAgICAvKioNCi0gICAgVGhlIFJlbGVhc2VUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBkZWNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBSZWxlYXNlVGltZSBpcyBzcGVjaWZpZWQgaW4gaW5jcmVtZW50cyBvZg0KLSAgICAxMDC1cy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19SRUxFQVNFVElNRV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX1JFTEVBU0VUSU1FX0RFRkFVTFQgKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19SRUxFQVNFVElNRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBSZWxlYXNlVGltZTsgICAgICAgICAgLy8vPCBSZWxlYXNlIFRpbWUNCi0NCi0gICAgLyoqDQotICAgIEVuYWJsZSBvciBEaXNhYmxlIGxpbWl0ZXIgd2l0aCBzb2Z0IGNsaXBwaW5nLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBMaW1pdGVyT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBFbmFibGUgb3IgRGlzYWJsZSBsaW1pdGVyIHdpdGggc29mdCBjbGlwcGluZw0KLQ0KLSAgICAvKioNCi0gICAgU2V0cyB0aGUgbGltaXQgbGV2ZWwgb2YgdGhlIGNvbXByZXNzb3IgaW4gZEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfTElNSVRMRVZFTF9NSU4gKC05Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfTElNSVRMRVZFTF9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19MSU1JVExFVkVMX01BWCAoMCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTGltaXRMZXZlbDsgICAgICAgICAgLy8vPCBTZXRzIHRoZSBsaW1pdCBsZXZlbCBvZiB0aGUgY29tcHJlc3NvciBpbiBkQg0KLQ0KLX0gTFZEUkNfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVk5HX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVk5HX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVk5HX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWTkdfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBPcGVyYXRpbmcgbW9kZSBmb3IgTm9pc2UgR2F0ZQ0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBPcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBTZXRzIHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMgKGtuZWUgcG9pbnRzKSBpbiB0aGUgY29tcHJlc3NvciBjdXJ2ZQ0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTkdfTlVNS05FRVNfTUlOICgxKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX05VTUtORUVTX0RFRkFVTFQgKDUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTkdfTlVNS05FRVNfTUFYICg1KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgTnVtS25lZXM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIEtuZWUgcG9pbnRzIGluIGNvbXByZXNzb3IgY3VydmUNCi0NCi0gICAgLyoqDQotICAgIEFuIGFycmF5IG9mIHNpemUgNShtYXhpbXVtKSBjb250YWluaW5nIHRoZSBrbmVlIHBvaW50cyBzcGVjaWZpZWQgYnkgdGhlDQotICAgIGNvbXByZXNzaW9uIGN1cnZlIGluIGRCRnMuIFRoZSBudW1iZXIgb2Yga25lZSBwb2ludHMgaW4gdXNlIGlzIGxpbWl0ZWQgYnkgdGhlDQotICAgIE51bUtuZWVzIHBhcmFtZXRlci4gVGhlIGlucHV0IGxldmVsIGZvciB0aGUgZmlyc3Qga25lZSBzaG91bGQgYmUgZXF1YWwgdG8gb3INCi0gICAgbGFyZ2VyIHRoYW4gLTk2ZEIsIGFuZCB0aGUgaW5wdXQgbGV2ZWwgZm9yIHRoZSBsYXN0IGtuZWUgc2hvdWxkIGJlIDBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01JTiAoLTk2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0RFRkFVTFQgey04MCwtNzAsLTUwLCAtMjQsIDB9PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTkdfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVsc1tMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0xFTkdUSF07ICAgICAgICAgIC8vLzwgQ29tcHJlc3NvciBDdXJ2ZSBJbnB1dCBMZXZlbHMNCi0NCi0gICAgLyoqDQotICAgIEFuIGFycmF5IG9mIHNpemUgNShtYXhpbXVtKSBjb250YWluaW5nIHRoZSBrbmVlIHBvaW50cyBzcGVjaWZpZWQgYnkgdGhlDQotICAgIGNvbXByZXNzaW9uIGN1cnZlIGluIGRCRnMuIFRoZSBudW1iZXIgb2Yga25lZSBwb2ludHMgaW4gdXNlIGlzIGxpbWl0ZWQgYnkgdGhlDQotICAgIE51bUtuZWVzIHBhcmFtZXRlci4gVGhlIG91dHB1dCBsZXZlbCBmb3IgdGhlIGZpcnN0IGtuZWUgc2hvdWxkIGJlIGVxdWFsIHRvIG9yDQotICAgIGxhcmdlciB0aGFuIC05NmRCLCBhbmQgdGhlIG91dHB1dCBsZXZlbCBmb3IgdGhlIGxhc3Qga25lZSBzaG91bGQgYmUgZXF1YWwgdG8gb3INCi0gICAgc21hbGxlciB0aGFuIDBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NSU4gKC05Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfREVGQVVMVCB7LTk2LC04MCwtNTAsIC0yNCwgMH08L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBDb21wcmVzc29yQ3VydmVPdXRwdXRMZXZlbHNbTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTEVOR1RIXTsgICAgICAgICAgLy8vPCBDb21wcmVzc29yIEN1cnZlIE91dHB1dCBMZXZlbHMNCi0NCi0gICAgLyoqDQotICAgIFRoZSBBdHRhY2tUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBpbmNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBBdHRhY2tUaW1lIGlzIHNwZWNpZmllZCBpbiBpbmNyZW1lbnRzIG9mIDEwMLVzDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19BVFRBQ0tUSU1FX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19BVFRBQ0tUSU1FX0RFRkFVTFQgKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0FUVEFDS1RJTUVfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQXR0YWNrVGltZTsgICAgICAgICAgLy8vPCBBdHRhY2sgVGltZQ0KLQ0KLSAgICAvKioNCi0gICAgVGhlIFJlbGVhc2VUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBkZWNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBSZWxlYXNlVGltZSBpcyBzcGVjaWZpZWQgaW4gaW5jcmVtZW50cyBvZg0KLSAgICAxMDC1cy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX1JFTEVBU0VUSU1FX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19SRUxFQVNFVElNRV9ERUZBVUxUICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19SRUxFQVNFVElNRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBSZWxlYXNlVGltZTsgICAgICAgICAgLy8vPCBSZWxlYXNlIFRpbWUNCi0NCi19IExWTkdfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVk5MUFBfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWTkxQUF9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZOTFBQX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWTkxQUF9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIExpbWl0cyB0aGUgc2lnbmFsIGxldmVsIGNvbXBhcmVkIHRvIGRpZ2l0YWwgZnVsbCBzY2FsZSBpbiBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5MUFBfTkxQUF9MSU1JVF9NSU4gKC0yNCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOTFBQX05MUFBfTElNSVRfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOTFBQX05MUFBfTElNSVRfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTFBQX0xpbWl0OyAgICAgICAgICAvLy88IE5MUFAgTGltaXQNCi0NCi0gICAgLyoqDQotICAgIFNldHMgdGhlIC0zZEIgY29ybmVyIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaC1wYXNzIGZpbHRlciBpbiBIei4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9NSU4gKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOTFBQX05MUFBfSFBGX0NPUk5FUkZSRVFfTUFYICgxMDAwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgTkxQUF9IUEZfQ29ybmVyRnJlcTsgICAgICAgICAgLy8vPCBOTFBQIEhQRiBDb3JuZXIgRnJlcXVlbmN5DQotDQotfSBMVk5MUFBfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVkVRX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVkVRX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVkVRX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWRVFfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBTZXRzIHRoZSBsZW5ndGggb2YgdGhlIEVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlLiBUaGlzIG11c3QgbmV2ZXIgYmUgbW9yZSB0aGFuDQotICAgIHRoZSB2YWx1ZSBvZiBFUV9NYXhMZW5ndGggc2V0IGF0IGluaXRpYWxpemF0aW9uIHRpbWUuIFRoZSBFUV9MZW5ndGggbXVzdCBiZSBhDQotICAgIG11bHRpcGxlIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZFUV9FUV9MRU5HVEhfTUlOICg4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkVRX0VRX0xFTkdUSF9ERUZBVUxUICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZFUV9FUV9MRU5HVEhfTUFYICg2NCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IEVRX0xlbmd0aDsgICAgICAgICAgLy8vPCBFUSBUYXAgTGVuZ3RoDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNhbXBsZXMgb2YgdGhlIEVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlLg0KLSAgICBUaGUgZm9ybWF0IG9mIHRoZSBhcnJheSBjb250ZW50IGlzIHNwZWNpZmllZCBiZWxvdy4gVGhlIHNhbXBsZXMgb2YgdGhlDQotICAgIEVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlIG11c3QgYmUgaW4gUTMuMTIgZm9ybWF0Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4zLjEyPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRVFfRVFfQ09FRlNfTUlOICgtMzI3NjgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRVFfRVFfQ09FRlNfREVGQVVMVCB7NDA5NiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH08L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZFUV9FUV9DT0VGU19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiAqcEVRX0NvZWZzOyAgICAgICAgICAvLy88IEVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlDQotDQotfSBMVkVRX0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotDQotDQotLypbQmVnaW5dIFtsdndlbmh1YS0yMDEzLzEwLzIxXSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICAgIEVxQ29lZnNbTFZWRV9NQVhfRVFfTEVOR1RIX05CXTsNCi19IExWRVFfQ29lZnNfc3Q7DQotLypbRW5kXSBbbHZ3ZW5odWEtMjAxMy8xMC8yMV0qLw0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWVk9MX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVlZPTF9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZWT0xfU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZWT0xfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUdXJucyBvbi9vZmYgVk9MX0dhaW4uDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIFZPTF9PcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFR1cm5zIG9uL29mZiBWT0xfR2Fpbg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIHZvbHVtZSBjb250cm9sIGdhaW4gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBvdmVyYWxsIHZvbHVtZSBsZXZlbCBvZiB0aGUNCi0gICAgc2lnbmFsLiBUaGUgZ2FpbiBpcyBzZXQgaW4gZEIgd2l0aCBzdGVwcyBvZiAxZEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWT0xfVk9MX0dBSU5fTUlOICgtOTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVk9MX1ZPTF9HQUlOX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVk9MX1ZPTF9HQUlOX01BWCAoMjQpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFZPTF9HYWluOyAgICAgICAgICAvLy88IEFwcGx5IEdhaW4gdG8gSW5wdXQgc2lnbmFsDQotDQotfSBMVlZPTF9Db250cm9sUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWSFBGX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVkhQRl9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZIUEZfU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZIUEZfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUdXJucyBvbi9vZmYgSGlnaCBQYXNzIGZpbHRlci4NCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gSFBGX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgVHVybnMgb24vb2ZmIEhpZ2ggUGFzcyBmaWx0ZXINCi0NCi0gICAgLyoqDQotICAgIFNldHMgdGhlIDNkQiBjb3JuZXIgZnJlcXVlbmN5IG9mIHRoZSBoaWdoLXBhc3MgZmlsdGVyLiBJbiBjYXNlIE5vaXNlVm9pZCBpcw0KLSAgICBlbmFibGVkLCB0aGUgc2FtZSBoaWdoLXBhc3MgZmlsdGVyIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgc2Vjb25kIG1pY3JvcGhvbmUNCi0gICAgY2hhbm5lbC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhQRl9IUEZfQ09STkVSRlJFUV9NSU4gKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhQRl9IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIUEZfSFBGX0NPUk5FUkZSRVFfTUFYICgxNTAwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgSFBGX0Nvcm5lckZyZXE7ICAgICAgICAgIC8vLzwgSGlnaCBQYXNzIEZpbHRlciBDb3JuZXIgRnJlcXVlbmN5IGluIEh6DQotDQotfSBMVkhQRl9Db250cm9sUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWTVVURV9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZNVVRFX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVk1VVEVfU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZNVVRFX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgVGhpcyBwYXJhbSBjYW4gbXV0ZSB1bm11dGUgdGhlIFJ4L1R4IGVuZ2luZSBvdXRwdXQuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE11dGU7ICAgICAgICAgIC8vLzwgVGhpcyBwYXJhbSBjYW4gbXV0ZSB1bm11dGUgdGhlIFJ4L1R4IGVuZ2luZSBvdXRwdXQNCi0NCi19IExWTVVURV9Db250cm9sUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWVkVfUnhfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWVkVfUnhfUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWVkVfUnhfU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZWRV9SeF9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIFRoaXMgZW51bWVyYXRlZCB0eXBlIGlzIHVzZWQgdG8gc2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgUnggcGF0aC4gVGhlDQotICAgIHByb2Nlc3NpbmcgY2FuIGJlIHNlcGFyYXRlbHkgc2V0IHRvIGVuYWJsZSBhbGwgcHJvY2Vzc2luZyBtb2R1bGVzIChpLmUuLCBPTiksDQotICAgIHRvIGRpc2FibGUgYWxsIHByb2Nlc3NpbmcgbW9kdWxlcyAoaS5lLiwgT0ZGKSBvciB0byBieXBhc3MgYWxsIHByb2Nlc3NpbmcNCi0gICAgbW9kdWxlcyAoaS5lLiwgQllQQVNTKS4gV2hlbiBieXBhc3NlZCwgYWxsIHByb2Nlc3NpbmcgbW9kdWxlcyBrZWVwIG9uIHJ1bm5pbmcsDQotICAgIGJ1dCB0aGVpciBvdXRwdXQgaXMgbm90IHVzZWQuDQotICAgICovDQotICAgIExWVkVfUnhfTW9kZV9lbiBPcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFRoaXMgcGFyYW0gY29udHJvbHMgdGhlIG9uL29mZiBvZiBSWCB2b2ljZSBlbmdpbmUuDQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtIGNhbiBtdXRlIHVubXV0ZSB0aGUgUngvVHggZW5naW5lIG91dHB1dC4NCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gTXV0ZTsgICAgICAgICAgLy8vPCBUaGlzIHBhcmFtIGNhbiBtdXRlIHVubXV0ZSB0aGUgUngvVHggZW5naW5lIG91dHB1dA0KLQ0KLSAgICAvKioNCi0gICAgVHVybnMgb24vb2ZmIFZPTF9HYWluLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBWT0xfT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBUdXJucyBvbi9vZmYgVk9MX0dhaW4NCi0NCi0gICAgLyoqDQotICAgIFRoZSB2b2x1bWUgY29udHJvbCBnYWluIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgb3ZlcmFsbCB2b2x1bWUgbGV2ZWwgb2YgdGhlDQotICAgIHNpZ25hbC4gVGhlIGdhaW4gaXMgc2V0IGluIGRCIHdpdGggc3RlcHMgb2YgMWRCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNS4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfUlhfVk9MX0dBSU5fTUlOICgtOTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfUlhfVk9MX0dBSU5fREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9SWF9WT0xfR0FJTl9NQVggKDI0KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBWT0xfR2FpbjsgICAgICAgICAgLy8vPCBBcHBseSBHYWluIHRvIElucHV0IHNpZ25hbA0KLQ0KLSAgICAvKioNCi0gICAgRmFyIEVuZCBOb2lzZSBTdXBwcmVzc2lvbiBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUuDQotICAgICovDQotICAgIExWRkVOU19Db250cm9sUGFyYW1zX3N0IEZFTlNfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBGYXIgRW5kIE5vaXNlIFN1cHByZXNzaW9uIENvbnRyb2wgUGFyYW1ldGVyIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgVHVybnMgb24vb2ZmIE5MUFAuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE5MUFBfT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBUdXJucyBvbi9vZmYgTkxQUA0KLQ0KLSAgICAvKioNCi0gICAgTkxQUCBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUuDQotICAgICovDQotICAgIExWTkxQUF9Db250cm9sUGFyYW1zX3N0IE5MUFBfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBOTFBQIENvbnRyb2wgUGFyYW1ldGVyIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgVm9pY2UgQ2xhcml0eSBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUuDQotICAgICovDQotICAgIExWVkNfQ29udHJvbFBhcmFtc19zdCBWQ19Db250cm9sUGFyYW1zOyAgICAgICAgICAvLy88IFZvaWNlIENsYXJpdHkgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlDQotDQotICAgIC8qKg0KLSAgICBFcXVhbGl6ZXIgT3BlcmF0aW5nIG1vZGUuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEVRX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgRXF1YWxpemVyIE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBFcXVhbGl6ZXIgQ29udHJvbCBQYXJhbWV0ZXJzIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZFUV9Db250cm9sUGFyYW1zX3N0IEVRX0NvbnRyb2xQYXJhbXM7ICAgICAgICAgIC8vLzwgRXF1YWxpemVyIENvbnRyb2wgUGFyYW1ldGVycyBTdHJ1Y3R1cmUNCi0NCi0gICAgLyoqDQotICAgIERSQyBDb250cm9sIFBhcmFtZXRlciBTdHJjdXR1cmUuDQotICAgICovDQotICAgIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QgRFJDX0NvbnRyb2xQYXJhbXM7ICAgICAgICAgIC8vLzwgRFJDIENvbnRyb2wgUGFyYW1ldGVyIFN0cmN1dHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgVHVybnMgb24vb2ZmIEhpZ2ggUGFzcyBmaWx0ZXIuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEhQRl9PcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFR1cm5zIG9uL29mZiBIaWdoIFBhc3MgZmlsdGVyDQotDQotICAgIC8qKg0KLSAgICBTZXRzIHRoZSAzZEIgY29ybmVyIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaC1wYXNzIGZpbHRlci4gSW4gY2FzZSBOb2lzZVZvaWQgaXMNCi0gICAgZW5hYmxlZCwgdGhlIHNhbWUgaGlnaC1wYXNzIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHNlY29uZCBtaWNyb3Bob25lDQotICAgIGNoYW5uZWwuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9NSU4gKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX0hQRl9DT1JORVJGUkVRX0RFRkFVTFQgKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX0hQRl9DT1JORVJGUkVRX01BWCAoMTUwMCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IEhQRl9Db3JuZXJGcmVxOyAgICAgICAgICAvLy88IEhpZ2ggUGFzcyBGaWx0ZXIgQ29ybmVyIEZyZXF1ZW5jeSBpbiBIeg0KLQ0KLSAgICAvKioNCi0gICAgV2hpc3BlciBNb2RlIENvbnRyb2wgUGFyYW1ldGVyIFN0cmN1dHVyZS4NCi0gICAgKi8NCi0gICAgTFZXTV9Db250cm9sUGFyYW1zX3N0IFdNX0NvbnRyb2xQYXJhbXM7ICAgICAgICAgIC8vLzwgV2hpc3BlciBNb2RlIENvbnRyb2wgUGFyYW1ldGVyIFN0cmN1dHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgTm9pc2UgR2F0ZSBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUuDQotICAgICovDQotICAgIExWTkdfQ29udHJvbFBhcmFtc19zdCBOR19Db250cm9sUGFyYW1zOyAgICAgICAgICAvLy88IE5vaXNlIEdhdGUgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlDQotDQotfSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgY29udHJvbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG92ZXJhbGwgbW9kdWxlIGJlaGF2aW9yLiBUaGVzZSBwYXJhbWV0ZXJzIG1heQ0KLSogYmUgY2hhbmdlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZyB1c2luZyB0aGUgTFZOVl9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZOVl9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZOVl9TZXRDb250cm9sUGFyYW1ldGVycw0KLSogQHNlZSBMVk5WX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBPcGVyYXRpbmcgTW9kZQ0KLQ0KLSAgICAvKioNCi0gICAgVGhlIG1vZGUgd29yZCB0byBlbmFibGUvZGlzYWJsZSBpbnRlcm5hbCBhbGdvcml0aG0gYmxvY2tzIG9mIExWTlYuDQotICAgICovDQotICAgIExWTlZfTW9kZVdvcmRfYm0gTW9kZTsgICAgICAgICAgLy8vPCBNb2RlIHdvcmQNCi0NCi0gICAgLyoqDQotICAgIFRoZSBtb2RlMiB3b3JkIHRvIGFsbG93IHN3aXRjaGluZyBvciBjb21iaW5pbmcgZGlmZmVyZW50IGJsb2NrcyBpbnNpZGUgTFZOVi4NCi0gICAgKi8NCi0gICAgTFZOVl9Nb2RlMldvcmRfYm0gTW9kZTI7ICAgICAgICAgIC8vLzwgTW9kZTIgd29yZA0KLQ0KLSAgICAvKioNCi0gICAgVGhlIHR1bmluZyBtb2RlIHdvcmQgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJuYWwgYWxnb3JpdGhtIHR1bmluZyBjYXBhYmlsaXRpZXMNCi0gICAgaW4gdGhlIGRpZmZlcmVudCBibG9ja3Mgb2YgTFZOVi4gT25seSBvbmUgYml0IGlzIGFsbG93ZWQgdG8gYmUgZW5hYmxlZCBhdCBhDQotICAgIHRpbWUuDQotICAgICovDQotICAgIExWTlZfVHVuaW5nTW9kZVdvcmRfYm0gVHVuaW5nX21vZGU7ICAgICAgICAgIC8vLzwgVHVuaW5nIG1vZGUgd29yZA0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBhcHBsaWVkIGF0IHRoZSBwcmltYXJ5IGNoYW5uZWwgaW4gdGhlIFR4IGlucHV0LiBVc2VkIHRvIHNjYWxlIHRoZQ0KLSAgICBtaWNyb3Bob25lIHNpZ25hbCBpbiBvcmRlciB0byBnaXZlIHRoZSBOTE1TMF9MQiBhbmQgTkxNUzBfSEIgZmlsdGVycyBoZWFkcm9vbQ0KLSAgICBmb3IgY29ycmVjdCBvcGVyYXRpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjIuMTM8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9JTlBVVF9HQUlOX01JQzBfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0lOUFVUX0dBSU5fTUlDMF9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0lOUFVUX0dBSU5fTUlDMF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBJbnB1dF9HYWluX01pYzA7ICAgICAgICAgIC8vLzwgVGhlIHByaW1hcnkgaW5wdXQgZ2Fpbi4NCi0NCi0gICAgLyoqDQotICAgIEdhaW4gYXBwbGllZCBhdCB0aGUgc2Vjb25kYXJ5IGNoYW5uZWwgaW4gdGhlIFR4IGlucHV0LiBVc2VkIHRvIHNjYWxlIHRoZQ0KLSAgICBtaWNyb3Bob25lIHNpZ25hbCBpbiBvcmRlciB0byBnaXZlIHRoZSBOTE1TMV9MQiBhbmQgTkxNUzFfSEIgZmlsdGVycyBoZWFkcm9vbQ0KLSAgICBmb3IgY29ycmVjdCBvcGVyYXRpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjIuMTM8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9JTlBVVF9HQUlOX01JQzFfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0lOUFVUX0dBSU5fTUlDMV9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0lOUFVUX0dBSU5fTUlDMV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBJbnB1dF9HYWluX01pYzE7ICAgICAgICAgIC8vLzwgVGhlIHNlY29uZGFyeSBpbnB1dCBnYWluLg0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBhcHBsaWVkIGF0IHRoZSBUeCBvdXRwdXQgb2YgTFZOVi4gQ29tcGVuc2F0ZXMgdGhlIGFwcGxpZWQgSW5wdXRfR2Fpbl9NaWMwDQotICAgIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBvdmVyYWxsIFR4IGdhaW4uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjQuMTE8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9PVVRQVVRfR0FJTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfT1VUUFVUX0dBSU5fREVGQVVMVCAoMjA0OCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9PVVRQVVRfR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBPdXRwdXRfR2FpbjsgICAgICAgICAgLy8vPCBUaGUgb3V0cHV0IGdhaW4uDQotDQotICAgIC8qKg0KLSAgICBMZW5ndGggb2YgdGhlIGxvdy1iYW5kICgwLTRrSHopIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlciBmb3IgdGhlDQotICAgIHByaW1hcnkgY2hhbm5lbC4gVGhlIExlbmd0aCBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdCBtb3N0IG9mIHRoZSBlbmVyZ3kgb2YNCi0gICAgdGhlIGltcHVsc2UgcmVzcG9uc2UgaXMgY292ZXJlZCBieSB0aGUgZmlsdGVyLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBhIG11bHRpcGxlDQotICAgIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9MQl9UQVBTX01JTiAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfVEFQU19ERUZBVUxUICgzMik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9MQl9UQVBTX01BWCAoNjQpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBOTE1TMF9MQl90YXBzOyAgICAgICAgICAvLy88IE51bWJlciBvZiBOTE1TMCBsb3ctYmFuZCB0YXBzLg0KLQ0KLSAgICAvKioNCi0gICAgU3RlcCBzaXplIGZvciB0aGUgdXBkYXRlIG9mIHRoZSBsb3ctYmFuZCBhZGFwdGl2ZSBmaWx0ZXIgY29lZmZpY2llbnRzIGZvciB0aGUNCi0gICAgcHJpbWFyeSBjaGFubmVsLiBJdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0xCX1RXT0FMUEhBX0RFRkFVTFQgKDgxOTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzBfTEJfdHdvYWxwaGE7ICAgICAgICAgIC8vLzwgTkxNUzAgbG93LWJhbmQgc3RlcCBzaXplDQotDQotICAgIC8qKg0KLSAgICBBZGFwdGl2ZSBzdGVwLXNpemUgY29udHJvbCBmb3IgdGhlIGxvdy1iYW5kIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlcg0KLSAgICBmb3IgdGhlIHByaW1hcnkgY2hhbm5lbC4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzbG93IGRvd24gdGhlIHVwZGF0ZSBzcGVlZA0KLSAgICBvZiB0aGUgYWRhcHRpdmUgZmlsdGVyIGR1cmluZyBkb3VibGUgdGFsayBzaXR1YXRpb25zLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9MQl9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9MQl9FUkxfREVGQVVMVCAoMTAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9MQl9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzBfTEJfZXJsOyAgICAgICAgICAvLy88IE5MTVMwIGxvdy1iYW5kIGVybA0KLQ0KLSAgICAvKioNCi0gICAgTGVuZ3RoIG9mIHRoZSBoaWdoLWJhbmQgKDQtOGtIeikgYWRhcHRpdmUgZWNobyBjYW5jZWxsYXRpb24gZmlsdGVyIGZvciB0aGUNCi0gICAgcHJpbWFyeSBjaGFubmVsLiBUaGUgTGVuZ3RoIHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0IG1vc3Qgb2YgdGhlIGVuZXJneSBvZg0KLSAgICB0aGUgaW1wdWxzZSByZXNwb25zZSBpcyBjb3ZlcmVkIGJ5IHRoZSBmaWx0ZXIuIFRoZSBsZW5ndGggc2hvdWxkIGJlIGEgbXVsdGlwbGUNCi0gICAgb2YgOC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0hCX1RBUFNfTUlOICgxNik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9UQVBTX0RFRkFVTFQgKDI0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0hCX1RBUFNfTUFYICg2NCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IE5MTVMwX0hCX3RhcHM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIE5MTVMwIGhpZ2gtYmFuZCB0YXBzLg0KLQ0KLSAgICAvKioNCi0gICAgU3RlcCBzaXplIGZvciB0aGUgdXBkYXRlIG9mIHRoZSBoaWdoLWJhbmQgYWRhcHRpdmUgZmlsdGVyIGNvZWZmaWNpZW50cyBmb3IgdGhlDQotICAgIHByaW1hcnkgY2hhbm5lbC4gSXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0hCX1RXT0FMUEhBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9UV09BTFBIQV9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0hCX1RXT0FMUEhBX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMwX0hCX3R3b2FscGhhOyAgICAgICAgICAvLy88IE5MTVMwIGhpZ2gtYmFuZCBzdGVwIHNpemUNCi0NCi0gICAgLyoqDQotICAgIEFkYXB0aXZlIHN0ZXAtc2l6ZSBjb250cm9sIGZvciB0aGUgaGlnaC1iYW5kIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlcg0KLSAgICBmb3IgdGhlIHByaW1hcnkgY2hhbm5lbC4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzbG93IGRvd24gdGhlIHVwZGF0ZSBzcGVlZA0KLSAgICBvZiB0aGUgYWRhcHRpdmUgZmlsdGVyIGR1cmluZyBkb3VibGUgdGFsayBzaXR1YXRpb25zLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9FUkxfREVGQVVMVCAoMTAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzBfSEJfZXJsOyAgICAgICAgICAvLy88IE5MTVMwIGhpZ2gtYmFuZCBlcmwNCi0NCi0gICAgLyoqDQotICAgIEluZGljYXRlcyB3aGV0aGVyIGEgcHJlc2V0IG9mIGFkYXB0aXZlIGZpbHRlciBjb2VmZmljaWVudHMgc2hvdWxkIGJlIGRvbmUuPGJyPg0KLSAgICAwID0gTm8gcHJlc2V0IChjb2VmZmljaWVudHMgYXMgdGhleSBhcmUpLjxicj4NCi0gICAgMSA9IFByZXNldCB3aXRoIGludGVybmFsbHkgY2FsY3VsYXRlZCBjb2VmZmljaWVudHMuPGJyPg0KLSAgICAyID0gUHJlc2V0IHdpdGggemVybyBjb2VmZmljaWVudHMuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9QUkVTRVRfQ09FRlNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX1BSRVNFVF9DT0VGU19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX1BSRVNFVF9DT0VGU19NQVggKDIpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMwX3ByZXNldF9jb2VmczsgICAgICAgICAgLy8vPCBOTE1TMCBwcmVzZXQNCi0NCi0gICAgLyoqDQotICAgIE9mZnNldCBhZGRlZCB0byB0aGUgbm9ybWFsaXphdGlvbiBvZiB0aGUgYWRhcHRhdGlvbiBvZiB0aGUgZmlsdGVyLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfT0ZGU0VUX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9PRkZTRVRfREVGQVVMVCAoNzc2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX09GRlNFVF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TMF9vZmZzZXQ7ICAgICAgICAgIC8vLzwgTkxNUzAgb2Zmc2V0DQotDQotICAgIC8qKg0KLSAgICBMZW5ndGggb2YgdGhlIGxvdy1iYW5kICgwLTRrSHopIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlciBmb3IgdGhlDQotICAgIHNlY29uZGFyeSBjaGFubmVsLiBUaGUgTGVuZ3RoIHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0IG1vc3Qgb2YgdGhlIGVuZXJneSBvZg0KLSAgICB0aGUgaW1wdWxzZSByZXNwb25zZSBpcyBjb3ZlcmVkIGJ5IHRoZSBmaWx0ZXIuIFRoZSBsZW5ndGggc2hvdWxkIGJlIGEgbXVsdGlwbGUNCi0gICAgb2YgOC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0xCX1RBUFNfTUlOICgxNik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9UQVBTX0RFRkFVTFQgKDMyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0xCX1RBUFNfTUFYICgzMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IE5MTVMxX0xCX3RhcHM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIE5MTVMxIGxvdy1iYW5kIHRhcHMuDQotDQotICAgIC8qKg0KLSAgICBTdGVwIHNpemUgZm9yIHRoZSB1cGRhdGUgb2YgdGhlIGxvdy1iYW5kIGFkYXB0aXZlIGZpbHRlciBjb2VmZmljaWVudHMgZm9yIHRoZQ0KLSAgICBzZWNvbmRhcnkgY2hhbm5lbC4gSXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0xCX1RXT0FMUEhBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0xCX1RXT0FMUEhBX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMxX0xCX3R3b2FscGhhOyAgICAgICAgICAvLy88IE5MTVMxIGxvdy1iYW5kIHN0ZXAgc2l6ZQ0KLQ0KLSAgICAvKioNCi0gICAgQWRhcHRpdmUgc3RlcC1zaXplIGNvbnRyb2wgZm9yIHRoZSBsb3ctYmFuZCBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXINCi0gICAgZm9yIHRoZSBzZWNvbmRhcnkgY2hhbm5lbC4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzbG93IGRvd24gdGhlIHVwZGF0ZSBzcGVlZA0KLSAgICBvZiB0aGUgYWRhcHRpdmUgZmlsdGVyIGR1cmluZyBkb3VibGUgdGFsayBzaXR1YXRpb25zLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9FUkxfREVGQVVMVCAoMTAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzFfTEJfZXJsOyAgICAgICAgICAvLy88IE5MTVMxIGxvdy1iYW5kIGVybA0KLQ0KLSAgICAvKioNCi0gICAgTGVuZ3RoIG9mIHRoZSBoaWdoLWJhbmQgKDQtOGtIeikgYWRhcHRpdmUgZWNobyBjYW5jZWxsYXRpb24gZmlsdGVyIGZvciB0aGUNCi0gICAgc2Vjb25kYXJ5IGNoYW5uZWwuIFRoZSBMZW5ndGggc2hvdWxkIGJlIGNob3NlbiBzdWNoIHRoYXQgbW9zdCBvZiB0aGUgZW5lcmd5IG9mDQotICAgIHRoZSBpbXB1bHNlIHJlc3BvbnNlIGlzIGNvdmVyZWQgYnkgdGhlIGZpbHRlci4gVGhlIGxlbmd0aCBzaG91bGQgYmUgYSBtdWx0aXBsZQ0KLSAgICBvZiA4Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfVEFQU19NSU4gKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0hCX1RBUFNfREVGQVVMVCAoMjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfVEFQU19NQVggKDMyKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgTkxNUzFfSEJfdGFwczsgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgTkxNUzEgaGlnaC1iYW5kIHRhcHMuDQotDQotICAgIC8qKg0KLSAgICBTdGVwIHNpemUgZm9yIHRoZSB1cGRhdGUgb2YgdGhlIGhpZ2gtYmFuZCBhZGFwdGl2ZSBmaWx0ZXIgY29lZmZpY2llbnRzIGZvciB0aGUNCi0gICAgc2Vjb25kYXJ5IGNoYW5uZWwuIEl0IGlzIHJlY29tbWVuZGVkIG5vdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfVFdPQUxQSEFfREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TMV9IQl90d29hbHBoYTsgICAgICAgICAgLy8vPCBOTE1TMSBoaWdoLWJhbmQgc3RlcCBzaXplDQotDQotICAgIC8qKg0KLSAgICBBZGFwdGl2ZSBzdGVwLXNpemUgY29udHJvbCBmb3IgdGhlIGhpZ2gtYmFuZCBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXINCi0gICAgZm9yIHRoZSBzZWNvbmRhcnkgY2hhbm5lbC4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzbG93IGRvd24gdGhlIHVwZGF0ZSBzcGVlZA0KLSAgICBvZiB0aGUgYWRhcHRpdmUgZmlsdGVyIGR1cmluZyBkb3VibGUgdGFsayBzaXR1YXRpb25zLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9IQl9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9IQl9FUkxfREVGQVVMVCAoMTAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9IQl9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzFfSEJfZXJsOyAgICAgICAgICAvLy88IE5MTVMxIGhpZ2gtYmFuZCBlcmwNCi0NCi0gICAgLyoqDQotICAgIEluZGljYXRlcyB3aGV0aGVyIGEgcHJlc2V0IG9mIGFkYXB0aXZlIGZpbHRlciBjb2VmZmljaWVudHMgc2hvdWxkIGJlIGRvbmUuPGJyPg0KLSAgICAwID0gTm8gcHJlc2V0IChjb2VmZmljaWVudHMgYXMgdGhleSBhcmUpLjxicj4NCi0gICAgMSA9IFByZXNldCB3aXRoIGludGVybmFsbHkgY2FsY3VsYXRlZCBjb2VmZmljaWVudHMuPGJyPg0KLSAgICAyID0gUHJlc2V0IHdpdGggemVybyBjb2VmZmljaWVudHMuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX1BSRVNFVF9DT0VGU19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX1BSRVNFVF9DT0VGU19NQVggKDIpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMxX3ByZXNldF9jb2VmczsgICAgICAgICAgLy8vPCBOTE1TMSBwcmVzZXQNCi0NCi0gICAgLyoqDQotICAgIE9mZnNldCBhZGRlZCB0byB0aGUgbm9ybWFsaXphdGlvbiBvZiB0aGUgYWRhcHRhdGlvbiBvZiB0aGUgZmlsdGVyLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfT0ZGU0VUX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9PRkZTRVRfREVGQVVMVCAoNzc2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX09GRlNFVF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TMV9vZmZzZXQ7ICAgICAgICAgIC8vLzwgTkxNUzEgb2Zmc2V0DQotDQotICAgIC8qKg0KLSAgICBBIHBhcmFtZXRlciByZXByZXNlbnRpbmcgYSB0aHJlc2hvbGQgZm9yIHRoZSBkZXRlY3Rpb24gb2YgaW5zdHJ1bWVudGFsIG5vaXNlLg0KLSAgICBUaGUgaGlnaGVyIHRoZSB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIsIHRoZSBsb3dlciBub2lzZSBzdXBwcmVzc2lvbg0KLSAgICBwZXJmb3JtYW5jZS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX0RFRkFVTFQgKDE1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9DQUxfTUlDUE9XRkxPT1JNSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQ0FMX21pY1Bvd0Zsb29yTWluOyAgICAgICAgICAvLy88IEluc3RydW1lbnRhbCBub2lzZSB0aHJlc2hvbGQNCi0NCi0gICAgLyoqDQotICAgIFRocmVzaG9sZCBmb3IgV2luZGd1c2ggZGV0ZWN0b3IuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbGVzcyBzZW5zaXRpdmUgdGhlDQotICAgIGRldGVjdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ni45PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfV0dUSFJFU0hPTERfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1dHVEhSRVNIT0xEX0RFRkFVTFQgKDMyNzY3KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1dHVEhSRVNIT0xEX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFdnVGhyZXNob2xkOyAgICAgICAgICAvLy88IFdpbmRndXNoIHRocmVzaG9sZA0KLQ0KLSAgICAvKioNCi0gICAgVGhyZXNob2xkIGZvciBzcGVlY2ggZGV0ZWN0b3IgYmFzZWQgb24gcG93ZXIgY29tcGFyaXNvbiBiZXR3ZWVuIHByaW1hcnkgYW5kDQotICAgIHNlY29uZGFyeSBtaWNyb3Bob25lcy4gVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBsZXNzIHNlbnNpdGl2ZSB0aGUgZGV0ZWN0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4zLjEyPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTVBUSFJFU0hPTERfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX01QVEhSRVNIT0xEX0RFRkFVTFQgKDY1NTQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTVBUSFJFU0hPTERfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTXBUaHJlc2hvbGQ7ICAgICAgICAgIC8vLzwgTWljUG93IHRocmVzaG9sZA0KLQ0KLSAgICAvKioNCi0gICAgU2V0IG9mIGZpcnN0IDggY29lZmZpY2llbnRzIGZvciBhZGFwdGl2ZSBmaWx0ZXIgRlNCMC4gVGhlc2UgdmFsdWVzIHNob3VsZCBiZQ0KLSAgICBkZXRlcm1pbmVkIGZvciB0aGUgZ2l2ZW4gbWljcm9waG9uZSBjb25maWd1cmF0aW9uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTUlOICgtMzI3NjgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX0lOSVRfVEFCTEUwX0RFRkFVTFQgezMyNzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwfTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBGU0JfaW5pdF90YWJsZTBbTFZOVl9GU0JfSU5JVF9UQUJMRTBfTEVOR1RIXTsgICAgICAgICAgLy8vPCBGU0IwIGluaXRpYWwgY29lZmZpY2llbnRzLg0KLQ0KLSAgICAvKioNCi0gICAgU2V0IG9mIGZpcnN0IDggY29lZmZpY2llbnRzIGZvciBhZGFwdGl2ZSBmaWx0ZXIgRlNCMS4gVGhlc2UgdmFsdWVzIHNob3VsZCBiZQ0KLSAgICBkZXRlcm1pbmVkIGZvciB0aGUgZ2l2ZW4gbWljcm9waG9uZSBjb25maWd1cmF0aW9uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfSU5JVF9UQUJMRTFfTUlOICgtMzI3NjgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX0lOSVRfVEFCTEUxX0RFRkFVTFQgezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX0lOSVRfVEFCTEUxX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEZTQl9pbml0X3RhYmxlMVtMVk5WX0ZTQl9JTklUX1RBQkxFMV9MRU5HVEhdOyAgICAgICAgICAvLy88IEZTQjEgaW5pdGlhbCBjb2VmZmljaWVudHMuDQotDQotICAgIC8qKg0KLSAgICBMZW5ndGggb2YgdGhlIEZTQiB0byBtb2RlbCB0aGUgYWNvdXN0aWNhbCBwYXRocyBiZXR3ZWVuIHRoZSBzcGVlY2ggc291cmNlIGFuZA0KLSAgICB0d28gbWljcm9waG9uZXMuIFRoZSBsZW5ndGggbXVzdCBiZSBlcXVhbCB0byAxNiBmb3IgdGhlIGhhbmRzZXQgYXBwbGljYXRpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfVEFQU19NSU4gKDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX1RBUFNfREVGQVVMVCAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX1RBUFNfTUFYICgxNik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IEZTQl90YXBzOyAgICAgICAgICAvLy88IE51bWJlciBvZiBGU0IgdGFwcw0KLQ0KLSAgICAvKioNCi0gICAgU3RlcC1zaXplIHRvIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBhZGFwdGl2ZSBmaWx0ZXJzLiBBIGhpZ2hlciB2YWx1ZQ0KLSAgICBsZWFkcyB0byBhIGZhc3RlciBzcGVlZCBvZiB0aGUgYWRhcHRhdGlvbiwgd2hpbGUgYSBsb3dlciB2YWx1ZSBwcm92aWRlcyBtb3JlDQotICAgIHN0YWJpbGl0eSwgYnV0IGEgc2xvdyBhZGFwdGlvbiBzcGVlZC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9UV09BTFBIQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX1RXT0FMUEhBX0RFRkFVTFQgKDY1NSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfVFdPQUxQSEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRlNCX3R3b2FscGhhOyAgICAgICAgICAvLy88IEZTQiBzdGVwIHNpemUgY29udHJvbA0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBhcHBsaWVkIG9uIHRoZSBzYW1wbGVzIG9mIHRoZSBzZWNvbmQgRlNCIHJlZmVyZW5jZSBzaWduYWwgKGZzYnJlZlsxXSkuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjUuMTA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfUkVGX0dBSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9SRUZfR0FJTl9ERUZBVUxUICgxMDI0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9SRUZfR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBGU0JfcmVmX2dhaW47ICAgICAgICAgIC8vLzwgRlNCIHJlZiBnYWluDQotDQotICAgIC8qKg0KLSAgICBMZW5ndGggb2YgdGhlIEdTQyB0byBtb2RlbCB0aGUgdHJhbnNmZXIgZnVuY3Rpb24gYmV0d2VlbiB0aGUgbm9pc2UgcmVmZXJlbmNlDQotICAgIGFuZCB0aGUgcmVzaWR1YWwgc2lnbmFsLCBpbiBvcmRlciB0byByZWR1Y2UgdGhlIG5vaXNlIGFuZCBpbnRlcmZlcmluZyBzb3VuZHMNCi0gICAgZnJvbSB0aGUgZGVzaXJlZCBzaWduYWwuIFRoaXMgbnVtYmVyIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9HU0NfVEFQU19NSU4gKDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX1RBUFNfREVGQVVMVCAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX1RBUFNfTUFYICg0OCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IEdTQ190YXBzOyAgICAgICAgICAvLy88IE51bWJlciBvZiBHU0MgdGFwcw0KLQ0KLSAgICAvKioNCi0gICAgU3RlcC1zaXplIHRvIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBhZGFwdGl2ZSBmaWx0ZXIuIEEgaGlnaGVyIHZhbHVlDQotICAgIGxlYWRzIHRvIGEgZmFzdGVyIHNwZWVkIG9mIHRoZSBhZGFwdGF0aW9uLCB3aGlsZSBhIGxvd2VyIHZhbHVlIHByb3ZpZGVzIG1vcmUNCi0gICAgc3RhYmlsaXR5LCBidXQgYSBzbG93IGFkYXB0aW9uIHNwZWVkLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX1RXT0FMUEhBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9HU0NfVFdPQUxQSEFfREVGQVVMVCAoMTYzOCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9HU0NfVFdPQUxQSEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgR1NDX3R3b2FscGhhOyAgICAgICAgICAvLy88IEdTQyBzdGVwIHNpemUgY29udHJvbA0KLQ0KLSAgICAvKioNCi0gICAgQWRhcHRpdmUgc3RlcC1zaXplIGNvbnRyb2wgZm9yIEdTQyB0byBhdm9pZCBkaXZlcmdlbmNlIG9mIHRoZSBhZGFwdGl2ZSBmaWx0ZXINCi0gICAgZHVyaW5nIGRlc2lyZWQgc3BlZWNoLiBJbiBnZW5lcmFsLCBHU0NfZXJsIGlzIGxvd2VyIHRoYW4gTkxNU19lcmwgYW5kIHJhbmdlcw0KLSAgICBiZXR3ZWVuIDAgYW5kIDMwIGRCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9HU0NfRVJMX01JTiAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX0VSTF9ERUZBVUxUICgyNTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX0VSTF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBHU0NfZXJsOyAgICAgICAgICAvLy88IEdTQyBlcmwNCi0NCi0gICAgLyoqDQotICAgIE9mZnNldCBhZGRlZCB0byB0aGUgY29tcHV0YXRpb24gb2YgdGhlIHBvd2VyIG9mIHRoZSBub2lzZSByZWZlcmVuY2UgdG8gYXZvaWQNCi0gICAgdGhhdCB0aGUgcG93ZXIgY29udmVyZ2VzIHRvd2FyZHMgemVybyB3aGVuIHRoZSBpbnB1dCBpcyBsb3cuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9HU0NfT0ZGU0VUX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9HU0NfT0ZGU0VUX0RFRkFVTFQgKDE2MzgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX09GRlNFVF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBHU0Nfb2Zmc2V0OyAgICAgICAgICAvLy88IEdTQyBvZmZzZXQNCi0NCi0gICAgLyoqDQotICAgIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIGZhcmVuZC1vbmx5Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4yLjEzPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPR0FNTUFISV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPR0FNTUFISV9ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUhJX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfRWNob0dhbW1hSGk7ICAgICAgICAgIC8vLzwgSGlnaCBlY2hvIHN1YnRyYWN0aW9uIGZhY3Rvcg0KLQ0KLSAgICAvKioNCi0gICAgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgYXBwbGllZCBkdXJpbmcgZG91YmxlIHRhbGsgYW5kIG5lYXJlbmQtb25seS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT0dBTU1BTE9fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT0dBTU1BTE9fREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUxPX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfRWNob0dhbW1hTG87ICAgICAgICAgIC8vLzwgTG93IGVjaG8gc3VidHJhY3Rpb24gZmFjdG9yDQotDQotICAgIC8qKg0KLSAgICBQYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGUgcmV2ZXJiZXJhdGlvbiB0aW1lIG9mIHRoZSBhY291c3RpY2FsIGVudmlyb25tZW50LA0KLSAgICB3aGljaCByZXByZXNlbnRzIHRoZSBkZWNheSBpbiBlbmVyZ3kgb3ZlciB0aW1lIG9mIHRoZSBlY2hvIHRhaWwgb2YgdGhlIGltcHVsc2UNCi0gICAgcmVzcG9uc2UuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9BTFBIQVJFVl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfREVGQVVMVCAoMTIwMDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19FY2hvQWxwaGFSZXY7ICAgICAgICAgIC8vLzwgRWNobyByZXZlcmJlcmF0aW9uIGZhY3Rvcg0KLQ0KLSAgICAvKioNCi0gICAgUGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgcG9ydGlvbiBvZiB0aGUgZWNobyB0YWlsIChlc3RpbWF0ZWQgYnkgdGhlIE5MTVMNCi0gICAgZmlsdGVyKSB0aGF0IGhhcyB0byBiZSBleHRyYXBvbGF0ZWQgaW4gdGltZS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9UQUlMUE9SVElPTl9ERUZBVUxUICg3MDAwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfRWNob1RhaWxQb3J0aW9uOyAgICAgICAgICAvLy88IEVjaG8gdGFpbCBwb3J0aW9uDQotDQotICAgIC8qKg0KLSAgICBOb24tbGluZWFyIGVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIGRvdWJsZSB0YWxrIGFuZCBuZWFyZW5kLW9ubHkuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjQuMTE8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05MQVRURU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTkxBVFRFTl9ERUZBVUxUICgyNTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OTEFUVEVOX01BWCAoMjA0OCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19ObEF0dGVuOyAgICAgICAgICAvLy88IE5vbi1saW5lYXIgZWNobyBzdWJ0cmFjdGlvbiBmYWN0b3INCi0NCi0gICAgLyoqDQotICAgIEdhaW4gZmFjdG9yIGZvciBzdGF0aW9uYXJ5IG5vaXNlIG92ZXJzdWJ0cmFjdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQU1NQVNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQU1NQVNfREVGQVVMVCAoMTE0NzApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUdBTU1BU19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX05vaXNlR2FtbWFTOyAgICAgICAgICAvLy88IFN0YXRpb25hcnkgbm9pc2Ugb3ZlcnN1YnRyYWN0aW9uIGZhY3Rvcg0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBmYWN0b3IgZm9yIG5vbi1zdGF0aW9uYXJ5IG5vaXNlIG92ZXJzdWJ0cmFjdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQU1NQU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQU1NQU5fREVGQVVMVCAoMTYzODQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUdBTU1BTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX05vaXNlR2FtbWFOOyAgICAgICAgICAvLy88IE5vbi1zdGF0aW9uYXJ5IG5vaXNlIG92ZXJzdWJ0cmFjdGlvbiBmYWN0b3INCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBzdGF0aW9uYXJ5IG5vaXNlIHN1cHByZXNzaW9uLjxicj4NCi0gICAgRE5OU19Ob2lzZUdhaW5NaW5TID0gXGYkMiozMjc2NyoxMF57TWF4Tm9pc2VSZWR1Y3Rpb25kQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+LTEuMTY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTlNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOU19ERUZBVUxUICgxMTE0MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTlNfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19Ob2lzZUdhaW5NaW5TOyAgICAgICAgICAvLy88IE1heGltdW0gc3RhdGlvbmFyeSBub2lzZSBzdXBwcmVzc2lvbi4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBub24tc3RhdGlvbmFyeSBub2lzZSBzdXBwcmVzc2lvbi48YnI+DQotICAgIEROTlNfTm9pc2VHYWluTWluTiA9IFxmJDIqMzI3NjcqMTBee01heE5vaXNlUmVkdWN0aW9uZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPi0xLjE2PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5OX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTk5fREVGQVVMVCAoNjU1NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTk5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19Ob2lzZUdhaW5NaW5OOyAgICAgICAgICAvLy88IE1heGltdW0gbm9uLXN0YXRpb25hcnkgbm9pc2Ugc3VwcHJlc3Npb24uDQotDQotICAgIC8qKg0KLSAgICBCaWFzIGNvbXBlbnNhdGlvbiBmYWN0b3IgZm9yIHN0YXRpb25hcnkgbm9pc2UgZXN0aW1hdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VCSUFTQ09NUF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX0RFRkFVTFQgKDk4MzApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfTm9pc2VCaWFzQ29tcDsgICAgICAgICAgLy8vPCBCaWFzIGNvbXBlbnNhdGlvbiBmYWN0b3IuDQotDQotICAgIC8qKg0KLSAgICBFY2hvIG92ZXJzdWJ0cmFjdGlvbiBmYWN0b3IgYXBwbGllZCB0byB0aGUgZXN0aW1hdGVkIG5vbi1zdGF0aW9uYXJ5IG5vaXNlDQotICAgIGZsb29yLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4zLjEyPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19HQUlORVRBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0dBSU5FVEFfREVGQVVMVCAoMjU2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfR0FJTkVUQV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX0dhaW5FdGE7ICAgICAgICAgIC8vLzwgRWNobyBvdmVyc3VidHJhY3Rpb24gZmFjdG9yLg0KLQ0KLSAgICAvKioNCi0gICAgRGV0ZWN0aW9uIHRocmVzaG9sZCBmb3IgbWljcm9waG9uZSBhY3Rpdml0eS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+My4xMjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfQUNUSFJFU0hPTERfREVGQVVMVCAoMTIyODgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19BQ1RIUkVTSE9MRF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX0FjVGhyZXNob2xkOyAgICAgICAgICAvLy88IEFjdGl2aXR5IHRocmVzaG9sZC4NCi0NCi0gICAgLyoqDQotICAgIERldGVjdGlvbiB0aHJlc2hvbGQgZm9yIGFjdGl2aXR5IHdpdGhpbiB0aGUgYmVhbSBvZiBGU0IuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjMuMTI8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX1dCVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX1dCVEhSRVNIT0xEX0RFRkFVTFQgKDkyMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX1diVGhyZXNob2xkOyAgICAgICAgICAvLy88IFdpdGhpbkJlYW0gdGhyZXNob2xkLg0KLQ0KLSAgICAvKioNCi0gICAgRGV0ZWN0aW9uIHRocmVzaG9sZCBmb3IgbG9zdCBiZWFtIHdoZXJlIHRoZSBuZWFyZW5kIHNwZWFrZXIgaXMgc3BlYWtpbmcgb3V0c2lkZQ0KLSAgICB0aGUgYmVhbSBvZiB0aGUgRlNCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0xPU1RCRUFNVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0xPU1RCRUFNVEhSRVNIT0xEX0RFRkFVTFQgKDMyMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0xPU1RCRUFNVEhSRVNIT0xEX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfTG9zdEJlYW1UaHJlc2hvbGQ7ICAgICAgICAgIC8vLzwgTG9zdCBiZWFtIHRocmVzaG9sZC4NCi0NCi0gICAgLyoqDQotICAgIFNtb290aGluZyBmYWN0b3IgYXBwbGllZCB0byBnZXQgYSBzbW9vdGhlZCB2YWx1ZSBvZiB0aGUgaW50ZXItY2hhbm5lbA0KLSAgICBjb3JyZWxhdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENEX0JFVEFfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDRF9CRVRBX0RFRkFVTFQgKDIzMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQ0RfQkVUQV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBQQ0RfYmV0YTsgICAgICAgICAgLy8vPCBJQ0Mgc21vb3RoaW5nIGZhY3Rvci4NCi0NCi0gICAgLyoqDQotICAgIERldGVjdGlvbiB0aHJlc2hvbGQgZm9yIGJyb2Fkc2lkZSB3aGVuIHRoZSBuZWFyZW5kIHNwZWFrZXIgaXMgbm90IGluIGVuZC1maXJlDQotICAgIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgbWljcm9waG9uZSBjb25maWd1cmF0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQ0RfVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQ0RfVEhSRVNIT0xEX0RFRkFVTFQgKDI2MjEzKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDRF9USFJFU0hPTERfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgUENEX1RocmVzaG9sZDsgICAgICAgICAgLy8vPCBCcm9hZHNpZGUgZGV0ZWN0aW9uIHRocmVzaG9sZC4NCi0NCi19IExWTlZfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVkhGX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVkhGX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVkhGX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWSEZfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBPcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IE9wZXJhdGluZyBNb2RlDQotDQotICAgIC8qKg0KLSAgICBUaGUgbW9kZSB3b3JkIHRvIGVuYWJsZS9kaXNhYmxlIGludGVybmFsIGFsZ29yaXRobSBibG9ja3Mgb2YgSGFuZHNGcmVlDQotICAgICovDQotICAgIExWSEZfTW9kZVdvcmRfYm0gTW9kZTsgICAgICAgICAgLy8vPCBNb2RlIFdvcmQNCi0NCi0gICAgLyoqDQotICAgIFRoZSB0dW5pbmcgbW9kZSBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIGludGVybmFsIGFsZ29yaXRobSB0dW5pbmcNCi0gICAgY2FwYWJpbGl0aWVzIGluIHRoZSBkaWZmZXJlbnQgYmxvY2tzIG9mIEhhbmRzRnJlZS4gT25seSBvbmUgYml0IGFsbG93ZWQgdG8gYmUNCi0gICAgZW5hYmxlZCBhdCBhIHRpbWUuDQotICAgICovDQotICAgIExWSEZfVHVuaW5nTW9kZVdvcmQgVHVuaW5nTW9kZTsgICAgICAgICAgLy8vPCBUdW5pbmcgTW9kZQ0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBhcHBsaWVkIGF0IHRoZSBUeCBpbnB1dCBvZiBMVkhGLiBVc2VkIHRvIHNjYWxlIHRoZSBtaWNyb3Bob25lIHNpZ25hbCBpbg0KLSAgICBvcmRlciB0byBnaXZlIHRoZSBOTE1TIGZpbHRlciBoZWFkcm9vbSBmb3IgY29ycmVjdCBvcGVyYXRpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjIuMTM8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9JTlBVVEdBSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0lOUFVUR0FJTl9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0lOUFVUR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBJbnB1dEdhaW47ICAgICAgICAgIC8vLzwgSW5wdXQgR2Fpbg0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBhcHBsaWVkIGF0IHRoZSBUeCBvdXRwdXQgb2YgTFZIRi4gQ29tcGVuc2F0ZXMgdGhlIGFwcGxpZWQgSW5wdXRHYWluIGluDQotICAgIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBvdmVyYWxsIFR4IGdhaW4uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjQuMTE8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9PVVRQVVRHQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9PVVRQVVRHQUlOX0RFRkFVTFQgKDIwNDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfT1VUUFVUR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBPdXRwdXRHYWluOyAgICAgICAgICAvLy88IE91dHB1dCBHYWluDQotDQotICAgIC8qKg0KLSAgICBMaW1pdCB0aGUgTkxNUyByZWZlcmVuY2Ugc2lnbmFsLiBWYWx1ZSBpbiBkQiBGdWxsIFNjYWxlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNS4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MSU1JVF9NSU4gKC0yNCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0xJTUlUX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MSU1JVF9NQVggKDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVNfbGltaXQ7ICAgICAgICAgIC8vLzwgTGltaXQgdGhlIE5MTVMgcmVmZXJlbmNlIHNpZ25hbC4NCi0NCi0gICAgLyoqDQotICAgIExlbmd0aCBvZiB0aGUgbG93LWJhbmQgKDAtNGtIeikgYWRhcHRpdmUgZWNobyBjYW5jZWxsYXRpb24gZmlsdGVyLiBUaGUgTGVuZ3RoDQotICAgIHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0IG1vc3Qgb2YgdGhlIGVuZXJneSBvZiB0aGUgaW1wdWxzZSByZXNwb25zZSBpcw0KLSAgICBjb3ZlcmVkIGJ5IHRoZSBmaWx0ZXIuIFRoZSBsZW5ndGggc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgOC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfTEJfVEFQU19NSU4gKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfTEJfVEFQU19ERUZBVUxUICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0xCX1RBUFNfTUFYICgyMDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBOTE1TX0xCX3RhcHM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIHRhcHMgZm9yIExCIE5MTVMuDQotDQotICAgIC8qKg0KLSAgICBTdGVwIHNpemUgZm9yIHRoZSB1cGRhdGUgb2YgdGhlIGxvdy1iYW5kICgwLTRrSHopIGFkYXB0aXZlIGZpbHRlciBjb2VmZmljaWVudHMuDQotICAgIEl0IGlzIHJlY29tbWVuZGVkIG5vdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MQl9UV09fQUxQSEFfREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TX0xCX3R3b19hbHBoYTsgICAgICAgICAgLy8vPCBTdGVwIFNpemUgb2YgTEIgTkxNUw0KLQ0KLSAgICAvKioNCi0gICAgQWRhcHRpdmUgc3RlcCBzaXplIGNvbnRyb2wgZm9yIHRoZSBsb3ctYmFuZCAoMC00a0h6KSBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbg0KLSAgICBmaWx0ZXIuIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2xvdyBkb3duIHRoZSB1cGRhdGUgc3BlZWQgb2YgdGhlIGFkYXB0aXZlDQotICAgIGZpbHRlciBkdXJpbmcgZG91YmxlIHRhbGsgc2l0dWF0aW9ucy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MQl9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0xCX0VSTF9ERUZBVUxUICgxMjgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MQl9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNU19MQl9lcmw7ICAgICAgICAgIC8vLzwgRVJMIG9mIExCIE5MTVMNCi0NCi0gICAgLyoqDQotICAgIExlbmd0aCBvZiB0aGUgaGlnaC1iYW5kICg0LThrSHopIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlci4gVGhlIExlbmd0aA0KLSAgICBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdCBtb3N0IG9mIHRoZSBlbmVyZ3kgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2UgaXMNCi0gICAgY292ZXJlZCBieSB0aGUgZmlsdGVyLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDguIEluIGNhc2Ugb2YNCi0gICAgbmFycm93YmFuZCBwcm9jZXNzaW5nLCB0aGlzIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19IQl9UQVBTX01JTiAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19IQl9UQVBTX0RFRkFVTFQgKDY0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfVEFQU19NQVggKDEzNik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IE5MTVNfSEJfdGFwczsgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgdGFwcyBmb3IgSEIgTkxNUy4NCi0NCi0gICAgLyoqDQotICAgIFN0ZXAgc2l6ZSBmb3IgdGhlIHVwZGF0ZSBvZiB0aGUgaGlnaC1iYW5kICg0LThrSHopIGFkYXB0aXZlIGZpbHRlcg0KLSAgICBjb2VmZmljaWVudHMuIEl0IGlzIHJlY29tbWVuZGVkIG5vdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUuIEluIGNhc2Ugb2YNCi0gICAgbmFycm93YmFuZCBwcm9jZXNzaW5nLCB0aGlzIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19IQl9UV09fQUxQSEFfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfVFdPX0FMUEhBX0RFRkFVTFQgKDgxOTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19IQl9UV09fQUxQSEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNU19IQl90d29fYWxwaGE7ICAgICAgICAgIC8vLzwgU3RlcCBTaXplIG9mIEhCIE5MTVMNCi0NCi0gICAgLyoqDQotICAgIEFkYXB0aXZlIHN0ZXAgc2l6ZSBjb250cm9sIGZvciB0aGUgaGlnaC1iYW5kICg0LThrSHopIGFkYXB0aXZlIGVjaG8NCi0gICAgY2FuY2VsbGF0aW9uIGZpbHRlci4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzbG93IGRvd24gdGhlIHVwZGF0ZSBzcGVlZCBvZg0KLSAgICB0aGUgYWRhcHRpdmUgZmlsdGVyIGR1cmluZyBkb3VibGUgdGFsayBzaXR1YXRpb25zLiBJbiBjYXNlIG9mIG5hcnJvd2JhbmQNCi0gICAgcHJvY2Vzc2luZywgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19IQl9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0hCX0VSTF9ERUZBVUxUICgxMjgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19IQl9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNU19IQl9lcmw7ICAgICAgICAgIC8vLzwgRVJMIG9mIEhCIE5MTVMNCi0NCi0gICAgLyoqDQotICAgIEluZGljYXRlcyB3aGV0aGVyIGEgcHJlc2V0IG9mIGFkYXB0aXZlIGZpbHRlciBjb2VmZmljaWVudHMgc2hvdWxkIGJlIGRvbmUuIDxicj4NCi0gICAgMCA9IE5vIHByZXNldCAoQ29lZmZpY2llbnRzIGFzIHRoZXkgYXJlKTxicj4NCi0gICAgMT0gUHJlc2V0IHdpdGggaW50ZXJuYWxseSBjYWxjdWxhdGVkIGNvZWZmaWNpZW50cy48YnI+DQotICAgIDI9IFByZXNldCB3aXRoIHplcm8gY29lZmZpY2llbnRzLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNS4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfUFJFU0VUX0NPRUZTX0RFRkFVTFQgKDEpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfTUFYICgyKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TX3ByZXNldF9jb2VmczsgICAgICAgICAgLy8vPCBDb2VmZmljaWVudCBwcmVzZXQuDQotDQotICAgIC8qKg0KLSAgICBPZmZzZXQgYWRkZWQgdG8gdGhlIG5vcm1hbGl6YXRpb24gb2YgdGhlIGFkYXB0YXRpb24gb2YgdGhlIGZpbHRlci4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfT0ZGU0VUX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX09GRlNFVF9ERUZBVUxUICg3NjcpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19PRkZTRVRfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNU19vZmZzZXQ7ICAgICAgICAgIC8vLzwgTkxNUyBvZmZzZXQNCi0NCi0gICAgLyoqDQotICAgIFBhcmFtZXRlciByZWxhdGVkIHRvIHRoZSByZXZlcmJlcmF0aW9uIG9mIHRoZSBhY291c3RpYyBlbnZpcm9ubWVudC4gSXQNCi0gICAgcmVwcmVzZW50cyB0aGUgZGVjYXkgaW4gdGltZSBvZiB0aGUgZW5lcmd5IG9mIHRoZSBlY2hvIHRhaWwgb2YgdGhlIGltcHVsc2UNCi0gICAgcmVzcG9uc2UgZm9yIHRoZSBMQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9MQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19UQUlMX0FMUEhBX0xCX0RFRkFVTFQgKDI1Mzk1KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9MQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX3RhaWxfYWxwaGFfTEI7DQotICAgIC8qKg0KLSAgICBQYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgZWNobyB0YWlsIHRoYXQgaGFzIHRvIGJlIGV4dHJhcG9sYXRlZA0KLSAgICBpbiB0aW1lIGZvciBMQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0xCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9MQl9ERUZBVUxUICgyOTQ5MSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9MQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX3RhaWxfcG9ydGlvbl9MQjsNCi0gICAgLyoqDQotICAgIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIGZhcmVuZC1vbmx5IGZvciB0aGUgTEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjcuODwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9ERUZBVUxUICg1MTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfTEJfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU19nYW1tYV9lX2hpZ2hfTEI7ICAgICAgICAgIC8vLzwgRkUgRWNobyBzdWJ0cmFjdGlvbiBMQg0KLQ0KLSAgICAvKioNCi0gICAgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgYXBwbGllZCBkdXJpbmcgZG91YmxlIHRhbGsgZm9yIHRoZSBMQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ny44PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfRFRfTEJfREVGQVVMVCAoMjU2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX2dhbW1hX2VfZHRfTEI7ICAgICAgICAgIC8vLzwgRFQgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgTEINCi0NCi0gICAgLyoqDQotICAgIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIG5lYXJlbmQtb25seSBmb3IgdGhlIExCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0xCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0xCX0RFRkFVTFQgKDI1Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0xCX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfZ2FtbWFfZV9sb3dfTEI7ICAgICAgICAgIC8vLzwgTkUgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgTEINCi0NCi0gICAgLyoqDQotICAgIFRoZSBhbW91bnQgb2YgZXh0cmEgbm9uLWxpbmVhciBzdXBwcmVzc2lvbiByZWxhdGl2ZSB0byB0aGUgbWF4aW11bSBsaW5lYXIgZWNobw0KLSAgICBzdXBwcmVzc2lvbiBmb3IgdGhlIExCLiBUaGUgdXNlIG9mIHRoZXNlIG5vbi1saW5lYXIgZWNobyBzdXBwcmVzc2lvbiBtZWNoYW5pc21zDQotICAgIHNob3VsZCBiZSBhdm9pZGVkIGFzIG11Y2ggYXMgcG9zc2libGUgc2luY2UgaXQgYWZmZWN0cyB0aGUgZG91YmxlIHRhbGsNCi0gICAgcGVyZm9ybWFuY2UuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjQuMTE8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX05MX0FUVEVOX0xCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX05MX0FUVEVOX0xCX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19OTF9BVFRFTl9MQl9NQVggKDIwNDgpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfTkxfYXR0ZW5fTEI7ICAgICAgICAgIC8vLzwgTEIgTm9uIGxpbmVhciBhdHRlbnVhdGlvbg0KLQ0KLSAgICAvKioNCi0gICAgUGFyYW1ldGVyIHJlbGF0ZWQgdG8gdGhlIHJldmVyYmVyYXRpb24gb2YgdGhlIGFjb3VzdGljIGVudmlyb25tZW50LiBJdA0KLSAgICByZXByZXNlbnRzIHRoZSBkZWNheSBpbiB0aW1lIG9mIHRoZSBlbmVyZ3kgb2YgdGhlIGVjaG8gdGFpbCBvZiB0aGUgaW1wdWxzZQ0KLSAgICByZXNwb25zZSBmb3IgdGhlIEhCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfSEJfREVGQVVMVCAoMjUzOTUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfdGFpbF9hbHBoYV9IQjsNCi0gICAgLyoqDQotICAgIFBhcmFtZXRlciByZWxhdGVkIHRvIHRoZSBwb3J0aW9uIG9mIHRoZSBlY2hvIHRhaWwgdGhhdCBoYXMgdG8gYmUgZXh0cmFwb2xhdGVkDQotICAgIGluIHRpbWUgZm9yIEhCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19UQUlMX1BPUlRJT05fSEJfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0hCX0RFRkFVTFQgKDI5NDkxKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0hCX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfdGFpbF9wb3J0aW9uX0hCOw0KLSAgICAvKioNCi0gICAgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgYXBwbGllZCBkdXJpbmcgZmFyZW5kLW9ubHkgZm9yIHRoZSBIQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ny44PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0hCX0RFRkFVTFQgKDUxMik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX2dhbW1hX2VfaGlnaF9IQjsgICAgICAgICAgLy8vPCBGRSBFY2hvIHN1YnRyYWN0aW9uIEhCDQotDQotICAgIC8qKg0KLSAgICBFY2hvIHN1YnRyYWN0aW9uIGZhY3RvciBhcHBsaWVkIGR1cmluZyBkb3VibGUgdGFsayBmb3IgdGhlIEhCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9ERUZBVUxUICgyNTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0RUX0hCX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfZ2FtbWFfZV9kdF9IQjsgICAgICAgICAgLy8vPCBEVCBFY2hvIHN1YnRyYWN0aW9uIGZhY3RvciBIQg0KLQ0KLSAgICAvKioNCi0gICAgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgYXBwbGllZCBkdXJpbmcgbmVhcmVuZC1vbmx5IGZvciB0aGUgSEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjcuODwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfSEJfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfSEJfREVGQVVMVCAoMjU2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfSEJfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU19nYW1tYV9lX2xvd19IQjsgICAgICAgICAgLy8vPCBORSBFY2hvIHN1YnRyYWN0aW9uIGZhY3RvciBIQg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGFtb3VudCBvZiBleHRyYSBub24tbGluZWFyIHN1cHByZXNzaW9uIHJlbGF0aXZlIHRvIHRoZSBtYXhpbXVtIGxpbmVhciBlY2hvDQotICAgIHN1cHByZXNzaW9uLiBmb3IgdGhlIEhCLiBUaGUgdXNlIG9mIHRoZXNlIG5vbi1saW5lYXIgZWNobyBzdXBwcmVzc2lvbg0KLSAgICBtZWNoYW5pc21zIHNob3VsZCBiZSBhdm9pZGVkIGFzIG11Y2ggYXMgcG9zc2libGUgc2luY2UgaXQgYWZmZWN0cyB0aGUgZG91YmxlDQotICAgIHRhbGsgcGVyZm9ybWFuY2UuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjQuMTE8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX05MX0FUVEVOX0hCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX05MX0FUVEVOX0hCX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19OTF9BVFRFTl9IQl9NQVggKDIwNDgpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfTkxfYXR0ZW5fSEI7ICAgICAgICAgIC8vLzwgTkUgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgSEINCi0NCi0gICAgLyoqDQotICAgIFNtb290aGluZyBmYWN0b3IgYXBwbGllZCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGdhbW1hX2UgdmFsdWVzLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0FMUEhBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfQUxQSEFfREVGQVVMVCAoMjQwMDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0FMUEhBX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfZ2FtbWFfZV9hbHBoYTsgICAgICAgICAgLy8vPCBTbW9vdGhpbmcgZmFjdG9yIGZvciBnYW1tYV9lDQotDQotICAgIC8qKg0KLSAgICBHYWluIGZhY3RvciBmb3IgTm9pc2Ugc3VidHJhY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjcuODwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9OX0RFRkFVTFQgKDI4MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX05fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU19nYW1tYV9uOyAgICAgICAgICAvLy88IEdhaW4gZmFjdG9yDQotDQotICAgIC8qKg0KLSAgICBUaHJlc2hvbGQgZm9yIG5lYXJlbmQgYWN0aXZpdHkgZGV0ZWN0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfU1BERVRfTkVBUl9ERUZBVUxUICg1MTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19TUERFVF9ORUFSX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfc3BkZXRfbmVhcjsNCi0gICAgLyoqDQotICAgIFRocmVzaG9sZCBmb3IgbWljcm9waG9uZSBhY3Rpdml0eSBkZXRlY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjcuODwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfU1BERVRfQUNUX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1NQREVUX0FDVF9ERUZBVUxUICg3NjgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19TUERFVF9BQ1RfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU19zcGRldF9hY3Q7DQotICAgIC8qKg0KLSAgICBUaGUgbWF4aW11bSBhbW91bnQgb2Ygbm9pc2Ugc3VwcHJlc3Npb24uIDxicj4NCi0gICAgREVOU19saW1pdF9ucyA9IFxmJDMyNzY3KjEwXnstTWF4Tm9pc2VSZWR1Y3Rpb25bZEJdLzIwfVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19MSU1JVF9OU19NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19MSU1JVF9OU19ERUZBVUxUICgxMDM2MSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0xJTUlUX05TX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfbGltaXRfbnM7ICAgICAgICAgIC8vLzwgTWF4aW11bSBub2lzZSBzdXBwcmVzc2lvbi4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBhbW91bnQgb2YgY29tZm9ydCBub2lzZSBpbnNlcnRpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMTQ8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0NOSV9HQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0NOSV9HQUlOX0RFRkFVTFQgKDE2Mzg0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfQ05JX0dBSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU19DTklfR2FpbjsgICAgICAgICAgLy8vPCBDTkkgZ2Fpbg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIHdpbmRvdyBsZW5ndGggKGV4cHJlc3NlZCBpbiBpbnRlZ2VyIG11bHRpcGxlcyBvZiAxMG1zKSBmb3IgdGhlIGVzdGltYXRpb24NCi0gICAgb2YgdGhlIG5vaXNlIGNvbXBvbmVudHMuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGtlZXAgdGhpcyBwYXJhbWV0ZXIgYXQgaXRzDQotICAgIGRlZmF1bHQgdmFsdWUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9ERUZBVUxUICgxNTApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19ORkVfQkxPQ0tTSVpFX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfTkZFX2Jsb2Nrc2l6ZTsgICAgICAgICAgLy8vPCBORkUgYmxvY2tzaXplDQotDQotICAgIC8qKg0KLSAgICBUaHJlc2hvbGQgZm9yIGZhcmVuZCBhY3Rpdml0eSBkZXRlY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TUERFVF9GQVJfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1NQREVUX0ZBUl9ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TUERFVF9GQVJfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgU1BERVRfZmFyOw0KLSAgICAvKioNCi0gICAgVGhyZXNob2xkIGZvciBtaWNyb3Bob25lIGFjdGl2aXR5IGRldGVjdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1NQREVUX01JQ19NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1BERVRfTUlDX0RFRkFVTFQgKDE2Mzg0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1NQREVUX01JQ19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBTUERFVF9taWM7DQotICAgIC8qKg0KLSAgICBUaHJlc2hvbGQgdG8gYWN0aXZhdGUgdGhlIG5vbi1saW5lYXIgZWNoby1zdXBwcmVzc2lvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1NQREVUX1hfQ0xJUF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1BERVRfWF9DTElQX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1BERVRfWF9DTElQX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFNQREVUX3hfY2xpcDsNCi0gICAgLyoqDQotICAgIFRocmVzaG9sZCB0byBkZXRlY3QgYWNvdXN0aWNhbCBwYXRoIGNoYW5nZXMuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfVEhSRVNIT0xEX0RFRkFVTFQgKDIwMDAwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9USFJFU0hPTERfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgUENEX3RocmVzaG9sZDsgICAgICAgICAgLy8vPCBQQ0QgdGhyZXNob2xkDQotDQotICAgIC8qKg0KLSAgICBMZW5ndGggb2YgdGhlIGJhY2tncm91bmQgYWRhcHRpdmUgZmlsdGVyLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0DQotICAgIG9ubHkgdGhlIG1haW4gcGVhayBvZiB0aGUgaW1wdWxzZSByZXNwb25zZSBpcyBjb3ZlcmVkIGJ5IHRoZSBmaWx0ZXIuIFRoZSBsZW5ndGgNCi0gICAgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgOC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9UQVBTX01JTiAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX1RBUFNfREVGQVVMVCAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX1RBUFNfTUFYICg2NCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgUENEX3RhcHM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIHRhcHMgb2YgYmFja2dyb3VuZCBOTE1TLg0KLQ0KLSAgICAvKioNCi0gICAgQWRhcHRpdmUgc3RlcCBzaXplIGNvbnRyb2wgZm9yIHRoZSBiYWNrZ3JvdW5kIGFkYXB0aXZlIGZpbHRlci4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX0VSTF9NSU4gKDY0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9FUkxfREVGQVVMVCAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX0VSTF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBQQ0RfZXJsOyAgICAgICAgICAvLy88IFN0ZXAgc2l6ZSBvZiBiYWNrZ3JvdW5kIE5MTVMuDQotDQotICAgIC8qKg0KLSAgICBJZiBhIHBhdGggY2hhbmdlIGlzIGRldGVjdGVkLCBOTE1TX2VybCBvZiB0aGUgTkxNUyBpcyBzZXQgdG8gdGhpcyB2YWx1ZSwgdG8NCi0gICAgZW5zdXJlIGEgZmFzdCBhZGFwdGluZyBmaWx0ZXIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjkuNjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9NSU5JTVVNX0VSTF9NSU4gKDY0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9NSU5JTVVNX0VSTF9ERUZBVUxUICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfTUlOSU1VTV9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgUENEX21pbmltdW1fZXJsOyAgICAgICAgICAvLy88IFN0ZXAgc2l6ZSBvZiBOTE1TIGFmdGVyIFBDRC4NCi0NCi0gICAgLyoqDQotICAgIEFmdGVyIGEgcGF0aCBjaGFuZ2UgdGhlIE5MTVNfZXJsIG9mIHRoZSBOTE1TIGluY3JlYXNlcyBiYWNrIHRvIHRoZSBub21pbmFsDQotICAgIHZhbHVlLiBUaGUgc3BlZWQgdG8gaW5jcmVhc2UgY2FuIGJlIGNvbnRyb2xsZWQgYnkgdGhpcyBwYXJhbWV0ZXIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMTQ8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfRVJMX1NURVBfTUlOICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfRVJMX1NURVBfREVGQVVMVCAoMTY4MDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX0VSTF9TVEVQX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFBDRF9lcmxfc3RlcDsgICAgICAgICAgLy8vPCBTdGVwIG9mIEVSTCBpbmNyZWFzZSBhZnRlciBQQ0QuDQotDQotICAgIC8qKg0KLSAgICBHYWluIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBlY2hvIHN1YnRyYWN0aW9uIGR1cmluZyBhY291c3RpY2FsIHBhdGggY2hhbmdlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfR0FNTUFfRV9SRVNDVUVfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9HQU1NQV9FX1JFU0NVRV9ERUZBVUxUICg1MDAwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9HQU1NQV9FX1JFU0NVRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBQQ0RfZ2FtbWFfZV9yZXNjdWU7ICAgICAgICAgIC8vLzwgZ2FtbWFfZSBhZnRlciBQQ0QNCi0NCi19IExWSEZfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVkJEX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVkJEX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVkJEX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWQkRfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBTZXQgQnVsayBEZWxheSBvcGVyYXRpbmcgbW9kZSBvbi9vZmYuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEJEX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgU2V0IEJ1bGsgRGVsYXkgb3BlcmF0aW5nIG1vZGUgb24vb2ZmDQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtZXRlciBjb21wZW5zYXRlcyBmb3IgdGhlIGZpeGVkIGRlbGF5IGluIHRoZSBlY2hvIHBhdGggYW5kIGNhbiBiZQ0KLSAgICBtZWFzdXJlZCBpbiBhZHZhbmNlLiBUaGlzIGRlbGF5IGlzIGNhdXNlZCBieSB0aGUgYXVkaW8gSS9PIGJ1ZmZlcmluZywgQUQvREENCi0gICAgY29udmVydGVyIGFuZCBwcm9wYWdhdGlvbiB0aW1lIGJldHdlZW4gdGhlIGxvdWRzcGVha2VyIGFuZCBtaWNyb3Bob25lLiBUaGUgdW5pdA0KLSAgICBvZiAnQnVsa0RlbGF5JyBpcyBbbnVtYmVyIG9mIHNhbXBsZXNdIGF0IHRoZSByZXNwZWN0aXZlIHNhbXBsaW5nIHJhdGUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZCRF9CVUxLREVMQVlfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkJEX0JVTEtERUxBWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkJEX0JVTEtERUxBWV9NQVggKDY0MDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBCdWxrRGVsYXk7ICAgICAgICAgIC8vLzwgU2V0cyBCdWxrIERlbGF5DQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtIHNldHMgdGhlIGdhaW4gZm9yIHRoZSBFY2hvIHJlZmVyZW5jZSBzaWduYWwuIFZhbHVlIDgxOTIgYmVsb25nIHRvDQotICAgIDBkQg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4yLjEzPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWQkRfQkRfR0FJTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWQkRfQkRfR0FJTl9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkJEX0JEX0dBSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQkRfR2FpbjsgICAgICAgICAgLy8vPCBBcHBseSBHYWluIHRvIEVjaG8gcmVmZXJlbmNlIHNpZ25hbA0KLQ0KLX0gTFZCRF9Db250cm9sUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWVkVfVHhfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWVkVfVHhfU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZWRV9UeF9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIFRoaXMgZW51bWVyYXRlZCB0eXBlIGlzIHVzZWQgdG8gc2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgVHggcGF0aC4gVGhlDQotICAgIHByb2Nlc3NpbmcgY2FuIGJlIHNlcGFyYXRlbHkgc2V0IHRvIGVuYWJsZSBhbGwgcHJvY2Vzc2luZyBtb2R1bGVzIChpLmUuLCBPTiksDQotICAgIHRvIGRpc2FibGUgYWxsIHByb2Nlc3NpbmcgbW9kdWxlcyAoaS5lLiwgT0ZGKSBvciB0byBieXBhc3MgYWxsIHByb2Nlc3NpbmcNCi0gICAgbW9kdWxlcyAoaS5lLiwgQllQQVNTKS4gV2hlbiBieXBhc3NlZCwgYWxsIHByb2Nlc3NpbmcgbW9kdWxlcyBrZWVwIG9uIHJ1bm5pbmcsDQotICAgIGJ1dCB0aGVpciBvdXRwdXQgaXMgbm90IHVzZWQuIFdoZW4gYnlwYXNzaW5nIHRoZSBUeCBwcm9jZXNzaW5nLCB0aGUgdXNlciBjYW4NCi0gICAgc2VsZWN0IHdoaWNoIGJ1ZmZlciBzaG91bGQgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBpZiByZXF1aXJlZDogQGxpDQotICAgIElucHV0IG1pY3JvcGhvbmUgc2lnbmFsIChvciBzZWNvbmRhcnkgbWljcm9waG9uZSBzaWduYWwgaW4gY2FzZSBvZg0KLSAgICB0d28tbWljcm9waG9uZSBzZXR1cHMpOyBAbGkgUnggcmVmZXJlbmNlIHNpZ25hbDsgVGhlc2Ugb3BlcmF0aW9ucyBlbnN1cmUgdGhhdA0KLSAgICB0aGUgaW5wdXQgZGF0YSBpcyBjb3JyZWN0bHkgdHJhbnNmZXJyZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgZm9yIGFsbA0KLSAgICBjb21iaW5hdGlvbnMgb2YgaW5wdXQgYW5kIG91dHB1dCBidWZmZXIgdHlwZXMgYW5kIGlucHV0IGZvcm1hdC4gV2hlbiBPRkYsIHRoZQ0KLSAgICBpbnB1dCBpcyBjb3BpZWQgdG8gdGhlIG91dHB1dCBhbmQgdGhlIExWVkUgY2FuIGJlIHByb3ZpZGVkIHdpdGggaW52YWxpZA0KLSAgICBwYXJhbWV0ZXJzIGZvciBtb2R1bGVzLiBUaGUgc3ViIG1vZHVsZSBmdW5jdGlvbnMgYXJlIG5vdCBleGVjdXRlZCBpbiB0aGlzDQotICAgIHNjZW5hcmlvLiBUaGVpciBjb21iaW5lZCBmdW5jdGlvbmFsaXR5IGlzIHN1bW1hcml6ZWQgaW4gZm9sbHdvaW5nIHRhYmxlLiA8YnI+DQotICAgIDxkaXYgYWxpZ249ImNlbnRlciI+IDx0YWJsZSBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjQiIGJvcmRlcj0iMyI+DQotICAgIDxjYXB0aW9uPkxWVkUgVHggb3BlcmF0aW5nIG1vZGUgaW4gY29tYmluYXRpb24gd2l0aCBMVlZFIG1pY3JvcGhvbmUgcm91dGluZw0KLSAgICBtb2RlPC9jYXB0aW9uPiA8dHI+IDx0aD48L3RoPiA8dGggY29sc3Bhbj0iMiI+TUlDUk9VVElOR19NT0RFX0RFRkFVTFQ8L3RoPiA8dGgNCi0gICAgY29sc3Bhbj0iMiI+TUlDUk9VVElOR19NT0RFX1NXQVBQRUQ8L3RoPiA8L3RyPiA8dHI+IDx0aCB3aWR0aD0iNzAiPjwvdGg+IDx0aA0KLSAgICB3aWR0aD0iNzAiPlByb2Nlc3M8L3RoPiA8dGggd2lkdGg9IjcwIj5PdXRwdXQ8L3RoPiA8dGggd2lkdGg9IjcwIj5Qcm9jZXNzPC90aD4NCi0gICAgPHRoIHdpZHRoPSI3MCI+T3V0cHV0PC90aD4gPC90cj4gPHRyIGFsaWduPSJsZWZ0Ij4gPHRkPkxWVkVfVFhfTU9ERV9PRkY8L3RkPg0KLSAgICA8dGQ+Tm9uZTwvdGQ+IDx0ZD5UeCBpbnB1dCAwPC90ZD4gPHRkPk5vbmU8L3RkPiA8dGQ+VHggaW5wdXQgMTwvdGQ+IDwvdHI+IDx0cg0KLSAgICBhbGlnbj0ibGVmdCI+IDx0ZD5MVlZFX1RYX01PREVfT048L3RkPiA8dGQ+VHggaW5wdXQgMDwvdGQ+IDx0ZD5UeCBvdXRwdXQ8L3RkPg0KLSAgICA8dGQ+VHggaW5wdXQgMTwvdGQ+IDx0ZD5UeCBvdXRwdXQ8L3RkPiA8L3RyPiA8dHIgYWxpZ249ImxlZnQiPg0KLSAgICA8dGQ+TFZWRV9UWF9NT0RFX0JZUEFTU19NSUMwPC90ZD4gPHRkPlR4IGlucHV0IDA8L3RkPiA8dGQ+VHggaW5wdXQgMDwvdGQ+DQotICAgIDx0ZD5UeCBpbnB1dCAxPC90ZD4gPHRkPlR4IGlucHV0IDE8L3RkPiA8L3RyPiA8dHIgYWxpZ249ImxlZnQiPg0KLSAgICA8dGQ+TFZWRV9UWF9NT0RFX0JZUEFTU19NSUMxPC90ZD4gPHRkPlR4IGlucHV0IDA8L3RkPiA8dGQ+VHggaW5wdXQgMTwvdGQ+DQotICAgIDx0ZD5UeCBpbnB1dCAxPC90ZD4gPHRkPlR4IGlucHV0IDA8L3RkPiA8L3RyPiA8dHIgYWxpZ249ImxlZnQiPg0KLSAgICA8dGQ+TFZWRV9UWF9NT0RFX0JZUEFTU19SRUY8L3RkPiA8dGQ+VHggaW5wdXQgMDwvdGQ+IDx0ZD5UeCByZWYgaW5wdXQ8L3RkPg0KLSAgICA8dGQ+VHggaW5wdXQgMTwvdGQ+IDx0ZD5UeCByZWYgaW5wdXQ8L3RkPiA8L3RyPiA8L3RhYmxlPiA8L2Rpdj4NCi0gICAgKi8NCi0gICAgTFZWRV9UeF9Nb2RlX2VuIE9wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgVFggT3BlcmF0aW5nIG1vZGUNCi0NCi0gICAgLyoqDQotICAgIFRoaXMgcGFyYW0gY2FuIG11dGUgdW5tdXRlIHRoZSBSeC9UeCBlbmdpbmUgb3V0cHV0Lg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBNdXRlOyAgICAgICAgICAvLy88IFRoaXMgcGFyYW0gY2FuIG11dGUgdW5tdXRlIHRoZSBSeC9UeCBlbmdpbmUgb3V0cHV0DQotDQotICAgIC8qKg0KLSAgICBTZXQgQnVsayBEZWxheSBvcGVyYXRpbmcgbW9kZSBvbi9vZmYuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEJEX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgU2V0IEJ1bGsgRGVsYXkgb3BlcmF0aW5nIG1vZGUgb24vb2ZmDQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtZXRlciBjb21wZW5zYXRlcyBmb3IgdGhlIGZpeGVkIGRlbGF5IGluIHRoZSBlY2hvIHBhdGggYW5kIGNhbiBiZQ0KLSAgICBtZWFzdXJlZCBpbiBhZHZhbmNlLiBUaGlzIGRlbGF5IGlzIGNhdXNlZCBieSB0aGUgYXVkaW8gSS9PIGJ1ZmZlcmluZywgQUQvREENCi0gICAgY29udmVydGVyIGFuZCBwcm9wYWdhdGlvbiB0aW1lIGJldHdlZW4gdGhlIGxvdWRzcGVha2VyIGFuZCBtaWNyb3Bob25lLiBUaGUgdW5pdA0KLSAgICBvZiAnQnVsa0RlbGF5JyBpcyBbbnVtYmVyIG9mIHNhbXBsZXNdIGF0IHRoZSByZXNwZWN0aXZlIHNhbXBsaW5nIHJhdGUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9CVUxLREVMQVlfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0JVTEtERUxBWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0JVTEtERUxBWV9NQVggKDY0MDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBCdWxrRGVsYXk7ICAgICAgICAgIC8vLzwgU2V0cyBCdWxrIERlbGF5DQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtIHNldHMgdGhlIGdhaW4gZm9yIHRoZSBFY2hvIHJlZmVyZW5jZSBzaWduYWwuIFZhbHVlIDgxOTIgYmVsb25nIHRvDQotICAgIDBkQg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4yLjEzPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfQkRfR0FJTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfQkRfR0FJTl9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0JEX0dBSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQkRfR2FpbjsgICAgICAgICAgLy8vPCBBcHBseSBHYWluIHRvIEVjaG8gcmVmZXJlbmNlIHNpZ25hbA0KLQ0KLSAgICAvKioNCi0gICAgVHVybnMgb24vb2ZmIFZPTF9HYWluLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBWT0xfT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBUdXJucyBvbi9vZmYgVk9MX0dhaW4NCi0NCi0gICAgLyoqDQotICAgIFRoZSB2b2x1bWUgY29udHJvbCBnYWluIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgb3ZlcmFsbCB2b2x1bWUgbGV2ZWwgb2YgdGhlDQotICAgIHNpZ25hbC4gVGhlIGdhaW4gaXMgc2V0IGluIGRCIHdpdGggc3RlcHMgb2YgMWRCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNS4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfVk9MX0dBSU5fTUlOICgtOTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfVk9MX0dBSU5fREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9WT0xfR0FJTl9NQVggKDI0KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBWT0xfR2FpbjsgICAgICAgICAgLy8vPCBBcHBseSBHYWluIHRvIElucHV0IHNpZ25hbA0KLQ0KLSAgICAvKioNCi0gICAgVHVybnMgb24vb2ZmIEhpZ2ggUGFzcyBmaWx0ZXIuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEhQRl9PcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFR1cm5zIG9uL29mZiBIaWdoIFBhc3MgZmlsdGVyDQotDQotICAgIC8qKg0KLSAgICBTZXRzIHRoZSAzZEIgY29ybmVyIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaC1wYXNzIGZpbHRlci4gSW4gY2FzZSBOb2lzZVZvaWQgaXMNCi0gICAgZW5hYmxlZCwgdGhlIHNhbWUgaGlnaC1wYXNzIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHNlY29uZCBtaWNyb3Bob25lDQotICAgIGNoYW5uZWwuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9NSUNfSFBGX0NPUk5FUkZSRVFfTUlOICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9NSUNfSFBGX0NPUk5FUkZSRVFfREVGQVVMVCAoNTApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX01BWCAoMTUwMCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IE1JQ19IUEZfQ29ybmVyRnJlcTsgICAgICAgICAgLy8vPCBIaWdoIFBhc3MgRmlsdGVyIENvcm5lciBGcmVxdWVuY3kgaW4gSHoNCi0NCi0gICAgLyoqDQotICAgIEhhbmRzRnJlZSBDb250cm9sIFBhcmFtZXRlciBTdHJjdXR1cmUuDQotICAgICovDQotICAgIExWSEZfQ29udHJvbFBhcmFtc19zdCBIRl9Db250cm9sUGFyYW1zOyAgICAgICAgICAvLy88IEhhbmRzRnJlZSBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi0NCi0gICAgLyoqDQotICAgIE5vaXNlVm9pZCBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUuDQotICAgICovDQotICAgIExWTlZfQ29udHJvbFBhcmFtc19zdCBOVl9Db250cm9sUGFyYW1zOyAgICAgICAgICAvLy88IE5vaXNlVm9pZCBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi0NCi0gICAgLyoqDQotICAgIFdoaXNwZXJNb2RlIENvbnRyb2wgUGFyYW1ldGVyIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZXTV9Db250cm9sUGFyYW1zX3N0IFdNX0NvbnRyb2xQYXJhbXM7ICAgICAgICAgIC8vLzwgV2hpc3Blck1vZGUgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlDQotDQotICAgIC8qKg0KLSAgICBFcXVhbGl6ZXIgT3BlcmF0aW5nIG1vZGUuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEVRX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgRXF1YWxpemVyIE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBFcXVhbGl6ZXIgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVkVRX0NvbnRyb2xQYXJhbXNfc3QgRVFfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBFcXVhbGl6ZXIgQ29udHJvbCBQYXJhbWV0ZXJzIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgRFJDIENvbnRyb2wgUGFyYW1ldGVyIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZEUkNfQ29udHJvbFBhcmFtc19zdCBEUkNfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBEUkMgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlDQotDQotfSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotDQotDQotLypbQmVnaW5dIFtsdndlbmh1YS0yMDEyLzMvMTJdKi8NCi0jZGVmaW5lIExWVkNfVk9MVU1FX05VTSAgICAgICAgICAgICAxMg0KLQ0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fSU5UMTYgICAgICAgICAgICAgICAgICAgTm9pc2VTZW5zaXRpdml0eVtMVlZDX1ZPTFVNRV9OVU1dOw0KLX0gTFZWQ19Ob2lzZVNlbnNfc3Q7DQotLypbRW5kXSBbbHZ3ZW5odWEtMjAxMi8zLzEyXSovDQotDQotLypbQmVnaW5dIFtsdndlbmh1YS0yMDExLzgvMjNdKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0ICAgIFR4X0NvbnRyb2xQYXJhbXM7DQotICAgIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdCAgICBSeF9Db250cm9sUGFyYW1zOw0KLSAgICBMVkVRX0NvZWZzX3N0IFR4RXFDb2VmczsNCi0gICAgTFZFUV9Db2Vmc19zdCBSeEVxQ29lZnM7DQotICAgIC8qW0JlZ2luXSBbbHZ3ZW5odWEtMjAxMi8zLzEyXSovDQotICAgIExWVkNfTm9pc2VTZW5zX3N0IFJ4VmNOb2lzZVNlbnM7DQotICAgIC8qW0VuZF0gW2x2d2VuaHVhLTIwMTIvMy8xMl0qLw0KLX0gTFZWRV9Db250cm9sUGFyYW1zX3N0Ow0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fVUlOVDMyIGlzVnBQYXJhbUluTnY7DQotICAgIExWVkVfQ29udHJvbFBhcmFtc19zdCAgICBIYW5kc2V0X0NvbnRyb2xQYXJhbXM7DQotICAgIExWVkVfQ29udHJvbFBhcmFtc19zdCAgICBIYW5kc2ZyZWVfQ29udHJvbFBhcmFtczsNCi0gICAgTFZWRV9Db250cm9sUGFyYW1zX3N0ICAgIEhlYWRzZXRfQ29udHJvbFBhcmFtczsNCi0gICAgTFZWRV9Db250cm9sUGFyYW1zX3N0ICAgIEJsdWV0b290aF9Db250cm9sUGFyYW1zOw0KLX0gTFZWRV9Db250cm9sUGFyYW1zX0FsbF9zdDsNCi0vKltFbmRdIFtsdndlbmh1YS0yMDExLzgvMjNdKi8NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQotDQotI2VuZGlmICAgICAgLyogX19SRUxfTFZWRV9IRl9OVjFfVkNfQUdDX1JYX0RSQ19SWF9XQl9WSURQUF9IX18gKi8NCi0NCi0vKiBFbmQgb2YgZmlsZSAqLw0KZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3Rvcy9QQVJBTV9EZWZhdWx0LmggYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90b3MvUEFSQU1fRGVmYXVsdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4NTczMjdiLi4wMDAwMDAwCi0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3Rvcy9QQVJBTV9EZWZhdWx0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotc3RhdGljIExWTV9DSEFSIExWVkVfVHhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sW10gPXsNCi0weDAzLCAweDAwLCAweDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEJELCAweDAyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDExLCAweDAwLCAweDAwLCAweDAwLCANCi0weDIwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCANCi0weDAwLCAweDAxLCAweDAwLCAweEZGLCAweDAyLCAweDMzLCAweDYzLCAweDMzLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCANCi0weDAwLCAweDMzLCAweDYzLCAweDMzLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweEMwLCAweDVELCAweDE4LCANCi0weDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDc5LCAweDI4LCAweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCANCi0weDAwLCAweDIwLCAweDRFLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweEEwLCAweDQxLCAweDg4LCAweDEzLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweEY3LCAweDQ5LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweDAwLCAweDA4LCAweDIwLCAweDAwLCAweDAwLCANCi0weDIwLCAweEU4LCAweDAzLCAweDE4LCAweDAwLCAweDAwLCAweDIwLCAweEU4LCAweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDAzLCAweDIwLCAweDAwLCAweDAwLCANCi0weDIwLCAweEU4LCAweDAzLCAweDE4LCAweDAwLCAweDAwLCAweDIwLCAweEU4LCAweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDAzLCAweDk2LCAweDAwLCAweEZGLCANCi0weDdGLCAweDlBLCAweDE5LCAweEZGLCAweDdGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhGLCAweDAyLCAweDAwLCAweDA0LCAweDEwLCAweDAwLCAweDY2LCAweDA2LCAweDAwLCAweDAxLCAweDY2LCANCi0weDA2LCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweEUwLCAweDJFLCAweDU4LCAweDFCLCAweDAwLCAweDAxLCAweENFLCAweDJDLCAweDAwLCAweDQwLCAweDg0LCANCi0weDJCLCAweDlBLCAweDE5LCAweDY2LCAweDI2LCAweDAwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDI0LCAweDQwLCAweDAxLCAweEU2LCAweDAwLCAweDY1LCANCi0weDY2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweEZELCAweDFGLCAweEIwLCAweDYzLCAweEFELCANCi0weDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCANCi0weDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCANCi0weEZGLCAweEY0LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwDQotfTsNCi1zdGF0aWMgTFZNX0NIQVIgTFZWRV9SeF9QcmVzZXRfQnVmZmVyX1ZvaWNlX1Rvb2wgW109ew0KLTB4MDMsIDB4MDAsIDB4MDksIDB4MTgsIDB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4QkQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsIDB4MkEsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIA0KLTB4MDUsIDB4MjAsIDB4NEUsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDIsIDB4MTcsIDB4MkYsIDB4NUMsIDB4N0YsIDB4QjksIA0KLTB4N0UsIDB4ODIsIDB4NUEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIA0KLTB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4REEsIA0KLTB4RkYsIDB4RjQsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4RkQsIA0KLTB4MUYsIDB4QjAsIDB4NjMsIDB4QUQsIDB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QjAsIA0KLTB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QjAsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIA0KLTB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDksIDB4MTgsIDB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIA0KLTB4QkQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsIDB4MkEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MjAsIDB4NEUsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjAsIA0KLTB4MDAsIDB4MDIsIDB4MTcsIDB4MkYsIDB4NUMsIDB4N0YsIDB4QjksIDB4N0UsIDB4ODIsIDB4NUEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIA0KLTB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4REEsIDB4RkYsIDB4RjQsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4RkQsIDB4MUYsIDB4QjAsIDB4NjMsIDB4QUQsIDB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QjAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIA0KLTB4QTAsIDB4RkYsIDB4QjAsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDMsIDB4MDAsIA0KLTB4MDksIDB4MTgsIDB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4QkQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsIDB4MkEsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MjAsIA0KLTB4NEUsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDIsIDB4MTcsIDB4MkYsIDB4NUMsIDB4N0YsIDB4QjksIDB4N0UsIDB4ODIsIA0KLTB4NUEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QTAsIA0KLTB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4REEsIDB4RkYsIDB4RjQsIA0KLTB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4RkQsIDB4MUYsIDB4QjAsIA0KLTB4NjMsIDB4QUQsIDB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QjAsIDB4RkYsIDB4QkEsIA0KLTB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QjAsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIA0KLTB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDksIDB4MTgsIDB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4QkQsIDB4MDIsIA0KLTB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDYsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4RTAsIDB4MkEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MjAsIDB4NEUsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDIsIA0KLTB4MTcsIDB4MkYsIDB4NUMsIDB4N0YsIDB4QjksIDB4N0UsIDB4ODIsIDB4NUEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIA0KLTB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIA0KLTB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4REEsIDB4RkYsIDB4RjQsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIA0KLTB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4RkQsIDB4MUYsIDB4QjAsIDB4NjMsIDB4QUQsIDB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QjAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIA0KLTB4QjAsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDksIDB4MTgsIA0KLTB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4QkQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsIDB4MkEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MjAsIDB4NEUsIDB4MDAsIA0KLTB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDIsIDB4MTcsIDB4MkYsIDB4NUMsIDB4N0YsIDB4QjksIDB4N0UsIDB4ODIsIDB4NUEsIDB4MDAsIA0KLTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIA0KLTB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4REEsIDB4RkYsIDB4RjQsIDB4RkYsIDB4MDAsIA0KLTB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4RkQsIDB4MUYsIDB4QjAsIDB4NjMsIDB4QUQsIA0KLTB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QjAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIA0KLTB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QjAsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIA0KLTB4MDAsIDB4MzIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDksIDB4MTgsIDB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4QkQsIDB4MDIsIDB4MDAsIDB4MDAsIA0KLTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDYsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4RTAsIDB4MkEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MjAsIDB4NEUsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDIsIDB4MTcsIDB4MkYsIA0KLTB4NUMsIDB4N0YsIDB4QjksIDB4N0UsIDB4ODIsIDB4NUEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIA0KLTB4QkEsIDB4RkYsIDB4REEsIDB4RkYsIDB4RjQsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIA0KLTB4ODAsIDB4MDAsIDB4RkQsIDB4MUYsIDB4QjAsIDB4NjMsIDB4QUQsIDB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDUsIDB4MDAsIDB4QjAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QjAsIDB4RkYsIA0KLTB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDANCi19Ow0KLQ0KLXN0YXRpYyBMVk1fQ0hBUiBMVlZFX1R4X011dGVfRmlsZV9CdWZmZXJbXSA9ew0KLTB4MDMsIDB4MDAsIDB4MDksIDB4MTgsIDB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4QkQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MjAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIA0KLTB4MDAsIDB4MDEsIDB4MDAsIDB4RkYsIDB4MDIsIDB4MzMsIDB4NjMsIDB4MzMsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIA0KLTB4MDAsIDB4MzMsIDB4NjMsIDB4MzMsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4QzAsIDB4NUQsIDB4MTgsIA0KLTB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDMsIDB4NzksIDB4MjgsIDB4MDAsIDB4NDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIA0KLTB4MDAsIDB4MjAsIDB4NEUsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4QTAsIDB4NDEsIDB4ODgsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4RjcsIDB4NDksIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDgsIDB4MjAsIDB4MDAsIDB4MDAsIA0KLTB4MjAsIDB4RTgsIDB4MDMsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MjAsIDB4RTgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDMsIDB4MjAsIDB4MDAsIDB4MDAsIA0KLTB4MjAsIDB4RTgsIDB4MDMsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MjAsIDB4RTgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDMsIDB4OTYsIDB4MDAsIDB4RkYsIA0KLTB4N0YsIDB4OUEsIDB4MTksIDB4RkYsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OEYsIDB4MDIsIDB4MDAsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NjYsIDB4MDYsIDB4MDAsIDB4MDEsIDB4NjYsIA0KLTB4MDYsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4RTAsIDB4MkUsIDB4NTgsIDB4MUIsIDB4MDAsIDB4MDEsIDB4Q0UsIDB4MkMsIDB4MDAsIDB4NDAsIDB4ODQsIA0KLTB4MkIsIDB4OUEsIDB4MTksIDB4NjYsIDB4MjYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MjQsIDB4NDAsIDB4MDEsIDB4RTYsIDB4MDAsIDB4NjUsIA0KLTB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4RkQsIDB4MUYsIDB4QjAsIDB4NjMsIDB4QUQsIA0KLTB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIA0KLTB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4REEsIA0KLTB4RkYsIDB4RjQsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDANCi19Ow0KLXN0YXRpYyBMVk1fQ0hBUiBMVlZFX1R4X1diX011dGVfRmlsZV9CdWZmZXJbXSA9ew0KLTB4MDMsIDB4MDAsIDB4MDksIDB4MTgsIDB4MDMsIDB4RDUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4QkQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MjAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIA0KLTB4MDAsIDB4MDEsIDB4MDAsIDB4RkYsIDB4MDIsIDB4MzMsIDB4NjMsIDB4MzMsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIA0KLTB4MDAsIDB4MzMsIDB4NjMsIDB4MzMsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4QzAsIDB4NUQsIDB4MTgsIA0KLTB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDMsIDB4NzksIDB4MjgsIDB4MDAsIDB4NDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIA0KLTB4MDAsIDB4MjAsIDB4NEUsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4QTAsIDB4NDEsIDB4ODgsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4RjcsIDB4NDksIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDgsIDB4MjAsIDB4MDAsIDB4MDAsIA0KLTB4MjAsIDB4RTgsIDB4MDMsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MjAsIDB4RTgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDMsIDB4MjAsIDB4MDAsIDB4MDAsIA0KLTB4MjAsIDB4RTgsIDB4MDMsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MjAsIDB4RTgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDMsIDB4OTYsIDB4MDAsIDB4RkYsIA0KLTB4N0YsIDB4OUEsIDB4MTksIDB4RkYsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OEYsIDB4MDIsIDB4MDAsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NjYsIDB4MDYsIDB4MDAsIDB4MDEsIDB4NjYsIA0KLTB4MDYsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4RTAsIDB4MkUsIDB4NTgsIDB4MUIsIDB4MDAsIDB4MDEsIDB4Q0UsIDB4MkMsIDB4MDAsIDB4NDAsIDB4ODQsIA0KLTB4MkIsIDB4OUEsIDB4MTksIDB4NjYsIDB4MjYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MjQsIDB4NDAsIDB4MDEsIDB4RTYsIDB4MDAsIDB4NjUsIA0KLTB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4RkQsIDB4MUYsIDB4QjAsIDB4NjMsIDB4QUQsIA0KLTB4N0YsIDB4OUQsIDB4NUEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIA0KLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIA0KLTB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4Q0UsIDB4RkYsIDB4RTgsIDB4RkYsIDB4MDAsIDB4MDAsIDB4QTAsIDB4RkYsIDB4QkEsIDB4RkYsIDB4REEsIA0KLTB4RkYsIDB4RjQsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgDQotfTsNCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90b3MvYXVkaW9fcHJvY2Vzcy5hIGIvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdG9zL2F1ZGlvX3Byb2Nlc3MuYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNDQ5ZmViZi4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC90b3MvYXVkaW9fcHJvY2Vzcy5hCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdG9zL254cF9EcnZOdkRhdGEuaCBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3Rvcy9ueHBfRHJ2TnZEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQxOGMyNTkuLjAwMDAwMDAKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdG9zL254cF9EcnZOdkRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLy82IGxldmVsIHZvbHVtZQ0KLS8vYWRkIGJ5IHpoYW5nbGl4aWEgDQotLy8jZGVmaW5lIExWV01fVFhfRklMRV9TSVpFICAgIDQ2MyAgICAgLy/X1r3ayv0NCi0vLyNkZWZpbmUgTFZXTV9SWF9GSUxFX1NJWkUgICAgIDE4NjYNCi0NCi0vL2NvbnN0IHN0YXRpYyBMVk1fQ0hBUiBMVlZFX1BhcmFtX1Rlc3RbXSA9e307DQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdWNsaW51eC9MVkNfVHlwZXMuaCBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3VjbGludXgvTFZDX1R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE0ZWZlOGMuLjAwMDAwMDAKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdWNsaW51eC9MVkNfVHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxNCBOWFAgU29mdHdhcmUuIEFsbCByaWdodHMgYXJlIHJlc2VydmVkLiAgICAgICovDQotLyogIFJlcHJvZHVjdGlvbiBpbiB3aG9sZSBvciBpbiBwYXJ0IGlzIHByb2hpYml0ZWQgd2l0aG91dCB0aGUgcHJpb3IgICAgKi8NCi0vKiAgd3JpdHRlbiBjb25zZW50IG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFRoaXMgc29mdHdhcmUgYW5kIGFueSBjb21waWxhdGlvbiBvciBkZXJpdmF0aXZlIHRoZXJlb2YgaXMgYW5kICAgICAgKi8NCi0vKiAgc2hhbGwgcmVtYWluIHRoZSBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiBvZiBOWFAgU29mdHdhcmUgYW5kIGlzICAgICAqLw0KLS8qICBoaWdobHkgY29uZmlkZW50aWFsIGluIG5hdHVyZS4gQW55IGFuZCBhbGwgdXNlIGhlcmVvZiBpcyByZXN0cmljdGVkICovDQotLyogIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gdGhlICAgICAgICAgKi8NCi0vKiAgc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgY29uY2x1ZGVkIHdpdGggTlhQIFNvZnR3YXJlLiAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgaXMgdGhpcyBzb2Z0d2FyZSBvciBhbnkgZGVyaXZhdGl2ZSB0aGVyZW9mICAgKi8NCi0vKiAgdG8gYmUgY29tYmluZWQgd2l0aCBhbnkgT3BlbiBTb3VyY2UgU29mdHdhcmUgaW4gYW55IHdheSBvciAgICAgICAgICAqLw0KLS8qICBsaWNlbnNlZCB1bmRlciBhbnkgT3BlbiBMaWNlbnNlIFRlcm1zIHdpdGhvdXQgdGhlIGV4cHJlc3MgcHJpb3IgICAgICovDQotLyogIHdyaXR0ZW4gIHBlcm1pc3Npb24gb2YgTlhQIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGF1c2UsIHRoZSB0ZXJtIE9wZW4gU291cmNlIFNvZnR3YXJlIG1lYW5zICovDQotLyogIGFueSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIE9wZW4gTGljZW5zZSBUZXJtcy4gT3BlbiAgICAgICAgKi8NCi0vKiAgTGljZW5zZSBUZXJtcyBtZWFucyB0ZXJtcyBpbiBhbnkgbGljZW5zZSB0aGF0IHJlcXVpcmUgYXMgYSAgICAgICAgICAqLw0KLS8qICBjb25kaXRpb24gb2YgdXNlLCBtb2RpZmljYXRpb24gYW5kL29yIGRpc3RyaWJ1dGlvbiBvZiBhIHdvcmsgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgMS4gdGhlIG1ha2luZyBhdmFpbGFibGUgb2Ygc291cmNlIGNvZGUgb3Igb3RoZXIgbWF0ZXJpYWxzICAqLw0KLS8qICAgICAgICAgICAgICBwcmVmZXJyZWQgZm9yIG1vZGlmaWNhdGlvbiwgb3IgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgMi4gdGhlIGdyYW50aW5nIG9mIHBlcm1pc3Npb24gZm9yIGNyZWF0aW5nIGRlcml2YXRpdmUgICAgICAqLw0KLS8qICAgICAgICAgICAgICB3b3Jrcywgb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgMy4gdGhlIHJlcHJvZHVjdGlvbiBvZiBjZXJ0YWluIG5vdGljZXMgb3IgbGljZW5zZSB0ZXJtcyAgICAqLw0KLS8qICAgICAgICAgICAgICBpbiBkZXJpdmF0aXZlIHdvcmtzIG9yIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBvciAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgNC4gdGhlIGdyYW50aW5nIG9mIGEgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gYW55IHBhcnR5ICAgICAqLw0KLS8qICAgICAgICAgICAgICB1bmRlciBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgcmVnYXJkaW5nIHRoZSB3b3JrIGFuZC9vciBhbnkgd29yayB0aGF0IGNvbnRhaW5zLCBpcyBjb21iaW5lZCB3aXRoLCAqLw0KLS8qICByZXF1aXJlcyBvciBvdGhlcndpc2UgaXMgYmFzZWQgb24gdGhlIHdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBmb3IgZWFzZSBvZiByZWNvbXBpbGF0aW9uIG9ubHkuICAgICAgICAgICAqLw0KLS8qICBNb2RpZmljYXRpb24gYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgc3RyaWN0bHkgICovDQotLyogIHByb2hpYml0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0NCi0gICAgICRBdXRob3I6IGJlcTA3NzIwICQNCi0gICAgICRSZXZpc2lvbjogNTUzNTcgJA0KLSAgICAgJERhdGU6IDIwMTQtMDMtMDUgMjI6MTY6MTMgKzA1MzAgKFdlZCwgMDUgTWFyIDIwMTQpICQNCi0NCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKiogQGZpbGUNCi0gKiAgSGVhZGVyIGZpbGUgZGVmaW5pbmcgdGhlIHN0YW5kYXJkIExpZmVWaWJlcyB0eXBlcyBmb3IgdXNlIGluIHRoZSBhcHBsaWNhdGlvbiBsYXllcg0KLSAqICBpbnRlcmZhY2Ugb2YgYWxsIExpZmVWaWJlcyBtb2R1bGVzDQotICovDQotDQotI2lmbmRlZiBMVk1fVFlQRVNfSA0KLSNkZWZpbmUgTFZNX1RZUEVTX0gNCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jZGVmaW5lIExWTV9OVUxMICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgLy8vPCBOVUxMIHBvaW50ZXINCi0NCi0jZGVmaW5lIExWTV9UUlVFICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgLy8vPCBCb29sZWFuIFRydWUNCi0jZGVmaW5lIExWTV9GQUxTRSAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgLy8vPCBCb29sZWFuIEZhbHNlDQotDQotI2RlZmluZSBMVk1fTUFYSU5UXzggICAgICAgICAgICAxMjcgICAgICAgICAgICAgICAgIC8vLzwgTWF4aW11bSBwb3NpdGl2ZSBpbnRlZ2VyIHNpemUNCi0jZGVmaW5lIExWTV9NQVhJTlRfMTYgICAgICAgICAgIDMyNzY3ICAgICAgICAgICAgICAgLy8vPCBNYXhpbXVtIHNpZ25lZCBpbnQgMTYgYml0cyBudW1iZXINCi0jZGVmaW5lIExWTV9NQVhJTlRfMzIgICAgICAgICAgIDIxNDc0ODM2NDcgICAgICAgICAgLy8vPCBNYXhpbXVtIHNpZ25lZCBpbnQgMzIgYml0cyBudW1iZXINCi0jZGVmaW5lIExWTV9NQVhVSU5UXzMyICAgICAgICAgIDQyOTQ5NjcyOTVVICAgICAgICAgLy8vPCBNYXhpbXVtIHVuLXNpZ25lZCBpbnQgMzIgYml0cyBudW1iZXINCi0NCi0jaWYgKCAgZGVmaW5lZChWQVJJQU5UXzI0QklUKSApDQotI2RlZmluZSBMVk1fTUFYRU5VTSAgICAgICAgICAgICA4Mzg4NjA3TCAgICAgICAgICAgIC8vLzwgTWF4aW11bSB2YWx1ZSBmb3IgZW51bWVyYXRvcg0KLSNlbHNlDQotI2RlZmluZSBMVk1fTUFYRU5VTSAgICAgICAgICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgIC8vLzwgTWF4aW11bSB2YWx1ZSBmb3IgZW51bWVyYXRvcg0KLSNlbmRpZg0KLQ0KLSNkZWZpbmUgTFZNX01PRFVMRUlEX01BU0sgICAgICAgMHhGRjAwICAgICAgICAgICAgICAvLy88IE1hc2sgdG8gZXh0cmFjdCB0aGUgY2FsbGluZyBtb2R1bGUgSUQgZnJvbSBjYWxsYmFja0lkDQotI2RlZmluZSBMVk1fRVZFTlRJRF9NQVNLICAgICAgICAweDAwRkYgICAgICAgICAgICAgIC8vLzwgTWFzayB0byBleHRyYWN0IHRoZSBjYWxsYmFjayBldmVudCBmcm9tIGNhbGxiYWNrSWQNCi0NCi0vKiBNZW1vcnkgdGFibGUqLw0KLSNkZWZpbmUgTFZNX01FTVJFR0lPTl9QRVJTSVNURU5UX1NMT1dfREFUQSAgICAgIDAgICAvLy88IE9mZnNldCB0byB0aGUgaW5zdGFuY2UgbWVtb3J5IHJlZ2lvbg0KLSNkZWZpbmUgTFZNX01FTVJFR0lPTl9QRVJTSVNURU5UX0ZBU1RfREFUQSAgICAgIDEgICAvLy88IE9mZnNldCB0byB0aGUgcGVyc2lzdGVudCBkYXRhIG1lbW9yeSByZWdpb24NCi0jZGVmaW5lIExWTV9NRU1SRUdJT05fUEVSU0lTVEVOVF9GQVNUX0NPRUYgICAgICAyICAgLy8vPCBPZmZzZXQgdG8gdGhlIHBlcnNpc3RlbnQgY29lZmZpY2llbnQgbWVtb3J5IHJlZ2lvbg0KLSNkZWZpbmUgTFZNX01FTVJFR0lPTl9URU1QT1JBUllfRkFTVCAgICAgICAgICAgIDMgICAvLy88IE9mZnNldCB0byB0ZW1wb3JhcnkgbWVtb3J5IHJlZ2lvbg0KLQ0KLSNkZWZpbmUgTFZNX05SX01FTU9SWV9SRUdJT05TICAgICAgICAgICAgICAgICAgIDQgICAvLy88IE51bWJlciBvZiBtZW1vcnkgcmVnaW9ucw0KLQ0KLSNkZWZpbmUgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZNX01vZGVfZW4gaW4gTFZXaXJlRm9ybWF0DQotI2RlZmluZSBMVk1fQ09ORklHX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWTV9Db25maWdfZW4gaW4gTFZXaXJlRm9ybWF0DQotI2RlZmluZSBMVk1fRlNfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZNX0ZzX2VuIHNhbXBsZSBSYXRlIGluIExWV2lyZUZvcm1hdA0KLQ0KLSNkZWZpbmUgTFZNX0NIQVJfTFZXSVJFRk9STUFUX0xFTkdUSCAgICgxKQ0KLSNkZWZpbmUgTFZNX0lOVDhfTFZXSVJFRk9STUFUX0xFTkdUSCAgICgxKQ0KLSNkZWZpbmUgTFZNX1VJTlQ4X0xWV0lSRUZPUk1BVF9MRU5HVEggICAoMSkNCi0NCi0jZGVmaW5lIExWTV9JTlQxNl9MVldJUkVGT1JNQVRfTEVOR1RIICAgKDIpDQotI2RlZmluZSBMVk1fVUlOVDE2X0xWV0lSRUZPUk1BVF9MRU5HVEggICAoMikNCi0NCi0jZGVmaW5lIExWTV9JTlQzMl9MVldJUkVGT1JNQVRfTEVOR1RIICAgKDQpDQotI2RlZmluZSBMVk1fVUlOVDMyX0xWV0lSRUZPUk1BVF9MRU5HVEggICAoNCkNCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgQmFzaWMgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWYgZGVmaW5lZChDT1JFX1RJQzY0KQ0KLXR5cGVkZWYgICAgIGNoYXIgICAgICAgICAgICAgICAgTFZNX0NIQVI7ICAgICAgICAgICAvLy88IEFTQ0lJIGNoYXJhY3Rlcg0KLQ0KLXR5cGVkZWYgICAgIGNoYXIgICAgICAgICAgICAgICAgTFZNX0lOVDg7ICAgICAgICAgICAvLy88IFNpZ25lZCA4LWJpdCB3b3JkDQotdHlwZWRlZiAgICAgdW5zaWduZWQgY2hhciAgICAgICBMVk1fVUlOVDg7ICAgICAgICAgIC8vLzwgVW5zaWduZWQgOC1iaXQgd29yZA0KLQ0KLXR5cGVkZWYgICAgIHNob3J0ICAgICAgICAgICAgICAgTFZNX0lOVDE2OyAgICAgICAgICAvLy88IFNpZ25lZCAxNi1iaXQgd29yZA0KLXR5cGVkZWYgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgTFZNX1VJTlQxNjsgICAgICAgICAvLy88IFVuc2lnbmVkIDE2LWJpdCB3b3JkDQotDQotdHlwZWRlZiAgICAgaW50ICAgICAgICAgICAgICAgICBMVk1fSU5UMzI7ICAgICAgICAgIC8vLzwgU2lnbmVkIDMyLWJpdCB3b3JkDQotdHlwZWRlZiAgICAgdW5zaWduZWQgaW50ICAgICAgICBMVk1fVUlOVDMyOyAgICAgICAgIC8vLzwgVW5zaWduZWQgMzItYml0IHdvcmQNCi0jZWxzZQ0KLQ0KLSNpZiAoICBkZWZpbmVkKFZBUklBTlRfRlJBQzE2KSB8fCBkZWZpbmVkIChWQVJJQU5UX1JFRlJFQUwxNikgICApDQotdHlwZWRlZiAgICAgbG9uZyAgICAgICAgICAgICAgICBEQVRBVFlQRTsgICAgICAgICAgIC8vLzwgbG9uZyBkYXRhIHR5cGUNCi0NCi10eXBlZGVmICAgICBjaGFyICAgICAgICAgICAgICAgIExWTV9DSEFSOyAgICAgICAgICAgLy8vPCBBU0NJSSBjaGFyYWN0ZXINCi0NCi10eXBlZGVmICAgICBjaGFyICAgICAgICAgICAgICAgIExWTV9JTlQ4OyAgICAgICAgICAgLy8vPCBTaWduZWQgOC1iaXQgd29yZA0KLXR5cGVkZWYgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgTFZNX1VJTlQ4OyAgICAgICAgICAvLy88IFVuc2lnbmVkIDgtYml0IHdvcmQNCi0NCi10eXBlZGVmICAgICBsb25nICAgICAgICAgICAgICAgIExWTV9JTlQxNjsgICAgICAgICAgLy8vPCBTaWduZWQgMTYtYml0IHdvcmQNCi10eXBlZGVmICAgICBsb25nICAgICAgICAgICAgICAgIExWTV9VSU5UMTY7ICAgICAgICAgLy8vPCBVbnNpZ25lZCAxNi1iaXQgd29yZA0KLQ0KLXR5cGVkZWYgICAgIGxvbmcgICAgICAgICAgICAgICAgTFZNX0lOVDMyOyAgICAgICAgICAvLy88IFNpZ25lZCAzMi1iaXQgd29yZA0KLXR5cGVkZWYgICAgIGxvbmcgICAgICAgICAgICAgICAgTFZNX1VJTlQzMjsgICAgICAgICAvLy88IFVuc2lnbmVkIDMyLWJpdCB3b3JkDQotDQotI2Vsc2UNCi10eXBlZGVmICAgICBjaGFyICAgICAgICAgICAgICAgIExWTV9DSEFSOyAgICAgICAgICAgLy8vPCBBU0NJSSBjaGFyYWN0ZXINCi0NCi10eXBlZGVmICAgICBjaGFyICAgICAgICAgICAgICAgIExWTV9JTlQ4OyAgICAgICAgICAgLy8vPCBTaWduZWQgOC1iaXQgd29yZA0KLXR5cGVkZWYgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgTFZNX1VJTlQ4OyAgICAgICAgICAvLy88IFVuc2lnbmVkIDgtYml0IHdvcmQNCi0NCi10eXBlZGVmICAgICBzaG9ydCAgICAgICAgICAgICAgIExWTV9JTlQxNjsgICAgICAgICAgLy8vPCBTaWduZWQgMTYtYml0IHdvcmQNCi10eXBlZGVmICAgICB1bnNpZ25lZCBzaG9ydCAgICAgIExWTV9VSU5UMTY7ICAgICAgICAgLy8vPCBVbnNpZ25lZCAxNi1iaXQgd29yZA0KLQ0KLXR5cGVkZWYgICAgIGxvbmcgICAgICAgICAgICAgICAgIExWTV9JTlQzMjsgICAgICAgICAgLy8vPCBTaWduZWQgMzItYml0IHdvcmQNCi10eXBlZGVmICAgICB1bnNpZ25lZCBsb25nICAgICAgICBMVk1fVUlOVDMyOyAgICAgICAgIC8vLzwgVW5zaWduZWQgMzItYml0IHdvcmQNCi0jaWYgKCAgZGVmaW5lZChWQVJJQU5UXzI0QklUKSApDQotDQotI2RlZmluZSBMVk1fTUFYSU5UXzI0ICAgICAgICAgICA4Mzg4NjA3TCAgICAgIC8vLzwgMjQgYml0IG1heCBpbnQNCi0jZGVmaW5lIExWTV9NSU5JTlRfMjQgICAgICAgICAgLTgzODg2MDhMICAgIC8vLzwgMjRiaXQgbWluIGludA0KLQ0KLSNkZWZpbmUgTFZNX01BWElOVF80OCAgICAgICAgICAgMTQwNzM3NDg4MzU1MzI3TEwgIC8vLzwgNDhiaXQgbWF4IGludA0KLSNkZWZpbmUgTFZNX01JTklOVF80OCAgICAgICAgICAgLTE0MDczNzQ4ODM1NTMyOExMICAgLy8vPCA0OGJpdCBtaW4gaW50DQotDQotI2VuZGlmIC8vIFZBUklBTlRfMjRCSVQNCi0NCi0jZW5kaWYgLy8gVkFSSUFOVF9GUkFDMTYNCi0NCi0jZW5kaWYgLy8gQ09SRV9USUM2NA0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBTdGFuZGFyZCBFbnVtZXJhdGVkIHR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8qKg0KLVRoZSBAcmVmIExWTV9Nb2RlX2VuIGVudW1lcmF0ZWQgdHlwZSBpcyB1c2VkIHRvIHNldCB0aGUgb3BlcmF0aW5nIG1vZGUgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaW5zaWRlIHRoZSBMaWZlVmliZXMgbW9kdWxlcy4NCi1UaGUgZmVhdHVyZSBjYW4gYmUgc2VwYXJhdGVseSBzZXQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlIHByb2Nlc3NpbmcgKGkuZS4sIE9OKSBvciB0byBkaXNhYmxlIGFsbCBmZWF0dXJlIHByb2Nlc3NpbmcNCi1tb2R1bGVzIChpLmUuLCBPRkYpLg0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVk1fTU9ERV9PRkYgICAgPSAwLCAgICAgLy8vPCBMVk0gbW9kdWxlIGRpc2FibGVkDQotICAgIExWTV9NT0RFX09OICAgICA9IDEsICAgICAvLy88IExWTSBtb2R1bGUgZW5hYmxlZA0KLSAgICBMVk1fTU9ERV9EVU1NWSAgPSBMVk1fTUFYRU5VTQ0KLX0gTFZNX01vZGVfZW47DQotDQotLyoqDQotU2V0cyBzdHJlYW0gRm9ybWF0DQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotICAgIExWTV9TVEVSRU8gICAgICAgICAgPSAwLCAgICAgICAgICAgLy8vPFN0ZXJlbyBzdHJlYW0NCi0gICAgTFZNX01PTk9JTlNURVJFTyAgICA9IDEsICAgICAgICAgICAvLy88TW9ubyBpbiBzdGVyZW8gc3RyZWFtDQotICAgIExWTV9NT05PICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy8vPE1vbm8gc3RyZWFtDQotICAgIExWTV81RE9UMSAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy8vPHN0cmVhbSA1LjEgZm9ybWF0dGVkDQotICAgIExWTV83RE9UMSAgICAgICAgICAgPSA0LCAgICAgICAgICAgLy8vPHN0cmVhbSA3LjEgZm9ybWF0dGVkDQotICAgIExWTV9TT1VSQ0VfRFVNTVkgICAgPSBMVk1fTUFYRU5VTQ0KLX0gTFZNX0Zvcm1hdF9lbjsNCi0NCi0vKioNCi1TZXRzIFNwZWFrZXIgdHlwZQ0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVk1fU1BFQUtFUl9NT05PICAgID0gMCwgICAgICAgIC8vLzwgTW9ubyB0eXBlIHNwZWFrZXINCi0gICAgTFZNX1NQRUFLRVJfU1RFUkVPICA9IDEsICAgICAgICAvLy88IFN0ZXJlbyB0eXBlIHNwZWFrZXINCi0gICAgTFZNX1NQRUFLRVJfRFVNTVkgICA9IExWTV9NQVhFTlVNDQotfSBMVk1fU3BlYWtlclR5cGVfZW47DQotDQotLyoqDQotU2V0cyBXb3JkIGxlbmd0aA0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVk1fMTZfQklUICAgICAgPSAwLCAgICAgICAgICAgLy8vPCAxNiBiaXQgd29yZCBsZW5ndGgNCi0gICAgTFZNXzMyX0JJVCAgICAgID0gMSwgICAgICAgICAgIC8vLzwgMzIgYml0IHdvcmQgbGVuZ3RoDQotICAgIExWTV9XT1JETEVOR1RIX0RVTU1ZID0gTFZNX01BWEVOVU0NCi19IExWTV9Xb3JkTGVuZ3RoX2VuOw0KLQ0KLS8qKg0KLVRoZSBMVk0gcHJvZHVjdCBzdXBwb3J0cyB0aGUgc2FtcGxlIHJhdGVzIHNwZWNpZmllZCBpbiBAcmVmIExWTV9Gc19lbi4gVGhlIGlucHV0IGFuZCBvdXRwdXQgc2FtcGxlIHJhdGVzIGFyZSBhbHdheXMgdGhlIHNhbWUuDQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotICAgIExWTV9GU184MDAwICA9IDAsICAgICAgICAgICAgICAvLy88IDhrIHNhbXBsaW5nIHJhdGUNCi0gICAgTFZNX0ZTXzExMDI1ID0gMSwgICAgICAgICAgICAgIC8vLzwgMTEuMDI1ayBzYW1wbGluZyByYXRlDQotICAgIExWTV9GU18xMjAwMCA9IDIsICAgICAgICAgICAgICAvLy88IDEyayBzYW1wbGluZyByYXRlDQotICAgIExWTV9GU18xNjAwMCA9IDMsICAgICAgICAgICAgICAvLy88IDE2ayBzYW1wbGluZyByYXRlDQotICAgIExWTV9GU18yMjA1MCA9IDQsICAgICAgICAgICAgICAvLy88IDIyLjA1MGsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfMjQwMDAgPSA1LCAgICAgICAgICAgICAgLy8vPCAyNGsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfMzIwMDAgPSA2LCAgICAgICAgICAgICAgLy8vPCAzMmsgc2FtcGxpbmcgcmF0ZQ0KLSAgICBMVk1fRlNfNDQxMDAgPSA3LCAgICAgICAgICAgICAgLy8vPCA0NC4xayBzYW1wbGluZyByYXRlDQotICAgIExWTV9GU180ODAwMCA9IDgsICAgICAgICAgICAgICAvLy88IDQ4ayBzYW1wbGluZyByYXRlDQotICAgIExWTV9GU19DT1VOVCA9IDksICAgICAgICAgICAgICAvLy88IE1heCBzYW1wbGluZyByYXRlIGNvdW50DQotICAgIExWTV9GU19JTlZBTElEID0gTFZNX01BWEVOVU0tMSwNCi0gICAgTFZNX0ZTX0RVTU1ZID0gTFZNX01BWEVOVU0NCi19IExWTV9Gc19lbjsNCi0NCi0vKioNCi1UaGUgZW51bWVyYXRlZCB0eXBlIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSByZXNldCBtb2RlIGZvciB0aGUgbW9kdWxlLg0KLUByZWYgTFZNX1JFU0VUX1NPRlQgaXMgdXNlZCB0byBzZWxlY3QgYSBzb2Z0IHJlc2V0IChvciBwYXJ0aWFsIHJlc2V0KSBhbmQgQHJlZiBMVk1fUkVTRVRfSEFSRCBpcw0KLXVzZWQgdG8gc2VsZWN0IGEgaGFyZCByZXNldCAoZnVsbCByZS1pbml0aWFsaXphdGlvbikuDQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotLyoqDQotPHRhYmxlIGJvcmRlcj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5NT0RFPC9iPjwvdGQ+DQotICAgPC90cj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD5SZXNldFR5cGU8L3RkPg0KLSAgICAgICA8dGQ+QHJlZiBMVk1fUkVTRVRfU09GVDwvdGQ+DQotICAgPC90cj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+QHJlZiBMVk1fUkVTRVRfSEFSRDwvdGQ+DQotICAgPC90cj4NCi08L3RhYmxlPg0KLSovDQotICAgIExWTV9SRVNFVF9TT0ZUICAgID0gMCwgICAgICAgICAvLy88IFJlc2V0IHR5cGUgZm9yIExWTSB3aGVyZSBhIHBhcnRpYWwgcmVzZXQgb2YgdGhlIG1vZHVsZSBzaG91bGQgYmUgcGVyZm9ybWVkDQotICAgIExWTV9SRVNFVF9IQVJEICAgID0gMSwgICAgICAgICAvLy88IFJlc2V0IHR5cGUgZm9yIExWTSB3aGVyZSBhIGZ1bGwgcmVzZXQgb2YgdGhlIG1vZHVsZSBzaG91bGQgYmUgcGVyZm9ybWVkDQotICAgIExWTV9SRVNFVF9EVU1NWSAgID0gTFZNX01BWEVOVU0NCi19IExWTV9SZXNldFR5cGVfZW47DQotDQotLyoqDQotVGhlIEByZWYgTFZNX01lbW9yeVR5cGVzX2VuIGVudW1lcmF0ZWQgdHlwZSBpZGVudGlmaWVzIHRoZSBtZW1vcnkgcmVnaW9uIHR5cGVzIHNvIHRoYXQgdGhleSBjYW4gYmUgY29ycmVjdGx5IHBsYWNlZCBpbiBtZW1vcnkNCi1ieSB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4NCi1UaGUgbW9kdWxlIGluaXRpYWxseSBoYXMgbm8gcGVybWFuZW50IG1lbW9yeSBzdG9yYWdlIGFuZCBtYWtlcyBubyB1c2Ugb2YgcGVyc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBpbnRlcm5hbGx5Lg0KLVRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG11c3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbW9kdWxlIHRvIHVzZS4NCi0NCi1Gb3VyIG1lbW9yeSByZWdpb25zIGFyZSByZXF1aXJlZDoNCi1AbGkgQHJlZiBMVk1fTUVNUkVHSU9OX1BFUlNJU1RFTlRfU0xPV19EQVRBIDogdGhpcyB0eXBlIG9mIG1lbW9yeSBpcyB1c2VkIHRvIHN0b3JlIGFsbCB0aGUgY29udHJvbCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgc2F2ZWQgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgY2FsbHMgdG8gdGhlIHByb2Nlc3MgZnVuY3Rpb24uDQotQGxpIEByZWYgTFZNX01FTVJFR0lPTl9QRVJTSVNURU5UX0ZBU1RfREFUQSA6IHRoaXMgdHlwZSBvZiBtZW1vcnkgaXMgdXNlZCB0byBzdG9yZSBkYXRhIHN1Y2ggYXMgZmlsdGVyIGhpc3RvcnkNCi1AbGkgQHJlZiBMVk1fTUVNUkVHSU9OX1BFUlNJU1RFTlRfRkFTVF9DT0VGIDogdGhpcyB0eXBlIG9mIG1lbW9yeSBpcyB1c2VkIHRvIHN0b3JlIGZpbHRlciBjb2VmZmljaWVudHMuDQotQGxpIEByZWYgTFZNX01FTVJFR0lPTl9URU1QT1JBUllfRkFTVCAoc2NyYXRjaCk6IHRoaXMgdHlwZSBvZiBtZW1vcnkgaXMgdXNlZCB0byBzdG9yZSB0ZW1wb3JhcnkgZGF0YS4gVGhpcyBtZW1vcnkgY2FuIGJlIHJldXNlZCBieSB0aGUgYXBwbGljYXRpb24gaW4gYmV0d2VlbiBjYWxscyB0byB0aGUgcHJvY2VzcyBmdW5jdGlvbi4NCi0NCi1UaGlzIGNvbGxlY3Rpb24gb2YgbWVtb3J5IHJlZ2lvbnMgZm9ybXMgdGhlIG1vZHVsZSBpbnN0YW5jZS4NCi0NCi1UeXBpY2FsbHkgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5OyBob3dldmVyLCBpdCBjYW4gYmUgYWxsb2NhdGVkIHN0YXRpY2FsbHkgaWYgcmVxdWlyZWQuDQotVGhlIHNpemVzIG9mIHRoZSBtZW1vcnkgcmVnaW9ucyBjYW4gYmUgZm91bmQgYnkgcnVubmluZyB0aGUgR2V0TWVtb3J5VGFibGUgZnVuY3Rpb25zIG9uIGEgc2ltdWxhdG9yIGFuZCBub3RpbmcNCi10aGUgcmV0dXJuZWQgdmFsdWVzLiBBbHRlcm5hdGl2ZWx5IGNvbnRhY3QgTlhQIHdobyBjYW4gcHJvdmlkZSB0aGUgZmlndXJlcy4NCi1JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIG1lbW9yeSBzaXplcyB3aWxsIGNoYW5nZSBiZXR3ZWVuIHJlbGVhc2UgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkgYW5kIGhlbmNlIHRoZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZCBpcyBwcmVmZXJyZWQgd2hlcmUgcG9zc2libGUuDQotT24gc29tZSB0YXJnZXQgcGxhdGZvcm1zIHRoZSBwbGFjZW1lbnQgb2YgbWVtb3J5IHJlZ2lvbnMgaXMgY3JpdGljYWwgZm9yIGFjaGlldmluZyBvcHRpbWFsIHBlcmZvcm1hbmNlIG9mIHRoZSBtb2R1bGUuDQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotICAgIExWTV9QRVJTSVNURU5UX1NMT1dfREFUQSAgICA9IExWTV9NRU1SRUdJT05fUEVSU0lTVEVOVF9TTE9XX0RBVEEsICAgICAgIC8vLzwgUGVyc2lzdGVudCBzbG93IG1lbW9yeSByZWdpb24NCi0gICAgTFZNX1BFUlNJU1RFTlRfRkFTVF9EQVRBICAgID0gTFZNX01FTVJFR0lPTl9QRVJTSVNURU5UX0ZBU1RfREFUQSwgICAgICAgLy8vPCBQZXJzaXN0ZW50IGZhc3QgbWVtb3J5IHJlZ2lvbg0KLSAgICBMVk1fUEVSU0lTVEVOVF9GQVNUX0NPRUYgICAgPSBMVk1fTUVNUkVHSU9OX1BFUlNJU1RFTlRfRkFTVF9DT0VGLCAgICAgICAvLy88IFBlcnNpc3RlbiBmYXN0IG1lbW9yeSBmb3IgY29lZmZpY2llbnQgc3RvcmFnZQ0KLSAgICBMVk1fVEVNUE9SQVJZX0ZBU1QgICAgICAgICAgPSBMVk1fTUVNUkVHSU9OX1RFTVBPUkFSWV9GQVNULCAgICAgICAgICAgICAvLy88IFRlbXBvcmFyeSBmYXN0IG1lbW9yeSByZWdpb24NCi0gICAgTFZNX01FTU9SWVRZUEVfRFVNTVkgICAgICAgID0gTFZNX01BWEVOVU0NCi19IExWTV9NZW1vcnlUeXBlc19lbjsNCi0NCi0vKioNCi1TZXRzIG1vZCBvZiBDb25maWd1cmF0aW9uDQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotICAgIExWTV9DT05GSUdfSEFORFNFVCAgICAgICAgICAgID0gMCwgICAgICAgICAgICAgICAgICAvLy88IEhhbmRzZXQgY29uZmlndXJhdGlvbg0KLSAgICBMVk1fQ09ORklHX1NQRUFLRVJQSE9ORSAgICAgICA9IDEsICAgICAgICAgICAgICAgICAgLy8vPCBTcGVha2VyIG1vZCBjb25maWd1cmF0aW9uDQotICAgIExWTV9DT05GSUdfRUFSUElFQ0UgICAgICAgICAgID0gMiwgICAgICAgICAgICAgICAgICAvLy88IEVhcnBpZWNlIGNvbmZpZ3VyYXRpb24NCi0gICAgTFZNX0NPTkZJR19EVU1NWSAgICAgICAgICAgICAgPSBMVk1fTUFYRU5VTQ0KLX0gTFZNX0NvbmZpZ19lbjsNCi0NCi0vKioNCi1UaGUgQHJlZiBMVk1fTWVtb3J5UmVnaW9uX3N0IHR5cGUgZGVmaW5lcyBhIG1lbW9yeSByZWdpb24gYnkgc3BlY2lmeWluZyBpdHMgc2l6ZSBpbiBieXRlcywgaXRzIHJlZ2lvbiB0eXBlIGFuZCBpdHMgYmFzZSBwb2ludGVyLg0KLUBzZWUgTFZNX01lbW9yeVR5cGVzX2VuDQotKi8NCi0jaWYgKCAgZGVmaW5lZChWQVJJQU5UXzI0QklUKSApDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIExWTV9JTlQyNCAgICAgICAgICAgICAgICAgICAgU2l6ZTsgICAgICAgICAgICAgICAgICAgLy8vPCBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBieXRlcw0KLSAgICBMVk1fTWVtb3J5VHlwZXNfZW4gICAgICAgICAgIFR5cGU7ICAgICAgICAgICAgICAgICAgIC8vLzwgVHlwZSBvZiBtZW1vcnkgcmVnaW9uDQotICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAqcEJhc2VBZGRyZXNzOyAgICAgICAgICAgLy8vPCBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIGJhc2UgYWRkcmVzcw0KLX0gTFZNX01lbW9yeVJlZ2lvbl9zdDsNCi0jZWxzZQ0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fVUlOVDMyICAgICAgICAgICAgICAgICAgU2l6ZTsgICAgICAgICAgICAgICAgICAgLy8vPCBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBieXRlcw0KLSAgICBMVk1fTWVtb3J5VHlwZXNfZW4gICAgICAgICAgVHlwZTsgICAgICAgICAgICAgICAgICAgLy8vPCBUeXBlIG9mIG1lbW9yeSByZWdpb24NCi0gICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICpwQmFzZUFkZHJlc3M7ICAgICAgICAgIC8vLzwgUG9pbnRlciB0byB0aGUgbWVtb3J5IHJlZ2lvbiBiYXNlIGFkZHJlc3MNCi19IExWTV9NZW1vcnlSZWdpb25fc3Q7DQotI2VuZGlmDQotDQotLyoqDQotVGhlIExWTV9NZW1vcnlUYWJsZV9zdCB0eXBlIGRlZmluZXMgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgb2YgdGhlIG1vZHVsZSBhcyBhbiBhcnJheSBvZiByZWdpb24gZGVmaW5pdGlvbnMuDQotVGhlIG51bWJlciBvZiByZXF1aXJlZCBtZW1vcnkgcmVnaW9ucyBpcyBnaXZlbiBieSB0aGUgY29uc3RhbnQgQHJlZiBMVk1fTlJfTUVNT1JZX1JFR0lPTlMNCi1Ac2VlIExWTV9NZW1vcnlSZWdpb25fc3QNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fTWVtb3J5UmVnaW9uX3N0ICAgICAgICAgUmVnaW9uW0xWTV9OUl9NRU1PUllfUkVHSU9OU107ICAvLy88IE9uZSBkZWZpbml0aW9uIG9mIGFsbCBtZW1vcnkgcmVnaW9ucw0KLX0gTFZNX01lbW9yeVRhYmxlX3N0Ow0KLQ0KLS8qKg0KLUJlYXRzIFBlciBNaW51dGUgU3RydWN0dXJlDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX0lOVDE2ICAgICAgICAgICAgICAgICAgIFNob3J0VGVybU1pbmltdW07ICAgICAgIC8vLzwgQmVhdHMgcGVyIG1pbnV0ZSBpbiBROS42IGZvcm1hdA0KLSAgICBMVk1fSU5UMTYgICAgICAgICAgICAgICAgICAgU2hvcnRUZXJtQXZlcmFnZTsgICAgICAgLy8vPCBCZWF0cyBwZXIgbWludXRlIGluIFE5LjYgZm9ybWF0DQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICBTaG9ydFRlcm1NYXhpbXVtOyAgICAgICAvLy88IEJlYXRzIHBlciBtaW51dGUgaW4gUTkuNiBmb3JtYXQNCi0NCi0gICAgTFZNX0lOVDE2ICAgICAgICAgICAgICAgICAgIENvbmZpZGVuY2U7ICAgICAgICAgICAgIC8vLzwgQmVhdCBjb25maWRlbmNlIGxldmVsOiAwID0gbm8gY29uZmlkZW5jZSwgMzI3NjcgPSBtYXhpbXVtIGNvbmZpZGVuY2UNCi0gICAgTFZNX0lOVDE2ICAgICAgICAgICAgICAgICAgIFN0cmVuZ3RoOyAgICAgICAgICAgICAgIC8vLzwgQmVhdCBzdHJlbmd0aCBsZXZlbDogICAwID0gbm8gYmVhdCwgMzI3NjcgPSBtYXhpbXVtIHN0cmVuZ3RoIGJlYXQNCi0gICAgTFZNX0lOVDE2ICAgICAgICAgICAgICAgICAgIExvbmdUZXJtTWluaW11bTsgICAgICAgIC8vLzwgQmVhdHMgcGVyIG1pbnV0ZSBpbiBROS42IGZvcm1hdA0KLSAgICBMVk1fSU5UMTYgICAgICAgICAgICAgICAgICAgTG9uZ1Rlcm1BdmVyYWdlOyAgICAgICAgLy8vPCBCZWF0cyBwZXIgbWludXRlIGluIFE5LjYgZm9ybWF0DQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICBMb25nVGVybU1heGltdW07ICAgICAgICAvLy88IEJlYXRzIHBlciBtaW51dGUgaW4gUTkuNiBmb3JtYXQNCi0NCi19IExWTV9CUE1Nb2R1bGVTdGF0c19zdDsNCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgU3RhbmRhcmQgRnVuY3Rpb24gUHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKioNCi1AYnJpZWYgR2VuZXJhbCBwdXJwb3NlIGNhbGxiYWNrIGZ1bmN0aW9uDQotDQotQHBhcmFtIHBDYWxsYmFja0RhdGEgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNhbGxiYWNrIGRhdGEgc3RydWN0dXJlDQotQHBhcmFtIHBHZW5lcmFsUHVycG9zZSAgICAgICAgIEdlbmVyYWwgcHVycG9zZSBwb2ludGVyIChlLmcuIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgbmVlZGVkIGluIHRoZSBjYWxsYmFjaykNCi1AcGFyYW0gUHJlc2V0TGVuZ3RoICAgICAgICAgICAgR2VuZXJhbCBwdXJwb3NlIHZhcmlhYmxlIChlLmcuIHRvIGJlIHVzZWQgYXMgY2FsbGJhY2sgSUQpDQotQHJldHVybiBccmVmIExWTV9JTlQzMg0KLSovDQotdHlwZWRlZiBMVk1fSU5UMzIgKCpMVk1fQ2FsbGJhY2spKHZvaWQgICAgICAgICAgKnBDYWxsYmFja0RhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgKnBHZW5lcmFsUHVycG9zZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZNX0lOVDE2ICAgICBHZW5lcmFsUHVycG9zZSApOw0KLQ0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBFbmQgb2YgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCi0NCi0jZW5kaWYgIC8qIExWTV9UWVBFU19IICovDQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdWNsaW51eC9MVlZFLmggYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC91Y2xpbnV4L0xWVkUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWM0OGQ4ZS4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC91Y2xpbnV4L0xWVkUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogIENvcHlyaWdodCAoYykgMjAwNC0yMDE0IE5YUCBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFJlcHJvZHVjdGlvbiBpbiB3aG9sZSBvciBpbiBwYXJ0IGlzIHByb2hpYml0ZWQgd2l0aG91dCB0aGUgcHJpb3IgICAgICAgICAgICAgICAgICAgICovDQotLyogIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgY29weXJpZ2h0IG93bmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFRoaXMgc29mdHdhcmUgYW5kIGFueSBjb21waWxhdGlvbiBvciBkZXJpdmF0aXZlIHRoZXJlb2YgaXMgYW5kICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHNoYWxsIHJlbWFpbiB0aGUgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gb2YgTlhQIFNvZnR3YXJlIGFuZCBpcyAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGhpZ2hseSBjb25maWRlbnRpYWwgaW4gbmF0dXJlLiBBbnkgYW5kIGFsbCB1c2UgaGVyZW9mIGlzIHJlc3RyaWN0ZWQgICAgICAgICAgICAgICAgICovDQotLyogIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IGNvbmNsdWRlZCB3aXRoIE5YUCBTb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgaXMgdGhpcyBzb2Z0d2FyZSBvciBhbnkgZGVyaXZhdGl2ZSB0aGVyZW9mICAgICAgICAgICAgICAgICAgICovDQotLyogIHRvIGJlIGNvbWJpbmVkIHdpdGggYW55IE9wZW4gU291cmNlIFNvZnR3YXJlIGluIGFueSB3YXkgb3IgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGxpY2Vuc2VkIHVuZGVyIGFueSBPcGVuIExpY2Vuc2UgVGVybXMgd2l0aG91dCB0aGUgZXhwcmVzcyBwcmlvciAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHdyaXR0ZW4gIHBlcm1pc3Npb24gb2YgTlhQIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGNsYXVzZSwgdGhlIHRlcm0gT3BlbiBTb3VyY2UgU29mdHdhcmUgbWVhbnMgICAgICAgICAgICAgICAgICovDQotLyogIGFueSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIE9wZW4gTGljZW5zZSBUZXJtcy4gT3BlbiAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIExpY2Vuc2UgVGVybXMgbWVhbnMgdGVybXMgaW4gYW55IGxpY2Vuc2UgdGhhdCByZXF1aXJlIGFzIGEgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGNvbmRpdGlvbiBvZiB1c2UsIG1vZGlmaWNhdGlvbiBhbmQvb3IgZGlzdHJpYnV0aW9uIG9mIGEgd29yayAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDEuIHRoZSBtYWtpbmcgYXZhaWxhYmxlIG9mIHNvdXJjZSBjb2RlIG9yIG90aGVyIG1hdGVyaWFscyAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIHByZWZlcnJlZCBmb3IgbW9kaWZpY2F0aW9uLCBvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDIuIHRoZSBncmFudGluZyBvZiBwZXJtaXNzaW9uIGZvciBjcmVhdGluZyBkZXJpdmF0aXZlICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIHdvcmtzLCBvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDMuIHRoZSByZXByb2R1Y3Rpb24gb2YgY2VydGFpbiBub3RpY2VzIG9yIGxpY2Vuc2UgdGVybXMgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIGluIGRlcml2YXRpdmUgd29ya3Mgb3IgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24sIG9yICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgIDQuIHRoZSBncmFudGluZyBvZiBhIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGFueSBwYXJ0eSAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgIHVuZGVyIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIHJlZ2FyZGluZyB0aGUgd29yayBhbmQvb3IgYW55IHdvcmsgdGhhdCBjb250YWlucywgaXMgY29tYmluZWQgd2l0aCwgICAgICAgICAgICAgICAgICovDQotLyogIHJlcXVpcmVzIG9yIG90aGVyd2lzZSBpcyBiYXNlZCBvbiB0aGUgd29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgZm9yIGVhc2Ugb2YgcmVjb21waWxhdGlvbiBvbmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIE1vZGlmaWNhdGlvbiBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBzdHJpY3RseSAgICAgICAgICAgICAgICAgICovDQotLyogIHByb2hpYml0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICRBdXRob3I6IG54cDY1Mjg1ICQqLw0KLS8qICAgICAkUmV2aXNpb246IDU2OTA4ICQqLw0KLS8qICAgICAkRGF0ZTogMjAxNC0wNC0xMCAxNzozMDowMiArMDUzMCAoVGh1LCAxMCBBcHIgMjAxNCkgJCovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLyoqDQotQGZpbGUNCi1IZWFkZXIgZmlsZSBmb3IgdGhlIGFwcGxpY2F0aW9uIGxheWVyIGludGVyZmFjZSBvZiB0aGUgTFZWRSBtb2R1bGUuDQotVGhpcyBmaWxlcyBpbmNsdWRlcyBhbGwgZGVmaW5pdGlvbnMsIHR5cGVzLCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzDQotcmVxdWlyZWQgYnkgdGhlIGNhbGxpbmcgbGF5ZXIuIEFsbCBvdGhlciB0eXBlcywgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZQ0KLXByaXZhdGUuDQotKi8NCi0NCi0jaWZuZGVmIF9fTFZWRV9IX18NCi0jZGVmaW5lIF9fTFZWRV9IX18NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgSW5jbHVkZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaW5jbHVkZSAiTFZWRV9WSUQuaCINCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiBCZWxvdyBpbmNsdWRlIGxvZ2ljIGlzIGRlc2lnbmVkIHRvIHJlZHVjZSBjaGVja3MgdG8gMSBvciAyIGNvbmRpdGlvbnMgZHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBiYWNrZW5kIHN0cmlwcGluZyBjb2RlICovDQotDQotDQotDQotDQotDQotI2RlZmluZSBMVlZFX01BWF9QQ01fRlJBTUVfU0laRSAgICAgICAgIDE2MCAgICAgICAgICAgICAgICAgICAgLy8vPCBMVlZFIG1heGltdW0gcHJvY2Vzc2luZyBmcmFtZSBzaXplDQotDQotDQotI2RlZmluZSBMVlZFX05PSVNFU0FNUExFU19QRVJfRlJBTUUgICAgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88IE51bWJlciBvZiBzYW1wbGVzIHJlcXVpcmVkIGZvciBub2lzZSBlc3RpbWF0aW9uIHBlciBmcmFtZQ0KLS8qKg0KLUBkZWYgTFZWRV9SWF9QUkVTRVRfTEVOR1RIDQotTGVuZ3RoIG9mIHRoZSBMVlZFX1J4IHByZXNldCBidWZmZXIgKG51bWJlciBvZiBieXRlcykuDQotQHNlZSBMVlZFX1J4X1NldFByZXNldA0KLUBpbmdyb3VwIExWVkVfUngNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9QUkVTRVRfTEVOR1RIIChMVlZJREhFQURFUl9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKyBMVlZFX1JYX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBSWCBwcmVzZXQgQnVmZmVyIGxlbmd0aA0KLQ0KLS8qKg0KLUBkZWYgTFZWRV9UWF9QUkVTRVRfTEVOR1RIDQotTGVuZ3RoIG9mIHRoZSBMVlZFX1R4IHByZXNldCBidWZmZXIgKG51bWJlciBvZiBieXRlcykuDQotQHNlZSBMVlZFX1R4X1NldFByZXNldA0KLUBpbmdyb3VwIExWVkVfVHgNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9QUkVTRVRfTEVOR1RIIChMVlZJREhFQURFUl9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKyBMVlZFX1RYX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBUWCBwcmVzZXQgYnVmZmVyIGxlbmd0aA0KLQ0KLQ0KLS8qIERlcHJlY2F0ZWQgRGVmaW5pdGlvbnMgKi8NCi0NCi0jZGVmaW5lIExWVkVfTUFYX0JVTEtfREVMQVkgICAgICAgICAgICAgTFZWRV9UWF9CVUxLREVMQVlfTUFYDQotI2RlZmluZSBMVlZFX1JYX01PREVfRFVNTVkgTFZWRV9SWF9NT0RFX0VOX0RVTU1ZDQotI2RlZmluZSBMVlZFX1RYX01PREVfRFVNTVkgTFZWRV9UWF9NT0RFX0VOX0RVTU1ZDQotDQotI2RlZmluZSBMVlZFX01BWF9WT0xfR0FJTl9EQiAgICAgICAgICAgIExWVkVfVFhfVk9MX0dBSU5fTUFYDQotI2RlZmluZSBMVlZFX01JTl9WT0xfR0FJTl9EQiAgICAgICAgICAgIExWVkVfVFhfVk9MX0dBSU5fTUlODQotDQotI2RlZmluZSBMVlZFX01BWF9IUEZfQ09STkVSX0haICAgICAgICAgIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX01BWA0KLSNkZWZpbmUgTFZWRV9NSU5fSFBGX0NPUk5FUl9IWiAgICAgICAgICBMVlZFX1RYX01JQ19IUEZfQ09STkVSRlJFUV9NSU4NCi0NCi0jZGVmaW5lIExWVkVfTUFYX0hQRl9SWF9DT1JORVJfSFogICAgICAgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9NQVgNCi0NCi0jZGVmaW5lIExWVkVfTUFYX05MUFBfTElNSVRfREIgICAgICAgICAgTFZOTFBQX05MUFBfTElNSVRfTUFYDQotI2RlZmluZSBMVlZFX01JTl9OTFBQX0xJTUlUX0RCICAgICAgICAgIExWTkxQUF9OTFBQX0xJTUlUX01JTg0KLQ0KLQ0KLSNkZWZpbmUgTFZWRV9NQVhfRFJDX0xFVkVMICAgICAgICAgICAgICBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NQVgNCi0jZGVmaW5lIExWVkVfTUlOX0RSQ19MRVZFTCAgICAgICAgICAgICAgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUlODQotI2RlZmluZSBMVlZFX01JTl9EUkNfTlVNS05FRVMgICAgICAgICAgIExWRFJDX05VTUtORUVTX01JTg0KLSNkZWZpbmUgTFZWRV9NQVhfRFJDX05VTUtORUVTICAgICAgICAgICBMVkRSQ19OVU1LTkVFU19NQVgNCi0jZGVmaW5lIExWVkVfTUlOX0RSQ19BVFRBQ0tUSU1FICAgICAgICAgTFZEUkNfQVRUQUNLVElNRV9NSU4NCi0jZGVmaW5lIExWVkVfTUFYX0RSQ19BVFRBQ0tUSU1FICAgICAgICAgTFZEUkNfQVRUQUNLVElNRV9NQVgNCi0jZGVmaW5lIExWVkVfTUlOX0RSQ19SRUxFQVNFVElNRSAgICAgICAgTFZEUkNfUkVMRUFTRVRJTUVfTUlODQotI2RlZmluZSBMVlZFX01BWF9EUkNfUkVMRUFTRVRJTUUgICAgICAgIExWRFJDX1JFTEVBU0VUSU1FX01BWA0KLQ0KLQ0KLS8qIEVuZCBkZXByZWNhdGVkIGRlZmluZXMqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8qKg0KLUxWVkVfVHggSW5zdGFuY2UgSGFuZGxlDQotVGhpcyBoYW5kbGUgaXMgdXNlZCBieSBtb3N0IG9mIHRoZSBMVlZFIEFQSXMNCi1Ac2VlIExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGUNCi1AaW5ncm91cCBMVlZFX1R4DQotKi8NCi10eXBlZGVmIHZvaWQgKkxWVkVfVHhfSGFuZGxlX3Q7ICAgLy8vPCBMVlZFIFR4IGhhbmRsZQ0KLS8qKg0KLVRoaXMgaGFuZGxlIGlzIHVzZWQgYnkgbW9zdCBvZiB0aGUgTFZWRSBBUElzDQotQHNlZSBMVlZFX1J4X0dldEluc3RhbmNlSGFuZGxlDQotQGluZ3JvdXAgTFZWRV9SeA0KLSovDQotdHlwZWRlZiB2b2lkICpMVlZFX1J4X0hhbmRsZV90OyAgLy8vPCBMVlZFIFJ4IGhhbmRsZQ0KLQ0KLS8qKg0KLVRoaXMgZW51bSB0eXBlIHNwZWNpZmllcyB0aGUgZGlmZmVyZW50IGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IHRoZSBBUEkgZnVuY3Rpb25zDQotRm9yIHRoZSBleGFjdCBtZWFuaW5nIHNlZSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkZXNjcmlwdGlvbnMNCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZWRV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgICAgICAgLy8vPCBTdWNjZXNzZnVsIHJldHVybiBmcm9tIGEgcm91dGluZQ0KLSAgICBMVlZFX0FMSUdOTUVOVEVSUk9SICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgICAgICAvLy88IE1lbW9yeSBhbGlnbm1lbnQgZXJyb3INCi0gICAgTFZWRV9OVUxMQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgICAgICAgLy8vPCBOVUxMIGFsbG9jYXRpb24gYWRkcmVzcw0KLSAgICBMVlZFX09VVE9GUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgICAgICAvLy88IE91dCBvZiByYW5nZSBwYXJhbWV0ZXINCi0gICAgTFZWRV9JTlZBTElETlVNU0FNUExFUyAgICAgICAgICAgICAgICAgID0gNCwgICAgICAgICAgICAgICAgLy8vPCBJbnZhbGlkIG51bWJlciBvZiBzYW1wbGVzDQotICAgIExWVkVfSU5WQUxJRF9BTEdPUklUSE1fQ09ORklHVVJBVElPTiAgICA9IDUsICAgICAgICAgICAgICAgIC8vLzwgTXV0dWFsbHkgZXhjbHVzaXZlIGFsZ29yaXRobXMgY29uZmlndXJlZCBPTg0KLSAgICBMVlZFX0lOVkFMSURfU1RBVEVfQ09ORklHVVJBVElPTiAgICAgICAgPSA2LCAgICAgICAgICAgICAgICAvLy88IEludmFsaWQgc3RhdGUgb2YgdGhlIGFsZ29yaXRobQ0KLSAgICBMVlZFX1BSRVNFVF9JTlZBTElEX0JVRkZFUl9MRU5HVEggICAgICAgPSA3LCAgICAgICAgICAgICAgICAvLy88IEluY29ycmVjdCBsZW5ndGggb2YgYnVmZmVyIHVzZWQgaW4gU2V0UHJlc2V0DQotICAgIExWVkVfUFJFU0VUX0lOVkFMSURfVk9MVU1FX0lOREVYICAgICAgICA9IDgsICAgICAgICAgICAgICAgIC8vLzwgVGhlIHZvbHVtZSBpbmRleCBleGNlZWRzIHRoZSBidWZmZXIgY29udGVudCBpbiBTZXRQcmVzZXQNCi0gICAgTFZWRV9QUkVTRVRfSU5WQUxJRF9CVUZGRVJfVkVSU0lPTiAgICAgID0gOSwgICAgICAgICAgICAgICAgLy8vPCBUaGUgdmVyc2lvbiBvZiB0aGUgcHJlc2V0IGJ1ZmZlciBkb2VzIG5vdCBtYXRjaCB0aGlzIGxpYnJhcnkNCi0gICAgTFZWRV9QUkVTRVRfSU5WQUxJRF9CQVNFTElORV9WRVJTSU9OICAgID0gMTAsICAgICAgICAgICAgICAgLy8vPCBJbnZhbGlkIExWVkUgQmFzZWxpbmUgVmVyc2lvbiBpbiBwcmVzZXQgYnVmZmVyDQotICAgIExWVkVfUFJFU0VUX0lOVkFMSURfTUFTSyAgICAgICAgICAgICAgICA9IDExLCAgICAgICAgICAgICAgIC8vLzwgSW52YWxpZCBhbGdvcml0aG0gbWFzayBpbiBwcmVzZXQgYnVmZmVyDQotICAgIExWVkVfUFJFU0VUX0lOVkFMSURfU0FNUExFX1JBVEUgICAgICAgICA9IDEyLCAgICAgICAgICAgICAgIC8vLzwgSW52YWxpZCBzYW1wbGUgcmF0ZSBAcmVmIExWTV9Gc19lbiBpbiBwcmVzZXQgYnVmZmVyDQotICAgIExWVkVfUFJFU0VUX0lOVkFMSURfTFZXSVJFRk9STUFUX01FU1NBR0VJRCA9IDEzLCAgICAgICAgICAgIC8vLzwgSW52YWxpZCBAcmVmIExWVklESGVhZGVyX01lc3NhZ2VJRF9lbiB3aXJlIGZvcm1hdCBtZXNzYWdlIGlkIGluIHByZXNldCBidWZmZXINCi0NCi0gICAgTFZWRV9SRVRVUk5TVEFUVVNfRFVNTVkgICAgICAgICAgICAgICAgID0gTFZNX01BWEVOVU0NCi19IExWVkVfUmV0dXJuU3RhdHVzX2VuOw0KLQ0KLS8qKg0KLUJ5dGUgYXJyYXkgY29udGFpbmluZyBlbmNvZGVkIExWVkVfUnhfQ29udHJvbFBhcmFtcyBmb3Igb25lIG9yIG11bHRpcGxlIHZvbHVtZXMuDQotVGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5IHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIEByZWYgTFZWRV9SWF9QUkVTRVRfTEVOR1RILg0KLUBzZWUgTFZWRV9SeF9TZXRQcmVzZXQNCi1AaW5ncm91cCBMVlZFX1J4DQotKi8NCi10eXBlZGVmIExWTV9DSEFSKiBMVlZFX1J4X1ByZXNldF90OyAvLy88IExWVkUgUnggcHJlc2V0IGJ1ZmZlcg0KLQ0KLS8qKg0KLUJ5dGUgYXJyYXkgY29udGFpbmluZyBlbmNvZGVkIExWVkVfVHhfQ29udHJvbFBhcmFtcyBmb3Igb25lIG9yIG11bHRpcGxlIHZvbHVtZXMuDQotVGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5IHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIEByZWYgTFZWRV9UWF9QUkVTRVRfTEVOR1RILg0KLUBzZWUgTFZWRV9UeF9TZXRQcmVzZXQNCi1AaW5ncm91cCBMVlZFX1R4DQotKi8NCi10eXBlZGVmIExWTV9DSEFSKiBMVlZFX1R4X1ByZXNldF90OyAgLy8vPCBMVlZFIFR4IHByZXNldCBidWZmZXINCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgU3RydWN0dXJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKioNCi1UaGUgaW5zdGFuY2UgcGFyYW1ldGVycyBkZWZpbmUgY2VydGFpbiBpbXBvcnRhbnQgb3BlcmF0aW5nIGxpbWl0cyByZXF1aXJlZCBieSB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4NCi1UaGVzZSBpbnN0YW5jZSBwYXJhbWV0ZXJzIGFmZmVjdCBob3cgbXVjaCBtZW1vcnkgaXMgcmVxdWlyZWQgYnkgdGhlIExWVkUgYW5kIGhlbmNlIG11c3QgYmUgcHJvdmlkZWQNCi13aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLg0KLUBzZWUgTFZWRV9SeF9HZXRNZW1vcnlUYWJsZQ0KLUBzZWUgTFZWRV9SeF9HZXRJbnN0YW5jZUhhbmRsZQ0KLUBzZWUgTFZWRV9UeF9HZXRNZW1vcnlUYWJsZQ0KLUBzZWUgTFZWRV9UeF9HZXRJbnN0YW5jZUhhbmRsZQ0KLSovDQotLyoqDQotRVEgTW9kdWxlIEluc3RhbmNlIFBhcmFtZXRlcnMgU3RydWN0dXJlLg0KLUBzZWUgTFZFUV9JbnN0YW5jZVBhcmFtc19zdA0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotLyoqDQotTWF4IFNpemUgb2YgRXF1YWxpemVyDQotU2V0cyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlIHRoYXQgY2FuIGJlIHVzZWQuDQotSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguDQotPHRhYmxlIGJvcmRlcj4NCi08Y2FwdGlvbj5FUSBNYXggTGVuZ3RoIFRhYmxlPC9jYXB0aW9uPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjxiPlVuaXQ8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPlEgZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5EYXRhIFJhbmdlPC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5EZWZhdWx0IFZhbHVlczwvYj48L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PGI+SW50ZWdlciBMZW5ndGggaW4gU2FtcGxlczwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+UTE2LjA8L2I+PC90ZD4NCi0gICAgICAgPHRkPls4LFxyZWYgTFZFUV9FUV9MRU5HVEhfTUFYXTwvdGQ+DQotICAgICAgIDx0ZD5ccmVmIExWRVFfRVFfTEVOR1RIX0RFRkFVTFQ8L3RkPg0KLSAgIDwvdHI+DQotPC90YWJsZT4NCi0qLw0KLSAgICBMVk1fVUlOVDE2ICAgICAgICAgICAgICAgICAgICBFUV9NYXhMZW5ndGg7ICAvLy88IEVRIE1heCBMZW5ndGgNCi19IExWRVFfSW5zdGFuY2VQYXJhbXNfc3Q7DQotDQotLyoqDQotVHggSW5zdGFuY2UgUGFyYW1ldGVyIFN0cnVjdHVyZQ0KLVRoZXNlIHBhcmFtZXRlcnMgYXJlIHNldCBhdCBpbml0aWFsaXphdGlvbiB0aW1lIGFuZCBtYXkgbm90IGJlIGNoYW5nZWQgZHVyaW5nIHByb2Nlc3NpbmcNCi1AcmVmIExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGUNCi1AaW5ncm91cCBMVlZFX1R4DQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX0ZzX2VuICAgICAgICAgICAgICAgICAgIFNhbXBsZVJhdGU7ICAgICAgLy8vPCBTYW1wbGUgcmF0ZQ0KLS8qKg0KLVNldHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBidWxrIGRlbGF5IGJldHdlZW4gUnggYW5kIFR4IGV4cHJlc3NlZCBpbiBzYW1wbGVzLg0KLVRoZSB1bml0IG9mIE1heEJ1bGtEZWxheSBpcyBbbnVtYmVyIG9mIHNhbXBsZXNdIGF0IHRoZSByZXNwZWN0aXZlIHNhbXBsaW5nIHJhdGUuDQotPHRhYmxlIGJvcmRlcj4NCi08Y2FwdGlvbj5NYXggQnVsayBEZWxheSBUYWJsZTwvY2FwdGlvbj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48Yj5UeXBlPC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5Vbml0PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5RIGZvcm1hdDwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGF0YSBSYW5nZTwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+RGVmYXVsdCBWYWx1ZXM8L2I+PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjxiPkxWTV9VSU5UMTY8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPkludGVnZXIgTGVuZ3RoIGluIFNhbXBsZXM8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPlExNi4wPC9iPjwvdGQ+DQotICAgICAgIDx0ZD5bMCw2NDAwXTwvdGQ+DQotICAgICAgIDx0ZD5Ob25lPC90ZD4NCi0gICA8L3RyPg0KLTwvdGFibGU+DQotKi8NCi0gICAgTFZNX1VJTlQxNiAgICAgICAgICAgICAgICAgIE1heEJ1bGtEZWxheTsgICAgIC8vLzwgTWF4IGJ1bGsgZGVsYXkNCi0NCi0gICAgTFZFUV9JbnN0YW5jZVBhcmFtc19zdCAgICAgIEVRX0luc3RQYXJhbXM7ICAvLy88IEVRIGluc3RhbmNlDQotfSBMVlZFX1R4X0luc3RhbmNlUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLVJ4IEluc3RhbmNlIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi1UaGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYXQgaW5pdGlhbGl6YXRpb24gdGltZSBhbmQgbWF5IG5vdCBiZSBjaGFuZ2VkIGR1cmluZyBwcm9jZXNzaW5nLg0KLUByZWYgTFZWRV9SeF9HZXRJbnN0YW5jZUhhbmRsZQ0KLUBpbmdyb3VwIExWVkVfUngNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fRnNfZW4gICAgICAgICAgICAgICAgICAgU2FtcGxlUmF0ZTsgICAgICAgICAgICAvLy88IExWVkUgc2FtcGxlIHJhdGUNCi0gICAgTFZFUV9JbnN0YW5jZVBhcmFtc19zdCAgICAgIEVRX0luc3RQYXJhbXM7Ly8vPCBFUSBpbnN0YW5jZQ0KLQ0KLX0gTFZWRV9SeF9JbnN0YW5jZVBhcmFtc19zdDsNCi0NCi0vKioNCi1UaGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgY29udGFpbnMgb25lIGNoYXJhY3RlciBmaWVsZCB0byBzdG9yZSBMVlZFIHZlcnNpb24gbnVtYmVyLg0KLUEgY2FsbCB0byB0aGUgQHJlZiBMVlZFX0dldFZlcnNpb25JbmZvIGZ1bmN0aW9uIGlzIG5lZWRlZCB0byByZXRyaWV2ZSB0aGlzIGluZm9ybWF0aW9uLg0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIExWTV9DSEFSICAgICAgICAgICAgICAgICAgICBWZXJzaW9uTnVtYmVyWzY0XTsgIC8vLzwgVmVyc2lvbiBudW1iZXIgb2YgdGhlIExpZmVWaWJlcyZ0cmFkZTsgVm9pY2VFeHBlcmllbmNlIGxpYnJhcnkNCi19IExWVkVfVmVyc2lvbkluZm87DQotDQotLyoqDQotVXNlZCB0byByZXNldCBMVlZFX1J4IG1vZHVsZSBhbnkgdGltZS4NCi1AcmVmIExWTV9SZXNldFR5cGVfZW4gcGFyYW1ldGVyIGRldGVybWluZSB0aGUgdHlwZSBvZiByZXNldCByZXF1aXJlZA0KLUBpbmdyb3VwIExWVkVfUngNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fUmVzZXRUeXBlX2VuIFJlc2V0VHlwZTsgIC8vLzwgUlggUmVzZXQgVHlwZQ0KLX0gTFZWRV9SeF9SZXNldFBhcmFtc19zdDsNCi0NCi0vKioNCi1Vc2VkIHRvIHJlc2V0IExWVkVfVHggbW9kdWxlIGFueSB0aW1lLg0KLUxWTV9SZXNldFR5cGVfZW4gcGFyYW1ldGVyIGRldGVybWluZSB0aGUgdHlwZSBvZiByZXNldCByZXF1aXJlZA0KLUBpbmdyb3VwIExWVkVfVHgNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBMVk1fUmVzZXRUeXBlX2VuIFJlc2V0VHlwZTsgICAvLy88IFRYIFJlc2V0IFR5cGUNCi19IExWVkVfVHhfUmVzZXRQYXJhbXNfc3Q7DQotDQotLyoqDQotQGJyaWVmIFJldHJpZXZlIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBMVlZFX1R4IG1vZHVsZS4NCi0NCi1UaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0YWJsZSBvZiBtZW1vcnkgcmVjb3JkcyB0aGF0IGRlc2NyaWJlIHNpemUsIHR5cGUgYW5kIG1lbW9yeSBzcGFjZSBvZiBhbGwgYnVmZmVycw0KLXJlcXVpcmVkIGJ5IHRoZSBpbnN0YW5jZS4gVGhlIG51bWJlciBvZiBpbml0aWFsaXplZCBtZW1vcnkgcmVjb3JkcyBpcyBkZWZpbmVkIGJ5IExWVkVfTlJfTUVNT1JZX1JFR0lPTlMuDQotVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB0d28gcHVycG9zZXMgYW5kIGlzIGNhbGxlZCBpbiB0d28gZGlmZmVyZW50IHdheXM6DQotDQotQGxpIE1lbW9yeSBBbGxvY2F0aW9uOiBXaGVuIHRoZSBMVlZFX0dldE1lbW9yeVRhYmxlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggYSBOVUxMIGluc3RhbmNlIGhhbmRsZSAoaEluc3RhbmNlID0gTFZNX05VTEwpDQotICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzLiBUaGUgYmFzZSBhZGRyZXNzIHBvaW50ZXJzIGluIHRoZSBtZW1vcnkgdGFibGUgYXJlIHNldCB0byBOVUxMLg0KLSAgICBBbGwgZWxlbWVudHMgb2YgdGhlIGluc3RhbmNlIHBhcmFtZXRlcnMgc3RydWN0dXJlIChwb2ludGVkIHRvIGJ5IHBJbnN0UGFyYW1zKSBtdXN0IGNvbnRhaW4gdmFsaWQgdmFsdWVzIGFzIHRoZSBtZW1vcnkNCi0gICAgcmVxdWlyZW1lbnRzIGFyZSBhZmZlY3RlZCBieSB0aGVzZSBzZXR0aW5ncy4NCi0NCi1AbGkgTWVtb3J5IEZyZWU6IFdoZW4gY2FsbGVkIHdpdGggYSBub24tTlVMTCBpbnN0YW5jZSBoYW5kbGUgKGhJbnN0YW5jZSA9IGEgdmFsaWQgaW5zdGFuY2UgaGFuZGxlKQ0KLSAgICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZW1vcnkgdGFibGUgdXNlZCB3aGVuIHRoZSBpbnN0YW5jZSB3YXMgY3JlYXRlZC4NCi0gICAgICBUaGUgYmFzZSBhZGRyZXNzIHBvaW50ZXJzIHJldHVybmVkIHdpbGwgYmUgdGhvc2Ugc3VwcGxpZWQgYnkgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gd2hlbiB0aGUgbWVtb3J5DQotICAgICAgd2FzIGFsbG9jYXRlZCBhbmQgY2FuIG5vdyBiZSB1c2VkIGZvciBmcmVlaW5nIG1lbW9yeS4gVGhlIGluc3RhbmNlIHBhcmFtZXRlcnMgKHBvaW50ZWQgdG8gYnkgcEluc3RQYXJhbXMpDQotICAgICAgYXJlIGlnbm9yZWQgYW5kIHRoZSBwSW5zdFBhcmFtcyBwYXJhbWV0ZXIgbWF5IGJlIHNldCB0byBOVUxMLg0KLUBsaSBJbiBjYXNlIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBhbGwgZWxlbWVudHMgb2YgdGhlIHBhcmFtZXRlciBpbml0aWFsaXphdGlvbiBzdHJ1Y3R1cmUgZGVmaW5lZCBieSBwSW5zdFBhcmFtcw0KLSAgICBtdXN0IGNvbnRhaW4gdmFsaWQgdmFsdWVzIGFzIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFyZSBhZmZlY3RlZCBieSB0aGVzZSBzZXR0aW5ncy4NCi0gICAgSW4gc29tZSByZWxlYXNlcyBvZiB0aGUgYnVuZGxlIGxpYnJhcnkgb25lIG9yIG1vcmUgbWVtb3J5IHJlZ2lvbnMgbWF5IGhhdmUgYSB6ZXJvIHNpemUuDQotDQotQHByZSBUaGUgbnVtYmVyIG9mIG1lbW9yeSByZWNvcmRzIGluIHRoZSBhcnJheSBkZWZpbmVkIGJ5IHBNZW1vcnlUYWJsZSBpcyBlcXVhbCB0byBAcmVmIExWTV9OUl9NRU1PUllfUkVHSU9OUy4NCi1AcHJlIEV4YWN0bHkgQHJlZiBMVk1fTlJfTUVNT1JZX1JFR0lPTlMgbWVtb3J5IHJlY29yZHMgb2YgcE1lbW9yeVRhYmxlIGFyZSBpbml0aWFsaXplZC4NCi0NCi1AcG9zdCBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaEluc3RhbmNlID0gTlVMTCB0aGUgbWVtb3J5IGJhc2UgYWRkcmVzcyBwb2ludGVycw0KLXdpbGwgYmUgTlVMTCBvbiByZXR1cm4uDQotQHBvc3QgV2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBmcmVlaW5nIG1lbW9yeSwgaEluc3RhbmNlID0gSW5zdGFuY2UgSGFuZGxlIHRoZQ0KLW1lbW9yeSB0YWJsZSByZXR1cm5zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGFuZCBiYXNlIGFkZHJlc3NlcyB1c2VkIGR1cmluZw0KLWluaXRpYWxpc2F0aW9uLg0KLQ0KLUByZXR1cm4gIExWVkVfU1VDQ0VTUyAgICAgICAgICAgd2hlbiB0aGUgZnVuY3Rpb24gY2FsbCBzdWNjZWVkcyBhbmQgdGhlIG1lbW9yeSB0YWJsZSBpcyBmaWxsZWQgY29ycmVjdGx5DQotQHJldHVybiAgTFZWRV9OVUxMQUREUkVTUyAgICAgICB3aGVuIHBNZW1vcnlUYWJsZSB3YXMgTlVMTA0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgd2hlbiBwSW5zdFBhcmFtcyB3YXMgTlVMTCBhbmQgdGhlIGNhbGwgd2FzIGZvciBtZW1vcnkgYWxsb2NhdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgTlVMTC4NCi1AcmV0dXJuICBMVlZFX09VVE9GUkFOR0UgICAgICAgIHdoZW4gcEluc3RQYXJhbXMgY29udGFpbnMgcGFyYW1ldGVycyBvdXQgb2YgdGhlIGV4Y2VwdGVkIHJhbmdlDQotDQotQG5vdGUgIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludGVycnVwdGVkIGJ5IHRoZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24uDQotDQotQGluZ3JvdXAgTFZWRV9UeA0KLQ0KLUxWVkVfVHhfR2V0TWVtb3J5VGFibGU6IE1lbW9yeSBBbGxvY2F0aW9uIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBnZXQgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIHRoZSBMVlZFX1R4IGluc3RhbmNlLg0KLVxjb2RlDQotICAgIEluc3RQYXJhbXNfVHguU2FtcGxlUmF0ZSAgICA9IExWTV9GU184MDAwOw0KLSAgICAvLyBJbmNsdWRlIHRoZSBvdGhlciBpbnN0YW5jZSBwYXJhbXMgaGVyZQ0KLQ0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfVHhfR2V0TWVtb3J5VGFibGUgKCBMVk1fTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1lbVRhYl9UeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluc3RQYXJhbXNfVHggKTsNCi0NCi0gICAgaWYoIExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLQ0KLSAgICBmb3IoIGMxID0gMDsgYzEgPCBMVlZFX05SX01FTU9SWV9SRUdJT05TOyBjMSsrICkNCi0gICAgew0KLSAgICAgICAgaWYoIE1lbVRhYl9UeC5SZWdpb25bYzFdLlNpemUgIT0gMCApDQotICAgICAgICB7DQotICAgICAgICAgICAgTWVtVGFiX1R4LlJlZ2lvbltjMV0ucEJhc2VBZGRyZXNzID0NCi0gICAgICAgICAgICAgICAgbWFsbG9jKE1lbVRhYl9UeC5SZWdpb25bYzFdLlNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi1MVlZFX1R4X0dldE1lbW9yeVRhYmxlOiBGcmVlaW5nIE1lbW9yeSBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gZnJlZSB0aGUgbWVtb3J5IGZyb20gdGhlIExWVkVfVHggaW5zdGFuY2UuDQotDQotXGNvZGUNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1R4X0dldE1lbW9yeVRhYmxlKCBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNZW1UYWJfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9OVUxMKTsNCi0NCi0gICAgICAgIGlmIChMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9ycw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZm9yKCBjMSA9IDA7IGMxIDwgTFZWRV9OUl9NRU1PUllfUkVHSU9OUzsgYzErKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoTWVtVGFiX1R4LlJlZ2lvbltjMV0uU2l6ZSAhPSAwKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgZnJlZShNZW1UYWJfVHguUmVnaW9uW2MxXS5wQmFzZUFkZHJlc3MpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi1cZW5kY29kZQ0KLQ0KLSovDQotDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9UeF9HZXRNZW1vcnlUYWJsZShMVlZFX1R4X0hhbmRsZV90ICAgICAgICAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZNX01lbW9yeVRhYmxlX3N0ICAgICAgICAgICAgICpwTWVtb3J5VGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1R4X0luc3RhbmNlUGFyYW1zX3N0ICAgICAgKnBJbnN0YW5jZVBhcmFtcyk7DQotDQotLyoqDQotQGJyaWVmIFJldHJpZXZlIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBMVlZFX1J4IG1vZHVsZS4NCi0NCi1UaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0YWJsZSBvZiBtZW1vcnkgcmVjb3JkcyB0aGF0IGRlc2NyaWJlIHNpemUsIHR5cGUgYW5kIG1lbW9yeSBzcGFjZSBvZiBhbGwgYnVmZmVycw0KLXJlcXVpcmVkIGJ5IHRoZSBpbnN0YW5jZS4gVGhlIG51bWJlciBvZiBpbml0aWFsaXplZCBtZW1vcnkgcmVjb3JkcyBpcyBkZWZpbmVkIGJ5IExWVkVfTlJfTUVNT1JZX1JFR0lPTlMuDQotVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB0d28gcHVycG9zZXMgYW5kIGlzIGNhbGxlZCBpbiB0d28gZGlmZmVyZW50IHdheXM6DQotDQotQGxpIE1lbW9yeSBBbGxvY2F0aW9uOiBXaGVuIHRoZSBMVlZFX0dldE1lbW9yeVRhYmxlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggYSBOVUxMIGluc3RhbmNlIGhhbmRsZSAoaEluc3RhbmNlID0gTFZNX05VTEwpDQotICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzLiBUaGUgYmFzZSBhZGRyZXNzIHBvaW50ZXJzIGluIHRoZSBtZW1vcnkgdGFibGUgYXJlIHNldCB0byBOVUxMLg0KLSAgICBBbGwgZWxlbWVudHMgb2YgdGhlIGluc3RhbmNlIHBhcmFtZXRlcnMgc3RydWN0dXJlIChwb2ludGVkIHRvIGJ5IHBJbnN0UGFyYW1zKSBtdXN0IGNvbnRhaW4gdmFsaWQgdmFsdWVzIGFzIHRoZSBtZW1vcnkNCi0gICAgcmVxdWlyZW1lbnRzIGFyZSBhZmZlY3RlZCBieSB0aGVzZSBzZXR0aW5ncy4NCi0NCi1AbGkgTWVtb3J5IEZyZWU6IFdoZW4gY2FsbGVkIHdpdGggYSBub24tTlVMTCBpbnN0YW5jZSBoYW5kbGUgKGhJbnN0YW5jZSA9IGEgdmFsaWQgaW5zdGFuY2UgaGFuZGxlKQ0KLSAgICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZW1vcnkgdGFibGUgdXNlZCB3aGVuIHRoZSBpbnN0YW5jZSB3YXMgY3JlYXRlZC4NCi0gICAgICBUaGUgYmFzZSBhZGRyZXNzIHBvaW50ZXJzIHJldHVybmVkIHdpbGwgYmUgdGhvc2Ugc3VwcGxpZWQgYnkgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gd2hlbiB0aGUgbWVtb3J5DQotICAgICAgd2FzIGFsbG9jYXRlZCBhbmQgY2FuIG5vdyBiZSB1c2VkIGZvciBmcmVlaW5nIG1lbW9yeS4gVGhlIGluc3RhbmNlIHBhcmFtZXRlcnMgKHBvaW50ZWQgdG8gYnkgcEluc3RQYXJhbXMpDQotICAgICAgYXJlIGlnbm9yZWQgYW5kIHRoZSBwSW5zdFBhcmFtcyBwYXJhbWV0ZXIgbWF5IGJlIHNldCB0byBOVUxMLg0KLUBsaSBJbiBjYXNlIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBhbGwgZWxlbWVudHMgb2YgdGhlIHBhcmFtZXRlciBpbml0aWFsaXphdGlvbiBzdHJ1Y3R1cmUgZGVmaW5lZCBieSBwSW5zdFBhcmFtcw0KLSAgICBtdXN0IGNvbnRhaW4gdmFsaWQgdmFsdWVzIGFzIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFyZSBhZmZlY3RlZCBieSB0aGVzZSBzZXR0aW5ncy4NCi0gICAgSW4gc29tZSByZWxlYXNlcyBvZiB0aGUgYnVuZGxlIGxpYnJhcnkgb25lIG9yIG1vcmUgbWVtb3J5IHJlZ2lvbnMgbWF5IGhhdmUgYSB6ZXJvIHNpemUuDQotDQotQHByZSBUaGUgbnVtYmVyIG9mIG1lbW9yeSByZWNvcmRzIGluIHRoZSBhcnJheSBkZWZpbmVkIGJ5IHBNZW1vcnlUYWJsZSBpcyBlcXVhbCB0byBAcmVmIExWTV9OUl9NRU1PUllfUkVHSU9OUy4NCi1AcHJlIEV4YWN0bHkgQHJlZiBMVk1fTlJfTUVNT1JZX1JFR0lPTlMgbWVtb3J5IHJlY29yZHMgb2YgcE1lbW9yeVRhYmxlIGFyZSBpbml0aWFsaXplZC4NCi0NCi1AcG9zdCBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaEluc3RhbmNlID0gTlVMTCB0aGUgbWVtb3J5IGJhc2UgYWRkcmVzcyBwb2ludGVycw0KLXdpbGwgYmUgTlVMTCBvbiByZXR1cm4uDQotQHBvc3QgV2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBmcmVlaW5nIG1lbW9yeSwgaEluc3RhbmNlID0gSW5zdGFuY2UgSGFuZGxlIHRoZQ0KLW1lbW9yeSB0YWJsZSByZXR1cm5zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGFuZCBiYXNlIGFkZHJlc3NlcyB1c2VkIGR1cmluZw0KLWluaXRpYWxpc2F0aW9uLg0KLQ0KLUByZXR1cm4gIExWVkVfU1VDQ0VTUyAgICAgICAgICAgd2hlbiB0aGUgZnVuY3Rpb24gY2FsbCBzdWNjZWVkcyBhbmQgdGhlIG1lbW9yeSB0YWJsZSBpcyBmaWxsZWQgY29ycmVjdGx5DQotQHJldHVybiAgTFZWRV9OVUxMQUREUkVTUyAgICAgICB3aGVuIHBNZW1vcnlUYWJsZSB3YXMgTlVMTA0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgd2hlbiBwSW5zdFBhcmFtcyB3YXMgTlVMTCBhbmQgdGhlIGNhbGwgd2FzIGZvciBtZW1vcnkgYWxsb2NhdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgTlVMTC4NCi1AcmV0dXJuICBMVlZFX09VVE9GUkFOR0UgICAgICAgIHdoZW4gcEluc3RQYXJhbXMgY29udGFpbnMgcGFyYW1ldGVycyBvdXQgb2YgdGhlIGV4Y2VwdGVkIHJhbmdlDQotDQotQG5vdGUgIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludGVycnVwdGVkIGJ5IHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24uDQotDQotQGluZ3JvdXAgTFZWRV9SeA0KLQ0KLUxWVkVfUnhfR2V0TWVtb3J5VGFibGU6IE1lbW9yeSBBbGxvY2F0aW9uIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBnZXQgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIHRoZSBMVlZFX1J4IGluc3RhbmNlLg0KLQ0KLVxjb2RlDQotICAgIEluc3RQYXJhbXNfUnguU2FtcGxlUmF0ZSAgICA9IExWTV9GU184MDAwOw0KLSAgICAvLyBJbmNsdWRlIHRoZSBvdGhlciBpbnN0YW5jZSBwYXJhbXMgaGVyZQ0KLQ0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfUnhfR2V0TWVtb3J5VGFibGUgKCBMVk1fTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1lbVRhYl9SeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkluc3RQYXJhbXNfUnggKTsNCi0NCi0gICAgaWYoIExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLQ0KLSAgICBmb3IoIGMxID0gMDsgYzEgPCBMVlZFX05SX01FTU9SWV9SRUdJT05TOyBjMSsrICkNCi0gICAgew0KLSAgICAgICAgaWYoIE1lbVRhYl9SeC5SZWdpb25bYzFdLlNpemUgIT0gMCApDQotICAgICAgICB7DQotICAgICAgICAgICAgTWVtVGFiX1J4LlJlZ2lvbltjMV0ucEJhc2VBZGRyZXNzID0NCi0gICAgICAgICAgICAgICAgbWFsbG9jKE1lbVRhYl9SeC5SZWdpb25bYzFdLlNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi1MVlZFX1J4X0dldE1lbW9yeVRhYmxlOiBGcmVlaW5nIE1lbW9yeSBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gZnJlZSB0aGUgbWVtb3J5IGZyb20gdGhlIExWVkVfUnggaW5zdGFuY2UuDQotDQotXGNvZGUNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1J4X0dldE1lbW9yeVRhYmxlKCBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNZW1UYWJfUngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9OVUxMKTsNCi0NCi0gICAgICAgIGlmIChMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9ycw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZm9yKCBjMSA9IDA7IGMxIDwgTFZWRV9OUl9NRU1PUllfUkVHSU9OUzsgYzErKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoTWVtVGFiX1J4LlJlZ2lvbltjMV0uU2l6ZSAhPSAwKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgZnJlZShNZW1UYWJfUnguUmVnaW9uW2MxXS5wQmFzZUFkZHJlc3MpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi1cZW5kY29kZQ0KLSovDQotDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9SeF9HZXRNZW1vcnlUYWJsZShMVlZFX1J4X0hhbmRsZV90ICAgICAgICAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZNX01lbW9yeVRhYmxlX3N0ICAgICAgICAgICAgICpwTWVtb3J5VGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1J4X0luc3RhbmNlUGFyYW1zX3N0ICAgICAgKnBJbnN0YW5jZVBhcmFtcyk7DQotDQotDQotLyoqDQotQGJyaWVmIENyZWF0ZWQgaGFuZGxlIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgTFZWRV9UeCBtb2R1bGUNCi0NCi1UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBMVlZFX1R4IGluc3RhbmNlLiBBbGwgY29udHJvbCBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gaW52YWxpZCB2YWx1ZXMuDQotVGhlIG1lbW9yeSB0YWJsZSBwb2ludGVkIHRvIGJ5IHBNZW1vcnlUYWJsZSBtdXN0IGJlIGNyZWF0ZWQuIElmIHRoZSBtZW1vcnkgdGFibGUgaXMgbm90IGNvcnJlY3QgdGhlbiBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLg0KLVRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBSeCBhbmQgVHggdW5pdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGFuZCBzbyB0aGUNCi1pbnN0YW5jZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoaXMgZnVuY3Rpb24gY2FsbCBtdXN0IGJlIHRoZSBzYW1lIGFzIHRob3NlIHVzZWQgaW4gdGhlIEByZWYgTFZWRV9UeF9HZXRNZW1vcnlUYWJsZSBmdW5jdGlvbiBjYWxscw0KLXVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLg0KLQ0KLUBwcmUgVGhlIG1lbW9yeSByZWNvcmRzIHRhYmxlcyBkZWZpbmVkIGJ5IHBNZW1vcnlUYWJsZSBjb250YWlucyBwb2ludGVycyB0byBub24tb3ZlcmxhcHBpbmcgYnVmZmVycw0KLXdpdGggdGhlIHNpemUgYXMgcmVxdWVzdGVkIHZpYSB0aGUgcHJpb3IgY2FsbHMgdG8gdGhlIExWVkVfVHhfR2V0TWVtb3J5VGFibGUgZnVuY3Rpb25zLg0KLUBwcmUgVGhlIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZGVmaW5lZCBieSBwSW5zdFBhcmFtcyBpcyBpZGVudGljYWwgdG8gdGhlIHN0cnVjdHVyZSBwYXNzZWQNCi10byBwcmlvciBjYWxsIHRvIEByZWYgTFZWRV9UeF9HZXRNZW1vcnlUYWJsZSBmdW5jdGlvbnMuDQotDQotDQotQHBhcmFtICBwaEluc3RhbmNlICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnN0YW5jZSBoYW5kbGUuDQotQHBhcmFtICBwTWVtb3J5VGFibGUgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBtZW1vcnkgZGVmaW5pdGlvbiB0YWJsZS4NCi1AcGFyYW0gIHBJbnN0YW5jZVBhcmFtcyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIHBhcmFtZXRlcnMuDQotDQotQHJldHVybiAgTFZWRV9TVUNDRVNTICAgICAgICAgICB3aGVuIGNyZWF0aW9uIHdhcyBzdWNjZXNzZnVsDQotQHJldHVybiAgTFZWRV9OVUxMQUREUkVTUyAgICAgICBXaGVuIHBoSW5zdGFuY2Ugb3IgcE1lbW9yeVRhYmxlIG9yIHBJbnN0YW5jZVBhcmFtcyBpcyBOVUxMLg0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgd2hlbiBvbmUgb3IgbW9yZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgd2l0aCBhIG5vbi16ZXJvIHNpemUgaGFzIGJlZW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGEgTlVMTCBiYXNlIGFkZHJlc3MgcG9pbnRlci4NCi1AcmV0dXJuIExWVkVfT1VUT0ZSQU5HRSAgICAgICAgIHdoZW4gcEluc3RQYXJhbXMgY29udGFpbnMgcGFyYW1ldGVycyBvdXQgb2YgdGhlIGV4Y2VwdGVkIHJhbmdlDQotDQotQGluZ3JvdXAgTFZWRV9UeA0KLQ0KLSBMVlZFX1R4X0dldEluc3RhbmNlSGFuZGxlIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBpbml0aWFsaXplIExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGUuDQotDQotXGNvZGUNCi0gICAgaEluc3RhbmNlX1R4ID0gTFZNX05VTEw7DQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9UeF9HZXRJbnN0YW5jZUhhbmRsZSggJmhJbnN0YW5jZV9UeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtVGFiX1R4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbnN0UGFyYW1zX1R4ICk7DQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfVHhfR2V0SW5zdGFuY2VIYW5kbGUoTFZWRV9UeF9IYW5kbGVfdCAgICAgICAgICAgICAgICAqcGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9NZW1vcnlUYWJsZV9zdCAgICAgICAgICAgICAgKnBNZW1vcnlUYWJsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWVkVfVHhfSW5zdGFuY2VQYXJhbXNfc3QgICAgICAgKnBJbnN0YW5jZVBhcmFtcyk7DQotDQotLyoqDQotQGJyaWVmIENyZWF0ZWQgaGFuZGxlIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgTFZWRV9SeCBtb2R1bGUNCi0NCi1UaGlzIGZ1bmN0aW9ucyBpcyB1c2VkIHRvIGNyZWF0ZSBMVlZFX1J4IGluc3RhbmNlLiBBbGwgY29udHJvbCBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gaW52YWxpZCB2YWx1ZXMuDQotVGhlIG1lbW9yeSB0YWJsZSBwb2ludGVkIHRvIGJ5IHBNZW1vcnlUYWJsZSBtdXN0IGJlIGNyZWF0ZWQuIElmIHRoZSBtZW1vcnkgdGFibGUgaXMgbm90IGNvcnJlY3QgdGhlbiBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLg0KLVRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHRoZSBSeCBhbmQgUnggdW5pdCBhcmUgZGVwZW5kZW50IG9uIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGFuZCBzbyB0aGUNCi1pbnN0YW5jZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoaXMgZnVuY3Rpb24gY2FsbCBtdXN0IGJlIHRoZSBzYW1lIGFzIHRob3NlIHVzZWQgaW4gdGhlIEByZWYgTFZWRV9SeF9HZXRNZW1vcnlUYWJsZSBmdW5jdGlvbiBjYWxscw0KLXVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLg0KLQ0KLUBwcmUgVGhlIG1lbW9yeSByZWNvcmRzIHRhYmxlcyBkZWZpbmVkIGJ5IHBNZW1vcnlUYWJsZSBjb250YWlucyBwb2ludGVycyB0byBub24tb3ZlcmxhcHBpbmcgYnVmZmVycw0KLXdpdGggdGhlIHNpemUgYXMgcmVxdWVzdGVkIHZpYSB0aGUgcHJpb3IgY2FsbHMgdG8gdGhlIExWVkVfUnhfR2V0TWVtb3J5VGFibGUgZnVuY3Rpb25zLg0KLUBwcmUgVGhlIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlciBzdHJ1Y3R1cmUgZGVmaW5lZCBieSBwSW5zdFBhcmFtcyBpcyBpZGVudGljYWwgdG8gdGhlIHN0cnVjdHVyZSBwYXNzZWQNCi10byBwcmlvciBjYWxsIHRvIEByZWYgTFZWRV9SeF9HZXRNZW1vcnlUYWJsZSBmdW5jdGlvbnMuDQotDQotDQotQHBhcmFtICBwaEluc3RhbmNlICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnN0YW5jZSBoYW5kbGUuDQotQHBhcmFtICBwTWVtb3J5VGFibGUgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBtZW1vcnkgZGVmaW5pdGlvbiB0YWJsZS4NCi1AcGFyYW0gIHBJbnN0YW5jZVBhcmFtcyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIHBhcmFtZXRlcnMuDQotDQotQHJldHVybiAgTFZWRV9TVUNDRVNTICAgICAgICAgICB3aGVuIGNyZWF0aW9uIHdhcyBzdWNjZXNzZnVsDQotQHJldHVybiAgTFZWRV9OVUxMQUREUkVTUyAgICAgICBXaGVuIHBoSW5zdGFuY2Ugb3IgcE1lbW9yeVRhYmxlIG9yIHBJbnN0YW5jZVBhcmFtcyBpcyBOVUxMLg0KLUByZXR1cm4gIExWVkVfTlVMTEFERFJFU1MgICAgICAgd2hlbiBvbmUgb3IgbW9yZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbnMgd2l0aCBhIG5vbi16ZXJvIHNpemUgaGFzIGJlZW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGEgTlVMTCBiYXNlIGFkZHJlc3MgcG9pbnRlci4NCi1AcmV0dXJuIExWVkVfT1VUT0ZSQU5HRSAgICAgICAgIHdoZW4gcEluc3RQYXJhbXMgY29udGFpbnMgcGFyYW1ldGVycyBvdXQgb2YgdGhlIGV4Y2VwdGVkIHJhbmdlDQotDQotQGluZ3JvdXAgTFZWRV9SeA0KLQ0KLSBMVlZFX1J4X0dldEluc3RhbmNlSGFuZGxlIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBpbml0aWFsaXplIExWVkVfUnhfR2V0SW5zdGFuY2VIYW5kbGUuDQotDQotXGNvZGUNCi0gICAgaEluc3RhbmNlX1J4ID0gTFZNX05VTEw7DQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9SeF9HZXRJbnN0YW5jZUhhbmRsZSggJmhJbnN0YW5jZV9SeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTWVtVGFiX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbnN0UGFyYW1zX1J4ICk7DQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfR2V0SW5zdGFuY2VIYW5kbGUoTFZWRV9SeF9IYW5kbGVfdCAgICAgICAgICAgICAgICAqcGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9NZW1vcnlUYWJsZV9zdCAgICAgICAgICAgICAgKnBNZW1vcnlUYWJsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWVkVfUnhfSW5zdGFuY2VQYXJhbXNfc3QgICAgICAgKnBJbnN0YW5jZVBhcmFtcyk7DQotDQotLyoqDQotQGJyaWVmIFJldHJpZXZlIHRoZSBjdXJyZW50IExWVkVfVHggY29udHJvbCBwYXJhbWV0ZXJzLg0KLQ0KLVRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgTFZWRV9UeCBpbnRvIHRoZSBzdXBwbGllZA0KLXBhcmFtZXRlciBzdHJ1Y3R1cmUsIHBDb250cm9sUGFyYW1zLiBUaGUgdmFsdWVzIHJldHVybmVkIGFyZSB0aGUgdmFsdWVzIGdpdmVuIGluIHRoZSBsYXN0IHN1Y2Nlc3NmdWwNCi1jYWxsIHRvIHRoZSBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uLg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICAgICAgICAgIEluc3RhbmNlIGhhbmRsZQ0KLUBwYXJhbSBwQ29udHJvbFBhcmFtcyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2wgcGFyYW1ldGVycw0KLQ0KLUBwcmUgICBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi1AcHJlICAgcENvbnRyb2xQYXJhbXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBieSBjYWxsZXIuDQotQHBvc3QgIHBDb250cm9sUGFyYW1zIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIHZhbHVlcyBnaXZlbiBpbiB0aGUgbGFzdCBzdWNjZXNzZnVsIGNhbGwgdG8NCi0gICAgICAgdGhlIExWVkVfVHhfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24uIFRoZXkgYXJlIG5vdCBuZWNlc3NhcmlseSB0aGUgdmFsdWVzDQotICAgICAgIHVzZWQgaW4gdGhlIGxhc3QgY2FsbCB0byB0aGUgTFZWRV9UeF9Qcm9jZXNzIGZ1bmN0aW9uLCB0aGlzIHdpbGwgYmUgdGhlIGNhc2UgaWYNCi0gICAgICAgTFZWRV9UeF9TZXRDb250cm9sUGFyYW1ldGVycyBoYXMgYmVlbiBjYWxsZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byBMVlZFX1R4X1Byb2Nlc3MuDQotDQotQHJldHVybiBMVlZFX1NVQ0NFU1MgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2Ugb3IgcENvbnRyb2xQYXJhbXMgaXMgTlVMTA0KLQ0KLUBub3RlIFRoZSBMVlZFX1R4X0dldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcuDQotDQotQGluZ3JvdXAgTFZWRV9UeA0KLQ0KLUxWVkVfVHhfR2V0Q29udHJvbFBhcmFtZXRlcnMgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGdldCBkaWZmZXJlbnQgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgTFZWRV9UeCBpbnN0YW5jZS4NCi0NCi1cY29kZQ0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfVHhfR2V0Q29udHJvbFBhcmFtZXRlcnMoICZoSW5zdGFuY2VfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRyb2xQYXJhbXNfVHggKTsNCi0NCi0gICAgaWYoIExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi1cZW5kY29kZQ0KLQ0KLSovDQotDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9UeF9HZXRDb250cm9sUGFyYW1ldGVycyggICBMVlZFX1R4X0hhbmRsZV90ICAgICAgICAgICBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QgICAqcENvbnRyb2xQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBSZXRyaWV2ZSB0aGUgY3VycmVudCBMVlZFX1J4IGNvbnRyb2wgcGFyYW1ldGVycy4NCi0NCi1UaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIExWVkVfVHggaW50byB0aGUgc3VwcGxpZWQNCi1wYXJhbWV0ZXIgc3RydWN0dXJlLCBwQ29udHJvbFBhcmFtcy4gVGhlIHZhbHVlcyByZXR1cm5lZCBhcmUgdGhlIHZhbHVlcyBnaXZlbiBpbiB0aGUgbGFzdCBzdWNjZXNzZnVsDQotY2FsbCB0byB0aGUgTFZWRV9SeF9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbi4NCi0NCi1AcGFyYW0gaEluc3RhbmNlICAgICAgICAgICAgICBJbnN0YW5jZSBoYW5kbGUNCi1AcGFyYW0gcENvbnRyb2xQYXJhbXMgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sIHBhcmFtZXRlcnMNCi0NCi1AcHJlICAgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotQHByZSAgIHBDb250cm9sUGFyYW1zIHNob3VsZCBiZSBhbGxvY2F0ZWQgYnkgY2FsbGVyLg0KLUBwb3N0ICBwQ29udHJvbFBhcmFtcyB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZXMgZ2l2ZW4gaW4gdGhlIGxhc3Qgc3VjY2Vzc2Z1bCBjYWxsIHRvDQotICAgICAgIHRoZSBMVlZFX1J4X1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uLiBUaGV5IGFyZSBub3QgbmVjZXNzYXJpbHkgdGhlIHZhbHVlcw0KLSAgICAgICB1c2VkIGluIHRoZSBsYXN0IGNhbGwgdG8gdGhlIExWVkVfUnhfUHJvY2VzcyBmdW5jdGlvbiwgdGhpcyB3aWxsIGJlIHRoZSBjYXNlIGlmDQotICAgICAgIExWVkVfVHhfU2V0Q29udHJvbFBhcmFtZXRlcnMgaGFzIGJlZW4gY2FsbGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gTFZWRV9UeF9Qcm9jZXNzLg0KLQ0KLUByZXR1cm4gTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBDb250cm9sUGFyYW1zIGlzIE5VTEwNCi0NCi1Abm90ZSBUaGUgTFZWRV9SeF9HZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nLg0KLQ0KLUBpbmdyb3VwIExWVkVfUngNCi0NCi1MVlZFX1J4X0dldENvbnRyb2xQYXJhbWV0ZXJzIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBnZXQgZGlmZmVyZW50IGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIExWVkVfUnggaW5zdGFuY2UuDQotDQotXGNvZGUNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1J4X0dldENvbnRyb2xQYXJhbWV0ZXJzKCAmaEluc3RhbmNlX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb250cm9sUGFyYW1zX1J4ICk7DQotDQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfR2V0Q29udHJvbFBhcmFtZXRlcnMoICAgTFZWRV9SeF9IYW5kbGVfdCAgICAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9SeF9Db250cm9sUGFyYW1zX3N0ICAgKnBDb250cm9sUGFyYW1zKTsNCi0NCi0vKioNCi1AYnJpZWYgU2V0cyBvciBjaGFuZ2VzIHRoZSBMVlZFX1R4IG1vZHVsZSBwYXJhbWV0ZXJzIHVzaW5nIEMtc3RyY3V0dXJlLg0KLQ0KLVRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIG5ldyBzZXQgb2YgcGFyYW1ldGVycyBhbmQgbWFrZXMgYSBsb2NhbCBjb3B5IHdpdGhpbg0KLUxWVkVfVHggYnV0IHRoZSBwYXJhbWV0ZXJzIGFyZSBvbmx5IGFwcGxpZWQgb24gdGhlIG5leHQgY2FsbCBvZiB0aGUgTFZWRV9UeF9Qcm9jZXNzDQotZnVuY3Rpb24uIFdoZW4gYSBwYXJhbWV0ZXIgaXMgdW5jaGFuZ2VkIG5vIGFjdGlvbiBpcyB0YWtlbi4gVGhpcyBmdW5jdGlvbiBjYW4NCi1iZSBjYWxsZWQgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSBwcm9jZXNzaW5nLCBldmVuIHdoZW4gdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbg0KLWlzIHJ1bm5pbmcuIExpZmVWaWJlcyZ0cmFkZTsgVm9pY2VFeHBlcmllbmNlIGNvbnRyb2wgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHVzaW5nIHR3byBtZXRob2RzLg0KLUNvbnRyb2wgUGFyYW1ldGVycyBjYW4gYmUgcG9wdWxhdGVkIGluIGEgXCJDXCIgc3R5bGUgc3RydWN0dXJlIChhcyBleHBsYWluZWQgaW4gZXhhbXBsZSkgYW5kIHRoZW4gc2VudCB0byB0aGUgbGlicmFyeS4NCi1Bbm90aGVyIG1ldGhvZCBpcyB0byBwb3B1bGF0ZSBjb250cm9sIHBhcmFtZXRlcnMgaW4gYSBieXRlIGFycmF5IGNhbGxlZCBQcmVzZXQgQnVmZmVyLCBzZWUgQHJlZiBMVlZFX1R4X1NldFByZXNldCBmb3IgZXhhbXBsZSB1c2FnZS4NCi0NCi1AcGFyYW0gaEluc3RhbmNlICAgICAgICAgICAgICAgSW5zdGFuY2UgSGFuZGxlDQotQHBhcmFtIHBOZXdQYXJhbXMgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBwYXJhbWV0ZXIgc3RydWN0dXJlDQotDQotQHByZSBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi0NCi1AcmV0dXJuIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSBvciBwTmV3UGFyYW1zIGlzIE5VTEwNCi1AcmV0dXJuIExWVkVfT1VUT0ZSQU5HRSAgICAgICBXaGVuIHBOZXdQYXJhbXMgY29udGFpbnMgcGFyYW1ldGVycyBvZiBhY3RpdmF0ZWQgbW9kdWxlcyB0aGF0IGFyZSBvdXQgb2YgdGhlIGV4Y2VwdGVkIHJhbmdlDQotQHJldHVybiBMVlZFX0lOVkFMSURfQUxHT1JJVEhNX0NPTkZJR1VSQVRJT04gIFdoZW4gdHdvIG11dHVhbCBleGNsdXNpdmUgYWxnb3JpdGhtcyBhcmUgYm90aCBjb25maWd1cmVkIE9OIGF0IHJ1bi10aW1lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiwgTm9pc2VWb2lkIGFuZCBIYW5kc0ZyZWUpDQotDQotDQotQG5vdGUgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbg0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi0NCi1MVlZFX1R4X0dldENvbnRyb2xQYXJhbWV0ZXJzOiBTZXR0aW5nIENvbnRyb2wgUGFyYW1ldGVycyB1c2luZyBDLVN0eWxlIHN0cnVjdHVyZSBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gc2V0IGRpZmZlcmVudCBjb250cm9sIHBhcmFtZXRlcnMgZm9yIHRoZSBMVlZFX1R4IGluc3RhbmNlLg0KLQ0KLVxjb2RlDQotICAgIExWVkVfU3RhdHVzID0gTFZWRV9UeF9HZXRDb250cm9sUGFyYW1ldGVycyggJmhJbnN0YW5jZV9UeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29udHJvbFBhcmFtc19UeCApOw0KLQ0KLSAgICBpZiggTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAgLy8gSGFuZGxlIEVycm9ycw0KLSAgICB9DQotDQotICAgICBDaGFuZ2UgUGFyYW1ldGVycyBhcyByZXF1aXJlZA0KLSAgICBDb250cm9sUGFyYW1zX1R4LlZPTF9HYWluICAgICAgICAgPSBWT0xfVEFCTEVbaV07DQotICAgIENvbnRyb2xQYXJhbXNfVHguVkNfQ29udHJvbFBhcmFtcyA9IFZDX1RBQkxFW2ldOw0KLQ0KLSAgICAvLyBVcGRhdGUgaW5zdGFuY2Ugd2l0aCBuZXcgcGFyYW1ldGVycw0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfVHhfU2V0Q29udHJvbFBhcmFtZXRlcnMoICZoSW5zdGFuY2VfVHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRyb2xQYXJhbXNfVHggKTsNCi0NCi0gICAgaWYoIExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi0NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzKCAgIExWVkVfVHhfSGFuZGxlX3QgICAgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0ICogY29uc3QgcE5ld1BhcmFtcyk7DQotDQotLyoqDQotQGJyaWVmIFNldHMgb3IgY2hhbmdlcyB0aGUgTFZWRV9SeCBtb2R1bGUgcGFyYW1ldGVycyB1c2luZyBDLXN0cnVjdHVyZS4NCi0NCi1UaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBuZXcgc2V0IG9mIHBhcmFtZXRlcnMgYW5kIG1ha2VzIGEgbG9jYWwgY29weSB3aXRoaW4NCi1MVlZFX1J4IGJ1dCB0aGUgcGFyYW1ldGVycyBhcmUgb25seSBhcHBsaWVkIG9uIHRoZSBuZXh0IGNhbGwgb2YgdGhlIExWVkVfUnhfUHJvY2Vzcw0KLWZ1bmN0aW9uLiBXaGVuIGEgcGFyYW1ldGVyIGlzIHVuY2hhbmdlZCBubyBhY3Rpb24gaXMgdGFrZW4uIFRoaXMgZnVuY3Rpb24gY2FuDQotYmUgY2FsbGVkIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgcHJvY2Vzc2luZywgZXZlbiB3aGVuIHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24NCi1pcyBydW5uaW5nLiBMaWZlVmliZXMmdHJhZGU7IFZvaWNlRXhwZXJpZW5jZSBjb250cm9sIHBhcmFtZXRlcnMgY2FuIGJlIHNldCB1c2luZyB0d28gbWV0aG9kcy4NCi1Db250cm9sIFBhcmFtZXRlcnMgY2FuIGJlIHBvcHVsYXRlZCBpbiBhIFwiQ1wiIHN0eWxlIHN0cnVjdHVyZSAoYXMgZXhwbGFpbmVkIGluIGV4YW1wbGUpIGFuZCB0aGVuIHNlbnQgdG8gdGhlIGxpYnJhcnkuDQotQW5vdGhlciBtZXRob2QgaXMgdG8gcG9wdWxhdGUgY29udHJvbCBwYXJhbWV0ZXJzIGluIGEgYnl0ZSBhcnJheSBjYWxsZWQgUHJlc2V0IEJ1ZmZlciwgc2VlIEByZWYgTFZWRV9SeF9TZXRQcmVzZXQgZm9yIGV4YW1wbGUgdXNhZ2UuDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgICAgICAgICAgIEluc3RhbmNlIEhhbmRsZQ0KLUBwYXJhbSBwTmV3UGFyYW1zICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgcGFyYW1ldGVyIHN0cnVjdHVyZQ0KLQ0KLUBwcmUgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotDQotQHJldHVybiBMVlZFX1NVQ0NFU1MgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2Ugb3IgcE5ld1BhcmFtcyBpcyBOVUxMDQotQHJldHVybiBMVlZFX09VVE9GUkFOR0UgICAgICAgV2hlbiBwTmV3UGFyYW1zIGNvbnRhaW5zIHBhcmFtZXRlcnMgb2YgYWN0aXZhdGVkIG1vZHVsZXMgdGhhdCBhcmUgb3V0IG9mIHRoZSBleGNlcHRlZCByYW5nZQ0KLUByZXR1cm4gTFZWRV9JTlZBTElEX0FMR09SSVRITV9DT05GSUdVUkFUSU9OICBXaGVuIHR3byBtdXR1YWwgZXhjbHVzaXZlIGFsZ29yaXRobXMgYXJlIGJvdGggY29uZmlndXJlZCBPTiBhdCBydW4tdGltZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4sIE5vaXNlVm9pZCBhbmQgSGFuZHNGcmVlKQ0KLQ0KLQ0KLUBub3RlIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludGVycnVwdGVkIGJ5IHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24NCi0NCi1AaW5ncm91cCBMVlZFX1J4DQotDQotTFZWRV9SeF9HZXRDb250cm9sUGFyYW1ldGVyczogU2V0dGluZyBDb250cm9sIFBhcmFtZXRlcnMgdXNpbmcgQy1TdHlsZSBzdHJ1Y3R1cmUgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHNldCBkaWZmZXJlbnQgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgTFZWRV9SeCBpbnN0YW5jZS4NCi0NCi1cY29kZQ0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfUnhfR2V0Q29udHJvbFBhcmFtZXRlcnMoICZoSW5zdGFuY2VfUngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRyb2xQYXJhbXNfUnggKTsNCi0NCi0gICAgaWYoIExWVkVfU3RhdHVzICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgIC8vIEhhbmRsZSBFcnJvcnMNCi0gICAgfQ0KLQ0KLSAgICAgQ2hhbmdlIFBhcmFtZXRlcnMgYXMgcmVxdWlyZWQNCi0gICAgQ29udHJvbFBhcmFtc19SeC5WT0xfR2FpbiAgICAgICAgID0gVk9MX1RBQkxFW2ldOw0KLSAgICBDb250cm9sUGFyYW1zX1J4LlZDX0NvbnRyb2xQYXJhbXMgPSBWQ19UQUJMRVtpXTsNCi0NCi0gICAgLy8gVXBkYXRlIGluc3RhbmNlIHdpdGggbmV3IHBhcmFtZXRlcnMNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1J4X1NldENvbnRyb2xQYXJhbWV0ZXJzKCAmaEluc3RhbmNlX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb250cm9sUGFyYW1zX1J4ICk7DQotDQotICAgIGlmKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi1cZW5kY29kZQ0KLQ0KLSovDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9SeF9TZXRDb250cm9sUGFyYW1ldGVycyggICBMVlZFX1J4X0hhbmRsZV90ICAgICAgICAgICBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWVkVfUnhfQ29udHJvbFBhcmFtc19zdCAqIGNvbnN0IHBOZXdQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBSZXRyaWV2ZSB0aGUgY3VycmVudCBMVlZFX1R4IHN0YXR1cyBwYXJhbWV0ZXJzLg0KLQ0KLVRoaXMgZnVuY3Rpb24gY29waWVzIGludGVybmFsIHN0YXR1cyB2YXJpYWJsZXMgaW50byB0aGUgc3VwcGxpZWQgc3RhdHVzDQotcGFyYW1ldGVyIHN0cnVjdHVyZXMuDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgIEluc3RhbmNlIGhhbmRsZQ0KLUBwYXJhbSBwU3RhdHVzUGFyYW1zICBQb2ludGVyIHRvIHRoZSBzdGF0dXMgcGFyYW1ldGVycw0KLQ0KLUBwcmUgICBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi1AcHJlICAgcFN0YXR1c1BhcmFtcyBzaG91bGQgYmUgYWxsb2NhdGVkIGJ5IGNhbGxlci4NCi1AcG9zdCAgcFN0YXR1c1BhcmFtcyB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBsYXRlc3Qgc3RhdHVzIHZhbHVlcyBvZiBMVlZFX1R4Lg0KLQ0KLUByZXR1cm4gTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBTdGF0dXNQYXJhbXMgaXMgTlVMTA0KLQ0KLUBub3RlIFRoZSBMVlZFX1R4X0dldFN0YXR1c1BhcmFtZXRlcnMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZy4NCi1UaGlzIGZ1bmN0aW9uIGNhbiBydW4gaW4gZGlmZmVyZW50IHRocmVhZHMgdGhhbiB0aGUgcHJvY2VzcyBmdW5jdGlvbnMuDQotDQotDQotQGluZ3JvdXAgTFZWRV9UeA0KLQ0KLUxWVkVfVHhfR2V0U3RhdHVzUGFyYW1ldGVyczogR2V0IEludGVybmFsIEFsZ29yaXRobSBTdGF0dXMgQXR0cmlidXRlcyBFeGFtcGxlOg0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIExWVkVfVHhfR2V0U3RhdHVzUGFyYW1ldGVycyBmdW5jdGlvbiBjYWxsLg0KLQ0KLVxjb2RlDQotICAgIExWVkVfVHhfU3RhdHVzUGFyYW1zX3N0ICBUeF9Nb25pdG9yOw0KLSAgICBTdGF0dXM9TFZWRV9UeF9HZXRTdGF0dXNQYXJhbWV0ZXJzKGhJbnN0YW5jZV9UeCwmVHhfTW9uaXRvcik7DQotICAgIGlmIChTdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAvLyBFcnJvciBIYW5kbGluZw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfVHhfR2V0U3RhdHVzUGFyYW1ldGVycyggICAgTFZWRV9UeF9IYW5kbGVfdCAgICAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9UeF9TdGF0dXNQYXJhbXNfc3QgICAgKnBTdGF0dXNQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBSZXRyaWV2ZSB0aGUgY3VycmVudCBMVlZFX1J4IHN0YXR1cyBwYXJhbWV0ZXJzLg0KLQ0KLVRoaXMgZnVuY3Rpb24gY29waWVzIGludGVybmFsIHN0YXR1cyB2YXJpYWJsZXMgaW50byB0aGUgc3VwcGxpZWQgc3RhdHVzDQotcGFyYW1ldGVyIHN0cnVjdHVyZXMuDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgIEluc3RhbmNlIGhhbmRsZQ0KLUBwYXJhbSBwU3RhdHVzUGFyYW1zICBQb2ludGVyIHRvIHRoZSBzdGF0dXMgcGFyYW1ldGVycw0KLQ0KLUBwcmUgICBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi1AcHJlICAgcFN0YXR1c1BhcmFtcyBzaG91bGQgYmUgYWxsb2NhdGVkIGJ5IGNhbGxlci4NCi1AcG9zdCAgcFN0YXR1c1BhcmFtcyB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBsYXRlc3Qgc3RhdHVzIHZhbHVlcyBvZiBMVlZFX1J4Lg0KLQ0KLUByZXR1cm4gTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBTdGF0dXNQYXJhbXMgaXMgTlVMTA0KLQ0KLUBub3RlIFRoZSBMVlZFX1J4X0dldFN0YXR1c1BhcmFtZXRlcnMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZy4NCi1UaGlzIGZ1bmN0aW9uIGNhbiBydW4gaW4gZGlmZmVyZW50IHRocmVhZHMgdGhhbiB0aGUgcHJvY2VzcyBmdW5jdGlvbnMuDQotDQotQGluZ3JvdXAgTFZWRV9SeA0KLQ0KLUxWVkVfUnhfR2V0U3RhdHVzUGFyYW1ldGVyczogR2V0IEludGVybmFsIEFsZ29yaXRobSBTdGF0dXMgQXR0cmlidXRlcyBFeGFtcGxlOg0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIExWVkVfUnhfR2V0U3RhdHVzUGFyYW1ldGVycyBmdW5jdGlvbiBjYWxsLg0KLQ0KLVxjb2RlDQotICAgIExWVkVfUnhfU3RhdHVzUGFyYW1zX3N0ICBSeF9Nb25pdG9yOw0KLSAgICBTdGF0dXM9TFZWRV9SeF9HZXRTdGF0dXNQYXJhbWV0ZXJzKGhJbnN0YW5jZV9SeCwmUnhfTW9uaXRvcik7DQotICAgIGlmIChTdGF0dXMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAvLyBFcnJvciBIYW5kbGluZw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfR2V0U3RhdHVzUGFyYW1ldGVycyggICAgTFZWRV9SeF9IYW5kbGVfdCAgICAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZWRV9SeF9TdGF0dXNQYXJhbXNfc3QgICAgKnBTdGF0dXNQYXJhbXMpOw0KLQ0KLS8qKg0KLUBicmllZiBSZXNldHMgdGhlIExWVkVfVHggbW9kdWxlLg0KLQ0KLVRoZSBMVlZFX1R4IG1vZHVsZSBpbnN0YW5jZSBtZW1vcnkgY29udGFpbnMgZGF0YSB3aGljaCBkZXBlbmQgb24gdGhlIGlucHV0DQotc2FtcGxlcyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgcHJldmlvdXNseS4gIFRoZXNlIGRhdGEgYXJlIGJ1ZmZlcnMNCi11c2VkIGZvciBmaWx0ZXIgdGFicyBhbmQgZGVsYXkgbGluZXMgYW5kIGFsc28gYWRhcHRpdmUgY29lZmZpY2llbnRzIG9mIHRoZQ0KLWFsZ29yaXRobS4gIFRoZSBMVlZFX1R4X1Jlc2V0SW5zdGFuY2UgZnVuY3Rpb24gcmVzZXRzIHRoaXMgaW5wdXQgZGVwZW5kZW50IGRhdGEuDQotDQotVGhlIExWVkVfVHhfUmVzZXRJbnN0YW5jZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIGENCi1kaXNjb250aW51aXR5IGluIHRoZSBpbnB1dCBhdWRpbyBzdHJlYW0uICBBIGRpc2NvbnRpbnVpdHkgbWVhbnMgdGhhdCB0aGUNCi1jdXJyZW50IGJsb2NrIG9mIHNhbXBsZXMgaXMgbm90IGNvbnRpZ3VvdXMgd2l0aCB0aGUgcHJldmlvdXMgYmxvY2sgb2Ygc2FtcGxlcy4NCi1FeGFtcGxlcyBhcmUNCi1AbGkgQ2FsbGluZyB0aGUgTFZWRV9UeF9Qcm9jZXNzIGZ1bmN0aW9uIGFmdGVyIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkNCi1AbGkgQnVmZmVyIHVuZGVycnVuIG9yIG92ZXJmbG93IGluIHRoZSBhdWRpbyBkcml2ZXINCi1UaGUgTFZWRV9SZXNldEluc3RhbmNlIGZ1bmN0aW9uIG9mIHRoZSBUeCBhbmQvb3IgVHggVW5pdCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBhcyByZS1hZGFwdGF0aW9uDQotb2YgaW50ZXJuYWwgYWxnb3JpdGhtcyB3aWxsIG9jY3VyLg0KLVRoZSBMVlZFX1Jlc2V0SW5zdGFuY2UgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUsIGV2ZW4gd2hlbiBMVlZFX1Byb2Nlc3MgaXMgcnVubmluZy4gVGhlIHJlc2V0IHdpbGwgYmUNCi1hcHBsaWVkIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjYWxsIG9mIHRoZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24uDQotDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgICAgICAgICAgIEluc3RhbmNlIEhhbmRsZQ0KLUBwYXJhbSBwUmVzZXRQYXJhbXMgICAgICAgICAgICBSZXNldCBUeXBlDQotDQotQHByZSBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi0NCi1AcG9zdCBEZXBlbmRpbmcgb24gdGhlIFJlc2V0VHlwZSB2YWx1ZSwgdGhlIExWVkVfVHhfUmVzZXRJbnN0YW5jZSBmdW5jdGlvbiBjYW4NCi1wZXJmb3JtOg0KLUBsaSBTb2Z0IHJlc2V0OiBwYXJ0aWFsIHJlc2V0IG9mIGludGVybmFsIGJ1ZmZlcnMgYW5kIGFkYXB0aXZlIGJlaGF2aW9yLiBUbyBiZSB1c2VkIGZvciB2ZXJ5IHNob3J0DQotaW50ZXJydXB0aW9uIG9yIGRpc2NvbnRpbnVpdHksIGUuZy4sIGJ1ZmZlciB1bmRlci1ydW4gb3Igb3ZlcmZsb3cgaW4gdGhlIGF1ZGlvIGRyaXZlciBpbmZsdWVuY2luZyB0aGUgZWNobyBwYXRoIGRlbGF5Lg0KLUBsaSBIYXJkIHJlc2V0OiBmdWxsIHJlc2V0IG9mIGFsbCBpbnRlcm5hbCBidWZmZXJzIGFuZCBhZGFwdGl2ZSBiZWhhdmlvci4gVG8gYmUgdXNlZCBmb3IgbG9uZw0KLWludGVycnVwdGlvbiBvciBkaXNjb250aW51aXR5LCBlLmcuLCBiZWZvcmUgY2FsbGluZyB0aGUgTFZWRV9UeF9Qcm9jZXNzIGZ1bmN0aW9uIGFmdGVyIGEgbG9uZyBwZXJpb2Qgb2YgaW5hY3Rpdml0eQ0KLWluIGJldHdlZW4gY2FsbHMgaW4gY2FzZSBpbnN0YW5jZSB3YXMgbm90IGZyZWVkLg0KLQ0KLUByZXR1cm4gTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gTFZWRV9OVUxMQUREUkVTUyAgICAgIFdoZW4gaEluc3RhbmNlIG9yIHBSZXNldFBhcmFtcyBpcyBOVUxMDQotQHJldHVybiBMVlZFX09VVE9GUkFOR0UgICAgICAgV2hlbiBjb250ZW50IG9mIHBSZXNldFBhcmFtcyBpcyBpbnZhbGlkDQotDQotQG5vdGUgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbg0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi0NCi1MVlZFX1R4X1Jlc2V0SW5zdGFuY2UgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBMVlZFX1R4X1Jlc2V0SW5zdGFuY2UuDQotXGNvZGUNCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1R4X1Jlc2V0SW5zdGFuY2UoaEluc3RhbmNlLCBwUmVzZXRQYXJhbXMpOw0KLQ0KLSAgICBpZiAoTFZWRV9TdGF0dXMgIT0gTFZWRV9TVUNDRVNTKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgTFZWRV9UeF9SZXNldEluc3RhbmNlIGVycm9ycw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfVHhfUmVzZXRJbnN0YW5jZSggIExWVkVfVHhfSGFuZGxlX3QgICAgICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1R4X1Jlc2V0UGFyYW1zX3N0ICpwUmVzZXRQYXJhbXMgICk7DQotDQotLyoqDQotQGJyaWVmIFJlc2V0cyB0aGUgTFZWRV9SeCBtb2R1bGUuDQotDQotVGhlIExWVkVfUnggbW9kdWxlIGluc3RhbmNlIG1lbW9yeSBjb250YWlucyBkYXRhIHdoaWNoIGRlcGVuZCBvbiB0aGUgaW5wdXQNCi1zYW1wbGVzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCBwcmV2aW91c2x5LiAgVGhlc2UgZGF0YSBhcmUgYnVmZmVycw0KLXVzZWQgZm9yIGZpbHRlciB0YWJzIGFuZCBkZWxheSBsaW5lcyBhbmQgYWxzbyBhZGFwdGl2ZSBjb2VmZmljaWVudHMgb2YgdGhlDQotYWxnb3JpdGhtLiAgVGhlIExWVkVfUnhfUmVzZXRJbnN0YW5jZSBmdW5jdGlvbiByZXNldHMgdGhpcyBpbnB1dCBkZXBlbmRlbnQgZGF0YS4NCi0NCi1UaGUgTFZWRV9SeF9SZXNldEluc3RhbmNlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYQ0KLWRpc2NvbnRpbnVpdHkgaW4gdGhlIGlucHV0IGF1ZGlvIHN0cmVhbS4gIEEgZGlzY29udGludWl0eSBtZWFucyB0aGF0IHRoZQ0KLWN1cnJlbnQgYmxvY2sgb2Ygc2FtcGxlcyBpcyBub3QgY29udGlndW91cyB3aXRoIHRoZSBwcmV2aW91cyBibG9jayBvZiBzYW1wbGVzLg0KLUV4YW1wbGVzIGFyZQ0KLUBsaSBDYWxsaW5nIHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24gYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eQ0KLUBsaSBCdWZmZXIgdW5kZXJydW4gb3Igb3ZlcmZsb3cgaW4gdGhlIGF1ZGlvIGRyaXZlcg0KLVRoZSBMVlZFX1Jlc2V0SW5zdGFuY2UgZnVuY3Rpb24gb2YgdGhlIFJ4IGFuZC9vciBUeCBVbml0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5IGFzIHJlLWFkYXB0YXRpb24NCi1vZiBpbnRlcm5hbCBhbGdvcml0aG1zIHdpbGwgb2NjdXIuDQotVGhlIExWVkVfUmVzZXRJbnN0YW5jZSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSwgZXZlbiB3aGVuIExWVkVfUHJvY2VzcyBpcyBydW5uaW5nLiBUaGUgcmVzZXQgd2lsbCBiZQ0KLWFwcGxpZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNhbGwgb2YgdGhlIExWVkVfUnhfUHJvY2VzcyBmdW5jdGlvbi4NCi0NCi0NCi1AcGFyYW0gaEluc3RhbmNlICAgICAgICAgICAgICAgSW5zdGFuY2UgSGFuZGxlDQotQHBhcmFtIHBSZXNldFBhcmFtcyAgICAgICAgICAgIFJlc2V0IFR5cGUNCi0NCi1AcHJlIGhJbnN0YW5jZSBzaG91bGQgYmUgdmFsaWQgaGFuZGxlLg0KLQ0KLUBwb3N0IERlcGVuZGluZyBvbiB0aGUgUmVzZXRUeXBlIHZhbHVlLCB0aGUgTFZWRV9SeF9SZXNldEluc3RhbmNlIGZ1bmN0aW9uIGNhbg0KLXBlcmZvcm06DQotQGxpIFNvZnQgcmVzZXQ6IHBhcnRpYWwgcmVzZXQgb2YgaW50ZXJuYWwgYnVmZmVycyBhbmQgYWRhcHRpdmUgYmVoYXZpb3IuIFRvIGJlIHVzZWQgZm9yIHZlcnkgc2hvcnQNCi1pbnRlcnJ1cHRpb24gb3IgZGlzY29udGludWl0eSwgZS5nLiwgYnVmZmVyIHVuZGVyLXJ1biBvciBvdmVyZmxvdyBpbiB0aGUgYXVkaW8gZHJpdmVyIGluZmx1ZW5jaW5nIHRoZSBlY2hvIHBhdGggZGVsYXkuDQotQGxpIEhhcmQgcmVzZXQ6IGZ1bGwgcmVzZXQgb2YgYWxsIGludGVybmFsIGJ1ZmZlcnMgYW5kIGFkYXB0aXZlIGJlaGF2aW9yLiBUbyBiZSB1c2VkIGZvciBsb25nDQotaW50ZXJydXB0aW9uIG9yIGRpc2NvbnRpbnVpdHksIGUuZy4sIGJlZm9yZSBjYWxsaW5nIHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24gYWZ0ZXIgYSBsb25nIHBlcmlvZCBvZiBpbmFjdGl2aXR5DQotaW4gYmV0d2VlbiBjYWxscyBpbiBjYXNlIGluc3RhbmNlIHdhcyBub3QgZnJlZWQuDQotDQotQHJldHVybiBMVlZFX1NVQ0NFU1MgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2Ugb3IgcFJlc2V0UGFyYW1zIGlzIE5VTEwNCi1AcmV0dXJuIExWVkVfT1VUT0ZSQU5HRSAgICAgICBXaGVuIGNvbnRlbnQgb2YgcFJlc2V0UGFyYW1zIGlzIGludmFsaWQNCi0NCi1Abm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uDQotDQotQGluZ3JvdXAgTFZWRV9SeA0KLQ0KLUxWVkVfUnhfUmVzZXRJbnN0YW5jZSBFeGFtcGxlOg0KLQ0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIExWVkVfUnhfUmVzZXRJbnN0YW5jZS4NCi1cY29kZQ0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfUnhfUmVzZXRJbnN0YW5jZShoSW5zdGFuY2UsIHBSZXNldFBhcmFtcyk7DQotDQotICAgIGlmIChMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MpDQotICAgIHsNCi0gICAgICAgIC8vIEhhbmRsZSBMVlZFX1J4X1Jlc2V0SW5zdGFuY2UgZXJyb3JzDQotICAgIH0NCi1cZW5kY29kZQ0KLQ0KLSovDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9SeF9SZXNldEluc3RhbmNlKCAgTFZWRV9SeF9IYW5kbGVfdCAgICAgICAgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWVkVfUnhfUmVzZXRQYXJhbXNfc3QgKnBSZXNldFBhcmFtcyAgKTsNCi0NCi0vKioNCi1AYnJpZWYgUHJvY2Vzc2VzIGEgYmxvY2sgb2Ygc2FtcGxlcyBieSB0aGUgTFZWRV9UeCBtb2R1bGUuDQotDQotVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIGJsb2NrIG9mIHNhbXBsZXMgYXMgY29uZmlndXJlZCB3aXRoIHRoZSBjdXJyZW50DQotcGFyYW1ldGVyIHNldHRpbmdzLiBJZiBuZXcgcGFyYW1ldGVycyBoYXZlIGJlZW4gZ2l2ZW4gc2luY2UgdGhlIGxhc3QgY2FsbCB0bw0KLUxWVkVfVHhfUHJvY2VzcyB0aGVuIHRoZXNlIHdpbGwgYmUgYXBwbGllZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgcHJvY2VzcyBjYWxsLg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICBJbnN0YW5jZSBIYW5kbGUNCi1AcGFyYW0gcEluRGF0YU1pYzAgICAgUG9pbnRlciB0byB0aGUgaW5wdXQgc3BlZWNoIHNhbXBsZSBidWZmZXIgKHBpbWFyeSBtaWNyb3Bob25lKS4NCi1AcGFyYW0gcEluRGF0YU1pYzEgICAgUG9pbnRlciB0byB0aGUgaW5wdXQgc3BlZWNoIHNhbXBsZSBidWZmZXIgKHNlY29uZGFyeSBtaWNyb3Bob25lKS4NCi1AcGFyYW0gcFJlZkRhdGEgICAgICAgUG9pbnRlciB0byB0aGUgaW5wdXQgZmFyZW5kIHJlZmVyZW5jZSBidWZmZXIuDQotQHBhcmFtIHBOb2lzZURhdGEgICAgIFBvaW50ZXIgdG8gdGhlIG91dHB1dCBub2lzZSByZWZlcmVuY2UgYnVmZmVyLg0KLUBwYXJhbSBwT3V0RGF0YSAgICAgICBQb2ludGVyIHRvIHRoZSBvdXRwdXQgc2FtcGxlIGJ1ZmZlci4NCi1AcGFyYW0gTnVtU2FtcGxlcyAgICAgVGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3Mgc2hvdWxkIGJlIGludGVnZXIgbXVsdGlwbGUobikgb2YgdmFsdWVzIGluIHRhYmxlLg0KLSAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBhIGZycXVlbmN5IGRlcGVuZGFudCBwYXJhbXRlci4NCi08dGFibGUgYm9yZGVyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjxiPlVuaXQ8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPlEgZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5EYXRhIFJhbmdlPC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5EZWZhdWx0IFZhbHVlczwvYj48L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PGI+U2FtcGxlczwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+UTE2LjA8L2I+PC90ZD4NCi0gICAgICAgPHRkPm54ODAgZm9yIDhrSHo8L3RkPg0KLSAgICAgICA8dGQ+ODAgZm9yIDhrSHo8L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD5ueDE2MCBmb3IgMTZrSHo8L3RkPg0KLSAgICAgICA8dGQ+MTYwIGZvciAxNmtIejwvdGQ+DQotICAgPC90cj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPm54MjQwIGZvciAyNGtIejwvdGQ+DQotICAgICAgIDx0ZD4yNDAgZm9yIDI0a0h6PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+bngzMjAgZm9yIDMya0h6PC90ZD4NCi0gICAgICAgPHRkPjMyMCBmb3IgMzJrSHo8L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD5ueDQ4MCBmb3IgNDhrSHo8L3RkPg0KLSAgICAgICA8dGQ+NDgwIGZvciA0OGtIejwvdGQ+DQotICAgPC90cj4NCi08L3RhYmxlPg0KLQ0KLUBwcmUgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotQHByZSBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzIHNob3VsZCBiZSBjYWxsZWQgc3VjY2Vzc2Z1bGx5IG9uY2UgYmVmb3JlLg0KLXRoZSBmaXJzdCBjYWxsIHRvIExWVkVfVHhfUHJvY2Vzcw0KLUBwcmUgcEluRGF0YSBpcyBmaWxsZWQgd2l0aCB0aGUgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzLg0KLQ0KLUBwb3N0IHBPdXREYXRhIGNvbnRhaW5zIHRoZSBwcm9jZXNzZWQgc2FtcGxlcy4NCi0NCi1AcmV0dXJuIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSwgcEluRGF0YSBvciBwT3V0RGF0YSBpcyBOVUxMDQotQHJldHVybiBMVlZFX0lOVkFMSUROVU1TQU1QTEVTIFdoZW4gdGhlIE51bVNhbXBsZXMgaXMgb3V0c2lkZSB0aGUgYWxsb3dlZA0KLXJhbmdlDQotQHJldHVybiBMVlZFX0lOVkFMSURfU1RBVEVfQ09ORklHVVJBVElPTiBXaGVuIGludmFsaWQgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSBmb3VuZA0KLQ0KLUBpbmdyb3VwIExWVkVfVHgNCi0NCi1MVlZFX1R4X1Byb2Nlc3MgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24gY2FsbA0KLQ0KLVxjb2RlDQotICAgIC8vIFR4IFByb2Nlc3NpbmcNCi0gICAgTFZWRV9TVEFUVVMgPSBMVlZFX1R4X1Byb2Nlc3MoIGhJbnN0YW5jZV9UeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbkRhdGFfVHgwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEluRGF0YV9UeDEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSW5EYXRhX1JlZiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2lzZURhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwT3V0RGF0YV9UeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bVNhbXBsZXMgKTsNCi0gICAgaWYgKExWVkVfU1RBVFVTICE9IExWVkVfU1VDQ0VTUyApDQotICAgIHsNCi0gICAgICAgLy8gRXJyb3IgSGFuZGxpbmcNCi0gICAgfQ0KLVxlbmRjb2RlDQotDQotKi8NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX1R4X1Byb2Nlc3MoICAgTFZWRV9UeF9IYW5kbGVfdCAgICBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWTV9JTlQxNiAgICAgKnBJbkRhdGFNaWMwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMVk1fSU5UMTYgICAgICpwSW5EYXRhTWljMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZNX0lOVDE2ICAgICAqcFJlZkRhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9JTlQxNiAgICAgICAgICAgKnBOb2lzZURhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9JTlQxNiAgICAgICAgICAgKnBPdXREYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMVk1fVUlOVDE2ICAgIE51bVNhbXBsZXMpOw0KLQ0KLS8qKg0KLUBicmllZiBQcm9jZXNzZXMgYSBibG9jayBvZiBzYW1wbGVzIGJ5IHRoZSBMVlZFX1J4IG1vZHVsZS4NCi0NCi1UaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgYmxvY2sgb2Ygc2FtcGxlcyBhcyBjb25maWd1cmVkIHdpdGggdGhlIGN1cnJlbnQNCi1wYXJhbWV0ZXIgc2V0dGluZ3MuIElmIG5ldyBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBnaXZlbiBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvDQotTFZWRV9SeF9Qcm9jZXNzIHRoZW4gdGhlc2Ugd2lsbCBiZSBhcHBsaWVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBwcm9jZXNzIGNhbGwuDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgIEluc3RhbmNlIEhhbmRsZQ0KLUBwYXJhbSBwSW5EYXRhICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBzYW1wbGUgYnVmZmVyDQotQHBhcmFtIHBOb2lzZURhdGEgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IG5vaXNlIGJ1ZmZlciAoZm9yIExWVkMgb25seSkuIFBvaW50ZXIgdG8gdGhlIGlucHV0IG5vaXNlIHJlZmVyZW5jZSBidWZmZXIuDQotICAgICAgICAgICAgICAgICAgICAgIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3M6IE5vaXNlRGF0YUJ1ZmZlclNpemUgPSAyIChzaXplIG9mIHRoZSBpbnB1dCBidWZmZXIgaW4gbXMpIC8gMTBtcw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGkuZS4gZm9yIDIwIG1zIGlucHV0IGJ1ZmZlciwgdGhlIE5vaXNlRGF0YSBidWZmZXIgc2l6ZSBzaG91bGQgYmUgNC4NCi0NCi1AcGFyYW0gcE91dERhdGEgICAgICAgUG9pbnRlciB0byB0aGUgb3V0cHV0IHNhbXBsZSBidWZmZXINCi1AcGFyYW0gTnVtU2FtcGxlcyAgICAgVGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHByb2Nlc3Mgc2hvdWxkIGJlIGludGVnZXIgbXVsdGlwbGUobikgb2YgdmFsdWVzIGluIHRhYmxlLg0KLSAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBhIGZycXVlbmN5IGRlcGVuZGFudCBwYXJhbXRlci4NCi08dGFibGUgYm9yZGVyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjxiPlVuaXQ8L2I+PC90ZD4NCi0gICAgICAgPHRkPjxiPlEgZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5EYXRhIFJhbmdlPC9iPjwvdGQ+DQotICAgICAgIDx0ZD48Yj5EZWZhdWx0IFZhbHVlczwvYj48L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PGI+U2FtcGxlczwvYj48L3RkPg0KLSAgICAgICA8dGQ+PGI+UTE2LjA8L2I+PC90ZD4NCi0gICAgICAgPHRkPm54ODAgZm9yIDhrSHo8L3RkPg0KLSAgICAgICA8dGQ+ODAgZm9yIDhrSHo8L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD5ueDE2MCBmb3IgMTZrSHo8L3RkPg0KLSAgICAgICA8dGQ+MTYwIGZvciAxNmtIejwvdGQ+DQotICAgPC90cj4NCi0gICA8dHI+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPm54MjQwIGZvciAyNGtIejwvdGQ+DQotICAgICAgIDx0ZD4yNDAgZm9yIDI0a0h6PC90ZD4NCi0gICA8L3RyPg0KLSAgIDx0cj4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD48L3RkPg0KLSAgICAgICA8dGQ+bngzMjAgZm9yIDMya0h6PC90ZD4NCi0gICAgICAgPHRkPjMyMCBmb3IgMzJrSHo8L3RkPg0KLSAgIDwvdHI+DQotICAgPHRyPg0KLSAgICAgICA8dGQ+PC90ZD4NCi0gICAgICAgPHRkPjwvdGQ+DQotICAgICAgIDx0ZD5ueDQ4MCBmb3IgNDhrSHo8L3RkPg0KLSAgICAgICA8dGQ+NDgwIGZvciA0OGtIejwvdGQ+DQotICAgPC90cj4NCi08L3RhYmxlPg0KLQ0KLUBwcmUgaEluc3RhbmNlIHNob3VsZCBiZSB2YWxpZCBoYW5kbGUuDQotQHByZSBMVlZFX1J4X1NldENvbnRyb2xQYXJhbWV0ZXJzIHNob3VsZCBiZSBjYWxsZWQgc3VjY2Vzc2Z1bGx5IG9uY2UgYmVmb3JlLg0KLXRoZSBmaXJzdCBjYWxsIHRvIExWVkVfUnhfUHJvY2Vzcw0KLUBwcmUgcEluRGF0YSBpcyBmaWxsZWQgd2l0aCB0aGUgaW5wdXQgc2FtcGxlcyB0byBwcm9jZXNzLg0KLQ0KLUBwb3N0IHBPdXREYXRhIGNvbnRhaW5zIHRoZSBwcm9jZXNzZWQgc2FtcGxlcy4NCi0NCi1AcmV0dXJuIExWVkVfU1VDQ0VTUyAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSwgcEluRGF0YSBvciBwT3V0RGF0YSBpcyBOVUxMDQotQHJldHVybiBMVlZFX0lOVkFMSUROVU1TQU1QTEVTIFdoZW4gdGhlIE51bVNhbXBsZXMgaXMgb3V0c2lkZSB0aGUgYWxsb3dlZA0KLXJhbmdlDQotQHJldHVybiBMVlZFX0lOVkFMSURfU1RBVEVfQ09ORklHVVJBVElPTiBXaGVuIGludmFsaWQgc3RhdGUgb2YgdGhlIGFsZ29yaXRobSBmb3VuZA0KLQ0KLUBpbmdyb3VwIExWVkVfUngNCi0NCi1MVlZFX1J4X1Byb2Nlc3MgRXhhbXBsZToNCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24gY2FsbC4NCi0NCi1cY29kZQ0KLSAgICAvLyBSeCBQcm9jZXNzaW5nDQotICAgIExWVkVfU1RBVFVTID0gTFZWRV9SeF9Qcm9jZXNzKCBoSW5zdGFuY2VfUngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSW5EYXRhX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vaXNlRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBPdXREYXRhX1J4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtU2FtcGxlcyApOw0KLQ0KLSAgICBpZiAoTFZWRV9TVEFUVVMgIT0gTFZWRV9TVUNDRVNTICkNCi0gICAgew0KLSAgICAgICAvLyBFcnJvciBIYW5kbGluZw0KLSAgICB9DQotXGVuZGNvZGUNCi0NCi0qLw0KLQ0KLUxWVkVfUmV0dXJuU3RhdHVzX2VuIExWVkVfUnhfUHJvY2VzcyggICBMVlZFX1J4X0hhbmRsZV90ICAgIGhJbnN0YW5jZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZNX0lOVDE2ICAgICAqcEluRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZNX0lOVDE2ICAgICAqcE5vaXNlRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFZNX0lOVDE2ICAgICAgICAgICAqcE91dERhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExWTV9VSU5UMTYgICAgTnVtU2FtcGxlcyk7DQotDQotDQotLyoqDQotXGJyaWVmIGdldCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgY3VycmVudCBvZiBMVlZFIGxpYnJhcnkuDQotDQotVGhpcyBmdW5jdGlvbiByZXR1cm5zLCB0byBob3N0LCBjdXJyZW50IHZlcnNpb24gb2YgdGhlIExWVkUgbGlicmFyeQ0KLUBwYXJhbSAgcFZlcnNpb24gICAgICAgICAgICAgICAgdmVyc2lvbiBpbmZvDQotDQotQHJldHVybiAgTFZWRV9TVUNDRVNTICAgICAgICAgICBTdWNjZWVkZWQNCi1AcmV0dXJuICBMVlZFX05VTExBRERSRVNTICAgICAgIFdoZW4gb25lIG9mIGhJbnN0YW5jZSwgcEluRGF0YSBvciBwT3V0RGF0YSBpcyBOVUxMDQotDQotTFZWRV9HZXRWZXJzaW9uSW5mb3QgRXhhbXBsZToNCi0NCi1cY29kZQ0KLSAgICAvL0dldCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbg0KLSAgICBMVlZFX1ZlcnNpb25JbmZvICAgICBWZXJzaW9uSW5mbzsNCi0gICAgTFZWRV9HZXRWZXJzaW9uSW5mbygmVmVyc2lvbkluZm8pOw0KLVxlbmRjb2RlDQotDQotKi8NCi1MVlZFX1JldHVyblN0YXR1c19lbiBMVlZFX0dldFZlcnNpb25JbmZvKCBMVlZFX1ZlcnNpb25JbmZvICpwVmVyc2lvbiApOw0KLQ0KLS8qKg0KLUBicmllZiBTZXRzIG9yIGNoYW5nZXMgdGhlIExWVkVfVHggbW9kdWxlIHBhcmFtZXRlcnMgdGhyb3VnaCBhIFByZXNldCBCdWZmZXIuDQotDQotU2V0cyBvciBjaGFuZ2VzIHRoZSBMVlZFX1R4IG1vZHVsZSBwYXJhbWV0ZXJzIHRocm91Z2ggYSBQcmVzZXQgQnVmZmVyLiBUbyBzZXQgcGFyYW1ldGVycyB1c2luZyBcIkNcIiBzdHJ1Y3R1cmUgc2VlDQotQHJlZiBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzDQotVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgbmV3IHNldCBvZiBwYXJhbWV0ZXJzIGFuZCBtYWtlcyBhIGxvY2FsIGNvcHkgd2l0aGluIHRoZQ0KLUxWVkVfVHggbW9kdWxlIGJ1dCB0aGUgcGFyYW1ldGVycyBhcmUgb25seSBhcHBsaWVkIG9uIHRoZSBuZXh0IGNhbGwgb2YgdGhlIExWVkVfVHhfUHJvY2Vzcw0KLWZ1bmN0aW9uLiBXaGVuIG5vIHBhcmFtZXRlcnMgYXJlIGNoYW5nZWQsIG5vIGFjdGlvbiBpcyB0YWtlbi4gVGhpcyBmdW5jdGlvbiBjYW4NCi1iZSBjYWxsZWQgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSBwcm9jZXNzaW5nLCBldmVuIHdoZW4gdGhlIExWVkVfVHhfUHJvY2VzcyBmdW5jdGlvbg0KLWlzIHJ1bm5pbmcuDQotVGhlIG5ldyBwYXJhbWV0ZXJzIGFyZSBzdXBwbGllZCBpbiB0aGUgZm9ybSBhIEByZWYgTFZWRV9UeF9QcmVzZXRfdCAoQnl0ZSBhcnJheSkuDQotVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBhcnJheSBzaGFsbCBiZSBhIG11bHRpcGxlIG9mIEByZWYgTFZWRV9UWF9QUkVTRVRfTEVOR1RILg0KLQ0KLUBwYXJhbSBoSW5zdGFuY2UgICAgICAgICAgICAgICBJbnN0YW5jZSBIYW5kbGUNCi1AcGFyYW0gcFByZXNldCAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIFByZXNldCBidWZmZXINCi1AcGFyYW0gUHJlc2V0TGVuZ3RoICAgICAgICAgICAgTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBQcmVzZXQgYnVmZmVyDQotQHBhcmFtIFZvbHVtZUluZGV4ICAgICAgICAgICAgIFZvbHVtZSBpbmRleCB0byBiZSBzZWxlY3RlZCBmcm9tIHRoZSBQcmVzZXQgYnVmZmVyDQotDQotQHByZSBoSW5zdGFuY2Ugc2hvdWxkIGJlIHZhbGlkIGhhbmRsZS4NCi0NCi1AcmV0dXJuIEByZWYgTFZWRV9TVUNDRVNTICAgICAgICAgIFN1Y2NlZWRlZA0KLUByZXR1cm4gQHJlZiBMVlZFX05VTExBRERSRVNTICAgICAgV2hlbiBoSW5zdGFuY2Ugb3IgcFByZXNldCBpcyBOVUxMDQotQHJldHVybiBAcmVmIExWVkVfT1VUT0ZSQU5HRSAgICAgICBXaGVuIFByZXNldExlbmd0aCBvciBhbnkgb2YgdGhlIG5ldyBwYXJhbWV0ZXJzIGlzIG91dCBvZiByYW5nZQ0KLUByZXR1cm4gQHJlZiBMVlZFX0lOVkFMSURfQUxHT1JJVEhNX0NPTkZJR1VSQVRJT04gV2hlbiBtdXR1YWxseSBleGNsdXNpdmUgYWxnb3JpdGhtcyBhcmUgZW5hYmxlZCBpbiB0aGUgcGFyYW1ldGVycyBhdCB0aGUgc2FtZSB0aW1lDQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfQlVGRkVSX0xFTkdUSCBXaGVuIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gTFZWRV9UWF9QUkVTRVRfTEVOR1RIDQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfVk9MVU1FX0lOREVYIFdoZW4gdGhlIHZvbHVtZSBpbmRleCBleGNlZWRzIHRoZSBidWZmZXIgY29udGVudA0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX0JVRkZFUl9WRVJTSU9OIFdoZW4gdGhlIHZlcnNpb24gb2YgdGhlIGZvcm1hdCBvZiB0aGUgcHJlc2V0IGJ1ZmZlciBkb2VzIG5vdCBtYXRjaCB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeQ0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX0JBU0VMSU5FX1ZFUlNJT04gV2hlbiB0aGUgYmFzZWxpbmUgdmVyc2lvbiBvZiB0aGUgcHJvdmlkZWQgcHJlc2V0IGJ1ZmZlciBhbmQgdGhlIGJhc2VsaW5lIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG8gbm90IG1hdGNoLiBJcyB0aGUgcHJlc2V0IGdlbmVyYXRlZCBmb3IgdGhpcyBsaWJyYXJ5ID8NCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9NQVNLIFdoZW4gdGhlIGFsZ29yaXRobSBtYXNrIG9mIHRoZSBwcm92aWRlZCBwcmVzZXQgYnVmZmVyIGFuZCB0aGUgYWxnb3JpdGhtIG1hc2sgb2YgdGhlIGxpYnJhcnkgZG8gbm90IG1hdGNoLiBJcyB0aGUgcHJlc2V0IGdlbmVyYXRlZCBmb3IgdGhpcyBsaWJyYXJ5ID8NCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9TQU1QTEVfUkFURSBXaGVuIHRoZSBzYW1wbGUgcmF0ZSBAcmVmIExWTV9Gc19lbiBvZiB0aGUgcHJlc2V0IGRvZXMgbm90IG1hdGNoIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgaEluc3RhbmNlDQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfTFZXSVJFRk9STUFUX01FU1NBR0VJRCAgV2hlbiB0aGUgTFZXaXJlZm9ybWF0IG1lc3NhZ2UgaWQgQHJlZiBMVlZJREhlYWRlcl9NZXNzYWdlSURfZW4gb2YgdGhlIHByZXNldCBpcyBub3QgdmFsaWQNCi0NCi1Abm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgTFZWRV9UeF9Qcm9jZXNzIGZ1bmN0aW9uDQotDQotQGluZ3JvdXAgTFZWRV9UeA0KLUxWVkVfVHhfU2V0UHJlc2V0OiBTZXR0aW5nIENvbnRyb2wgUGFyYW1ldGVycyB1c2luZyBQcmVzZXQgQnVmZmVyIEV4YW1wbGU6DQotDQotVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBzZXQgZGlmZmVyZW50IGNvbnRyb2wgcGFyYW1ldGVycyBmb3IgdGhlIExWVkVfVHggaW5zdGFuY2UgdXNpbmcgUHJlc2V0IEJ1ZmZlci4NCi0NCi1cY29kZQ0KLSAgICBMVk1fQ0hBUiBMVlZFX1R4X1ByZXNldF9CdWZmZXJbTFZWRV9UWF9QUkVTRVRfTEVOR1RIXTsNCi0gICAgTFZWRV9UeF9QcmVzZXRfdCBjb25zdCBMVlZFX1R4X1ByZXNldCA9IExWVkVfVHhfUHJlc2V0X0J1ZmZlcjsNCi0NCi0gICAgRklMRSAqUFJFU0VURklMRV9UeDsNCi0gICAgTFZNX0lOVDMyIFJlYWRCeXRlcyA9IDA7DQotDQotICAgIFBSRVNFVEZJTEVfVHg9Zm9wZW4oZmlsZW5hbWUsICJyYiIgKTsNCi0NCi0gICAgLy8gUmVhZCB0aGUgcHJlc2V0IGJ1ZmZlcg0KLSAgICBSZWFkQnl0ZXMgPSBmcmVhZCggTFZWRV9UeF9QcmVzZXRfQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKExWTV9DSEFSKSwNCi0gICAgICAgICAgICAgICAgICAgICAgIChMVk1fVUlOVDMyKUxWVkVfVFhfUFJFU0VUX0xFTkdUSCwNCi0gICAgICAgICAgICAgICAgICAgICAgIFBSRVNFVEZJTEVfVHggKTsNCi0NCi0gICAgZmNsb3NlKFBSRVNFVEZJTEVfVHgpOw0KLQ0KLSAgICAgLy8gVXBkYXRlIGluc3RhbmNlIHdpdGggbmV3IHByZXNldCBidWZmZXINCi0gICAgTFZWRV9TdGF0dXMgPSBMVlZFX1R4X1NldFByZXNldCggaEluc3RhbmNlX1R4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVlZFX1R4X1ByZXNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZEJ5dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsNCi0NCi0gICAgaWYgKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi1cZW5kY29kZQ0KLQ0KLQ0KLQ0KLSovDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9UeF9TZXRQcmVzZXQoTFZWRV9UeF9IYW5kbGVfdCBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZWRV9UeF9QcmVzZXRfdCBwUHJlc2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9VSU5UMzIgUHJlc2V0TGVuZ3RoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9VSU5UMTYgVm9sdW1lSW5kZXgpOw0KLQ0KLS8qKg0KLUBicmllZiBTZXRzIG9yIGNoYW5nZXMgdGhlIExWVkVfUnggbW9kdWxlIHBhcmFtZXRlcnMgdGhyb3VnaCBhIFByZXNldCBCdWZmZXINCi0NCi1TZXRzIG9yIGNoYW5nZXMgdGhlIExWVkVfUnggbW9kdWxlIHBhcmFtZXRlcnMgdGhyb3VnaCBhIFByZXNldCBCdWZmZXIuIFRvIHNldCBwYXJhbWV0ZXJzIHVzaW5nIFwiQ1wiIHN0cnVjdHVyZSBzZWUNCi1AcmVmIExWVkVfUnhfU2V0Q29udHJvbFBhcmFtZXRlcnMNCi1UaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBuZXcgc2V0IG9mIHBhcmFtZXRlcnMgYW5kIG1ha2VzIGEgbG9jYWwgY29weSB3aXRoaW4gdGhlDQotTFZWRV9SeCBtb2R1bGUgYnV0IHRoZSBwYXJhbWV0ZXJzIGFyZSBvbmx5IGFwcGxpZWQgb24gdGhlIG5leHQgY2FsbCBvZiB0aGUgTFZWRV9SeF9Qcm9jZXNzDQotZnVuY3Rpb24uIFdoZW4gbm8gcGFyYW1ldGVycyBhcmUgY2hhbmdlZCwgbm8gYWN0aW9uIGlzIHRha2VuLiBUaGlzIGZ1bmN0aW9uIGNhbg0KLWJlIGNhbGxlZCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHByb2Nlc3NpbmcsIGV2ZW4gd2hlbiB0aGUgTFZWRV9SeF9Qcm9jZXNzIGZ1bmN0aW9uDQotaXMgcnVubmluZy4NCi1UaGUgbmV3IHBhcmFtZXRlcnMgYXJlIHN1cHBsaWVkIGluIHRoZSBmb3JtIGEgQHJlZiBMVlZFX1J4X1ByZXNldF90IChCeXRlIGFycmF5KS4NCi1UaGUgbGVuZ3RoIG9mIHRoZSBieXRlIGFycmF5IHNoYWxsIGJlIGEgbXVsdGlwbGUgb2YgQHJlZiBMVlZFX1JYX1BSRVNFVF9MRU5HVEguDQotDQotQHBhcmFtIGhJbnN0YW5jZSAgICAgICAgICAgICAgIEluc3RhbmNlIEhhbmRsZQ0KLUBwYXJhbSBwUHJlc2V0ICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgUHJlc2V0IGJ1ZmZlcg0KLUBwYXJhbSBQcmVzZXRMZW5ndGggICAgICAgICAgICBMZW5ndGggaW4gYnl0ZXMgb2YgdGhlIFByZXNldCBidWZmZXINCi1AcGFyYW0gVm9sdW1lSW5kZXggICAgICAgICAgICAgVm9sdW1lIGluZGV4IHRvIGJlIHNlbGVjdGVkIGZyb20gdGhlIFByZXNldCBidWZmZXINCi0NCi1AcHJlIGhJbnN0YW5jZSBzaG91bGQgYmUgdmFsaWQgaGFuZGxlLg0KLQ0KLUByZXR1cm4gQHJlZiBMVlZFX1NVQ0NFU1MgICAgICAgICAgU3VjY2VlZGVkDQotQHJldHVybiBAcmVmIExWVkVfTlVMTEFERFJFU1MgICAgICBXaGVuIGhJbnN0YW5jZSBvciBwUHJlc2V0IGlzIE5VTEwNCi1AcmV0dXJuIEByZWYgTFZWRV9PVVRPRlJBTkdFICAgICAgIFdoZW4gUHJlc2V0TGVuZ3RoIG9yIGFueSBvZiB0aGUgbmV3IHBhcmFtZXRlcnMgaXMgb3V0IG9mIHJhbmdlDQotQHJldHVybiBAcmVmIExWVkVfSU5WQUxJRF9BTEdPUklUSE1fQ09ORklHVVJBVElPTiBXaGVuIG11dHVhbGx5IGV4Y2x1c2l2ZSBhbGdvcml0aG1zIGFyZSBlbmFibGVkIGluIHRoZSBwYXJhbWV0ZXJzIGF0IHRoZSBzYW1lIHRpbWUNCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9CVUZGRVJfTEVOR1RIIFdoZW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiBMVlZFX1JYX1BSRVNFVF9MRU5HVEgNCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9WT0xVTUVfSU5ERVggV2hlbiB0aGUgdm9sdW1lIGluZGV4IGV4Y2VlZHMgdGhlIGJ1ZmZlciBjb250ZW50DQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfQlVGRkVSX1ZFUlNJT04gV2hlbiB0aGUgdmVyc2lvbiBvZiB0aGUgZm9ybWF0IG9mIHRoZSBwcmVzZXQgYnVmZmVyIGRvZXMgbm90IG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5DQotQHJldHVybiBAcmVmIExWVkVfUFJFU0VUX0lOVkFMSURfQkFTRUxJTkVfVkVSU0lPTiBXaGVuIHRoZSBiYXNlbGluZSB2ZXJzaW9uIG9mIHRoZSBwcm92aWRlZCBwcmVzZXQgYnVmZmVyIGFuZCB0aGUgYmFzZWxpbmUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkbyBub3QgbWF0Y2guIElzIHRoZSBwcmVzZXQgZ2VuZXJhdGVkIGZvciB0aGlzIGxpYnJhcnkgPw0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX01BU0sgV2hlbiB0aGUgYWxnb3JpdGhtIG1hc2sgb2YgdGhlIHByb3ZpZGVkIHByZXNldCBidWZmZXIgYW5kIHRoZSBhbGdvcml0aG0gbWFzayBvZiB0aGUgbGlicmFyeSBkbyBub3QgbWF0Y2guIElzIHRoZSBwcmVzZXQgZ2VuZXJhdGVkIGZvciB0aGlzIGxpYnJhcnkgPw0KLUByZXR1cm4gQHJlZiBMVlZFX1BSRVNFVF9JTlZBTElEX1NBTVBMRV9SQVRFIFdoZW4gdGhlIHNhbXBsZSByYXRlIEByZWYgTFZNX0ZzX2VuIG9mIHRoZSBwcmVzZXQgZG9lcyBub3QgbWF0Y2ggdGhlIHNhbXBsZSByYXRlIG9mIHRoZSBoSW5zdGFuY2UNCi1AcmV0dXJuIEByZWYgTFZWRV9QUkVTRVRfSU5WQUxJRF9MVldJUkVGT1JNQVRfTUVTU0FHRUlEICBXaGVuIHRoZSBMVldpcmVmb3JtYXQgbWVzc2FnZSBpZCBAcmVmIExWVklESGVhZGVyX01lc3NhZ2VJRF9lbiBvZiB0aGUgcHJlc2V0IGlzIG5vdCB2YWxpZA0KLQ0KLUBub3RlIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludGVycnVwdGVkIGJ5IHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24NCi0NCi1AaW5ncm91cCBMVlZFX1J4DQotDQotTFZWRV9SeF9TZXRQcmVzZXQ6IFNldHRpbmcgQ29udHJvbCBQYXJhbWV0ZXJzIHVzaW5nIFByZXNldCBCdWZmZXIgRXhhbXBsZToNCi0NCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHNldCBkaWZmZXJlbnQgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB0aGUgTFZWRV9SeCBpbnN0YW5jZSB1c2luZyBQcmVzZXQgQnVmZmVyLg0KLQ0KLVxjb2RlDQotICAgICNkZWZpbmUgTlVNX1ZPTFVNRVMgKDUpDQotICAgIExWTV9DSEFSIExWVkVfUnhfUHJlc2V0X0J1ZmZlcltOVU1fVk9MVU1FUypMVlZFX1JYX1BSRVNFVF9MRU5HVEhdOw0KLSAgICBMVlZFX1J4X1ByZXNldF90IGNvbnN0IExWVkVfUnhfUHJlc2V0ID0gTFZWRV9SeF9QcmVzZXRfQnVmZmVyOw0KLQ0KLSAgICBGSUxFICpQUkVTRVRGSUxFX1J4Ow0KLSAgICBMVk1fSU5UMzIgUmVhZEJ5dGVzID0gMDsNCi0gICAgTFZNX1VJTlQxNiBWb2x1bWVJbmRleCA9IDM7DQotDQotICAgIFBSRVNFVEZJTEVfUng9Zm9wZW4oZmlsZW5hbWUsICJyYiIgKTsNCi0NCi0gICAgLy8gUmVhZCB0aGUgcHJlc2V0IGJ1ZmZlcg0KLSAgICBSZWFkQnl0ZXMgPSBmcmVhZCggTFZWRV9SeF9QcmVzZXRfQnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKExWTV9DSEFSKSwNCi0gICAgICAgICAgICAgICAgICAgICAgIChMVk1fVUlOVDMyKShOVU1fVk9MVU1FUypMVlZFX1JYX1BSRVNFVF9MRU5HVEgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgUFJFU0VURklMRV9SeCApOw0KLQ0KLSAgICBmY2xvc2UoUFJFU0VURklMRV9SeCk7DQotDQotICAgICAvLyBVcGRhdGUgaW5zdGFuY2Ugd2l0aCBuZXcgcHJlc2V0IGJ1ZmZlcg0KLSAgICBMVlZFX1N0YXR1cyA9IExWVkVfUnhfU2V0UHJlc2V0KCBoSW5zdGFuY2VfUngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWVkVfUnhfUHJlc2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkQnl0ZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZUluZGV4KTsNCi0NCi0gICAgaWYgKCBMVlZFX1N0YXR1cyAhPSBMVlZFX1NVQ0NFU1MgKQ0KLSAgICB7DQotICAgICAgICAvLyBIYW5kbGUgRXJyb3JzDQotICAgIH0NCi1cZW5kY29kZQ0KLQ0KLSovDQotTFZWRV9SZXR1cm5TdGF0dXNfZW4gTFZWRV9SeF9TZXRQcmVzZXQoTFZWRV9SeF9IYW5kbGVfdCBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTFZWRV9SeF9QcmVzZXRfdCBwUHJlc2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9VSU5UMzIgUHJlc2V0TGVuZ3RoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWTV9VSU5UMTYgVm9sdW1lSW5kZXgpOw0KLQ0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCi0NCi0jZW5kaWYgICAgICAvKiBfX0xWVkVfSF9fICovDQotDQotLyogRW5kIG9mIGZpbGUgKi8NCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC91Y2xpbnV4L0xWVkVfVklELmggYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC91Y2xpbnV4L0xWVkVfVklELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDc5MDQ3YTguLjAwMDAwMDAKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdWNsaW51eC9MVlZFX1ZJRC5oCisrKyAvZGV2L251bGwKQEAgLTEsODQxMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTYgTlhQIFNvZnR3YXJlLiBBbGwgcmlnaHRzIGFyZSByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgUmVwcm9kdWN0aW9uIGluIHdob2xlIG9yIGluIHBhcnQgaXMgcHJvaGliaXRlZCB3aXRob3V0IHRoZSBwcmlvciAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgd3JpdHRlbiBjb25zZW50IG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgVGhpcyBzb2Z0d2FyZSBhbmQgYW55IGNvbXBpbGF0aW9uIG9yIGRlcml2YXRpdmUgdGhlcmVvZiBpcyBhbmQgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgc2hhbGwgcmVtYWluIHRoZSBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiBvZiBOWFAgU29mdHdhcmUgYW5kIGlzICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgaGlnaGx5IGNvbmZpZGVudGlhbCBpbiBuYXR1cmUuIEFueSBhbmQgYWxsIHVzZSBoZXJlb2YgaXMgcmVzdHJpY3RlZCAgICAgICAgICAgICAgICAgKi8NCi0vKiAgYW5kIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgY29uY2x1ZGVkIHdpdGggTlhQIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBpcyB0aGlzIHNvZnR3YXJlIG9yIGFueSBkZXJpdmF0aXZlIHRoZXJlb2YgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgdG8gYmUgY29tYmluZWQgd2l0aCBhbnkgT3BlbiBTb3VyY2UgU29mdHdhcmUgaW4gYW55IHdheSBvciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgbGljZW5zZWQgdW5kZXIgYW55IE9wZW4gTGljZW5zZSBUZXJtcyB3aXRob3V0IHRoZSBleHByZXNzIHByaW9yICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgd3JpdHRlbiAgcGVybWlzc2lvbiBvZiBOWFAgU29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhdXNlLCB0aGUgdGVybSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBtZWFucyAgICAgICAgICAgICAgICAgKi8NCi0vKiAgYW55IHNvZnR3YXJlIHRoYXQgaXMgbGljZW5zZWQgdW5kZXIgT3BlbiBMaWNlbnNlIFRlcm1zLiBPcGVuICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgTGljZW5zZSBUZXJtcyBtZWFucyB0ZXJtcyBpbiBhbnkgbGljZW5zZSB0aGF0IHJlcXVpcmUgYXMgYSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgY29uZGl0aW9uIG9mIHVzZSwgbW9kaWZpY2F0aW9uIGFuZC9vciBkaXN0cmlidXRpb24gb2YgYSB3b3JrICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgMS4gdGhlIG1ha2luZyBhdmFpbGFibGUgb2Ygc291cmNlIGNvZGUgb3Igb3RoZXIgbWF0ZXJpYWxzICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgcHJlZmVycmVkIGZvciBtb2RpZmljYXRpb24sIG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgMi4gdGhlIGdyYW50aW5nIG9mIHBlcm1pc3Npb24gZm9yIGNyZWF0aW5nIGRlcml2YXRpdmUgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgd29ya3MsIG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgMy4gdGhlIHJlcHJvZHVjdGlvbiBvZiBjZXJ0YWluIG5vdGljZXMgb3IgbGljZW5zZSB0ZXJtcyAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgaW4gZGVyaXZhdGl2ZSB3b3JrcyBvciBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiwgb3IgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgNC4gdGhlIGdyYW50aW5nIG9mIGEgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gYW55IHBhcnR5ICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgdW5kZXIgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgcmVnYXJkaW5nIHRoZSB3b3JrIGFuZC9vciBhbnkgd29yayB0aGF0IGNvbnRhaW5zLCBpcyBjb21iaW5lZCB3aXRoLCAgICAgICAgICAgICAgICAgKi8NCi0vKiAgcmVxdWlyZXMgb3Igb3RoZXJ3aXNlIGlzIGJhc2VkIG9uIHRoZSB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBmb3IgZWFzZSBvZiByZWNvbXBpbGF0aW9uIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgTW9kaWZpY2F0aW9uIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIG9mIHRoaXMgc29mdHdhcmUgYXJlIHN0cmljdGx5ICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgcHJvaGliaXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgJEF1dGhvcjogbnhwNjUyODUgJCovDQotLyogICAgICRSZXZpc2lvbjogNDkzOTAgJCovDQotLyogICAgICREYXRlOiAyMDEzLTEwLTE2IDE4OjM0OjM1ICswNTMwIChXZWQsIDE2IE9jdCAyMDEzKSAkKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKiogQGZpbGUNCi0gKiAgSGVhZGVyIGZpbGUgZm9yIHRoZSBhcHBsaWNhdGlvbiBsYXllciBpbnRlcmZhY2Ugb2YgdGhlIFJFTF9MVlZFX0hGX05WMV9WQ19BR0NfUlhfRFJDX1JYIG1vZHVsZQ0KLSAqDQotICogIFRoZSBzdWZmaXggVklEIGluIGhlYWRlciBmaWxlIHN0YW5kcyBmb3IgVm9pY2UgSW50ZXJmYWNlIERlZmluaXRpb24NCi0gKiAgVGhpcyBmaWxlcyBpbmNsdWRlcyBhbGwgZGVmaW5pdGlvbnMsIHR5cGVzLCBhbmQgc3RydWN0dXJlcyByZXF1aXJlZCBieSB0aGUgY2FsbGluZw0KLSAqICBsYXllci4gUHVibGljIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgcHJvdG95cGVzIGhlYWRlciBmaWxlcy4NCi0gKiAgQWxsIG90aGVyIHR5cGVzLCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIHByaXZhdGUuDQotICovDQotDQotI2lmbmRlZiBfX1JFTF9MVlZFX0hGX05WMV9WQ19BR0NfUlhfRFJDX1JYX1ZJRFBQX0hfXw0KLSNkZWZpbmUgX19SRUxfTFZWRV9IRl9OVjFfVkNfQUdDX1JYX0RSQ19SWF9WSURQUF9IX18NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgSW5jbHVkZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0jaW5jbHVkZSAiTFZDX1R5cGVzLmgiDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLyoqDQotPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPk5hbWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5WYWx1ZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfUlhfTFZGRU5TX01BU0sxPC90ZD4NCi0gICAgICAgIDx0ZD4xPC90ZD4NCi0gICAgICAgIDx0ZD5GYXIgRW5kIE5vaXNlIFN1cHByZXNzaW9uIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUng8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1JYX0hQRl9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+SGlnaCBQYXNzIEZpbHRlciBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9SWF9MVk5HX01BU0sxPC90ZD4NCi0gICAgICAgIDx0ZD4xNjwvdGQ+DQotICAgICAgICA8dGQ+Tm9pc2UgR2F0ZSBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9SWF9FUV9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+NjQ8L3RkPg0KLSAgICAgICAgPHRkPkVxdWFsaXplciBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9SWF9BR0NfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+QXV0b21hdGljIEdhaW4gQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9SWF9EUkNfTUFTSzE8L3RkPg0KLSAgICAgICAgPHRkPjI1NjwvdGQ+DQotICAgICAgICA8dGQ+RHluYW1pYyBSYW5nZSBDb250cm9sIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUng8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1JYX1ZPTF9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+NTEyPC90ZD4NCi0gICAgICAgIDx0ZD5Wb2x1bWUgQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTFZWRV9SWF9MVlZDX01BU0sxPC90ZD4NCi0gICAgICAgIDx0ZD4xMDI0PC90ZD4NCi0gICAgICAgIDx0ZD5Wb2ljZUNsYXJpdHkgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeDwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibTsNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9SeF9MVkZFTlNfTUFTSzENCi0qIEZhciBFbmQgTm9pc2UgU3VwcHJlc3Npb24gaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTFZGRU5TX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkxKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1J4X0hQRl9NQVNLMQ0KLSogSGlnaCBQYXNzIEZpbHRlciBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9IUEZfTUFTSzEgKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTQpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfUnhfTFZOR19NQVNLMQ0KLSogTm9pc2UgR2F0ZSBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9MVk5HX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkxNikNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9SeF9FUV9NQVNLMQ0KLSogRXF1YWxpemVyIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfUngNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0VRX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSk2NCkNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9SeF9BR0NfTUFTSzENCi0qIEF1dG9tYXRpYyBHYWluIENvbnRyb2wgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfQUdDX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkxMjgpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfUnhfRFJDX01BU0sxDQotKiBEeW5hbWljIFJhbmdlIENvbnRyb2wgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfRFJDX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkyNTYpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfUnhfVk9MX01BU0sxDQotKiBWb2x1bWUgQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1J4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9WT0xfTUFTSzEgKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTUxMikNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9SeF9MVlZDX01BU0sxDQotKiBWb2ljZUNsYXJpdHkgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9SeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTFZWQ19NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMTAyNCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMV9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX01BU0sxX0JNX01JTiAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMV9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0xWRkVOU19NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTEpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0hQRl9NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTQpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX0xWTkdfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkxNikNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfRVFfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSk2NCkNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfQUdDX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0pMTI4KQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9EUkNfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkyNTYpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX1ZPTF9NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTUxMikNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTFZWQ19NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtKTEwMjQpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1JYX01BU0sxX0JNX01BWCAoTFZWSURIRUFERVJfTFZWRV9SWF9MVkZFTlNfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9SWF9IUEZfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9SWF9MVk5HX01BU0sxX0ZPUk1BWCB8IExWVklESEVBREVSX0xWVkVfUlhfRVFfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9SWF9BR0NfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9SWF9EUkNfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9SWF9WT0xfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9SWF9MVlZDX01BU0sxX0ZPUk1BWCB8ICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMV9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2syX2JtOw0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9MVlZFX1JYX01BU0syX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibQ0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2syX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzJfQk1fTUlOICgoTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9MVlZFX1JYX01BU0syX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibQ0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2syX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzJfQk1fTUFYICgoKExWVklESGVhZGVyX0xWVkVfUnhfTWFzazJfYm0pMCkpDQotLyoqDQotPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPk5hbWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5WYWx1ZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfVFhfTFZIRl9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+SGFuZHNGcmVlIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHg8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1RYX0VRX01BU0sxPC90ZD4NCi0gICAgICAgIDx0ZD40PC90ZD4NCi0gICAgICAgIDx0ZD5FcXVhbGl6ZXIgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9UeDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfVFhfRFJDX01BU0sxPC90ZD4NCi0gICAgICAgIDx0ZD4xNjwvdGQ+DQotICAgICAgICA8dGQ+RHluYW1pYyBSYW5nZSBDb250cm9sIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHg8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1RYX1ZPTF9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MzI8L3RkPg0KLSAgICAgICAgPHRkPlZvbHVtZSBDb250cm9sIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHg8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9MVlZFX1RYX0hQRl9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MTI4PC90ZD4NCi0gICAgICAgIDx0ZD5IUEYgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9UeDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0xWVkVfVFhfTFZOVl8wMV9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+NTEyPC90ZD4NCi0gICAgICAgIDx0ZD5Ob2lzZVZvaWQgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9UeDwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibTsNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9UeF9MVkhGX01BU0sxDQotKiBIYW5kc0ZyZWUgaXMgcHJlc2VudCBpbiB0aGUgTFZWRV9UeA0KLSogQHNlZSBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfTFZIRl9NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMSkNCi0vKioNCi0qIEBkZWYgTFZWSURIZWFkZXJfTFZWRV9UeF9FUV9NQVNLMQ0KLSogRXF1YWxpemVyIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHgNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0VRX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1R4X0RSQ19NQVNLMQ0KLSogRHluYW1pYyBSYW5nZSBDb250cm9sIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHgNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0RSQ19NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMTYpDQotLyoqDQotKiBAZGVmIExWVklESGVhZGVyX0xWVkVfVHhfVk9MX01BU0sxDQotKiBWb2x1bWUgQ29udHJvbCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9WT0xfTUFTSzEgKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTMyKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1R4X0hQRl9NQVNLMQ0KLSogSFBGIGlzIHByZXNlbnQgaW4gdGhlIExWVkVfVHgNCi0qIEBzZWUgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0hQRl9NQVNLMSAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMTI4KQ0KLS8qKg0KLSogQGRlZiBMVlZJREhlYWRlcl9MVlZFX1R4X0xWTlZfMDFfTUFTSzENCi0qIE5vaXNlVm9pZCBpcyBwcmVzZW50IGluIHRoZSBMVlZFX1R4DQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9MVk5WXzAxX01BU0sxICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSk1MTIpDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfVFhfTUFTSzFfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMV9CTV9NSU4gKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfVFhfTUFTSzFfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9MVkhGX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMSkNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfRVFfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSk0KQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9EUkNfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMV9ibSkxNikNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfVk9MX01BU0sxX0ZPUk1BWCAoKExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0pMzIpDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0hQRl9NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTEyOCkNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfTFZOVl8wMV9NQVNLMV9GT1JNQVggKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTUxMikNCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfTUFTSzFfQk1fTUFYIChMVlZJREhFQURFUl9MVlZFX1RYX0xWSEZfTUFTSzFfRk9STUFYIHwgTFZWSURIRUFERVJfTFZWRV9UWF9FUV9NQVNLMV9GT1JNQVggfCBMVlZJREhFQURFUl9MVlZFX1RYX0RSQ19NQVNLMV9GT1JNQVggfCBMVlZJREhFQURFUl9MVlZFX1RYX1ZPTF9NQVNLMV9GT1JNQVggfCBMVlZJREhFQURFUl9MVlZFX1RYX0hQRl9NQVNLMV9GT1JNQVggfCBMVlZJREhFQURFUl9MVlZFX1RYX0xWTlZfMDFfTUFTSzFfRk9STUFYIHwgKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVklESGVhZGVyX0xWVkVfVHhfTWFzazJfYm07DQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfVFhfTUFTSzJfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2syX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazJfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMl9CTV9NSU4gKChMVlZJREhlYWRlcl9MVlZFX1R4X01hc2syX2JtKTApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfVFhfTUFTSzJfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2syX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazJfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMl9CTV9NQVggKCgoTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMl9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTkFSUk9XQkFORF9NQVNLMTwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+TmFycm93QmFuZCBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgaW4gdGhlIExWVkU8L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtOw0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19OQVJST1dCQU5EX01BU0sxDQotKiBOYXJyb3dCYW5kIGNvbmZpZ3VyYXRpb24gaXMgcHJlc2VudCBpbiB0aGUgTFZWRQ0KLSogQHNlZSBMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19OQVJST1dCQU5EX01BU0sxICgoTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazFfYm0pMSkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzFfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibQ0KLSogQHNlZSBMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibQ0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19NQVNLMV9CTV9NSU4gKChMVlZJREhlYWRlcl9Db25maWd1cmF0aW9uc19NYXNrMV9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19NQVNLMV9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX05BUlJPV0JBTkRfTUFTSzFfRk9STUFYICgoTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazFfYm0pMSkNCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0sxX0JNX01BWCAoTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTkFSUk9XQkFORF9NQVNLMV9GT1JNQVggfCAoKExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtOw0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9DT05GSUdVUkFUSU9OU19NQVNLMl9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtDQotKiBAc2VlIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtDQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0JNX01JTiAoKExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtKTApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazJfYm0NCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29uZmlndXJhdGlvbnNfTWFzazJfYm0NCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzJfQk1fTUFYICgoKExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfQVZMPC90ZD4NCi0gICAgICAgIDx0ZD4yPC90ZD4NCi0gICAgICAgIDx0ZD5UdXJucyBvbiBvciBvZmYgdGhlIEFHQy4gSWYgb2ZmIGJvdGggQUdDIGFuZCBMaW1pdGVyIGFyZSBieXBhc3NlZC48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfQVZMX0FEQVBUPC90ZD4NCi0gICAgICAgIDx0ZD40PC90ZD4NCi0gICAgICAgIDx0ZD5BbGxvd3MgdHVybmluZyBvZmYgdGhlIGRlcGVuZGVuY3kgb2YgdGhlIEFHQyB1cG9uIHRoZSBuZWFyZW5kIG5vaXNlIGxldmVsLiBXaGVuIHR1cm5lZCBvZmYsIHRoZSBBR0MgdXNlcyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzLjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfTU9ERV9BVkxfU1BERVRFQ1Q8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPkFsbG93cyBkaXNhYmxpbmcgc3BlZWNoIGRldGVjdGlvbiBpbiB0aGUgQUdDLiBXaGVuIHR1cm5lZCBvZmYsIHRoZSBBR0MgYWRhcHRzIGl0cyBnYWluIGFsbCB0aGUgdGltZS48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfTElNSVRFUjwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPlR1cm5zIG9uIG9yIG9mZiB0aGUgbGltaXRlci48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfTFBGPC90ZD4NCi0gICAgICAgIDx0ZD4zMjwvdGQ+DQotICAgICAgICA8dGQ+VHVybnMgb24gb3Igb2ZmIHRoZSBsb3ctcGFzcyBmaWx0ZXIuPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19NT0RFX0hQRjwvdGQ+DQotICAgICAgICA8dGQ+NjQ8L3RkPg0KLSAgICAgICAgPHRkPlR1cm5zIG9uIG9yIG9mZiB0aGUgaGlnaC1wYXNzIGZpbHRlci48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX01PREVfVkM8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+VHVybnMgb24gb3Igb2ZmIHRoZSBWb2ljZUNsYXJpdHkgZ2Fpbi48L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWVkNfTW9kZVdvcmRfYm07DQotLyoqDQotKiBAZGVmIExWVkNfTU9ERV9BVkwNCi0qIFR1cm5zIG9uIG9yIG9mZiB0aGUgQUdDLiBJZiBvZmYgYm90aCBBR0MgYW5kIExpbWl0ZXIgYXJlIGJ5cGFzc2VkLg0KLSogQHNlZSBMVlZDX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWVkNfTU9ERV9BVkwgKChMVlZDX01vZGVXb3JkX2JtKTIpDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERV9BVkxfQURBUFQNCi0qIEFsbG93cyB0dXJuaW5nIG9mZiB0aGUgZGVwZW5kZW5jeSBvZiB0aGUgQUdDIHVwb24gdGhlIG5lYXJlbmQgbm9pc2UgbGV2ZWwuIFdoZW4gdHVybmVkIG9mZiwgdGhlIEFHQyB1c2VzIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX0FWTF9BREFQVCAoKExWVkNfTW9kZVdvcmRfYm0pNCkNCi0vKioNCi0qIEBkZWYgTFZWQ19NT0RFX0FWTF9TUERFVEVDVA0KLSogQWxsb3dzIGRpc2FibGluZyBzcGVlY2ggZGV0ZWN0aW9uIGluIHRoZSBBR0MuIFdoZW4gdHVybmVkIG9mZiwgdGhlIEFHQyBhZGFwdHMgaXRzIGdhaW4gYWxsIHRoZSB0aW1lLg0KLSogQHNlZSBMVlZDX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWVkNfTU9ERV9BVkxfU1BERVRFQ1QgKChMVlZDX01vZGVXb3JkX2JtKTgpDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERV9MSU1JVEVSDQotKiBUdXJucyBvbiBvciBvZmYgdGhlIGxpbWl0ZXIuDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX0xJTUlURVIgKChMVlZDX01vZGVXb3JkX2JtKTE2KQ0KLS8qKg0KLSogQGRlZiBMVlZDX01PREVfTFBGDQotKiBUdXJucyBvbiBvciBvZmYgdGhlIGxvdy1wYXNzIGZpbHRlci4NCi0qIEBzZWUgTFZWQ19Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVlZDX01PREVfTFBGICgoTFZWQ19Nb2RlV29yZF9ibSkzMikNCi0vKioNCi0qIEBkZWYgTFZWQ19NT0RFX0hQRg0KLSogVHVybnMgb24gb3Igb2ZmIHRoZSBoaWdoLXBhc3MgZmlsdGVyLg0KLSogQHNlZSBMVlZDX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWVkNfTU9ERV9IUEYgKChMVlZDX01vZGVXb3JkX2JtKTY0KQ0KLS8qKg0KLSogQGRlZiBMVlZDX01PREVfVkMNCi0qIFR1cm5zIG9uIG9yIG9mZiB0aGUgVm9pY2VDbGFyaXR5IGdhaW4uDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX1ZDICgoTFZWQ19Nb2RlV29yZF9ibSkxMjgpDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERVdPUkRfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVlZDX01vZGVXb3JkX2JtDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFV09SRF9CTV9NSU4gKChMVlZDX01vZGVXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWVkNfTU9ERVdPUkRfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVlZDX01vZGVXb3JkX2JtDQotKiBAc2VlIExWVkNfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX0FWTF9GT1JNQVggKChMVlZDX01vZGVXb3JkX2JtKTIpDQotI2RlZmluZSBMVlZDX01PREVfQVZMX0FEQVBUX0ZPUk1BWCAoKExWVkNfTW9kZVdvcmRfYm0pNCkNCi0jZGVmaW5lIExWVkNfTU9ERV9BVkxfU1BERVRFQ1RfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSk4KQ0KLSNkZWZpbmUgTFZWQ19NT0RFX0xJTUlURVJfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSkxNikNCi0jZGVmaW5lIExWVkNfTU9ERV9MUEZfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSkzMikNCi0jZGVmaW5lIExWVkNfTU9ERV9IUEZfRk9STUFYICgoTFZWQ19Nb2RlV29yZF9ibSk2NCkNCi0jZGVmaW5lIExWVkNfTU9ERV9WQ19GT1JNQVggKChMVlZDX01vZGVXb3JkX2JtKTEyOCkNCi0jZGVmaW5lIExWVkNfTU9ERVdPUkRfQk1fTUFYIChMVlZDX01PREVfQVZMX0ZPUk1BWCB8IExWVkNfTU9ERV9BVkxfQURBUFRfRk9STUFYIHwgTFZWQ19NT0RFX0FWTF9TUERFVEVDVF9GT1JNQVggfCBMVlZDX01PREVfTElNSVRFUl9GT1JNQVggfCBMVlZDX01PREVfTFBGX0ZPUk1BWCB8IExWVkNfTU9ERV9IUEZfRk9STUFYIHwgTFZWQ19NT0RFX1ZDX0ZPUk1BWCB8ICgoTFZWQ19Nb2RlV29yZF9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZGRU5TX01PREVfSFM8L3RkPg0KLSAgICAgICAgPHRkPjE8L3RkPg0KLSAgICAgICAgPHRkPlN3aXRjaCBPTiBhbmQgT0ZGIEhvcm4gU3VwcHJlc3Nvci4gQ3VycmVudGx5IEhvcm4gU3VwcHJlc3NvciBpcyBub3Qgc3VwcG9ydGVkLjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZGRU5TX01vZGVXb3JkX2JtOw0KLS8qKg0KLSogQGRlZiBMVkZFTlNfTU9ERV9IUw0KLSogU3dpdGNoIE9OIGFuZCBPRkYgSG9ybiBTdXBwcmVzc29yLiBDdXJyZW50bHkgSG9ybiBTdXBwcmVzc29yIGlzIG5vdCBzdXBwb3J0ZWQuDQotKiBAc2VlIExWRkVOU19Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkZFTlNfTU9ERV9IUyAoKExWRkVOU19Nb2RlV29yZF9ibSkxKQ0KLS8qKg0KLSogQGRlZiBMVkZFTlNfTU9ERVdPUkRfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVkZFTlNfTW9kZVdvcmRfYm0NCi0qIEBzZWUgTFZGRU5TX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWRkVOU19NT0RFV09SRF9CTV9NSU4gKChMVkZFTlNfTW9kZVdvcmRfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZGRU5TX01PREVXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZGRU5TX01vZGVXb3JkX2JtDQotKiBAc2VlIExWRkVOU19Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkZFTlNfTU9ERV9IU19GT1JNQVggKChMVkZFTlNfTW9kZVdvcmRfYm0pMSkNCi0jZGVmaW5lIExWRkVOU19NT0RFV09SRF9CTV9NQVggKExWRkVOU19NT0RFX0hTX0ZPUk1BWCB8ICgoTFZGRU5TX01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX01PREVfQVZMPC90ZD4NCi0gICAgICAgIDx0ZD4xPC90ZD4NCi0gICAgICAgIDx0ZD5UdXJucyBvbiBvciBvZmYgdGhlIEFWTC4gSWYgb2ZmLCBib3RoIEFHQyBhbmQgTGltaXRlciBhcmUgYnlwYXNzZWQ8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX01PREVfU1BERVRFQ1Q8L3RkPg0KLSAgICAgICAgPHRkPjI8L3RkPg0KLSAgICAgICAgPHRkPkFsbG93cyBkaXNhYmxpbmcgc3BlZWNoIGRldGVjdGlvbiBpbiB0aGUgQVZMLiBXaGVuIHR1cm5lZCBvZmYsIHRoZSBBR0MgYWRhcHRzIGl0cyBnYWluIGFsbCB0aGUgdGltZS48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX01PREVfTElNSVRFUjwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+VHVybnMgb24gb3Igb2ZmIHRoZSBsaW1pdGVyLjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWV01fTU9ERV9FWFRfU1BERVRFQ1Q8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPlVzZWQgdG8gdGVsbCB0aGUgV2hpc3Blck1vZGUgbW9kdWxlIGlmIGFuIGV4dGVybmFsIHNwZWVjaCBkZXRlY3Rpb24gaXMgYXZhaWxhYmxlIChJZiAwLCB0aGVyZSBpcyBubyBleHRlcm5hbCBzcGVlY2ggZGV0ZWN0b3IpLjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZXTV9Nb2RlV29yZF9ibTsNCi0vKioNCi0qIEBkZWYgTFZXTV9NT0RFX0FWTA0KLSogVHVybnMgb24gb3Igb2ZmIHRoZSBBVkwuIElmIG9mZiwgYm90aCBBR0MgYW5kIExpbWl0ZXIgYXJlIGJ5cGFzc2VkDQotKiBAc2VlIExWV01fTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZXTV9NT0RFX0FWTCAoKExWV01fTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgTFZXTV9NT0RFX1NQREVURUNUDQotKiBBbGxvd3MgZGlzYWJsaW5nIHNwZWVjaCBkZXRlY3Rpb24gaW4gdGhlIEFWTC4gV2hlbiB0dXJuZWQgb2ZmLCB0aGUgQUdDIGFkYXB0cyBpdHMgZ2FpbiBhbGwgdGhlIHRpbWUuDQotKiBAc2VlIExWV01fTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZXTV9NT0RFX1NQREVURUNUICgoTFZXTV9Nb2RlV29yZF9ibSkyKQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVfTElNSVRFUg0KLSogVHVybnMgb24gb3Igb2ZmIHRoZSBsaW1pdGVyLg0KLSogQHNlZSBMVldNX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWV01fTU9ERV9MSU1JVEVSICgoTFZXTV9Nb2RlV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVfRVhUX1NQREVURUNUDQotKiBVc2VkIHRvIHRlbGwgdGhlIFdoaXNwZXJNb2RlIG1vZHVsZSBpZiBhbiBleHRlcm5hbCBzcGVlY2ggZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSAoSWYgMCwgdGhlcmUgaXMgbm8gZXh0ZXJuYWwgc3BlZWNoIGRldGVjdG9yKS4NCi0qIEBzZWUgTFZXTV9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVldNX01PREVfRVhUX1NQREVURUNUICgoTFZXTV9Nb2RlV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVXT1JEX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZXTV9Nb2RlV29yZF9ibQ0KLSogQHNlZSBMVldNX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWV01fTU9ERVdPUkRfQk1fTUlOICgoTFZXTV9Nb2RlV29yZF9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVldNX01PREVXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZXTV9Nb2RlV29yZF9ibQ0KLSogQHNlZSBMVldNX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWV01fTU9ERV9BVkxfRk9STUFYICgoTFZXTV9Nb2RlV29yZF9ibSkxKQ0KLSNkZWZpbmUgTFZXTV9NT0RFX1NQREVURUNUX0ZPUk1BWCAoKExWV01fTW9kZVdvcmRfYm0pMikNCi0jZGVmaW5lIExWV01fTU9ERV9MSU1JVEVSX0ZPUk1BWCAoKExWV01fTW9kZVdvcmRfYm0pNCkNCi0jZGVmaW5lIExWV01fTU9ERV9FWFRfU1BERVRFQ1RfRk9STUFYICgoTFZXTV9Nb2RlV29yZF9ibSk4KQ0KLSNkZWZpbmUgTFZXTV9NT0RFV09SRF9CTV9NQVggKExWV01fTU9ERV9BVkxfRk9STUFYIHwgTFZXTV9NT0RFX1NQREVURUNUX0ZPUk1BWCB8IExWV01fTU9ERV9MSU1JVEVSX0ZPUk1BWCB8IExWV01fTU9ERV9FWFRfU1BERVRFQ1RfRk9STUFYIHwgKChMVldNX01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX05MTVMwPC90ZD4NCi0gICAgICAgIDx0ZD4xPC90ZD4NCi0gICAgICAgIDx0ZD5OTE1TMCBmdW5jdGlvbmFsaXR5PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERV9OTE1TMTwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+TkxNUzEgZnVuY3Rpb25hbGl0eTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREVfQkVBTUZPUk1FUjwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+Rml0ZXItYW5kLVN1bSBCZWFtZm9ybWVyIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX1BDRDwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+U3dpdGNoIGJldHdlZW4gUENEIChQYXRoIGNoYW5nZSBkZXRlY3RvcikgYW5kIEJTRCAoQnJvYWRzaWRlIGRldGVjdG9yKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREVfR1NDPC90ZD4NCi0gICAgICAgIDx0ZD4xNjwvdGQ+DQotICAgICAgICA8dGQ+R2VuZXJhbGl6ZWQgU2lkZWxvYmUgQ2FuY2VsbGVyIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX0ROTlM8L3RkPg0KLSAgICAgICAgPHRkPjMyPC90ZD4NCi0gICAgICAgIDx0ZD5EeW5hbWljIE5vbi1zdGF0aW9uYXJ5IE5vaXNlIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX0RFUzwvdGQ+DQotICAgICAgICA8dGQ+NjQ8L3RkPg0KLSAgICAgICAgPHRkPkR5bmFtaWMgRWNobyBTdXBwcmVzc2lvbiBmdW5jdGlvbmFsaXR5PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERV9OUzwvdGQ+DQotICAgICAgICA8dGQ+MTI4PC90ZD4NCi0gICAgICAgIDx0ZD5TdGF0aW9uYXJ5IE5vaXNlIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX05TX048L3RkPg0KLSAgICAgICAgPHRkPjI1NjwvdGQ+DQotICAgICAgICA8dGQ+Tm9uLXN0YXRpb25hcnkgTm9pc2UgU3VwcHJlc3Npb24gZnVuY3Rpb25hbGl0eTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREVfQ0FMPC90ZD4NCi0gICAgICAgIDx0ZD4yMDQ4PC90ZD4NCi0gICAgICAgIDx0ZD5Td2l0Y2ggYmV0d2VlbiBpbml0aWFsIG9yIGNvbnRpbnVvdXMgY2FsaWJyYXRpb248L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFX0hCPC90ZD4NCi0gICAgICAgIDx0ZD4xNjM4NDwvdGQ+DQotICAgICAgICA8dGQ+SGlnaCBCYW5kIG11dGUvYWN0aXZhdGVkPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERV9IUzwvdGQ+DQotICAgICAgICA8dGQ+MzI3Njg8L3RkPg0KLSAgICAgICAgPHRkPkhvcm4gU3VwcHJlc3NvciBmdW5jdGlvbmFsaXR5IChpZiBhdmFpbGFibGUpPC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVk5WX01vZGVXb3JkX2JtOw0KLS8qKg0KLSogQGRlZiBNT0RFX05MTVMwDQotKiBOTE1TMCBmdW5jdGlvbmFsaXR5DQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9OTE1TMCAoKExWTlZfTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgTU9ERV9OTE1TMQ0KLSogTkxNUzEgZnVuY3Rpb25hbGl0eQ0KLSogQHNlZSBMVk5WX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREVfTkxNUzEgKChMVk5WX01vZGVXb3JkX2JtKTIpDQotLyoqDQotKiBAZGVmIE1PREVfQkVBTUZPUk1FUg0KLSogRml0ZXItYW5kLVN1bSBCZWFtZm9ybWVyIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0JFQU1GT1JNRVIgKChMVk5WX01vZGVXb3JkX2JtKTQpDQotLyoqDQotKiBAZGVmIE1PREVfUENEDQotKiBTd2l0Y2ggYmV0d2VlbiBQQ0QgKFBhdGggY2hhbmdlIGRldGVjdG9yKSBhbmQgQlNEIChCcm9hZHNpZGUgZGV0ZWN0b3IpDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9QQ0QgKChMVk5WX01vZGVXb3JkX2JtKTgpDQotLyoqDQotKiBAZGVmIE1PREVfR1NDDQotKiBHZW5lcmFsaXplZCBTaWRlbG9iZSBDYW5jZWxsZXIgZnVuY3Rpb25hbGl0eQ0KLSogQHNlZSBMVk5WX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREVfR1NDICgoTFZOVl9Nb2RlV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgTU9ERV9ETk5TDQotKiBEeW5hbWljIE5vbi1zdGF0aW9uYXJ5IE5vaXNlIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0ROTlMgKChMVk5WX01vZGVXb3JkX2JtKTMyKQ0KLS8qKg0KLSogQGRlZiBNT0RFX0RFUw0KLSogRHluYW1pYyBFY2hvIFN1cHByZXNzaW9uIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0RFUyAoKExWTlZfTW9kZVdvcmRfYm0pNjQpDQotLyoqDQotKiBAZGVmIE1PREVfTlMNCi0qIFN0YXRpb25hcnkgTm9pc2UgU3VwcHJlc3Npb24gZnVuY3Rpb25hbGl0eQ0KLSogQHNlZSBMVk5WX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREVfTlMgKChMVk5WX01vZGVXb3JkX2JtKTEyOCkNCi0vKioNCi0qIEBkZWYgTU9ERV9OU19ODQotKiBOb24tc3RhdGlvbmFyeSBOb2lzZSBTdXBwcmVzc2lvbiBmdW5jdGlvbmFsaXR5DQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9OU19OICgoTFZOVl9Nb2RlV29yZF9ibSkyNTYpDQotLyoqDQotKiBAZGVmIE1PREVfQ0FMDQotKiBTd2l0Y2ggYmV0d2VlbiBpbml0aWFsIG9yIGNvbnRpbnVvdXMgY2FsaWJyYXRpb24NCi0qIEBzZWUgTFZOVl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFX0NBTCAoKExWTlZfTW9kZVdvcmRfYm0pMjA0OCkNCi0vKioNCi0qIEBkZWYgTU9ERV9IQg0KLSogSGlnaCBCYW5kIG11dGUvYWN0aXZhdGVkDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9IQiAoKExWTlZfTW9kZVdvcmRfYm0pMTYzODQpDQotLyoqDQotKiBAZGVmIE1PREVfSFMNCi0qIEhvcm4gU3VwcHJlc3NvciBmdW5jdGlvbmFsaXR5IChpZiBhdmFpbGFibGUpDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9IUyAoKExWTlZfTW9kZVdvcmRfYm0pMzI3NjgpDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERVdPUkRfQk1fTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVk5WX01vZGVXb3JkX2JtDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9NT0RFV09SRF9CTV9NSU4gKChMVk5WX01vZGVXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERVdPUkRfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVk5WX01vZGVXb3JkX2JtDQotKiBAc2VlIExWTlZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERV9OTE1TMF9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTEpDQotI2RlZmluZSBNT0RFX05MTVMxX0ZPUk1BWCAoKExWTlZfTW9kZVdvcmRfYm0pMikNCi0jZGVmaW5lIE1PREVfQkVBTUZPUk1FUl9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTQpDQotI2RlZmluZSBNT0RFX1BDRF9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTgpDQotI2RlZmluZSBNT0RFX0dTQ19GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTE2KQ0KLSNkZWZpbmUgTU9ERV9ETk5TX0ZPUk1BWCAoKExWTlZfTW9kZVdvcmRfYm0pMzIpDQotI2RlZmluZSBNT0RFX0RFU19GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTY0KQ0KLSNkZWZpbmUgTU9ERV9OU19GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTEyOCkNCi0jZGVmaW5lIE1PREVfTlNfTl9GT1JNQVggKChMVk5WX01vZGVXb3JkX2JtKTI1NikNCi0jZGVmaW5lIE1PREVfQ0FMX0ZPUk1BWCAoKExWTlZfTW9kZVdvcmRfYm0pMjA0OCkNCi0jZGVmaW5lIE1PREVfSEJfRk9STUFYICgoTFZOVl9Nb2RlV29yZF9ibSkxNjM4NCkNCi0jZGVmaW5lIE1PREVfSFNfRk9STUFYICgoTFZOVl9Nb2RlV29yZF9ibSkzMjc2OCkNCi0jZGVmaW5lIExWTlZfTU9ERVdPUkRfQk1fTUFYIChNT0RFX05MTVMwX0ZPUk1BWCB8IE1PREVfTkxNUzFfRk9STUFYIHwgTU9ERV9CRUFNRk9STUVSX0ZPUk1BWCB8IE1PREVfUENEX0ZPUk1BWCB8IE1PREVfR1NDX0ZPUk1BWCB8IE1PREVfRE5OU19GT1JNQVggfCBNT0RFX0RFU19GT1JNQVggfCBNT0RFX05TX0ZPUk1BWCB8IE1PREVfTlNfTl9GT1JNQVggfCBNT0RFX0NBTF9GT1JNQVggfCBNT0RFX0hCX0ZPUk1BWCB8IE1PREVfSFNfRk9STUFYIHwgKChMVk5WX01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBNT0RFMl9GU0JfQ0FSRElPSUQ8L3RkPg0KLSAgICAgICAgPHRkPjE8L3RkPg0KLSAgICAgICAgPHRkPkZTQiB1cGRhdGUgYmFzZWQgb24gc3BlZWNoIGRldGVjdGlvbiBpbiBjYXJkaW9pZDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREUyX0ZTQl9XSVRISU5CRUFNPC90ZD4NCi0gICAgICAgIDx0ZD4yPC90ZD4NCi0gICAgICAgIDx0ZD5GU0IgdXBkYXRlIGJhc2VkIG9uIHdpdGhpbmJlYW0gZGV0ZWN0aW9uPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTU9ERTJfQ0FMX1VQREFURTwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+U3dpdGNoIGZvciBjYWxpYnJhdGlvbiBmdW5jdGlvbmFsaXR5IGJldHdlZW4gdXBkYXRlZCBvciBub3QtdXBkYXRlZDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIE1PREUyX0JFQU1EQU1BR0U8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPk1pY3JvcGhvbmUgY292ZXJhZ2UgcHJvdGVjdGlvbjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZOVl9Nb2RlMldvcmRfYm07DQotLyoqDQotKiBAZGVmIE1PREUyX0ZTQl9DQVJESU9JRA0KLSogRlNCIHVwZGF0ZSBiYXNlZCBvbiBzcGVlY2ggZGV0ZWN0aW9uIGluIGNhcmRpb2lkDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREUyX0ZTQl9DQVJESU9JRCAoKExWTlZfTW9kZTJXb3JkX2JtKTEpDQotLyoqDQotKiBAZGVmIE1PREUyX0ZTQl9XSVRISU5CRUFNDQotKiBGU0IgdXBkYXRlIGJhc2VkIG9uIHdpdGhpbmJlYW0gZGV0ZWN0aW9uDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREUyX0ZTQl9XSVRISU5CRUFNICgoTFZOVl9Nb2RlMldvcmRfYm0pMikNCi0vKioNCi0qIEBkZWYgTU9ERTJfQ0FMX1VQREFURQ0KLSogU3dpdGNoIGZvciBjYWxpYnJhdGlvbiBmdW5jdGlvbmFsaXR5IGJldHdlZW4gdXBkYXRlZCBvciBub3QtdXBkYXRlZA0KLSogQHNlZSBMVk5WX01vZGUyV29yZF9ibQ0KLSovDQotI2RlZmluZSBNT0RFMl9DQUxfVVBEQVRFICgoTFZOVl9Nb2RlMldvcmRfYm0pNCkNCi0vKioNCi0qIEBkZWYgTU9ERTJfQkVBTURBTUFHRQ0KLSogTWljcm9waG9uZSBjb3ZlcmFnZSBwcm90ZWN0aW9uDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIE1PREUyX0JFQU1EQU1BR0UgKChMVk5WX01vZGUyV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX01PREUyV09SRF9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWTlZfTW9kZTJXb3JkX2JtDQotKiBAc2VlIExWTlZfTW9kZTJXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfTU9ERTJXT1JEX0JNX01JTiAoKExWTlZfTW9kZTJXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERTJXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZOVl9Nb2RlMldvcmRfYm0NCi0qIEBzZWUgTFZOVl9Nb2RlMldvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTU9ERTJfRlNCX0NBUkRJT0lEX0ZPUk1BWCAoKExWTlZfTW9kZTJXb3JkX2JtKTEpDQotI2RlZmluZSBNT0RFMl9GU0JfV0lUSElOQkVBTV9GT1JNQVggKChMVk5WX01vZGUyV29yZF9ibSkyKQ0KLSNkZWZpbmUgTU9ERTJfQ0FMX1VQREFURV9GT1JNQVggKChMVk5WX01vZGUyV29yZF9ibSk0KQ0KLSNkZWZpbmUgTU9ERTJfQkVBTURBTUFHRV9GT1JNQVggKChMVk5WX01vZGUyV29yZF9ibSk4KQ0KLSNkZWZpbmUgTFZOVl9NT0RFMldPUkRfQk1fTUFYIChNT0RFMl9GU0JfQ0FSRElPSURfRk9STUFYIHwgTU9ERTJfRlNCX1dJVEhJTkJFQU1fRk9STUFYIHwgTU9ERTJfQ0FMX1VQREFURV9GT1JNQVggfCBNT0RFMl9CRUFNREFNQUdFX0ZPUk1BWCB8ICgoTFZOVl9Nb2RlMldvcmRfYm0pMCkpDQotLyoqDQotPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPk5hbWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5WYWx1ZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlc2NyaXB0aW9uPC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIFRVTklOR19NT0RFX05MTVMxPC90ZD4NCi0gICAgICAgIDx0ZD4xPC90ZD4NCi0gICAgICAgIDx0ZD5OTE1TMSBvdXRwdXQ8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9GU0I8L3RkPg0KLSAgICAgICAgPHRkPjI8L3RkPg0KLSAgICAgICAgPHRkPkZTQiBub2lzZSByZWZlcmVuY2Ugb3V0cHV0PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgVFVOSU5HX01PREVfV0lUSElOQkVBTTwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+VHVuaW5nIGJlZXAgd2hlbiBXaXRoaW5iZWFtPTE8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9VUERBVEVPTk9GRjwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPlR1bmluZyBiZWVwIHdoZW4gRlNCIGlzIHVwZGF0ZWQ8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9DQUxfTUlDUE9XPC90ZD4NCi0gICAgICAgIDx0ZD42NDwvdGQ+DQotICAgICAgICA8dGQ+VHVuaW5nIGJlZXAgd2hlbiBNaWNQb3cgaXMgbG93ZXIgdGhhbiBDYWxfbWljUG93Rmxvb3JNaW48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBUVU5JTkdfTU9ERV9CUk9BRFNJREU8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+VHVuaW5nIGJlZXAgd2hlbiBicm9hZHNpZGUgaXMgZGV0ZWN0ZWQ8L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWTlZfVHVuaW5nTW9kZVdvcmRfYm07DQotLyoqDQotKiBAZGVmIFRVTklOR19NT0RFX05MTVMxDQotKiBOTE1TMSBvdXRwdXQNCi0qIEBzZWUgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBUVU5JTkdfTU9ERV9OTE1TMSAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfRlNCDQotKiBGU0Igbm9pc2UgcmVmZXJlbmNlIG91dHB1dA0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX0ZTQiAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMikNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfV0lUSElOQkVBTQ0KLSogVHVuaW5nIGJlZXAgd2hlbiBXaXRoaW5iZWFtPTENCi0qIEBzZWUgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBUVU5JTkdfTU9ERV9XSVRISU5CRUFNICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBUVU5JTkdfTU9ERV9VUERBVEVPTk9GRg0KLSogVHVuaW5nIGJlZXAgd2hlbiBGU0IgaXMgdXBkYXRlZA0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX1VQREFURU9OT0ZGICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfQ0FMX01JQ1BPVw0KLSogVHVuaW5nIGJlZXAgd2hlbiBNaWNQb3cgaXMgbG93ZXIgdGhhbiBDYWxfbWljUG93Rmxvb3JNaW4NCi0qIEBzZWUgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBUVU5JTkdfTU9ERV9DQUxfTUlDUE9XICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSk2NCkNCi0vKioNCi0qIEBkZWYgVFVOSU5HX01PREVfQlJPQURTSURFDQotKiBUdW5pbmcgYmVlcCB3aGVuIGJyb2Fkc2lkZSBpcyBkZXRlY3RlZA0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX0JST0FEU0lERSAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMTI4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1RVTklOR01PREVXT1JEX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfVFVOSU5HTU9ERVdPUkRfQk1fTUlOICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1RVTklOR01PREVXT1JEX0JNX01BWA0KLSogTWF4aW1hbCB2YWx1ZSBmb3IgTFZOVl9UdW5pbmdNb2RlV29yZF9ibQ0KLSogQHNlZSBMVk5WX1R1bmluZ01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIFRVTklOR19NT0RFX05MTVMxX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMSkNCi0jZGVmaW5lIFRVTklOR19NT0RFX0ZTQl9GT1JNQVggKChMVk5WX1R1bmluZ01vZGVXb3JkX2JtKTIpDQotI2RlZmluZSBUVU5JTkdfTU9ERV9XSVRISU5CRUFNX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pOCkNCi0jZGVmaW5lIFRVTklOR19NT0RFX1VQREFURU9OT0ZGX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pMTYpDQotI2RlZmluZSBUVU5JTkdfTU9ERV9DQUxfTUlDUE9XX0ZPUk1BWCAoKExWTlZfVHVuaW5nTW9kZVdvcmRfYm0pNjQpDQotI2RlZmluZSBUVU5JTkdfTU9ERV9CUk9BRFNJREVfRk9STUFYICgoTFZOVl9UdW5pbmdNb2RlV29yZF9ibSkxMjgpDQotI2RlZmluZSBMVk5WX1RVTklOR01PREVXT1JEX0JNX01BWCAoVFVOSU5HX01PREVfTkxNUzFfRk9STUFYIHwgVFVOSU5HX01PREVfRlNCX0ZPUk1BWCB8IFRVTklOR19NT0RFX1dJVEhJTkJFQU1fRk9STUFYIHwgVFVOSU5HX01PREVfVVBEQVRFT05PRkZfRk9STUFYIHwgVFVOSU5HX01PREVfQ0FMX01JQ1BPV19GT1JNQVggfCBUVU5JTkdfTU9ERV9CUk9BRFNJREVfRk9STUFYIHwgKChMVk5WX1R1bmluZ01vZGVXb3JkX2JtKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19MT1NUX0JFQU08L3RkPg0KLSAgICAgICAgPHRkPjE8L3RkPg0KLSAgICAgICAgPHRkPkxvc3RCZWFtIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19NSUNfQ09WPC90ZD4NCi0gICAgICAgIDx0ZD4yPC90ZD4NCi0gICAgICAgIDx0ZD5NaWNyb3Bob25lIENvdmVyYWdlIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19GU0JfVVBEQVRFPC90ZD4NCi0gICAgICAgIDx0ZD40PC90ZD4NCi0gICAgICAgIDx0ZD5GU0IgdXBkYXRlczwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfU1RBVFVTX0JFQU1fREFNQUdFPC90ZD4NCi0gICAgICAgIDx0ZD44PC90ZD4NCi0gICAgICAgIDx0ZD5CZWFtRGFtYWdlIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19HU0NfVVBEQVRFPC90ZD4NCi0gICAgICAgIDx0ZD4xNjwvdGQ+DQotICAgICAgICA8dGQ+R1NDIHVwZGF0ZXM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19ETk5TX1dCRUFNPC90ZD4NCi0gICAgICAgIDx0ZD4zMjwvdGQ+DQotICAgICAgICA8dGQ+RE5OUyBXaXRoaW5CZWFtIGRldGVjdGlvbnM8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1NUQVRVU19ETk5TX0FDVElWSVRZPC90ZD4NCi0gICAgICAgIDx0ZD42NDwvdGQ+DQotICAgICAgICA8dGQ+RE5OUyBhY3Rpdml0eSBkZXRlY3Rpb25zPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfQ0FMX01JQ1BPVzwvdGQ+DQotICAgICAgICA8dGQ+MTI4PC90ZD4NCi0gICAgICAgIDx0ZD5DYWxpYnJhdGlvbiBNaWNyb3Bob25lIFBvd2VyPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfTUlDUE9XU1A8L3RkPg0KLSAgICAgICAgPHRkPjI1NjwvdGQ+DQotICAgICAgICA8dGQ+KExWMTAwOCkgTWljUG93IFNwZWVjaCBkZXRlY3Rpb25zPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUc8L3RkPg0KLSAgICAgICAgPHRkPjUxMjwvdGQ+DQotICAgICAgICA8dGQ+KExWMjM3MCkgQnJvYWRzaWRlIGRldGVjdGlvbiBmbGFnPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9TVEFUVVNfQ0FMX1VQREFURUQ8L3RkPg0KLSAgICAgICAgPHRkPjEwMjQ8L3RkPg0KLSAgICAgICAgPHRkPihMVjgyMzcpIENhbGlicmF0aW9uIHVwZGF0ZWQgZmxhZzwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfU1RBVFVTX1dCRUFNX0ZJWDwvdGQ+DQotICAgICAgICA8dGQ+MjA0ODwvdGQ+DQotICAgICAgICA8dGQ+V2l0aGluQmVhbSBkZXRlY3Rpb24gZm9yIEZpeGVkIEJlYW1mb3JtZXIgKGlmIGF2YWlsYWJsZSkuPC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVk5WX1N0YXR1c1dvcmRfYm07DQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX0xPU1RfQkVBTQ0KLSogTG9zdEJlYW0gZGV0ZWN0aW9ucw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfTE9TVF9CRUFNICgoTFZOVl9TdGF0dXNXb3JkX2JtKTEpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX01JQ19DT1YNCi0qIE1pY3JvcGhvbmUgQ292ZXJhZ2UgZGV0ZWN0aW9ucw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfTUlDX0NPViAoKExWTlZfU3RhdHVzV29yZF9ibSkyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19GU0JfVVBEQVRFDQotKiBGU0IgdXBkYXRlcw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfRlNCX1VQREFURSAoKExWTlZfU3RhdHVzV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19CRUFNX0RBTUFHRQ0KLSogQmVhbURhbWFnZSBkZXRlY3Rpb25zDQotKiBAc2VlIExWTlZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVk5WX1NUQVRVU19CRUFNX0RBTUFHRSAoKExWTlZfU3RhdHVzV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19HU0NfVVBEQVRFDQotKiBHU0MgdXBkYXRlcw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfR1NDX1VQREFURSAoKExWTlZfU3RhdHVzV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfRE5OU19XQkVBTQ0KLSogRE5OUyBXaXRoaW5CZWFtIGRldGVjdGlvbnMNCi0qIEBzZWUgTFZOVl9TdGF0dXNXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX0ROTlNfV0JFQU0gKChMVk5WX1N0YXR1c1dvcmRfYm0pMzIpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX0ROTlNfQUNUSVZJVFkNCi0qIEROTlMgYWN0aXZpdHkgZGV0ZWN0aW9ucw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfRE5OU19BQ1RJVklUWSAoKExWTlZfU3RhdHVzV29yZF9ibSk2NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfQ0FMX01JQ1BPVw0KLSogQ2FsaWJyYXRpb24gTWljcm9waG9uZSBQb3dlcg0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQ0FMX01JQ1BPVyAoKExWTlZfU3RhdHVzV29yZF9ibSkxMjgpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTX01JQ1BPV1NQDQotKiAoTFYxMDA4KSBNaWNQb3cgU3BlZWNoIGRldGVjdGlvbnMNCi0qIEBzZWUgTFZOVl9TdGF0dXNXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX01JQ1BPV1NQICgoTFZOVl9TdGF0dXNXb3JkX2JtKTI1NikNCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUcNCi0qIChMVjIzNzApIEJyb2Fkc2lkZSBkZXRlY3Rpb24gZmxhZw0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUcgKChMVk5WX1N0YXR1c1dvcmRfYm0pNTEyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19DQUxfVVBEQVRFRA0KLSogKExWODIzNykgQ2FsaWJyYXRpb24gdXBkYXRlZCBmbGFnDQotKiBAc2VlIExWTlZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVk5WX1NUQVRVU19DQUxfVVBEQVRFRCAoKExWTlZfU3RhdHVzV29yZF9ibSkxMDI0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU19XQkVBTV9maXgNCi0qIFdpdGhpbkJlYW0gZGV0ZWN0aW9uIGZvciBGaXhlZCBCZWFtZm9ybWVyIChpZiBhdmFpbGFibGUpLg0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfV0JFQU1fRklYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTIwNDgpDQotLyoqDQotKiBAZGVmIExWTlZfU1RBVFVTV09SRF9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWTlZfU3RhdHVzV29yZF9ibQ0KLSogQHNlZSBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZOVl9TVEFUVVNXT1JEX0JNX01JTiAoKExWTlZfU3RhdHVzV29yZF9ibSkwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1NUQVRVU1dPUkRfQk1fTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVk5WX1N0YXR1c1dvcmRfYm0NCi0qIEBzZWUgTFZOVl9TdGF0dXNXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX0xPU1RfQkVBTV9GT1JNQVggKChMVk5WX1N0YXR1c1dvcmRfYm0pMSkNCi0jZGVmaW5lIExWTlZfU1RBVFVTX01JQ19DT1ZfRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTIpDQotI2RlZmluZSBMVk5WX1NUQVRVU19GU0JfVVBEQVRFX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSk0KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQkVBTV9EQU1BR0VfRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTgpDQotI2RlZmluZSBMVk5WX1NUQVRVU19HU0NfVVBEQVRFX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkxNikNCi0jZGVmaW5lIExWTlZfU1RBVFVTX0ROTlNfV0JFQU1fRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTMyKQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfRE5OU19BQ1RJVklUWV9GT1JNQVggKChMVk5WX1N0YXR1c1dvcmRfYm0pNjQpDQotI2RlZmluZSBMVk5WX1NUQVRVU19DQUxfTUlDUE9XX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkxMjgpDQotI2RlZmluZSBMVk5WX1NUQVRVU19NSUNQT1dTUF9GT1JNQVggKChMVk5WX1N0YXR1c1dvcmRfYm0pMjU2KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfQlJPQURTSURFX0ZMQUdfRk9STUFYICgoTFZOVl9TdGF0dXNXb3JkX2JtKTUxMikNCi0jZGVmaW5lIExWTlZfU1RBVFVTX0NBTF9VUERBVEVEX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkxMDI0KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNfV0JFQU1fRklYX0ZPUk1BWCAoKExWTlZfU3RhdHVzV29yZF9ibSkyMDQ4KQ0KLSNkZWZpbmUgTFZOVl9TVEFUVVNXT1JEX0JNX01BWCAoTFZOVl9TVEFUVVNfTE9TVF9CRUFNX0ZPUk1BWCB8IExWTlZfU1RBVFVTX01JQ19DT1ZfRk9STUFYIHwgTFZOVl9TVEFUVVNfRlNCX1VQREFURV9GT1JNQVggfCBMVk5WX1NUQVRVU19CRUFNX0RBTUFHRV9GT1JNQVggfCBMVk5WX1NUQVRVU19HU0NfVVBEQVRFX0ZPUk1BWCB8IExWTlZfU1RBVFVTX0ROTlNfV0JFQU1fRk9STUFYIHwgTFZOVl9TVEFUVVNfRE5OU19BQ1RJVklUWV9GT1JNQVggfCBMVk5WX1NUQVRVU19DQUxfTUlDUE9XX0ZPUk1BWCB8IExWTlZfU1RBVFVTX01JQ1BPV1NQX0ZPUk1BWCB8IExWTlZfU1RBVFVTX0JST0FEU0lERV9GTEFHX0ZPUk1BWCB8IExWTlZfU1RBVFVTX0NBTF9VUERBVEVEX0ZPUk1BWCB8IExWTlZfU1RBVFVTX1dCRUFNX0ZJWF9GT1JNQVggfCAoKExWTlZfU3RhdHVzV29yZF9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRTwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+UENEIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfQ0xJUDwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+U1BERVRfeF9jbGlwIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfRkFSX1NQRUFLUzwvdGQ+DQotICAgICAgICA8dGQ+NDwvdGQ+DQotICAgICAgICA8dGQ+U1BERVRfZmFyIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLUzwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+U1BERVRfbWljIHR1bmluZyBiZWVwPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9DT05UUk9MX1RVTkVfSEJfTVVURTwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPk11dGUgaGlnaCBiYW5kICg0a0h6LThrSHopLiBTaG91bGQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdC48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0NPTlRST0xfVFVORV9UQl9NVVRFPC90ZD4NCi0gICAgICAgIDx0ZD4zMjwvdGQ+DQotICAgICAgICA8dGQ+TXV0ZSB0b3AgYmFuZCAoYWJvdmUgOGtIeikuIFNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0LjwvdGQ+DQotICAgIDwvdHI+DQotPC90YWJsZT4gKi8NCi10eXBlZGVmIExWTV9VSU5UMTYgTFZIRl9UdW5pbmdNb2RlV29yZDsNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRQ0KLSogUENEIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRSAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMSkNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfQ0xJUA0KLSogU1BERVRfeF9jbGlwIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfQ0xJUCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMikNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfRkFSX1NQRUFLUw0KLSogU1BERVRfZmFyIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfRkFSX1NQRUFLUyAoKExWSEZfVHVuaW5nTW9kZVdvcmQpNCkNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLUw0KLSogU1BERVRfbWljIHR1bmluZyBiZWVwDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLUyAoKExWSEZfVHVuaW5nTW9kZVdvcmQpOCkNCi0vKioNCi0qIEBkZWYgTFZIRl9DT05UUk9MX1RVTkVfSEJfTVVURQ0KLSogTXV0ZSBoaWdoIGJhbmQgKDRrSHotOGtIeikuIFNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0Lg0KLSogQHNlZSBMVkhGX1R1bmluZ01vZGVXb3JkDQotKi8NCi0jZGVmaW5lIExWSEZfQ09OVFJPTF9UVU5FX0hCX01VVEUgKChMVkhGX1R1bmluZ01vZGVXb3JkKTE2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0NPTlRST0xfVFVORV9UQl9NVVRFDQotKiBNdXRlIHRvcCBiYW5kIChhYm92ZSA4a0h6KS4gU2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfVEJfTVVURSAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMzIpDQotLyoqDQotKiBAZGVmIExWSEZfVFVOSU5HTU9ERVdPUkRfTUlODQotKiBNaW5pbWFsIHZhbHVlIGZvciBMVkhGX1R1bmluZ01vZGVXb3JkDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9UVU5JTkdNT0RFV09SRF9NSU4gKChMVkhGX1R1bmluZ01vZGVXb3JkKTApDQotLyoqDQotKiBAZGVmIExWSEZfVFVOSU5HTU9ERVdPUkRfTUFYDQotKiBNYXhpbWFsIHZhbHVlIGZvciBMVkhGX1R1bmluZ01vZGVXb3JkDQotKiBAc2VlIExWSEZfVHVuaW5nTW9kZVdvcmQNCi0qLw0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRV9GT1JNQVggKChMVkhGX1R1bmluZ01vZGVXb3JkKTEpDQotI2RlZmluZSBMVkhGX0NPTlRST0xfVFVORV9DTElQX0ZPUk1BWCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMikNCi0jZGVmaW5lIExWSEZfQ09OVFJPTF9UVU5FX0ZBUl9TUEVBS1NfRk9STUFYICgoTFZIRl9UdW5pbmdNb2RlV29yZCk0KQ0KLSNkZWZpbmUgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLU19GT1JNQVggKChMVkhGX1R1bmluZ01vZGVXb3JkKTgpDQotI2RlZmluZSBMVkhGX0NPTlRST0xfVFVORV9IQl9NVVRFX0ZPUk1BWCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMTYpDQotI2RlZmluZSBMVkhGX0NPTlRST0xfVFVORV9UQl9NVVRFX0ZPUk1BWCAoKExWSEZfVHVuaW5nTW9kZVdvcmQpMzIpDQotI2RlZmluZSBMVkhGX1RVTklOR01PREVXT1JEX01BWCAoTFZIRl9DT05UUk9MX1RVTkVfUEFUSENIQU5HRV9GT1JNQVggfCBMVkhGX0NPTlRST0xfVFVORV9DTElQX0ZPUk1BWCB8IExWSEZfQ09OVFJPTF9UVU5FX0ZBUl9TUEVBS1NfRk9STUFYIHwgTFZIRl9DT05UUk9MX1RVTkVfTUlDX1NQRUFLU19GT1JNQVggfCBMVkhGX0NPTlRST0xfVFVORV9IQl9NVVRFX0ZPUk1BWCB8IExWSEZfQ09OVFJPTF9UVU5FX1RCX01VVEVfRk9STUFYIHwgKChMVkhGX1R1bmluZ01vZGVXb3JkKTApKQ0KLS8qKg0KLTx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5OYW1lPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+VmFsdWU8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZXNjcmlwdGlvbjwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfTkxNUzwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+TkxNUyBmdW5jdGlvbmFsaXR5PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX0RFUzwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+REVTIChEeW5hbWljIEVjaG8gU3VwcHJlc3Npb24pPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX05TPC90ZD4NCi0gICAgICAgIDx0ZD40PC90ZD4NCi0gICAgICAgIDx0ZD5OUyAoTm9pc2UgU3VwcHJlc3Npb24pPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX0NOSTwvdGQ+DQotICAgICAgICA8dGQ+ODwvdGQ+DQotICAgICAgICA8dGQ+Q05JIChDb21mb3J0IE5vaXNlIEluamVjdGlvbik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfTkxFUzwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPk5MRVMgKE5vbiBMaW5lYXIgRWNobyBTdXBwcmVzc2lvbik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfUENEX0RUPC90ZD4NCi0gICAgICAgIDx0ZD42NDwvdGQ+DQotICAgICAgICA8dGQ+RFQgKERvdWJsZSBUYWxrKSBwcm90ZWN0aW9uIGFmdGVyIFBDRDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTU9ERV9QQ0Q8L3RkPg0KLSAgICAgICAgPHRkPjEyODwvdGQ+DQotICAgICAgICA8dGQ+UENEIChQYXRoIENoYW5nZSBEZXRlY3Rvcik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfSU5JVF9FUzwvdGQ+DQotICAgICAgICA8dGQ+MjU2PC90ZD4NCi0gICAgICAgIDx0ZD5Jbml0aWFsIGVjaG8gc3VwcHJlc3Npb24gc2V0dGluZyBieSBQQ0RfZ2FtbWFfZV9yZXNjdWU8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX01PREVfSFM8L3RkPg0KLSAgICAgICAgPHRkPjUxMjwvdGQ+DQotICAgICAgICA8dGQ+SG9yblN1cHByZXNzaW9uIChpZiBhdmFpbGFibGUpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9NT0RFX1BSRU5MTVM8L3RkPg0KLSAgICAgICAgPHRkPjQwOTY8L3RkPg0KLSAgICAgICAgPHRkPlByZS1OTE1TIHByZXByb2Nlc3Npbmc8L3RkPg0KLSAgICA8L3RyPg0KLTwvdGFibGU+ICovDQotdHlwZWRlZiBMVk1fVUlOVDE2IExWSEZfTW9kZVdvcmRfYm07DQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9OTE1TDQotKiBOTE1TIGZ1bmN0aW9uYWxpdHkNCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfTkxNUyAoKExWSEZfTW9kZVdvcmRfYm0pMSkNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX0RFUw0KLSogREVTIChEeW5hbWljIEVjaG8gU3VwcHJlc3Npb24pDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX0RFUyAoKExWSEZfTW9kZVdvcmRfYm0pMikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX05TDQotKiBOUyAoTm9pc2UgU3VwcHJlc3Npb24pDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX05TICgoTFZIRl9Nb2RlV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX01PREVfQ05JDQotKiBDTkkgKENvbWZvcnQgTm9pc2UgSW5qZWN0aW9uKQ0KLSogQHNlZSBMVkhGX01vZGVXb3JkX2JtDQotKi8NCi0jZGVmaW5lIExWSEZfTU9ERV9DTkkgKChMVkhGX01vZGVXb3JkX2JtKTgpDQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9OTEVTDQotKiBOTEVTIChOb24gTGluZWFyIEVjaG8gU3VwcHJlc3Npb24pDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX05MRVMgKChMVkhGX01vZGVXb3JkX2JtKTE2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX01PREVfUENEX0RUDQotKiBEVCAoRG91YmxlIFRhbGspIHByb3RlY3Rpb24gYWZ0ZXIgUENEDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX1BDRF9EVCAoKExWSEZfTW9kZVdvcmRfYm0pNjQpDQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9QQ0QNCi0qIFBDRCAoUGF0aCBDaGFuZ2UgRGV0ZWN0b3IpDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX1BDRCAoKExWSEZfTW9kZVdvcmRfYm0pMTI4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX01PREVfSU5JVF9FUw0KLSogSW5pdGlhbCBlY2hvIHN1cHByZXNzaW9uIHNldHRpbmcgYnkgUENEX2dhbW1hX2VfcmVzY3VlDQotKiBAc2VlIExWSEZfTW9kZVdvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9NT0RFX0lOSVRfRVMgKChMVkhGX01vZGVXb3JkX2JtKTI1NikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX0hTDQotKiBIb3JuU3VwcHJlc3Npb24gKGlmIGF2YWlsYWJsZSkNCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfSFMgKChMVkhGX01vZGVXb3JkX2JtKTUxMikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFX1BSRU5MTVMNCi0qIFByZS1OTE1TIHByZXByb2Nlc3NpbmcNCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfUFJFTkxNUyAoKExWSEZfTW9kZVdvcmRfYm0pNDA5NikNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFV09SRF9CTV9NSU4NCi0qIE1pbmltYWwgdmFsdWUgZm9yIExWSEZfTW9kZVdvcmRfYm0NCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVXT1JEX0JNX01JTiAoKExWSEZfTW9kZVdvcmRfYm0pMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9NT0RFV09SRF9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWSEZfTW9kZVdvcmRfYm0NCi0qIEBzZWUgTFZIRl9Nb2RlV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX01PREVfTkxNU19GT1JNQVggKChMVkhGX01vZGVXb3JkX2JtKTEpDQotI2RlZmluZSBMVkhGX01PREVfREVTX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pMikNCi0jZGVmaW5lIExWSEZfTU9ERV9OU19GT1JNQVggKChMVkhGX01vZGVXb3JkX2JtKTQpDQotI2RlZmluZSBMVkhGX01PREVfQ05JX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pOCkNCi0jZGVmaW5lIExWSEZfTU9ERV9OTEVTX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pMTYpDQotI2RlZmluZSBMVkhGX01PREVfUENEX0RUX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pNjQpDQotI2RlZmluZSBMVkhGX01PREVfUENEX0ZPUk1BWCAoKExWSEZfTW9kZVdvcmRfYm0pMTI4KQ0KLSNkZWZpbmUgTFZIRl9NT0RFX0lOSVRfRVNfRk9STUFYICgoTFZIRl9Nb2RlV29yZF9ibSkyNTYpDQotI2RlZmluZSBMVkhGX01PREVfSFNfRk9STUFYICgoTFZIRl9Nb2RlV29yZF9ibSk1MTIpDQotI2RlZmluZSBMVkhGX01PREVfUFJFTkxNU19GT1JNQVggKChMVkhGX01vZGVXb3JkX2JtKTQwOTYpDQotI2RlZmluZSBMVkhGX01PREVXT1JEX0JNX01BWCAoTFZIRl9NT0RFX05MTVNfRk9STUFYIHwgTFZIRl9NT0RFX0RFU19GT1JNQVggfCBMVkhGX01PREVfTlNfRk9STUFYIHwgTFZIRl9NT0RFX0NOSV9GT1JNQVggfCBMVkhGX01PREVfTkxFU19GT1JNQVggfCBMVkhGX01PREVfUENEX0RUX0ZPUk1BWCB8IExWSEZfTU9ERV9QQ0RfRk9STUFYIHwgTFZIRl9NT0RFX0lOSVRfRVNfRk9STUFYIHwgTFZIRl9NT0RFX0hTX0ZPUk1BWCB8IExWSEZfTU9ERV9QUkVOTE1TX0ZPUk1BWCB8ICgoTFZIRl9Nb2RlV29yZF9ibSkwKSkNCi0vKioNCi08dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+TmFtZTwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPlZhbHVlPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TVEFUVVNfRkFSX1NQRUFLUzwvdGQ+DQotICAgICAgICA8dGQ+MTwvdGQ+DQotICAgICAgICA8dGQ+RmFyRW5kIGlzIHNwZWFraW5nPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TVEFUVVNfRkFSX1NUQVJUUzwvdGQ+DQotICAgICAgICA8dGQ+MjwvdGQ+DQotICAgICAgICA8dGQ+RmFyRW5kIHN0YXJ0cyB0byBzcGVhazwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1RBVFVTX01JQ19TUEVBS1M8L3RkPg0KLSAgICAgICAgPHRkPjQ8L3RkPg0KLSAgICAgICAgPHRkPk1pYyBhY3Rpdml0eSBkZXRlY3RlZDwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1RBVFVTX0NMSVA8L3RkPg0KLSAgICAgICAgPHRkPjg8L3RkPg0KLSAgICAgICAgPHRkPkNsaXBwaW5nIERldGVjdGVkPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TVEFUVVNfUEFUSENIQU5HRTwvdGQ+DQotICAgICAgICA8dGQ+MTY8L3RkPg0KLSAgICAgICAgPHRkPlBhdGggQ2hhbmdlIGRldGVjdGVkPC90ZD4NCi0gICAgPC90cj4NCi08L3RhYmxlPiAqLw0KLXR5cGVkZWYgTFZNX1VJTlQxNiBMVkhGX1N0YXR1c1dvcmRfYm07DQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTX0ZBUl9TUEVBS1MNCi0qIEZhckVuZCBpcyBzcGVha2luZw0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfRkFSX1NQRUFLUyAoKExWSEZfU3RhdHVzV29yZF9ibSkxKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NUQVRVU19GQVJfU1RBUlRTDQotKiBGYXJFbmQgc3RhcnRzIHRvIHNwZWFrDQotKiBAc2VlIExWSEZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX1NUQVRVU19GQVJfU1RBUlRTICgoTFZIRl9TdGF0dXNXb3JkX2JtKTIpDQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTX01JQ19TUEVBS1MNCi0qIE1pYyBhY3Rpdml0eSBkZXRlY3RlZA0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfTUlDX1NQRUFLUyAoKExWSEZfU3RhdHVzV29yZF9ibSk0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NUQVRVU19DTElQDQotKiBDbGlwcGluZyBEZXRlY3RlZA0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfQ0xJUCAoKExWSEZfU3RhdHVzV29yZF9ibSk4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NUQVRVU19QQVRIQ0hBTkdFDQotKiBQYXRoIENoYW5nZSBkZXRlY3RlZA0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfUEFUSENIQU5HRSAoKExWSEZfU3RhdHVzV29yZF9ibSkxNikNCi0vKioNCi0qIEBkZWYgTFZIRl9TVEFUVVNXT1JEX0JNX01JTg0KLSogTWluaW1hbCB2YWx1ZSBmb3IgTFZIRl9TdGF0dXNXb3JkX2JtDQotKiBAc2VlIExWSEZfU3RhdHVzV29yZF9ibQ0KLSovDQotI2RlZmluZSBMVkhGX1NUQVRVU1dPUkRfQk1fTUlOICgoTFZIRl9TdGF0dXNXb3JkX2JtKTApDQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTV09SRF9CTV9NQVgNCi0qIE1heGltYWwgdmFsdWUgZm9yIExWSEZfU3RhdHVzV29yZF9ibQ0KLSogQHNlZSBMVkhGX1N0YXR1c1dvcmRfYm0NCi0qLw0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfRkFSX1NQRUFLU19GT1JNQVggKChMVkhGX1N0YXR1c1dvcmRfYm0pMSkNCi0jZGVmaW5lIExWSEZfU1RBVFVTX0ZBUl9TVEFSVFNfRk9STUFYICgoTFZIRl9TdGF0dXNXb3JkX2JtKTIpDQotI2RlZmluZSBMVkhGX1NUQVRVU19NSUNfU1BFQUtTX0ZPUk1BWCAoKExWSEZfU3RhdHVzV29yZF9ibSk0KQ0KLSNkZWZpbmUgTFZIRl9TVEFUVVNfQ0xJUF9GT1JNQVggKChMVkhGX1N0YXR1c1dvcmRfYm0pOCkNCi0jZGVmaW5lIExWSEZfU1RBVFVTX1BBVEhDSEFOR0VfRk9STUFYICgoTFZIRl9TdGF0dXNXb3JkX2JtKTE2KQ0KLSNkZWZpbmUgTFZIRl9TVEFUVVNXT1JEX0JNX01BWCAoTFZIRl9TVEFUVVNfRkFSX1NQRUFLU19GT1JNQVggfCBMVkhGX1NUQVRVU19GQVJfU1RBUlRTX0ZPUk1BWCB8IExWSEZfU1RBVFVTX01JQ19TUEVBS1NfRk9STUFYIHwgTFZIRl9TVEFUVVNfQ0xJUF9GT1JNQVggfCBMVkhGX1NUQVRVU19QQVRIQ0hBTkdFX0ZPUk1BWCB8ICgoTFZIRl9TdGF0dXNXb3JkX2JtKTApKQ0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMV9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZJREhlYWRlcl9MVlZFX1J4X01hc2sxX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzJfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX0xWVkVfVHhfTWFzazFfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMl9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2syX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkNfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZWQ19Nb2RlV29yZF9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkZFTlNfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZGRU5TX01vZGVXb3JkX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWV01fTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZXTV9Nb2RlV29yZF9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVk5WX01PREVXT1JEX0xWV0lSRUZPUk1BVF9MRU5HVEggKDIpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWTlZfTW9kZVdvcmRfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZOVl9NT0RFMldPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZOVl9Nb2RlMldvcmRfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZOVl9UVU5JTkdNT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVk5WX1R1bmluZ01vZGVXb3JkX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTlZfU1RBVFVTV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVk5WX1N0YXR1c1dvcmRfYm0gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZIRl9UVU5JTkdNT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIICgyKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVkhGX1R1bmluZ01vZGVXb3JkIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWSEZfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZIRl9Nb2RlV29yZF9ibSBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkhGX1NUQVRVU1dPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCAoMikgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZIRl9TdGF0dXNXb3JkX2JtIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWTV9Nb2RlX2VuIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTV9DT05GSUdfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZNX0NvbmZpZ19lbiBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVk1fRlNfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZNX0ZzX2VuIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVklESEVBREVSX01FU1NBR0VJRF9MVldJUkVGT1JNQVRfTEVOR1RIICg0KSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZJREhlYWRlcl9NZXNzYWdlSURfZW4gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfUkVUVVJOU1RBVFVTX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBAcmVmIExWVklESGVhZGVyX1JldHVyblN0YXR1c19lbiBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVlZFX1JYX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIEByZWYgTFZWRV9SeF9Nb2RlX2VuIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkVfVFhfTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIICg0KSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgQHJlZiBMVlZFX1R4X01vZGVfZW4gaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZWSURIRUFERVJfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICg3IFwNCi0gKyBMVlZJREhFQURFUl9MVlZFX1JYX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX0xWVkVfUlhfTUFTSzJfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZWSURIRUFERVJfTFZWRV9UWF9NQVNLMV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVlZJREhFQURFUl9MVlZFX1RYX01BU0syX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0sxX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX0NPTkZJR1VSQVRJT05TX01BU0syX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWVklESEVBREVSX01FU1NBR0VJRF9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk1fRlNfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWVklESGVhZGVyIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyMiBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZWQ19NT0RFV09SRF9MVldJUkVGT1JNQVRfTEVOR1RIKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgTFZWQyBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkZFTlNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyIFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkZFTlNfTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWRkVOUyBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVldNX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoMTQgXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWV01fTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWV00gQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZEUkNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyOCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWRFJDIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTkdfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICgyNiBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWTkcgQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZOTFBQX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoNCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWTkxQUCBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVkVRX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoNjYpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVkVRIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVk9MX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoMiBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWVk9MIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWSFBGX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoMiBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWSFBGIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWTVVURV9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVk1VVEUgQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZWRV9SWF9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQgXA0KLSArIExWVkVfUlhfTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkZFTlNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk5MUFBfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVlZDX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZFUV9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWRFJDX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZXTV9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTkdfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgTFZWRV9SeCBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotI2RlZmluZSBMVk5WX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCAoMTIyIFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk5WX01PREVXT1JEX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTlZfTU9ERTJXT1JEX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTlZfVFVOSU5HTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWTlYgQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZIRl9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKDc4IFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkhGX01PREVXT1JEX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWSEZfVFVOSU5HTU9ERVdPUkRfTFZXSVJFRk9STUFUX0xFTkdUSCkgLy8vPCBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlIExWSEYgQ29udHJvbFBhcmFtZXRlcnMgaW4gTFZXaXJlRm9ybWF0Lg0KLQ0KLSNkZWZpbmUgTFZCRF9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggKDQgXA0KLSArIExWTV9NT0RFX0xWV0lSRUZPUk1BVF9MRU5HVEgpIC8vLzwgTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZSBMVkJEIENvbnRyb2xQYXJhbWV0ZXJzIGluIExWV2lyZUZvcm1hdC4NCi0NCi0jZGVmaW5lIExWVkVfVFhfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIICg4IFwNCi0gKyBMVlZFX1RYX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZNX01PREVfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZIRl9DT05UUk9MUEFSQU1TX0xWV0lSRUZPUk1BVF9MRU5HVEggXA0KLSArIExWTlZfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVk1fTU9ERV9MVldJUkVGT1JNQVRfTEVOR1RIIFwNCi0gKyBMVkVRX0NPTlRST0xQQVJBTVNfTFZXSVJFRk9STUFUX0xFTkdUSCBcDQotICsgTFZEUkNfQ09OVFJPTFBBUkFNU19MVldJUkVGT1JNQVRfTEVOR1RIKSAvLy88IE51bWJlciBvZiBieXRlcyB0byBlbmNvZGUgTFZWRV9UeCBDb250cm9sUGFyYW1ldGVycyBpbiBMVldpcmVGb3JtYXQuDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0hFQURFUlZFUlNJT05fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBIZWFkZXJWZXJzaW9uDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9ERUZBVUxUICgzKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9IRUFERVJWRVJTSU9OX01JTg0KLSogTWluVmFsdWUgb2YgSGVhZGVyVmVyc2lvbg0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0hFQURFUlZFUlNJT05fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9IRUFERVJWRVJTSU9OX01BWA0KLSogTWF4VmFsdWUgb2YgSGVhZGVyVmVyc2lvbg0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0hFQURFUlZFUlNJT05fTUFYICgyNTUpDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0JBU0VMSU5FVkVSU0lPTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEJhc2VsaW5lVmVyc2lvbg0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0JBU0VMSU5FVkVSU0lPTl9ERUZBVUxUICg1MTkwNjgxNikNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX01JTg0KLSogTWluVmFsdWUgb2YgQmFzZWxpbmVWZXJzaW9uDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX01JTiAoMSkNCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX01BWA0KLSogTWF4VmFsdWUgb2YgQmFzZWxpbmVWZXJzaW9uDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX01BWCAoNDI5NDk2NzI5NSkNCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9SWF9BTEdPTUFTSzFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBMVlZFX1J4X0FsZ29NYXNrMQ0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfUlhfQUxHT01BU0sxX0RFRkFVTFQgKExWVklESEVBREVSX0xWVkVfUlhfTUFTSzFfQk1fTUFYKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9MVlZFX1JYX0FMR09NQVNLMl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIExWVkVfUnhfQWxnb01hc2syDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTFZWRV9SWF9BTEdPTUFTSzJfREVGQVVMVCAoTFZWSURIRUFERVJfTFZWRV9SWF9NQVNLMl9CTV9NQVgpDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX0xWVkVfVFhfQUxHT01BU0sxX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTFZWRV9UeF9BbGdvTWFzazENCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX1RYX0FMR09NQVNLMV9ERUZBVUxUIChMVlZJREhFQURFUl9MVlZFX1RYX01BU0sxX0JNX01BWCkNCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTFZWRV9UWF9BTEdPTUFTSzJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBMVlZFX1R4X0FsZ29NYXNrMg0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX0xWVkVfVFhfQUxHT01BU0syX0RFRkFVTFQgKExWVklESEVBREVSX0xWVkVfVFhfTUFTSzJfQk1fTUFYKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9MVlZFX0NPTkZJR19BTEdPTUFTSzFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBMVlZFX0NvbmZpZ19BbGdvTWFzazENCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX0NPTkZJR19BTEdPTUFTSzFfREVGQVVMVCAoTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzFfQk1fTUFYKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9MVlZFX0NPTkZJR19BTEdPTUFTSzJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBMVlZFX0NvbmZpZ19BbGdvTWFzazINCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9MVlZFX0NPTkZJR19BTEdPTUFTSzJfREVGQVVMVCAoTFZWSURIRUFERVJfQ09ORklHVVJBVElPTlNfTUFTSzJfQk1fTUFYKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZJREhFQURFUl9NRVNTQUdFSURfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBNZXNzYWdlSUQNCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9NRVNTQUdFSURfREVGQVVMVCAoTFZWRV9SWF9QUkVTRVQpDQotDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX1NBTVBMRVJBVEVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTYW1wbGVSYXRlDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfU0FNUExFUkFURV9ERUZBVUxUIChMVk1fRlNfODAwMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBWb2x1bWVJbmRleA0KLSogQHNlZSBMVlZJREhlYWRlcl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVklESEVBREVSX1ZPTFVNRUlOREVYX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX1ZPTFVNRUlOREVYX01JTg0KLSogTWluVmFsdWUgb2YgVm9sdW1lSW5kZXgNCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9WT0xVTUVJTkRFWF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX1ZPTFVNRUlOREVYX01BWA0KLSogTWF4VmFsdWUgb2YgVm9sdW1lSW5kZXgNCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9WT0xVTUVJTkRFWF9NQVggKDI1NSkNCi0NCi0vKioNCi0qIEBkZWYgTFZWSURIRUFERVJfTlVNVk9MVU1FU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE51bVZvbHVtZXMNCi0qIEBzZWUgTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZJREhFQURFUl9OVU1WT0xVTUVTX0RFRkFVTFQgKDEpDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX05VTVZPTFVNRVNfTUlODQotKiBNaW5WYWx1ZSBvZiBOdW1Wb2x1bWVzDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTlVNVk9MVU1FU19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVklESEVBREVSX05VTVZPTFVNRVNfTUFYDQotKiBNYXhWYWx1ZSBvZiBOdW1Wb2x1bWVzDQotKiBAc2VlIExWVklESGVhZGVyX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWSURIRUFERVJfTlVNVk9MVU1FU19NQVggKDI1NSkNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19NT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgbW9kZQ0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19NT0RFX0RFRkFVTFQgKDApDQotDQotLyoqDQotKiBAZGVmIExWVkNfR0FJTl9MSU5fTUFYX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgR2Fpbl9MaW5fTWF4DQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0dBSU5fTElOX01BWF9ERUZBVUxUICgxMjg2KQ0KLS8qKg0KLSogQGRlZiBMVlZDX0dBSU5fTElOX01BWF9NSU4NCi0qIE1pblZhbHVlIG9mIEdhaW5fTGluX01heA0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19HQUlOX0xJTl9NQVhfTUlOICg1MTIpDQotLyoqDQotKiBAZGVmIExWVkNfR0FJTl9MSU5fTUFYX01BWA0KLSogTWF4VmFsdWUgb2YgR2Fpbl9MaW5fTWF4DQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0dBSU5fTElOX01BWF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZDX05PSVNFX1NFTlNJVElWSVRZX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTm9pc2VfU2Vuc2l0aXZpdHkNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfTk9JU0VfU0VOU0lUSVZJVFlfREVGQVVMVCAoMjAwMDApDQotLyoqDQotKiBAZGVmIExWVkNfTk9JU0VfU0VOU0lUSVZJVFlfTUlODQotKiBNaW5WYWx1ZSBvZiBOb2lzZV9TZW5zaXRpdml0eQ0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9NSU4gKC02NzA5KQ0KLS8qKg0KLSogQGRlZiBMVlZDX05PSVNFX1NFTlNJVElWSVRZX01BWA0KLSogTWF4VmFsdWUgb2YgTm9pc2VfU2Vuc2l0aXZpdHkNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfTk9JU0VfU0VOU0lUSVZJVFlfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfVEFSR0VUX0xFVkVMX0xJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9UYXJnZXRfbGV2ZWxfbGluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9UQVJHRVRfTEVWRUxfTElOX0RFRkFVTFQgKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9UQVJHRVRfTEVWRUxfTElOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX1RhcmdldF9sZXZlbF9saW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX1RBUkdFVF9MRVZFTF9MSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9UQVJHRVRfTEVWRUxfTElOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX1RhcmdldF9sZXZlbF9saW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX1RBUkdFVF9MRVZFTF9MSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTUlOR0FJTkxJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9NaW5HYWluTGluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9NSU5HQUlOTElOX0RFRkFVTFQgKDI1NikNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTUlOR0FJTkxJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9NaW5HYWluTGluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9NSU5HQUlOTElOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTUlOR0FJTkxJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9NaW5HYWluTGluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9NSU5HQUlOTElOX01BWCAoNTEyKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9NQVhHQUlOTElOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX01heEdhaW5MaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX01BWEdBSU5MSU5fREVGQVVMVCAoODE5MikNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTUFYR0FJTkxJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9NYXhHYWluTGluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9NQVhHQUlOTElOX01JTiAoNTEyKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0FWTF9NQVhHQUlOTElOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX01heEdhaW5MaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX01BWEdBSU5MSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTk9NSU5BTEdBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfTm9taW5hbEdhaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX05PTUlOQUxHQUlOX0RFRkFVTFQgKDUxMikNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTk9NSU5BTEdBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfTm9taW5hbEdhaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX05PTUlOQUxHQUlOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTk9NSU5BTEdBSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfTm9taW5hbEdhaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX05PTUlOQUxHQUlOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX0FUVEFDS19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9BdHRhY2sNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX0FUVEFDS19ERUZBVUxUICgxMjA1NSkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfQVRUQUNLX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX0F0dGFjaw0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfQVRUQUNLX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfQVRUQUNLX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX0F0dGFjaw0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfQVRUQUNLX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX1JFTEVBU0VfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfUmVsZWFzZQ0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfUkVMRUFTRV9ERUZBVUxUICgzMjYwNCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfUkVMRUFTRV9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9SZWxlYXNlDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9SRUxFQVNFX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfUkVMRUFTRV9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9SZWxlYXNlDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9SRUxFQVNFX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX1JFTEVBU0VNQVhfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfUmVsZWFzZU1heA0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfUkVMRUFTRU1BWF9ERUZBVUxUICgzMjQ0MSkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfUkVMRUFTRU1BWF9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9SZWxlYXNlTWF4DQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9SRUxFQVNFTUFYX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfUkVMRUFTRU1BWF9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9SZWxlYXNlTWF4DQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0FWTF9SRUxFQVNFTUFYX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWVkNfQVZMX0xJTUlUX01BWE9VVFBVVExJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEFWTF9MaW1pdF9NYXhPdXRwdXRMaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfQVZMX0xJTUlUX01BWE9VVFBVVExJTl9ERUZBVUxUICgyMzE3MCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX0xpbWl0X01heE91dHB1dExpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX0xpbWl0X01heE91dHB1dExpbg0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWVkNfU1BERVRFQ1RfVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgU3BEZXRlY3RfVGhyZXNob2xkDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX1NQREVURUNUX1RIUkVTSE9MRF9ERUZBVUxUICgxMDI0KQ0KLS8qKg0KLSogQGRlZiBMVlZDX1NQREVURUNUX1RIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIFNwRGV0ZWN0X1RocmVzaG9sZA0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19TUERFVEVDVF9USFJFU0hPTERfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX1NQREVURUNUX1RIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIFNwRGV0ZWN0X1RocmVzaG9sZA0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19TUERFVEVDVF9USFJFU0hPTERfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZGRU5TX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWRkVOU19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRkVOU19PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZGRU5TX0ZFTlNfTElNSVRfTlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBGRU5TX2xpbWl0X05TDQotKiBAc2VlIExWRkVOU19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRkVOU19GRU5TX0xJTUlUX05TX0RFRkFVTFQgKDEwOTc2KQ0KLS8qKg0KLSogQGRlZiBMVkZFTlNfRkVOU19MSU1JVF9OU19NSU4NCi0qIE1pblZhbHVlIG9mIEZFTlNfbGltaXRfTlMNCi0qIEBzZWUgTFZGRU5TX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZGRU5TX0ZFTlNfTElNSVRfTlNfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkZFTlNfRkVOU19MSU1JVF9OU19NQVgNCi0qIE1heFZhbHVlIG9mIEZFTlNfbGltaXRfTlMNCi0qIEBzZWUgTFZGRU5TX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZGRU5TX0ZFTlNfTElNSVRfTlNfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZGRU5TX01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBNb2RlDQotKiBAc2VlIExWRkVOU19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRkVOU19NT0RFX0RFRkFVTFQgKDApDQotDQotLyoqDQotKiBAZGVmIExWV01fT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWV01fTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIG1vZGUNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fTU9ERV9ERUZBVUxUICg3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9UQVJHRVRfTEVWRUxfTElOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX1RhcmdldF9sZXZlbF9saW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX1RBUkdFVF9MRVZFTF9MSU5fREVGQVVMVCAoMTYzODQpDQotLyoqDQotKiBAZGVmIExWV01fQVZMX1RBUkdFVF9MRVZFTF9MSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfVGFyZ2V0X2xldmVsX2xpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWV01fQVZMX1RBUkdFVF9MRVZFTF9MSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfVGFyZ2V0X2xldmVsX2xpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9NSU5HQUlOTElOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX01pbkdhaW5MaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX01JTkdBSU5MSU5fREVGQVVMVCAoMTI4KQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9NSU5HQUlOTElOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX01pbkdhaW5MaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX01JTkdBSU5MSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9NSU5HQUlOTElOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX01pbkdhaW5MaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX01JTkdBSU5MSU5fTUFYICg1MTIpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX01BWEdBSU5MSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfTWF4R2Fpbkxpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTUFYR0FJTkxJTl9ERUZBVUxUICg4MTg5KQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9NQVhHQUlOTElOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX01heEdhaW5MaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX01BWEdBSU5MSU5fTUlOICg1MTIpDQotLyoqDQotKiBAZGVmIExWV01fQVZMX01BWEdBSU5MSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfTWF4R2Fpbkxpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfTUFYR0FJTkxJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9BVFRBQ0tfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfQXR0YWNrDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9BVFRBQ0tfREVGQVVMVCAoMjU1MjApDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0FUVEFDS19NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9BdHRhY2sNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0FUVEFDS19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0FUVEFDS19NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9BdHRhY2sNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0FUVEFDS19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9SRUxFQVNFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQVZMX1JlbGVhc2UNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX1JFTEVBU0VfREVGQVVMVCAoMzI2ODUpDQotLyoqDQotKiBAZGVmIExWV01fQVZMX1JFTEVBU0VfTUlODQotKiBNaW5WYWx1ZSBvZiBBVkxfUmVsZWFzZQ0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfUkVMRUFTRV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWV01fQVZMX1JFTEVBU0VfTUFYDQotKiBNYXhWYWx1ZSBvZiBBVkxfUmVsZWFzZQ0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfUkVMRUFTRV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfTGltaXRfTWF4T3V0cHV0TGluDQotKiBAc2VlIExWV01fQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVldNX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fREVGQVVMVCAoMjMxOTcpDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0xJTUlUX01BWE9VVFBVVExJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEFWTF9MaW1pdF9NYXhPdXRwdXRMaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0xJTUlUX01BWE9VVFBVVExJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0xJTUlUX01BWE9VVFBVVExJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEFWTF9MaW1pdF9NYXhPdXRwdXRMaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0xJTUlUX01BWE9VVFBVVExJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFNwRGV0ZWN0X1RocmVzaG9sZA0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9TUERFVEVDVF9USFJFU0hPTERfREVGQVVMVCAoOTIxNikNCi0vKioNCi0qIEBkZWYgTFZXTV9TUERFVEVDVF9USFJFU0hPTERfTUlODQotKiBNaW5WYWx1ZSBvZiBTcERldGVjdF9UaHJlc2hvbGQNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fU1BERVRFQ1RfVEhSRVNIT0xEX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZXTV9TUERFVEVDVF9USFJFU0hPTERfTUFYDQotKiBNYXhWYWx1ZSBvZiBTcERldGVjdF9UaHJlc2hvbGQNCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fU1BERVRFQ1RfVEhSRVNIT0xEX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWRFJDX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWRFJDX05VTUtORUVTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTnVtS25lZXMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19OVU1LTkVFU19ERUZBVUxUICg1KQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19OVU1LTkVFU19NSU4NCi0qIE1pblZhbHVlIG9mIE51bUtuZWVzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfTlVNS05FRVNfTUlOICgxKQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19OVU1LTkVFU19NQVgNCi0qIE1heFZhbHVlIG9mIE51bUtuZWVzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfTlVNS05FRVNfTUFYICg1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfREVGQVVMVCB7LTk2LC03MCwtNTAsIC0yNCwgMH0NCi0vKioNCi0qIEBkZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUlODQotKiBNaW5WYWx1ZSBvZiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVscw0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01JTiAoLTk2KQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NQVgNCi0qIE1heFZhbHVlIG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUFYICgwKQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19MRU5HVEgNCi0qIExlbmd0aCBvZiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVscw0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0xFTkdUSCAoNSkNCi0NCi0vKioNCi0qIEBkZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQ29tcHJlc3NvckN1cnZlT3V0cHV0TGV2ZWxzDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX0RFRkFVTFQgey05NiwtNzAsLTM4LC0xMiwwfQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTUlODQotKiBNaW5WYWx1ZSBvZiBDb21wcmVzc29yQ3VydmVPdXRwdXRMZXZlbHMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTUlOICgtOTYpDQotLyoqDQotKiBAZGVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NQVgNCi0qIE1heFZhbHVlIG9mIENvbXByZXNzb3JDdXJ2ZU91dHB1dExldmVscw0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NQVggKDApDQotLyoqDQotKiBAZGVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19MRU5HVEgNCi0qIExlbmd0aCBvZiBDb21wcmVzc29yQ3VydmVPdXRwdXRMZXZlbHMNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTEVOR1RIICg1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19BVFRBQ0tUSU1FX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQXR0YWNrVGltZQ0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0FUVEFDS1RJTUVfREVGQVVMVCAoNTApDQotLyoqDQotKiBAZGVmIExWRFJDX0FUVEFDS1RJTUVfTUlODQotKiBNaW5WYWx1ZSBvZiBBdHRhY2tUaW1lDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQVRUQUNLVElNRV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWRFJDX0FUVEFDS1RJTUVfTUFYDQotKiBNYXhWYWx1ZSBvZiBBdHRhY2tUaW1lDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfQVRUQUNLVElNRV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19SRUxFQVNFVElNRV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFJlbGVhc2VUaW1lDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfUkVMRUFTRVRJTUVfREVGQVVMVCAoNTApDQotLyoqDQotKiBAZGVmIExWRFJDX1JFTEVBU0VUSU1FX01JTg0KLSogTWluVmFsdWUgb2YgUmVsZWFzZVRpbWUNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19SRUxFQVNFVElNRV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWRFJDX1JFTEVBU0VUSU1FX01BWA0KLSogTWF4VmFsdWUgb2YgUmVsZWFzZVRpbWUNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19SRUxFQVNFVElNRV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19MSU1JVEVST1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIExpbWl0ZXJPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWRFJDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZEUkNfTElNSVRFUk9QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19MSU1JVExFVkVMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTGltaXRMZXZlbA0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0xJTUlUTEVWRUxfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZEUkNfTElNSVRMRVZFTF9NSU4NCi0qIE1pblZhbHVlIG9mIExpbWl0TGV2ZWwNCi0qIEBzZWUgTFZEUkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkRSQ19MSU1JVExFVkVMX01JTiAoLTk2KQ0KLS8qKg0KLSogQGRlZiBMVkRSQ19MSU1JVExFVkVMX01BWA0KLSogTWF4VmFsdWUgb2YgTGltaXRMZXZlbA0KLSogQHNlZSBMVkRSQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRFJDX0xJTUlUTEVWRUxfTUFYICgwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5HX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5HX05VTUtORUVTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTnVtS25lZXMNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfTlVNS05FRVNfREVGQVVMVCAoNSkNCi0vKioNCi0qIEBkZWYgTFZOR19OVU1LTkVFU19NSU4NCi0qIE1pblZhbHVlIG9mIE51bUtuZWVzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX05VTUtORUVTX01JTiAoMSkNCi0vKioNCi0qIEBkZWYgTFZOR19OVU1LTkVFU19NQVgNCi0qIE1heFZhbHVlIG9mIE51bUtuZWVzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX05VTUtORUVTX01BWCAoNSkNCi0NCi0vKioNCi0qIEBkZWYgTFZOR19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0RFRkFVTFQgey04MCwtNzAsLTUwLCAtMjQsIDB9DQotLyoqDQotKiBAZGVmIExWTkdfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUlODQotKiBNaW5WYWx1ZSBvZiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVscw0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NSU4gKC05NikNCi0vKioNCi0qIEBkZWYgTFZOR19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NQVgNCi0qIE1heFZhbHVlIG9mIENvbXByZXNzb3JDdXJ2ZUlucHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01BWCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOR19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19MRU5HVEgNCi0qIExlbmd0aCBvZiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVscw0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19MRU5HVEggKDUpDQotDQotLyoqDQotKiBAZGVmIExWTkdfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQ29tcHJlc3NvckN1cnZlT3V0cHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19ERUZBVUxUIHstOTYsLTgwLC01MCwgLTI0LCAwfQ0KLS8qKg0KLSogQGRlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NSU4NCi0qIE1pblZhbHVlIG9mIENvbXByZXNzb3JDdXJ2ZU91dHB1dExldmVscw0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTUlOICgtOTYpDQotLyoqDQotKiBAZGVmIExWTkdfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX01BWA0KLSogTWF4VmFsdWUgb2YgQ29tcHJlc3NvckN1cnZlT3V0cHV0TGV2ZWxzDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NQVggKDApDQotLyoqDQotKiBAZGVmIExWTkdfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX0xFTkdUSA0KLSogTGVuZ3RoIG9mIENvbXByZXNzb3JDdXJ2ZU91dHB1dExldmVscw0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTEVOR1RIICg1KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5HX0FUVEFDS1RJTUVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBdHRhY2tUaW1lDQotKiBAc2VlIExWTkdfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5HX0FUVEFDS1RJTUVfREVGQVVMVCAoNTApDQotLyoqDQotKiBAZGVmIExWTkdfQVRUQUNLVElNRV9NSU4NCi0qIE1pblZhbHVlIG9mIEF0dGFja1RpbWUNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfQVRUQUNLVElNRV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTkdfQVRUQUNLVElNRV9NQVgNCi0qIE1heFZhbHVlIG9mIEF0dGFja1RpbWUNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfQVRUQUNLVElNRV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5HX1JFTEVBU0VUSU1FX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUmVsZWFzZVRpbWUNCi0qIEBzZWUgTFZOR19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkdfUkVMRUFTRVRJTUVfREVGQVVMVCAoNTApDQotLyoqDQotKiBAZGVmIExWTkdfUkVMRUFTRVRJTUVfTUlODQotKiBNaW5WYWx1ZSBvZiBSZWxlYXNlVGltZQ0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19SRUxFQVNFVElNRV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTkdfUkVMRUFTRVRJTUVfTUFYDQotKiBNYXhWYWx1ZSBvZiBSZWxlYXNlVGltZQ0KLSogQHNlZSBMVk5HX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOR19SRUxFQVNFVElNRV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5MUFBfTkxQUF9MSU1JVF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MUFBfTGltaXQNCi0qIEBzZWUgTFZOTFBQX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOTFBQX05MUFBfTElNSVRfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOTFBQX05MUFBfTElNSVRfTUlODQotKiBNaW5WYWx1ZSBvZiBOTFBQX0xpbWl0DQotKiBAc2VlIExWTkxQUF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTkxQUF9OTFBQX0xJTUlUX01JTiAoLTI0KQ0KLS8qKg0KLSogQGRlZiBMVk5MUFBfTkxQUF9MSU1JVF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MUFBfTGltaXQNCi0qIEBzZWUgTFZOTFBQX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOTFBQX05MUFBfTElNSVRfTUFYICgwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MUFBfSFBGX0Nvcm5lckZyZXENCi0qIEBzZWUgTFZOTFBQX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOTFBQX05MUFBfSFBGX0NPUk5FUkZSRVFfREVGQVVMVCAoNTApDQotLyoqDQotKiBAZGVmIExWTkxQUF9OTFBQX0hQRl9DT1JORVJGUkVRX01JTg0KLSogTWluVmFsdWUgb2YgTkxQUF9IUEZfQ29ybmVyRnJlcQ0KLSogQHNlZSBMVk5MUFBfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9NSU4gKDUwKQ0KLS8qKg0KLSogQGRlZiBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9NQVgNCi0qIE1heFZhbHVlIG9mIE5MUFBfSFBGX0Nvcm5lckZyZXENCi0qIEBzZWUgTFZOTFBQX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOTFBQX05MUFBfSFBGX0NPUk5FUkZSRVFfTUFYICgxMDAwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkVRX0VRX0xFTkdUSF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEVRX0xlbmd0aA0KLSogQHNlZSBMVkVRX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZFUV9FUV9MRU5HVEhfREVGQVVMVCAoMzIpDQotLyoqDQotKiBAZGVmIExWRVFfRVFfTEVOR1RIX01JTg0KLSogTWluVmFsdWUgb2YgRVFfTGVuZ3RoDQotKiBAc2VlIExWRVFfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkVRX0VRX0xFTkdUSF9NSU4gKDgpDQotLyoqDQotKiBAZGVmIExWRVFfRVFfTEVOR1RIX01BWA0KLSogTWF4VmFsdWUgb2YgRVFfTGVuZ3RoDQotKiBAc2VlIExWRVFfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkVRX0VRX0xFTkdUSF9NQVggKDMyKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkVRX0VRX0NPRUZTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRVFfQ29lZnMNCi0qIEBzZWUgTFZFUV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRVFfRVFfQ09FRlNfREVGQVVMVCB7NDA5NiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwfQ0KLS8qKg0KLSogQGRlZiBMVkVRX0VRX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgRVFfQ29lZnMNCi0qIEBzZWUgTFZFUV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWRVFfRVFfQ09FRlNfTUlOICgtMzI3NjgpDQotLyoqDQotKiBAZGVmIExWRVFfRVFfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBFUV9Db2Vmcw0KLSogQHNlZSBMVkVRX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZFUV9FUV9DT0VGU19NQVggKDMyNzY3KQ0KLS8qKg0KLSogQGRlZiBMVkVRX0VRX0NPRUZTX0xFTkdUSA0KLSogTGVuZ3RoIG9mIEVRX0NvZWZzDQotKiBAc2VlIExWRVFfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkVRX0VRX0NPRUZTX0xFTkdUSCAoMzIpDQotDQotLyoqDQotKiBAZGVmIExWVk9MX1ZPTF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgVk9MX09wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZWT0xfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZPTF9WT0xfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWVk9MX1ZPTF9HQUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgVk9MX0dhaW4NCi0qIEBzZWUgTFZWT0xfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZPTF9WT0xfR0FJTl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZPTF9WT0xfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIFZPTF9HYWluDQotKiBAc2VlIExWVk9MX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWT0xfVk9MX0dBSU5fTUlOICgtOTYpDQotLyoqDQotKiBAZGVmIExWVk9MX1ZPTF9HQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgVk9MX0dhaW4NCi0qIEBzZWUgTFZWT0xfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZPTF9WT0xfR0FJTl9NQVggKDI0KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhQRl9IUEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEhQRl9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWSFBGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIUEZfSFBGX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhQRl9IUEZfQ09STkVSRlJFUV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEhQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWSFBGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIUEZfSFBGX0NPUk5FUkZSRVFfREVGQVVMVCAoNTApDQotLyoqDQotKiBAZGVmIExWSFBGX0hQRl9DT1JORVJGUkVRX01JTg0KLSogTWluVmFsdWUgb2YgSFBGX0Nvcm5lckZyZXENCi0qIEBzZWUgTFZIUEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhQRl9IUEZfQ09STkVSRlJFUV9NSU4gKDUwKQ0KLS8qKg0KLSogQGRlZiBMVkhQRl9IUEZfQ09STkVSRlJFUV9NQVgNCi0qIE1heFZhbHVlIG9mIEhQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWSFBGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIUEZfSFBGX0NPUk5FUkZSRVFfTUFYICgxNTAwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk1VVEVfTVVURV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE11dGUNCi0qIEBzZWUgTFZNVVRFX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZNVVRFX01VVEVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZFX1JYX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZWRV9SWF9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9NVVRFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTXV0ZQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9NVVRFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9WT0xfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX1ZPTF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9WT0xfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX1ZPTF9HQUlOX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfUlhfVk9MX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBWT0xfR2Fpbg0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9WT0xfR0FJTl9NSU4gKC05NikNCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9WT0xfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX1ZPTF9HQUlOX01BWCAoMjQpDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfTkxQUF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxQUF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX05MUFBfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEVRX09wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZWRV9SeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfUlhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfSFBGX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBIUEZfT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9IUEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWVkVfUlhfSFBGX0NPUk5FUkZSRVFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBIUEZfQ29ybmVyRnJlcQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9NSU4NCi0qIE1pblZhbHVlIG9mIEhQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX0hQRl9DT1JORVJGUkVRX01JTiAoNTApDQotLyoqDQotKiBAZGVmIExWVkVfUlhfSFBGX0NPUk5FUkZSRVFfTUFYDQotKiBNYXhWYWx1ZSBvZiBIUEZfQ29ybmVyRnJlcQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9NQVggKDE1MDApDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWTlZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1vZGUNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTU9ERV9ERUZBVUxUICgxODkzNSkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9NT0RFMl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1vZGUyDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX01PREUyX0RFRkFVTFQgKDE0KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1RVTklOR19NT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgVHVuaW5nX21vZGUNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfVFVOSU5HX01PREVfREVGQVVMVCAoMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9JTlBVVF9HQUlOX01JQzBfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBJbnB1dF9HYWluX01pYzANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfSU5QVVRfR0FJTl9NSUMwX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfSU5QVVRfR0FJTl9NSUMwX01JTg0KLSogTWluVmFsdWUgb2YgSW5wdXRfR2Fpbl9NaWMwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0lOUFVUX0dBSU5fTUlDMF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfSU5QVVRfR0FJTl9NSUMwX01BWA0KLSogTWF4VmFsdWUgb2YgSW5wdXRfR2Fpbl9NaWMwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0lOUFVUX0dBSU5fTUlDMF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0lOUFVUX0dBSU5fTUlDMV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIElucHV0X0dhaW5fTWljMQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9JTlBVVF9HQUlOX01JQzFfREVGQVVMVCAoODE5MikNCi0vKioNCi0qIEBkZWYgTFZOVl9JTlBVVF9HQUlOX01JQzFfTUlODQotKiBNaW5WYWx1ZSBvZiBJbnB1dF9HYWluX01pYzENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfSU5QVVRfR0FJTl9NSUMxX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9JTlBVVF9HQUlOX01JQzFfTUFYDQotKiBNYXhWYWx1ZSBvZiBJbnB1dF9HYWluX01pYzENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfSU5QVVRfR0FJTl9NSUMxX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfT1VUUFVUX0dBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPdXRwdXRfR2Fpbg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9PVVRQVVRfR0FJTl9ERUZBVUxUICgyMDQ4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX09VVFBVVF9HQUlOX01JTg0KLSogTWluVmFsdWUgb2YgT3V0cHV0X0dhaW4NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfT1VUUFVUX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX09VVFBVVF9HQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgT3V0cHV0X0dhaW4NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfT1VUUFVUX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9MQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNUzBfTEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9UQVBTX0RFRkFVTFQgKDMyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMF9MQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0xCX1RBUFNfTUlOICgxNikNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9MQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfTEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9UQVBTX01BWCAoNjQpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9MQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9UV09BTFBIQV9ERUZBVUxUICg4MTkyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX1RXT0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfTEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX1RXT0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfTEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfTEJfVFdPQUxQSEFfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9MQl9FUkxfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9MQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfTEJfRVJMX0RFRkFVTFQgKDEwMDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfTEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfTEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0xCX0VSTF9NSU4gKDY0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0xCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVMwX0xCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9MQl9FUkxfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9IQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNUzBfSEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9UQVBTX0RFRkFVTFQgKDI0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMF9IQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0hCX1RBUFNfTUlOICgxNikNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9IQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfSEJfdGFwcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9UQVBTX01BWCAoNjQpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfSEJfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9IQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9UV09BTFBIQV9ERUZBVUxUICg4MTkyKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX1RXT0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfSEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfSEJfVFdPQUxQSEFfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX1RXT0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfSEJfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfSEJfVFdPQUxQSEFfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9IQl9FUkxfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9IQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfSEJfRVJMX0RFRkFVTFQgKDEwMDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfSEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfSEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX0hCX0VSTF9NSU4gKDY0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMwX0hCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVMwX0hCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMF9IQl9FUkxfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMF9QUkVTRVRfQ09FRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMF9wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzBfUFJFU0VUX0NPRUZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfUFJFU0VUX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfcHJlc2V0X2NvZWZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX1BSRVNFVF9DT0VGU19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfUFJFU0VUX0NPRUZTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfcHJlc2V0X2NvZWZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX1BSRVNFVF9DT0VGU19NQVggKDIpDQotDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfT0ZGU0VUX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNUzBfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX09GRlNFVF9ERUZBVUxUICg3NzYpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfT0ZGU0VUX01JTg0KLSogTWluVmFsdWUgb2YgTkxNUzBfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX09GRlNFVF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzBfT0ZGU0VUX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzBfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMwX09GRlNFVF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0xCX1RBUFNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMV9MQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX1RBUFNfREVGQVVMVCAoMzIpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfVEFQU19NSU4NCi0qIE1pblZhbHVlIG9mIE5MTVMxX0xCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfTEJfVEFQU19NSU4gKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0xCX1RBUFNfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9MQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX1RBUFNfTUFYICgzMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0xCX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX1RXT0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfVFdPQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9MQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfVFdPQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9MQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0xCX0VSTF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0xCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9MQl9FUkxfREVGQVVMVCAoMTAwMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9MQl9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9MQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfTEJfRVJMX01JTiAoNjQpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfTEJfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzFfTEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0xCX0VSTF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0hCX1RBUFNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMV9IQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX1RBUFNfREVGQVVMVCAoMjQpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfVEFQU19NSU4NCi0qIE1pblZhbHVlIG9mIE5MTVMxX0hCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfSEJfVEFQU19NSU4gKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0hCX1RBUFNfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9IQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX1RBUFNfTUFYICgzMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0hCX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX1RXT0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfVFdPQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9IQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfVFdPQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9IQl90d29hbHBoYQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9IQl9UV09BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX0hCX0VSTF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX0hCX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9IQl9FUkxfREVGQVVMVCAoMTAwMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9IQl9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9IQl9lcmwNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfSEJfRVJMX01JTiAoNjQpDQotLyoqDQotKiBAZGVmIExWTlZfTkxNUzFfSEJfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNUzFfSEJfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX05MTVMxX0hCX0VSTF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX05MTVMxX1BSRVNFVF9DT0VGU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVMxX3ByZXNldF9jb2Vmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfUFJFU0VUX0NPRUZTX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfUFJFU0VUX0NPRUZTX01BWCAoMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9PRkZTRVRfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TMV9vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfT0ZGU0VUX0RFRkFVTFQgKDc3NikNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9PRkZTRVRfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TMV9vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfT0ZGU0VUX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9OTE1TMV9PRkZTRVRfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TMV9vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTkxNUzFfT0ZGU0VUX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQ0FMX21pY1Bvd0Zsb29yTWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9ERUZBVUxUICgxNTApDQotLyoqDQotKiBAZGVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX01JTg0KLSogTWluVmFsdWUgb2YgQ0FMX21pY1Bvd0Zsb29yTWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX01BWA0KLSogTWF4VmFsdWUgb2YgQ0FMX21pY1Bvd0Zsb29yTWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1dHVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgV2dUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfV0dUSFJFU0hPTERfREVGQVVMVCAoMzI3NjcpDQotLyoqDQotKiBAZGVmIExWTlZfV0dUSFJFU0hPTERfTUlODQotKiBNaW5WYWx1ZSBvZiBXZ1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9XR1RIUkVTSE9MRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfV0dUSFJFU0hPTERfTUFYDQotKiBNYXhWYWx1ZSBvZiBXZ1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9XR1RIUkVTSE9MRF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX01QVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTXBUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfTVBUSFJFU0hPTERfREVGQVVMVCAoNjU1NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9NUFRIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIE1wVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX01QVEhSRVNIT0xEX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9NUFRIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIE1wVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX01QVEhSRVNIT0xEX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX0lOSVRfVEFCTEUwX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRlNCX2luaXRfdGFibGUwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMF9ERUZBVUxUIHszMjc2NywgMCwgMCwgMCwgMCwgMCwgMCwgMH0NCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTUlODQotKiBNaW5WYWx1ZSBvZiBGU0JfaW5pdF90YWJsZTANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX0lOSVRfVEFCTEUwX01JTiAoLTMyNzY4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMF9NQVgNCi0qIE1heFZhbHVlIG9mIEZTQl9pbml0X3RhYmxlMA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTUFYICgzMjc2NykNCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTEVOR1RIDQotKiBMZW5ndGggb2YgRlNCX2luaXRfdGFibGUwDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMF9MRU5HVEggKDgpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX0lOSVRfVEFCTEUxX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRlNCX2luaXRfdGFibGUxDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMV9ERUZBVUxUIHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMV9NSU4NCi0qIE1pblZhbHVlIG9mIEZTQl9pbml0X3RhYmxlMQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfSU5JVF9UQUJMRTFfTUlOICgtMzI3NjgpDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX0lOSVRfVEFCTEUxX01BWA0KLSogTWF4VmFsdWUgb2YgRlNCX2luaXRfdGFibGUxDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9JTklUX1RBQkxFMV9NQVggKDMyNzY3KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMV9MRU5HVEgNCi0qIExlbmd0aCBvZiBGU0JfaW5pdF90YWJsZTENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX0lOSVRfVEFCTEUxX0xFTkdUSCAoOCkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVEFQU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEZTQl90YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9UQVBTX0RFRkFVTFQgKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9UQVBTX01JTg0KLSogTWluVmFsdWUgb2YgRlNCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RBUFNfTUlOICg4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgRlNCX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RBUFNfTUFYICgxNikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBGU0JfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RXT0FMUEhBX0RFRkFVTFQgKDY1NSkNCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVFdPQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBGU0JfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RXT0FMUEhBX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9GU0JfVFdPQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBGU0JfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRlNCX1RXT0FMUEhBX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRlNCX1JFRl9HQUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRlNCX3JlZl9nYWluDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ZTQl9SRUZfR0FJTl9ERUZBVUxUICgxMDI0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9SRUZfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEZTQl9yZWZfZ2Fpbg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfUkVGX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ZTQl9SRUZfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEZTQl9yZWZfZ2Fpbg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9GU0JfUkVGX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9HU0NfVEFQU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEdTQ190YXBzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19UQVBTX0RFRkFVTFQgKDE2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19UQVBTX01JTg0KLSogTWluVmFsdWUgb2YgR1NDX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX1RBUFNfTUlOICg4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgR1NDX3RhcHMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX1RBUFNfTUFYICg0OCkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9HU0NfVFdPQUxQSEFfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBHU0NfdHdvYWxwaGENCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX1RXT0FMUEhBX0RFRkFVTFQgKDE2MzgpDQotLyoqDQotKiBAZGVmIExWTlZfR1NDX1RXT0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgR1NDX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19UV09BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfR1NDX1RXT0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgR1NDX3R3b2FscGhhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19UV09BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19FUkxfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBHU0NfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19FUkxfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBHU0NfZXJsDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9HU0NfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgR1NDX2VybA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9HU0NfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfR1NDX09GRlNFVF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEdTQ19vZmZzZXQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfR1NDX09GRlNFVF9ERUZBVUxUICgxNjM4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19PRkZTRVRfTUlODQotKiBNaW5WYWx1ZSBvZiBHU0Nfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19PRkZTRVRfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0dTQ19PRkZTRVRfTUFYDQotKiBNYXhWYWx1ZSBvZiBHU0Nfb2Zmc2V0DQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0dTQ19PRkZTRVRfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUhJX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvR2FtbWFIaQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9HQU1NQUhJX0RFRkFVTFQgKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0VjaG9HYW1tYUhpDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0VjaG9HYW1tYUhpDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUxPX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvR2FtbWFMbw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9HQU1NQUxPX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfRWNob0dhbW1hTG8NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfRWNob0dhbW1hTG8NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT0FMUEhBUkVWX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvQWxwaGFSZXYNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfREVGQVVMVCAoMTIwMDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0VjaG9BbHBoYVJldg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9BTFBIQVJFVl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0VjaG9BbHBoYVJldg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0VDSE9BTFBIQVJFVl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19FY2hvVGFpbFBvcnRpb24NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19FQ0hPVEFJTFBPUlRJT05fREVGQVVMVCAoNzAwMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9UQUlMUE9SVElPTl9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfRWNob1RhaWxQb3J0aW9uDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0VDSE9UQUlMUE9SVElPTl9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfRWNob1RhaWxQb3J0aW9uDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfRUNIT1RBSUxQT1JUSU9OX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OTEFUVEVOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19ObEF0dGVuDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTkxBVFRFTl9ERUZBVUxUICgyNTYpDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OTEFUVEVOX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19ObEF0dGVuDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTkxBVFRFTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OTEFUVEVOX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19ObEF0dGVuDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTkxBVFRFTl9NQVggKDIwNDgpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBTU1BU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEROTlNfTm9pc2VHYW1tYVMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBTU1BU19ERUZBVUxUICgxMTQ3MCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hUw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hUw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBTU1BTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEROTlNfTm9pc2VHYW1tYU4NCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBTU1BTl9ERUZBVUxUICgxNjM4NCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19Ob2lzZUdhbW1hTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19Ob2lzZUdhaW5NaW5TDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOU19ERUZBVUxUICgxMTE0MCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTlNfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX05vaXNlR2Fpbk1pblMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX05vaXNlR2Fpbk1pblMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5OX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19Ob2lzZUdhaW5NaW5ODQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOTl9ERUZBVUxUICg2NTU0KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOTl9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfTm9pc2VHYWluTWluTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FJTk1JTk5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOTl9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfTm9pc2VHYWluTWluTg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX05PSVNFR0FJTk1JTk5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX05PSVNFQklBU0NPTVBfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBETk5TX05vaXNlQmlhc0NvbXANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX0RFRkFVTFQgKDk4MzApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX01JTg0KLSogTWluVmFsdWUgb2YgRE5OU19Ob2lzZUJpYXNDb21wDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VCSUFTQ09NUF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19OT0lTRUJJQVNDT01QX01BWA0KLSogTWF4VmFsdWUgb2YgRE5OU19Ob2lzZUJpYXNDb21wDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTk9JU0VCSUFTQ09NUF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfR0FJTkVUQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEROTlNfR2FpbkV0YQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0dBSU5FVEFfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfR0FJTkVUQV9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfR2FpbkV0YQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0dBSU5FVEFfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfR0FJTkVUQV9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfR2FpbkV0YQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0dBSU5FVEFfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX0FDVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19BY1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX0FDVEhSRVNIT0xEX0RFRkFVTFQgKDEyMjg4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0FjVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0FjVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9ETk5TX1dCVEhSRVNIT0xEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgRE5OU19XYlRocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9ETk5TX1dCVEhSRVNIT0xEX0RFRkFVTFQgKDkyMTYpDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIEROTlNfV2JUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIEROTlNfV2JUaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBETk5TX0xvc3RCZWFtVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfREVGQVVMVCAoMzIwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUlODQotKiBNaW5WYWx1ZSBvZiBETk5TX0xvc3RCZWFtVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUFYDQotKiBNYXhWYWx1ZSBvZiBETk5TX0xvc3RCZWFtVGhyZXNob2xkDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX0ROTlNfTE9TVEJFQU1USFJFU0hPTERfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfQkVUQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFBDRF9iZXRhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BDRF9CRVRBX0RFRkFVTFQgKDIzMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfQkVUQV9NSU4NCi0qIE1pblZhbHVlIG9mIFBDRF9iZXRhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BDRF9CRVRBX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfQkVUQV9NQVgNCi0qIE1heFZhbHVlIG9mIFBDRF9iZXRhDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BDRF9CRVRBX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfUENEX1RIUkVTSE9MRF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFBDRF9UaHJlc2hvbGQNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENEX1RIUkVTSE9MRF9ERUZBVUxUICgyNjIxMykNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfVEhSRVNIT0xEX01JTg0KLSogTWluVmFsdWUgb2YgUENEX1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0RfVEhSRVNIT0xEX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0RfVEhSRVNIT0xEX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX1RocmVzaG9sZA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0RfVEhSRVNIT0xEX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE9wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE1vZGUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTU9ERV9ERUZBVUxUICg0NjA3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1RVTklOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBUdW5pbmdNb2RlDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1RVTklOR01PREVfREVGQVVMVCAoMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9JTlBVVEdBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBJbnB1dEdhaW4NCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfSU5QVVRHQUlOX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWSEZfSU5QVVRHQUlOX01JTg0KLSogTWluVmFsdWUgb2YgSW5wdXRHYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0lOUFVUR0FJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfSU5QVVRHQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgSW5wdXRHYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0lOUFVUR0FJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX09VVFBVVEdBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPdXRwdXRHYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX09VVFBVVEdBSU5fREVGQVVMVCAoMjA0OCkNCi0vKioNCi0qIEBkZWYgTFZIRl9PVVRQVVRHQUlOX01JTg0KLSogTWluVmFsdWUgb2YgT3V0cHV0R2Fpbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9PVVRQVVRHQUlOX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9PVVRQVVRHQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgT3V0cHV0R2Fpbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9PVVRQVVRHQUlOX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MSU1JVF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVNfbGltaXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MSU1JVF9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfTElNSVRfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX2xpbWl0DQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTElNSVRfTUlOICgtMjQpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MSU1JVF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVNfbGltaXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MSU1JVF9NQVggKDApDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19MQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfVEFQU19ERUZBVUxUICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0xCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0xCX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MQl9UQVBTX01JTiAoMTYpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19MQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfVEFQU19NQVggKDIwMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVNfTEJfdHdvX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfVFdPX0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UV09fQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0xCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19MQl9UV09fQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TX0xCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0xCX1RXT19BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfTEJfRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19MQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MQl9FUkxfREVGQVVMVCAoMTI4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfTEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19MQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19MQl9FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0xCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVNfTEJfZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfTEJfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19IQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfVEFQU19ERUZBVUxUICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0hCX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0hCX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19IQl9UQVBTX01JTiAoMTYpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19IQl90YXBzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfVEFQU19NQVggKDEzNikNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0hCX1RXT19BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIE5MTVNfSEJfdHdvX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfVFdPX0FMUEhBX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UV09fQUxQSEFfTUlODQotKiBNaW5WYWx1ZSBvZiBOTE1TX0hCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0hCX1RXT19BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19IQl9UV09fQUxQSEFfTUFYDQotKiBNYXhWYWx1ZSBvZiBOTE1TX0hCX3R3b19hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX0hCX1RXT19BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfSEJfRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19IQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19IQl9FUkxfREVGQVVMVCAoMTI4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfSEJfRVJMX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19IQl9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19IQl9FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9OTE1TX0hCX0VSTF9NQVgNCi0qIE1heFZhbHVlIG9mIE5MTVNfSEJfZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX05MTVNfSEJfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBOTE1TX3ByZXNldF9jb2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9OTE1TX1BSRVNFVF9DT0VGU19ERUZBVUxUICgxKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfUFJFU0VUX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfUFJFU0VUX0NPRUZTX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19wcmVzZXRfY29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19QUkVTRVRfQ09FRlNfTUFYICgyKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfT0ZGU0VUX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTkxNU19vZmZzZXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19PRkZTRVRfREVGQVVMVCAoNzY3KQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfT0ZGU0VUX01JTg0KLSogTWluVmFsdWUgb2YgTkxNU19vZmZzZXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19PRkZTRVRfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX05MTVNfT0ZGU0VUX01BWA0KLSogTWF4VmFsdWUgb2YgTkxNU19vZmZzZXQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfTkxNU19PRkZTRVRfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3RhaWxfYWxwaGFfTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX0FMUEhBX0xCX0RFRkFVTFQgKDI1Mzk1KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9MQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfdGFpbF9hbHBoYV9MQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9MQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfdGFpbF9hbHBoYV9MQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9MQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfdGFpbF9wb3J0aW9uX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0xCX0RFRkFVTFQgKDI5NDkxKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0xCX01JTg0KLSogTWluVmFsdWUgb2YgREVOU190YWlsX3BvcnRpb25fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX1BPUlRJT05fTEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0xCX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU190YWlsX3BvcnRpb25fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX1BPUlRJT05fTEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfZV9oaWdoX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX0RFRkFVTFQgKDUxMikNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfZ2FtbWFfZV9oaWdoX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfZ2FtbWFfZV9oaWdoX0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU19nYW1tYV9lX2R0X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9ERUZBVUxUICgyNTYpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX01JTg0KLSogTWluVmFsdWUgb2YgREVOU19nYW1tYV9lX2R0X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU19nYW1tYV9lX2R0X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX2dhbW1hX2VfbG93X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX2dhbW1hX2VfbG93X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX2dhbW1hX2VfbG93X0xCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9MT1dfTEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX05MX0FUVEVOX0xCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU19OTF9hdHRlbl9MQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05MX0FUVEVOX0xCX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19OTF9BVFRFTl9MQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfTkxfYXR0ZW5fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19OTF9BVFRFTl9MQl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19OTF9BVFRFTl9MQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfTkxfYXR0ZW5fTEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19OTF9BVFRFTl9MQl9NQVggKDIwNDgpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU190YWlsX2FscGhhX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9BTFBIQV9IQl9ERUZBVUxUICgyNTM5NSkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfSEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX3RhaWxfYWxwaGFfSEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfSEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX3RhaWxfYWxwaGFfSEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19UQUlMX1BPUlRJT05fSEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3RhaWxfcG9ydGlvbl9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9ERUZBVUxUICgyOTQ5MSkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfdGFpbF9wb3J0aW9uX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0hCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfdGFpbF9wb3J0aW9uX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0hCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX2dhbW1hX2VfaGlnaF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9ERUZBVUxUICg1MTIpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX2dhbW1hX2VfaGlnaF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX2dhbW1hX2VfaGlnaF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfZV9kdF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfREVGQVVMVCAoMjU2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfZ2FtbWFfZV9kdF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfZ2FtbWFfZV9kdF9IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgREVOU19nYW1tYV9lX2xvd19IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX0RFRkFVTFQgKDI1NikNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01JTg0KLSogTWluVmFsdWUgb2YgREVOU19nYW1tYV9lX2xvd19IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU19nYW1tYV9lX2xvd19IQg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19OTF9BVFRFTl9IQl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfTkxfYXR0ZW5fSEINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19OTF9BVFRFTl9IQl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX05MX2F0dGVuX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX05MX2F0dGVuX0hCDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUFYICgyMDQ4KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfZV9hbHBoYQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX0VfQUxQSEFfREVGQVVMVCAoMjQwMDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0FMUEhBX01JTg0KLSogTWluVmFsdWUgb2YgREVOU19nYW1tYV9lX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19HQU1NQV9FX0FMUEhBX01BWA0KLSogTWF4VmFsdWUgb2YgREVOU19nYW1tYV9lX2FscGhhDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfZ2FtbWFfbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX05fREVGQVVMVCAoMjgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfTl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfZ2FtbWFfbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX05fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfR0FNTUFfTl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfZ2FtbWFfbg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX0dBTU1BX05fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3NwZGV0X25lYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19TUERFVF9ORUFSX0RFRkFVTFQgKDUxMikNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX3NwZGV0X25lYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19TUERFVF9ORUFSX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX3NwZGV0X25lYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19TUERFVF9ORUFSX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19TUERFVF9BQ1RfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX3NwZGV0X2FjdA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1NQREVUX0FDVF9ERUZBVUxUICg3NjgpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19TUERFVF9BQ1RfTUlODQotKiBNaW5WYWx1ZSBvZiBERU5TX3NwZGV0X2FjdA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1NQREVUX0FDVF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19TUERFVF9BQ1RfTUFYDQotKiBNYXhWYWx1ZSBvZiBERU5TX3NwZGV0X2FjdA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX1NQREVUX0FDVF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTElNSVRfTlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX2xpbWl0X25zDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfTElNSVRfTlNfREVGQVVMVCAoMTAzNjEpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19MSU1JVF9OU19NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfbGltaXRfbnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19MSU1JVF9OU19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19MSU1JVF9OU19NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfbGltaXRfbnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19MSU1JVF9OU19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfQ05JX0dBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBERU5TX0NOSV9HYWluDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX0RFTlNfQ05JX0dBSU5fREVGQVVMVCAoMTYzODQpDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19DTklfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfQ05JX0dhaW4NCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19DTklfR0FJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfREVOU19DTklfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfQ05JX0dhaW4NCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfREVOU19DTklfR0FJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIERFTlNfTkZFX2Jsb2Nrc2l6ZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfREVGQVVMVCAoMTUwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9NSU4NCi0qIE1pblZhbHVlIG9mIERFTlNfTkZFX2Jsb2Nrc2l6ZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9NQVgNCi0qIE1heFZhbHVlIG9mIERFTlNfTkZFX2Jsb2Nrc2l6ZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9TUERFVF9GQVJfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTUERFVF9mYXINCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfU1BERVRfRkFSX0RFRkFVTFQgKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX0ZBUl9NSU4NCi0qIE1pblZhbHVlIG9mIFNQREVUX2Zhcg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9GQVJfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX0ZBUl9NQVgNCi0qIE1heFZhbHVlIG9mIFNQREVUX2Zhcg0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9GQVJfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9TUERFVF9NSUNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTUERFVF9taWMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfU1BERVRfTUlDX0RFRkFVTFQgKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX01JQ19NSU4NCi0qIE1pblZhbHVlIG9mIFNQREVUX21pYw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9NSUNfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1NQREVUX01JQ19NQVgNCi0qIE1heFZhbHVlIG9mIFNQREVUX21pYw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9TUERFVF9NSUNfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9TUERFVF9YX0NMSVBfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBTUERFVF94X2NsaXANCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfU1BERVRfWF9DTElQX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWSEZfU1BERVRfWF9DTElQX01JTg0KLSogTWluVmFsdWUgb2YgU1BERVRfeF9jbGlwDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1NQREVUX1hfQ0xJUF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfU1BERVRfWF9DTElQX01BWA0KLSogTWF4VmFsdWUgb2YgU1BERVRfeF9jbGlwDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1NQREVUX1hfQ0xJUF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9USFJFU0hPTERfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBQQ0RfdGhyZXNob2xkDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9USFJFU0hPTERfREVGQVVMVCAoMjAwMDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX1RIUkVTSE9MRF9NSU4NCi0qIE1pblZhbHVlIG9mIFBDRF90aHJlc2hvbGQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RIUkVTSE9MRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX1RIUkVTSE9MRF9NQVgNCi0qIE1heFZhbHVlIG9mIFBDRF90aHJlc2hvbGQNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RIUkVTSE9MRF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9UQVBTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUENEX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RBUFNfREVGQVVMVCAoMTYpDQotLyoqDQotKiBAZGVmIExWSEZfUENEX1RBUFNfTUlODQotKiBNaW5WYWx1ZSBvZiBQQ0RfdGFwcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfVEFQU19NSU4gKDE2KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9UQVBTX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX3RhcHMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX1RBUFNfTUFYICg2NCkNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUENEX2VybA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX0RFRkFVTFQgKDY0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBQQ0RfZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9FUkxfTUlOICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX2VybA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfUENEX01JTklNVU1fRVJMX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgUENEX21pbmltdW1fZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9NSU5JTVVNX0VSTF9ERUZBVUxUICg2NCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfTUlOSU1VTV9FUkxfTUlODQotKiBNaW5WYWx1ZSBvZiBQQ0RfbWluaW11bV9lcmwNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX01JTklNVU1fRVJMX01JTiAoNjQpDQotLyoqDQotKiBAZGVmIExWSEZfUENEX01JTklNVU1fRVJMX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX21pbmltdW1fZXJsDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9NSU5JTVVNX0VSTF9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9FUkxfU1RFUF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFBDRF9lcmxfc3RlcA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX1NURVBfREVGQVVMVCAoMTY4MDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX0VSTF9TVEVQX01JTg0KLSogTWluVmFsdWUgb2YgUENEX2VybF9zdGVwDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9FUkxfU1RFUF9NSU4gKDE2Mzg0KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BDRF9FUkxfU1RFUF9NQVgNCi0qIE1heFZhbHVlIG9mIFBDRF9lcmxfc3RlcA0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QQ0RfRVJMX1NURVBfTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9QQ0RfR0FNTUFfRV9SRVNDVUVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBQQ0RfZ2FtbWFfZV9yZXNjdWUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUENEX0dBTU1BX0VfUkVTQ1VFX0RFRkFVTFQgKDUwMDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX0dBTU1BX0VfUkVTQ1VFX01JTg0KLSogTWluVmFsdWUgb2YgUENEX2dhbW1hX2VfcmVzY3VlDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9HQU1NQV9FX1JFU0NVRV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWSEZfUENEX0dBTU1BX0VfUkVTQ1VFX01BWA0KLSogTWF4VmFsdWUgb2YgUENEX2dhbW1hX2VfcmVzY3VlDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BDRF9HQU1NQV9FX1JFU0NVRV9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkJEX0JEX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBCRF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWQkRfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkJEX0JEX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZNX01PREVfT0ZGKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkJEX0JVTEtERUxBWV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEJ1bGtEZWxheQ0KLSogQHNlZSBMVkJEX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZCRF9CVUxLREVMQVlfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZCRF9CVUxLREVMQVlfTUlODQotKiBNaW5WYWx1ZSBvZiBCdWxrRGVsYXkNCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQlVMS0RFTEFZX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZCRF9CVUxLREVMQVlfTUFYDQotKiBNYXhWYWx1ZSBvZiBCdWxrRGVsYXkNCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQlVMS0RFTEFZX01BWCAoNjQwMCkNCi0NCi0vKioNCi0qIEBkZWYgTFZCRF9CRF9HQUlOX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQkRfR2Fpbg0KLSogQHNlZSBMVkJEX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZCRF9CRF9HQUlOX0RFRkFVTFQgKDgxOTIpDQotLyoqDQotKiBAZGVmIExWQkRfQkRfR0FJTl9NSU4NCi0qIE1pblZhbHVlIG9mIEJEX0dhaW4NCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQkRfR0FJTl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWQkRfQkRfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIEJEX0dhaW4NCi0qIEBzZWUgTFZCRF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWQkRfQkRfR0FJTl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBPcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX09QRVJBVElOR01PREVfREVGQVVMVCAoTFZWRV9UWF9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9NVVRFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTXV0ZQ0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9NVVRFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9CRF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgQkRfT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9CRF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9CVUxLREVMQVlfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBCdWxrRGVsYXkNCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfQlVMS0RFTEFZX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfQlVMS0RFTEFZX01JTg0KLSogTWluVmFsdWUgb2YgQnVsa0RlbGF5DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JVTEtERUxBWV9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfQlVMS0RFTEFZX01BWA0KLSogTWF4VmFsdWUgb2YgQnVsa0RlbGF5DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JVTEtERUxBWV9NQVggKDY0MDApDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfQkRfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEJEX0dhaW4NCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfQkRfR0FJTl9ERUZBVUxUICg4MTkyKQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX0JEX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBCRF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JEX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX0JEX0dBSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBCRF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0JEX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9WT0xfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9PcGVyYXRpbmdNb2RlDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX1ZPTF9PUEVSQVRJTkdNT0RFX0RFRkFVTFQgKExWTV9NT0RFX09GRikNCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9WT0xfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX1ZPTF9HQUlOX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfVk9MX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBWT0xfR2Fpbg0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9WT0xfR0FJTl9NSU4gKC05NikNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9WT0xfR0FJTl9NQVgNCi0qIE1heFZhbHVlIG9mIFZPTF9HYWluDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX1ZPTF9HQUlOX01BWCAoMjQpDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfSFBGX09QRVJBVElOR01PREVfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBIUEZfT3BlcmF0aW5nTW9kZQ0KLSogQHNlZSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9UWF9IUEZfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgTUlDX0hQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX01JQ19IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCkNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9NSUNfSFBGX0NPUk5FUkZSRVFfTUlODQotKiBNaW5WYWx1ZSBvZiBNSUNfSFBGX0Nvcm5lckZyZXENCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX01JTiAoNTApDQotLyoqDQotKiBAZGVmIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX01BWA0KLSogTWF4VmFsdWUgb2YgTUlDX0hQRl9Db3JuZXJGcmVxDQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX01JQ19IUEZfQ09STkVSRlJFUV9NQVggKDE1MDApDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWVkVfVFhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEVRX09wZXJhdGluZ01vZGUNCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfRVFfT1BFUkFUSU5HTU9ERV9ERUZBVUxUIChMVk1fTU9ERV9PRkYpDQotDQotDQotDQotLyoqDQotKiBAZGVmIExWVkNfR0FJTl9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIEdhaW4NCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfR0FJTl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0dBSU5fTUlODQotKiBNaW5WYWx1ZSBvZiBHYWluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVlZDX0dBSU5fTUFYDQotKiBNYXhWYWx1ZSBvZiBHYWluDQotKiBAc2VlIExWVkNfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZDX0dBSU5fTUFYICgzMjc2NykNCi0NCi0vKioNCi0qIEBkZWYgTFZWQ19TUERFVEVDVEVEX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgU3BEZXRlY3RlZA0KLSogQHNlZSBMVlZDX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWQ19TUERFVEVDVEVEX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkNfU1BERVRFQ1RFRF9NSU4NCi0qIE1pblZhbHVlIG9mIFNwRGV0ZWN0ZWQNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfU1BERVRFQ1RFRF9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWVkNfU1BERVRFQ1RFRF9NQVgNCi0qIE1heFZhbHVlIG9mIFNwRGV0ZWN0ZWQNCi0qIEBzZWUgTFZWQ19Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkNfU1BERVRFQ1RFRF9NQVggKDEpDQotDQotLyoqDQotKiBAZGVmIExWV01fQVZMX0dBSU5fREVGQVVMVA0KLSogRGVmYXVsdCBvZiBBVkxfR2Fpbg0KLSogQHNlZSBMVldNX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZXTV9BVkxfR0FJTl9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9HQUlOX01JTg0KLSogTWluVmFsdWUgb2YgQVZMX0dhaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0dBSU5fTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVldNX0FWTF9HQUlOX01BWA0KLSogTWF4VmFsdWUgb2YgQVZMX0dhaW4NCi0qIEBzZWUgTFZXTV9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWV01fQVZMX0dBSU5fTUFYICgzMjc2NykNCi0NCi0NCi0NCi0vKioNCi0qIEBkZWYgTFZWRV9SWF9EVU1NWV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIGR1bW15DQotKiBAc2VlIExWVkVfUnhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1JYX0RVTU1ZX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWVkVfUlhfRFVNTVlfTUlODQotKiBNaW5WYWx1ZSBvZiBkdW1teQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9EVU1NWV9NSU4gKC0xMjgpDQotLyoqDQotKiBAZGVmIExWVkVfUlhfRFVNTVlfTUFYDQotKiBNYXhWYWx1ZSBvZiBkdW1teQ0KLSogQHNlZSBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZWRV9SWF9EVU1NWV9NQVggKDEyNykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9TVEFUVVNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBzdGF0dXMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfU1RBVFVTX0RFRkFVTFQgKDApDQotDQotLyoqDQotKiBAZGVmIExWTlZfRFVNTVlfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBEdW1teQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9EVU1NWV9ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0RVTU1ZX01JTg0KLSogTWluVmFsdWUgb2YgRHVtbXkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRFVNTVlfTUlOICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX0RVTU1ZX01BWA0KLSogTWF4VmFsdWUgb2YgRHVtbXkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfRFVNTVlfTUFYICgwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMF9MQl9DT0VGRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwTkxNUzBfTEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMF9MQl9DT0VGRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzBfTEJfQ09FRkZTX01JTg0KLSogTWluVmFsdWUgb2YgcE5MTVMwX0xCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzBfTEJfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMwX0xCX0NPRUZGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBOTE1TMF9MQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMwX0xCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMwX0hCX0NPRUZGU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBOTE1TMF9IQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMwX0hCX0NPRUZGU19ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMF9IQl9DT0VGRlNfTUlODQotKiBNaW5WYWx1ZSBvZiBwTkxNUzBfSEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMF9IQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzBfSEJfQ09FRkZTX01BWA0KLSogTWF4VmFsdWUgb2YgcE5MTVMwX0hCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzBfSEJfQ09FRkZTX01BWCAoMjE0NzQ4MzY0NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzFfTEJfQ09FRkZTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcE5MTVMxX0xCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzFfTEJfQ09FRkZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMxX0xCX0NPRUZGU19NSU4NCi0qIE1pblZhbHVlIG9mIHBOTE1TMV9MQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMxX0xCX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMV9MQl9DT0VGRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBwTkxNUzFfTEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMV9MQl9DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BOTE1TMV9IQl9DT0VGRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwTkxNUzFfSEJfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BOTE1TMV9IQl9DT0VGRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTkxNUzFfSEJfQ09FRkZTX01JTg0KLSogTWluVmFsdWUgb2YgcE5MTVMxX0hCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTkxNUzFfSEJfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpDQotLyoqDQotKiBAZGVmIExWTlZfUE5MTVMxX0hCX0NPRUZGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBOTE1TMV9IQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE5MTVMxX0hCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpDQotDQotLyoqDQotKiBAZGVmIExWTlZfUEZTQl9DT0VGRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwRlNCX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QRlNCX0NPRUZGU19ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BGU0JfQ09FRkZTX01JTg0KLSogTWluVmFsdWUgb2YgcEZTQl9Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUEZTQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QRlNCX0NPRUZGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBGU0JfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BGU0JfQ09FRkZTX01BWCAoMjE0NzQ4MzY0NykNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QR1NDX0NPRUZGU19ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBHU0NfQ29lZmZzDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BHU0NfQ09FRkZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUEdTQ19DT0VGRlNfTUlODQotKiBNaW5WYWx1ZSBvZiBwR1NDX0NvZWZmcw0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QR1NDX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BHU0NfQ09FRkZTX01BWA0KLSogTWF4VmFsdWUgb2YgcEdTQ19Db2VmZnMNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUEdTQ19DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BNSUNQT1dTUF9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBNaWNQb3dTcA0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QTUlDUE9XU1BfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTUlDUE9XU1BfTUlODQotKiBNaW5WYWx1ZSBvZiBwTWljUG93U3ANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE1JQ1BPV1NQX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QTUlDUE9XU1BfTUFYDQotKiBNYXhWYWx1ZSBvZiBwTWljUG93U3ANCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUE1JQ1BPV1NQX01BWCAoMSkNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0FMRkFDVE9SX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcENhbEZhY3Rvcg0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0FMRkFDVE9SX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUENBTEZBQ1RPUl9NSU4NCi0qIE1pblZhbHVlIG9mIHBDYWxGYWN0b3INCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTEZBQ1RPUl9NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfUENBTEZBQ1RPUl9NQVgNCi0qIE1heFZhbHVlIG9mIHBDYWxGYWN0b3INCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTEZBQ1RPUl9NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVk5WX1BDQUxSRUFEWV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIHBDYWxSZWFkeQ0KLSogQHNlZSBMVk5WX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZOVl9QQ0FMUkVBRFlfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0FMUkVBRFlfTUlODQotKiBNaW5WYWx1ZSBvZiBwQ2FsUmVhZHkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTFJFQURZX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZOVl9QQ0FMUkVBRFlfTUFYDQotKiBNYXhWYWx1ZSBvZiBwQ2FsUmVhZHkNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUENBTFJFQURZX01BWCAoMikNCi0NCi0vKioNCi0qIEBkZWYgTFZOVl9QQlJPQURTSURFX0lOVEVSQ0NfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwQnJvYWRzaWRlX2ludGVyQ0MNCi0qIEBzZWUgTFZOVl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWTlZfUEJST0FEU0lERV9JTlRFUkNDX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWTlZfUEJST0FEU0lERV9JTlRFUkNDX01JTg0KLSogTWluVmFsdWUgb2YgcEJyb2Fkc2lkZV9pbnRlckNDDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19NSU4gKDApDQotLyoqDQotKiBAZGVmIExWTlZfUEJST0FEU0lERV9JTlRFUkNDX01BWA0KLSogTWF4VmFsdWUgb2YgcEJyb2Fkc2lkZV9pbnRlckNDDQotKiBAc2VlIExWTlZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19NQVggKDMyNzY3KQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX0dBTU1BRV9ERUZBVUxUDQotKiBEZWZhdWx0IG9mIGdhbW1hZQ0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9HQU1NQUVfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9HQU1NQUVfTUlODQotKiBNaW5WYWx1ZSBvZiBnYW1tYWUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfR0FNTUFFX01JTiAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9HQU1NQUVfTUFYDQotKiBNYXhWYWx1ZSBvZiBnYW1tYWUNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfR0FNTUFFX01BWCAoMzI3NjcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfU1RBVFVTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2Ygc3RhdHVzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1NUQVRVU19ERUZBVUxUICgwKQ0KLQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BOTE1TX0xCX0NPRUZTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcE5MTVNfTEJfQ29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUE5MTVNfTEJfQ09FRlNfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QTkxNU19MQl9DT0VGU19NSU4NCi0qIE1pblZhbHVlIG9mIHBOTE1TX0xCX0NvZWZzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BOTE1TX0xCX0NPRUZTX01JTiAoLTIxNDc0ODM2NDgpDQotLyoqDQotKiBAZGVmIExWSEZfUE5MTVNfTEJfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBwTkxNU19MQl9Db2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QTkxNU19MQl9DT0VGU19NQVggKDIxNDc0ODM2NDcpDQotDQotLyoqDQotKiBAZGVmIExWSEZfUE5MTVNfSEJfQ09FRlNfREVGQVVMVA0KLSogRGVmYXVsdCBvZiBwTkxNU19IQl9Db2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QTkxNU19IQl9DT0VGU19ERUZBVUxUICgwKQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BOTE1TX0hCX0NPRUZTX01JTg0KLSogTWluVmFsdWUgb2YgcE5MTVNfSEJfQ29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUE5MTVNfSEJfQ09FRlNfTUlOICgtMjE0NzQ4MzY0OCkNCi0vKioNCi0qIEBkZWYgTFZIRl9QTkxNU19IQl9DT0VGU19NQVgNCi0qIE1heFZhbHVlIG9mIHBOTE1TX0hCX0NvZWZzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BOTE1TX0hCX0NPRUZTX01BWCAoMjE0NzQ4MzY0NykNCi0NCi0vKioNCi0qIEBkZWYgTFZIRl9QUENEX0NPRUZTX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgcFBDRF9Db2Vmcw0KLSogQHNlZSBMVkhGX0NvbnRyb2xQYXJhbXNfc3QNCi0qLw0KLSNkZWZpbmUgTFZIRl9QUENEX0NPRUZTX0RFRkFVTFQgKDApDQotLyoqDQotKiBAZGVmIExWSEZfUFBDRF9DT0VGU19NSU4NCi0qIE1pblZhbHVlIG9mIHBQQ0RfQ29lZnMNCi0qIEBzZWUgTFZIRl9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWSEZfUFBDRF9DT0VGU19NSU4gKC0yMTQ3NDgzNjQ4KQ0KLS8qKg0KLSogQGRlZiBMVkhGX1BQQ0RfQ09FRlNfTUFYDQotKiBNYXhWYWx1ZSBvZiBwUENEX0NvZWZzDQotKiBAc2VlIExWSEZfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVkhGX1BQQ0RfQ09FRlNfTUFYICgyMTQ3NDgzNjQ3KQ0KLQ0KLQ0KLQ0KLS8qKg0KLSogQGRlZiBMVlZFX1RYX0RVTU1ZX0RFRkFVTFQNCi0qIERlZmF1bHQgb2YgZHVtbXkNCi0qIEBzZWUgTFZWRV9UeF9Db250cm9sUGFyYW1zX3N0DQotKi8NCi0jZGVmaW5lIExWVkVfVFhfRFVNTVlfREVGQVVMVCAoMCkNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9EVU1NWV9NSU4NCi0qIE1pblZhbHVlIG9mIGR1bW15DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0RVTU1ZX01JTiAoLTEyOCkNCi0vKioNCi0qIEBkZWYgTFZWRV9UWF9EVU1NWV9NQVgNCi0qIE1heFZhbHVlIG9mIGR1bW15DQotKiBAc2VlIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdA0KLSovDQotI2RlZmluZSBMVlZFX1RYX0RVTU1ZX01BWCAoMTI3KQ0KLQ0KLS8qKg0KLSogRW51bSB0eXBlIGZvciBMVlZJREhlYWRlcl9NZXNzYWdlSURfZW4NCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZWRV9SWF9QUkVTRVQgPSAwLCAvLy88IFZJRCBoZWFkZXIgTWVzc2FnZSBJRCBmb3IgTFZWRV9SeCBwcmVzZXRzDQotICAgIExWVkVfVFhfUFJFU0VUID0gMSwgLy8vPCBWSUQgaGVhZGVyIE1lc3NhZ2UgSUQgZm9yIExWVkVfVHggUHJlc2V0cw0KLSAgICBMVlZJREhFQURFUl9NRVNTQUdFSURfRU5fRFVNTVkgPSBMVk1fTUFYRU5VTQ0KLX0gTFZWSURIZWFkZXJfTWVzc2FnZUlEX2VuOw0KLQ0KLS8qKg0KLSogRW51bSB0eXBlIGZvciBMVlZJREhlYWRlcl9SZXR1cm5TdGF0dXNfZW4NCi0qLw0KLXR5cGVkZWYgZW51bQ0KLXsNCi0gICAgTFZWSURIRUFERVJfTlVMTEFERFJFU1MgPSAwLCAvLy88IExWVklESGVhZGVyIG1vZHVsZSByZXR1cm5zIE5VTEwgYWRkcmVzcyBlcnJvcg0KLSAgICBMVlZJREhFQURFUl9TVUNDRVNTID0gMSwgLy8vPCBMVlZJREhlYWRlciBtb2R1bGUgcmV0dXJucyB3aXRoIHN1Y2Nlc3MNCi0gICAgTFZWSURIRUFERVJfUkVUVVJOU1RBVFVTX0VOX0RVTU1ZID0gTFZNX01BWEVOVU0NCi19IExWVklESGVhZGVyX1JldHVyblN0YXR1c19lbjsNCi0NCi0vKioNCi0qIEVudW0gdHlwZSBmb3IgTFZWRV9SeF9Nb2RlX2VuDQotKi8NCi10eXBlZGVmIGVudW0NCi17DQotICAgIExWVkVfUlhfTU9ERV9PRkYgPSAwLCAvLy88IFJ4IHZvaWNlIGVuZ2luZSBpcyB0dXJuZWQgb2ZmDQotICAgIExWVkVfUlhfTU9ERV9PTiA9IDEsIC8vLzwgUnggdm9pY2UgaW4gd2lsbCBydW4NCi0gICAgTFZWRV9SWF9NT0RFX0JZUEFTUyA9IDIsIC8vLzwgUnggdm9pY2UgZW5naW5lIHdpbGwgcnVuIGJ1dCBvdXRwdXQgd2lsbCBiZSBpZ25vcmVkDQotICAgIExWVkVfUlhfTU9ERV9FTl9EVU1NWSA9IExWTV9NQVhFTlVNDQotfSBMVlZFX1J4X01vZGVfZW47DQotDQotLyoqDQotKiBFbnVtIHR5cGUgZm9yIExWVkVfVHhfTW9kZV9lbg0KLSovDQotdHlwZWRlZiBlbnVtDQotew0KLSAgICBMVlZFX1RYX01PREVfT0ZGID0gMCwgLy8vPCBUeCBpbiBMVlZFIGVuZ2luZSBpcyBkaXNhYmxlZA0KLSAgICBMVlZFX1RYX01PREVfT04gPSAxLCAvLy88IFRYIGluIExWVkUgaXMgZW5hYmxlZA0KLSAgICBMVlZFX1RYX01PREVfQllQQVNTX01JQzAgPSAyLCAvLy88IFRYIGluIExWVkUgZW5naW5lIHdpbGwgcnVuIGJ1dCBvdXRwdXQgd2lsbCBiZSBNaWMwIHNpZ25hbA0KLSAgICBMVlZFX1RYX01PREVfQllQQVNTX01JQzEgPSAzLCAvLy88IFR4IGluIExWVkUgZW5naW5lIHdpbGwgcnVuIGJ1dCBvdXRwdXQgd2lsbCBiZSBNaWMxIHNpZ25hbA0KLSAgICBMVlZFX1RYX01PREVfQllQQVNTX1JFRiA9IDQsIC8vLzwgVHggaW4gTFZWRSBlbmdpbmUgd2lsbCBydW4gYnV0IG91dHB1dCB3aWxsIGJlIFJlZiBzaWduYWwNCi0gICAgTFZWRV9UWF9NT0RFX0VOX0RVTU1ZID0gTFZNX01BWEVOVU0NCi19IExWVkVfVHhfTW9kZV9lbjsNCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgU3RydWN0dXJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vKioNCi0qIFRoZSBzdGF0dXMgcGFyYW1ldGVycyBhcmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBtb2R1bGUuDQotKiBAc2VlIExWVkNfR2V0U3RhdHVzUGFyYW1ldGVycw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUaGUgaW50ZXJuYWwgZ2FpbiBzZXR0aW5nIHVzZWQgYnkgVm9pY2VDbGFyaXR5Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19HQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19HQUlOX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBHYWluOyAgICAgICAgICAvLy88IEdhaW4NCi0NCi0gICAgLyoqDQotICAgIDAgKG5vIGRldGVjdGlvbikgb3IgMSAoZGV0ZWN0aW9uKS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX1NQREVURUNURURfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX1NQREVURUNURURfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19TUERFVEVDVEVEX01BWCAoMSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgU3BEZXRlY3RlZDsgICAgICAgICAgLy8vPCBUaGUgc3BlZWNoIGRldGVjdG9yIGZsYWcuDQotDQotfSBMVlZDX1N0YXR1c1BhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBzdGF0dXMgcGFyYW1ldGVycyBhcmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBtb2R1bGUuDQotKiBAc2VlIExWV01fR2V0U3RhdHVzUGFyYW1ldGVycw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUaGUgaW50ZXJuYWwgZ2FpbiBzZXR0aW5nIHVzZWQgYnkgV2hpc3Blck1vZGUgaW4gZEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjYuOTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9HQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfR0FJTl9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9HQUlOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9HYWluOyAgICAgICAgICAvLy88IGdhaW4gKGRCKQ0KLQ0KLX0gTFZXTV9TdGF0dXNQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgc3RhdHVzIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLg0KLSogQHNlZSBMVlZFX1J4X0dldFN0YXR1c1BhcmFtZXRlcnMNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgVm9pY2UgQ2xhcml0eSBTdGF0dXMgUGFyYW1ldGVyIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZWQ19TdGF0dXNQYXJhbXNfc3QgVkNfU3RhdHVzUGFyYW1zOyAgICAgICAgICAvLy88IFZvaWNlIENsYXJpdHkgU3RhdHVzIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi0NCi0gICAgLyoqDQotICAgIFdoaXNwZXIgTW9kZSBTdGF0dXMgUGFyYW1ldGVyIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZXTV9TdGF0dXNQYXJhbXNfc3QgV01fU3RhdHVzUGFyYW1zOyAgICAgICAgICAvLy88IFdoaXNwZXIgTW9kZSBTdGF0dXMgUGFyYW1ldGVyIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgRHVtbXkgUGFyYW0uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuNzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX0RVTU1ZX01JTiAoLTEyOCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9SWF9EVU1NWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX0RVTU1ZX01BWCAoMTI3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQ4IGR1bW15OyAgICAgICAgICAvLy88IER1bW15IFBhcmFtDQotDQotfSBMVlZFX1J4X1N0YXR1c1BhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBzdGF0dXMgcGFyYW1ldGVycyBhcmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBtb2R1bGUuDQotKiBAc2VlIExWTlZfR2V0U3RhdHVzUGFyYW1ldGVycw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBCaXQgbWFzayBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIExWTlYsIHVzZWQgZm9yIGRlYnVnZ2luZy4NCi0gICAgKi8NCi0gICAgTFZOVl9TdGF0dXNXb3JkX2JtIHN0YXR1czsgICAgICAgICAgLy8vPCBjdXJyZW50IHN0YXRlDQotDQotICAgIC8qKg0KLSAgICBUbyBrZWVwIGNvcnJlY3QgbWVtb3J5IGFsaWdubWVudC4gVG8gYmUgcmVtb3ZlZCB3aGVuIExWTlZfU3RhdHVzV29yZF9ibSBoYXMNCi0gICAgYmVjb21lIGludDMyIGFzIGl0IHNob3VsZC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0RVTU1ZX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9EVU1NWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0RVTU1ZX01BWCAoMCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRHVtbXk7ICAgICAgICAgIC8vLzwgRHVtbXkgZm9yIG1lbW9yeSBhbGlnbm1lbnQuDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHByaW1hcnkgbG93LWJhbmQgKDAtNGtIeikgTkxNUyBmaWx0ZXINCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MS4zMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMF9MQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzBfTEJfQ09FRkZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMwX0xCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDMyKiBwTkxNUzBfTEJfQ29lZmZzOyAgICAgICAgICAvLy88IE5MTVMwIGxvd2JhbmQgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBwcmltYXJ5IGhpZ2gtYmFuZCAoNC04a0h6KSBOTE1TIGZpbHRlcg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjMwPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMwX0hCX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMF9IQl9DT0VGRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzBfSEJfQ09FRkZTX01BWCAoMjE0NzQ4MzY0Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMzIqIHBOTE1TMF9IQl9Db2VmZnM7ICAgICAgICAgIC8vLzwgTkxNUzAgaGlnaGJhbmQgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBzZWNvbmRhcnkgbG93LWJhbmQgKDAtNGtIeikgTkxNUyBmaWx0ZXINCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MS4zMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMV9MQl9DT0VGRlNfTUlOICgtMjE0NzQ4MzY0OCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzFfTEJfQ09FRkZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMxX0xCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDMyKiBwTkxNUzFfTEJfQ29lZmZzOyAgICAgICAgICAvLy88IE5MTVMxIGxvd2JhbmQgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBzZWNvbmRhcnkgaGlnaC1iYW5kICg0LThrSHopIE5MTVMgZmlsdGVyDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMzA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QTkxNUzFfSEJfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE5MTVMxX0hCX0NPRUZGU19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BOTE1TMV9IQl9DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQzMiogcE5MTVMxX0hCX0NvZWZmczsgICAgICAgICAgLy8vPCBOTE1TMSBoaWdoYmFuZCBmaWx0ZXIgY29lZmZpY2llbnRzDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEZTQjAgYW5kIEZTQjEgZmlsdGVycw0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BGU0JfQ09FRkZTX01JTiAoLTIxNDc0ODM2NDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUEZTQl9DT0VGRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QRlNCX0NPRUZGU19NQVggKDIxNDc0ODM2NDcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDMyKiBwRlNCX0NvZWZmczsgICAgICAgICAgLy8vPCBGU0IwIGFuZCBGU0IxIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBHU0MgZmlsdGVyDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMzA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QR1NDX0NPRUZGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BHU0NfQ09FRkZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUEdTQ19DT0VGRlNfTUFYICgyMTQ3NDgzNjQ3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQzMiogcEdTQ19Db2VmZnM7ICAgICAgICAgIC8vLzwgR1NDIGNvZWZmaWNpZW50cw0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgTWljUG93U3AgZGV0ZWN0aW9uIGZsYWcNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BNSUNQT1dTUF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE1JQ1BPV1NQX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUE1JQ1BPV1NQX01BWCAoMSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYqIHBNaWNQb3dTcDsgICAgICAgICAgLy8vPCBNaWNQb3cgU3BlZWNoIGRldGVjdGlvbiBmbGFnDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBvZiBDYWxpYnJhdGlvbiBmYWN0b3INCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDQUxGQUNUT1JfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDQUxGQUNUT1JfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQ0FMRkFDVE9SX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2KiBwQ2FsRmFjdG9yOyAgICAgICAgICAvLy88IENhbGlicmF0aW9uIGZhY3RvciB2YWx1ZQ0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgdmFyaWFibGUgb2YgQ2FsaWJyYXRpb24gcmVhZHkNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDQUxSRUFEWV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENBTFJFQURZX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENBTFJFQURZX01BWCAoMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYqIHBDYWxSZWFkeTsgICAgICAgICAgLy8vPCBDYWxpYnJhdGlvbiByZWFkeSB2YWx1ZQ0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgaW50ZXItY2hhbm5lbCBjb3JyZWxhdGlvbiB2YWx1ZSB1c2VkIGluIGJyb2Fkc2lkZSBkZXRlY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQlJPQURTSURFX0lOVEVSQ0NfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BCUk9BRFNJREVfSU5URVJDQ19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiogcEJyb2Fkc2lkZV9pbnRlckNDOyAgICAgICAgICAvLy88IEJyb2Fkc2lkZSBjb3JyZWxhdGlvbg0KLQ0KLX0gTFZOVl9TdGF0dXNQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgc3RhdHVzIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLg0KLSogQHNlZSBMVkhGX0dldFN0YXR1c1BhcmFtZXRlcnMNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgQ3VycmVudCB2YWx1ZSBvZiB0aGUgZWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjUuMTA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9HQU1NQUVfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0dBTU1BRV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0dBTU1BRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBnYW1tYWU7ICAgICAgICAgIC8vLzwgbXVsdGlwbGljYXRvciBmYWN0b3Igb2YgZWNobyBzdXBwcmVzc2lvbg0KLQ0KLSAgICAvKioNCi0gICAgQml0IG1hc2sgZGVzY3JpYmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBMVkhGLCB1c2VkIGZvciBkZWJ1Z2dpbmcuDQotICAgICovDQotICAgIExWSEZfU3RhdHVzV29yZF9ibSBzdGF0dXM7ICAgICAgICAgIC8vLzwgY3VycmVudCBzdGF0ZQ0KLQ0KLSAgICAvKioNCi0gICAgUG9pbnRlciB0byB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBMQiBOTE1TLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjMwPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUE5MTVNfTEJfQ09FRlNfTUlOICgtMjE0NzQ4MzY0OCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QTkxNU19MQl9DT0VGU19ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BOTE1TX0xCX0NPRUZTX01BWCAoMjE0NzQ4MzY0Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMzIqIHBOTE1TX0xCX0NvZWZzOyAgICAgICAgICAvLy88IE5MTVMgbG93YmFuZCBmaWx0ZXIgY29lZmZpY2llbnRzDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIEhCIE5MTVMuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuMzA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QTkxNU19IQl9DT0VGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BOTE1TX0hCX0NPRUZTX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUE5MTVNfSEJfQ09FRlNfTUFYICgyMTQ3NDgzNjQ3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQzMiogcE5MTVNfSEJfQ29lZnM7ICAgICAgICAgIC8vLzwgTkxNUyBoaWdoYmFuZCBmaWx0ZXIgY29lZmZpY2llbnRzDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIFBDRCBOTE1TLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjMwPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUFBDRF9DT0VGU19NSU4gKC0yMTQ3NDgzNjQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BQQ0RfQ09FRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QUENEX0NPRUZTX01BWCAoMjE0NzQ4MzY0Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMzIqIHBQQ0RfQ29lZnM7ICAgICAgICAgIC8vLzwgUENEIE5MTVMgZmlsdGVyIGNvZWZmaWNpZW50cw0KLQ0KLX0gTFZIRl9TdGF0dXNQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgc3RhdHVzIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlLg0KLSogQHNlZSBMVlZFX1R4X0dldFN0YXR1c1BhcmFtZXRlcnMNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgSGFuZHNGcmVlIFN0YXR1cyBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVkhGX1N0YXR1c1BhcmFtc19zdCBIRl9TdGF0dXNQYXJhbXM7ICAgICAgICAgIC8vLzwgSGFuZHNGcmVlIFN0YXR1cyBQYXJhbWV0ZXJzIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgTm9pc2VWb2lkIFN0YXR1cyBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVk5WX1N0YXR1c1BhcmFtc19zdCBOVl9TdGF0dXNQYXJhbXM7ICAgICAgICAgIC8vLzwgTm9pc2VWb2lkIFN0YXR1cyBQYXJhbWV0ZXJzIFN0cnVjdHJ1ZQ0KLQ0KLSAgICAvKioNCi0gICAgRHVtbXkgUGFyYW0uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjEuNzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0RVTU1ZX01JTiAoLTEyOCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9EVU1NWV9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0RVTU1ZX01BWCAoMTI3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQ4IGR1bW15OyAgICAgICAgICAvLy88IER1bW15IFBhcmFtDQotDQotfSBMVlZFX1R4X1N0YXR1c1BhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVlZJREhlYWRlcl9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZWSURIZWFkZXJfUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWVklESGVhZGVyX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWVklESGVhZGVyX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgVGhpcyBudW1iZXIgYWx3YXlzIGluY3JlbWVudHMgYnkgb25lIHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIHRoZSBoZWFkZXIgZm9ybWF0Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD44LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0hFQURFUlZFUlNJT05fREVGQVVMVCAoMyk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfSEVBREVSVkVSU0lPTl9NQVggKDI1NSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDggSGVhZGVyVmVyc2lvbjsgICAgICAgICAgLy8vPCBIZWFkZXIgRm9ybWF0IFZlcnNpb24NCi0NCi0gICAgLyoqDQotICAgIEluaXRpYWxseSBUaGlzIHZhcmlhYmxlIGhvbGRzIHZhbHVlIG9mIHRoZSBiYXNlbGluZSB2ZXJzaW9uLiBUaGUgdmFsdWUgaXMgaW4NCi0gICAgZm9ybWF0IG9mIHh4eXl6enBwIHdoZXJlIHh4IGlzIG1ham9yIG51bWJlciBvZiB0aGUgbGlicmFyeSwgeXkgaXMgbWlub3IgbnVtYmVyLA0KLSAgICB6eiBpcyBzZWNvbmQgbWlub3IgbnVtYmVyIGFuZCBwcCBpcyBwYXRjaCBudW1iZXIgb2YgdGhlIGJhc2VsaW5lLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4zMi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0JBU0VMSU5FVkVSU0lPTl9NSU4gKDEpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX0JBU0VMSU5FVkVSU0lPTl9ERUZBVUxUICg1MTkwNjgxNik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfQkFTRUxJTkVWRVJTSU9OX01BWCAoNDI5NDk2NzI5NSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDMyIEJhc2VsaW5lVmVyc2lvbjsgICAgICAgICAgLy8vPCBUaGlzIGlzIExWVkUgdGFnZ2VkIHZlcnNpb24gbmFtZQ0KLQ0KLSAgICAvKioNCi0gICAgRmlyc3QgTFZWRV9SeCBhbGdvcml0aG0gbWFzayB3aGljaCBob2xkcyBpbmZvcm1hdGlvbiBvZiB3aGljaCBMVlZFX1J4DQotICAgIGFsZ29yaXRobXMgYXJlIHByZXNlbnQuDQotICAgICovDQotICAgIExWVklESGVhZGVyX0xWVkVfUnhfTWFzazFfYm0gTFZWRV9SeF9BbGdvTWFzazE7ICAgICAgICAgIC8vLzwgVGhpcyB2YXJpYWJsZSBmb3JtcyBmaXJzdCBwYXJ0IG9mIExWVkVfUnggYWxnb3JpdGhtIG1hc2sNCi0NCi0gICAgLyoqDQotICAgIFNlY29uZCBMVlZFX1J4IGFsZ29yaXRobSBtYXNrIHdoaWNoIGhvbGRzIGluZm9ybWF0aW9uIG9mIHdoaWNoIExWVkVfUngNCi0gICAgYWxnb3JpdGhtcyBhcmUgcHJlc2VudC4NCi0gICAgKi8NCi0gICAgTFZWSURIZWFkZXJfTFZWRV9SeF9NYXNrMl9ibSBMVlZFX1J4X0FsZ29NYXNrMjsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIHNlY29uZCBwYXJ0IG9mIExWVkVfUnggYWxnb3JpdGhtIG1hc2sNCi0NCi0gICAgLyoqDQotICAgIEZpcnN0IExWVkVfVHggYWxnb3JpdGhtIG1hc2sgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb24gb2Ygd2hpY2ggTFZWRV9UeA0KLSAgICBhbGdvcml0aG1zIGFyZSBwcmVzZW50Lg0KLSAgICAqLw0KLSAgICBMVlZJREhlYWRlcl9MVlZFX1R4X01hc2sxX2JtIExWVkVfVHhfQWxnb01hc2sxOyAgICAgICAgICAvLy88IFRoaXMgdmFyaWFibGUgZm9ybXMgZmlyc3QgcGFydCBvZiBMVlZFX1R4IG1hc2sNCi0NCi0gICAgLyoqDQotICAgIFNlY29uZCBMVlZFX1R4IGFsZ29yaXRobSBtYXNrIHdoaWNoIGhvbGRzIGluZm9ybWF0aW9uIG9mIHdoaWNoIExWVkVfVHgNCi0gICAgYWxnb3JpdGhtcyBhcmUgcHJlc2VudC4NCi0gICAgKi8NCi0gICAgTFZWSURIZWFkZXJfTFZWRV9UeF9NYXNrMl9ibSBMVlZFX1R4X0FsZ29NYXNrMjsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIHNlY29uZCBwYXJ0IG9mIExWVkVfVHggbWFzaw0KLQ0KLSAgICAvKioNCi0gICAgRmlyc3QgTFZWRSBjb25maWd1cmF0aW9uIG1hc2sgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb24gb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMNCi0gICAgb2YgTFZWRV9UeCBhbmQgTFZWRV9SeCBhbGdvcml0aG0gYXJlIHByZXNlbnQuDQotICAgICovDQotICAgIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2sxX2JtIExWVkVfQ29uZmlnX0FsZ29NYXNrMTsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIGZpcnN0IHBhcnQgb2YgY29tbW9uIExWVkVfVHggYW5kIExWVkVfUnggY29uZmlndXJhdGlvbiBtYXNrDQotDQotICAgIC8qKg0KLSAgICBTZWNvbmQgTFZWRSBjb25maWd1cmF0aW9uIG1hc2sgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb24gb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMNCi0gICAgb2YgTFZWRV9UeCBhbmQgTFZWRV9SeCBhbGdvcml0aG0gYXJlIHByZXNlbnQuDQotICAgICovDQotICAgIExWVklESGVhZGVyX0NvbmZpZ3VyYXRpb25zX01hc2syX2JtIExWVkVfQ29uZmlnX0FsZ29NYXNrMjsgICAgICAgICAgLy8vPCBUaGlzIHZhcmlhYmxlIGZvcm1zIHNlY29uZCBwYXJ0IG9mIGNvbW1vbiBMVlZFX1R4IGFuZCBMVlZFX1J4IGNvbmZpZ3VyYXRpb24gbWFzaw0KLQ0KLSAgICAvKioNCi0gICAgTWVzc2dlIElEIGlzIHVzZWQgdG8gaWRlbnRpZnkgc3RyZWFtDQotICAgICovDQotICAgIExWVklESGVhZGVyX01lc3NhZ2VJRF9lbiBNZXNzYWdlSUQ7ICAgICAgICAgIC8vLzwgVGhpcyBwYXJhbSBob2xkcyBtZXNzYWdlIElEIG9mIHRoZSBidWZmZXINCi0NCi0gICAgLyoqDQotICAgIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgc2FtcGxlIHJhdGUgaW5mb3JtYXRpb24gb2YgdGhlIGJ1ZmZlci4NCi0gICAgKi8NCi0gICAgTFZNX0ZzX2VuIFNhbXBsZVJhdGU7ICAgICAgICAgIC8vLzwgU2FtcGxlIHJhdGUgaW5mb3JtYXRpb24gb2YgdGhlIGJ1ZmZlci4NCi0NCi0gICAgLyoqDQotICAgIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgdm9sdW1lIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN1YnNlcXVlbnQgZGF0YS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OC4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVklESEVBREVSX1ZPTFVNRUlOREVYX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfVk9MVU1FSU5ERVhfTUFYICgyNTUpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQ4IFZvbHVtZUluZGV4OyAgICAgICAgICAvLy88IFZvbHVtZSBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdWJzZXF1ZW50IGRhdGEuDQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgaG93IG1hbnkgdm9sdW1lcyBhcmUgcHJlc2VudCBpbiB0aGUgYmluYXJ5IGZpbGUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjguMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9OVU1WT0xVTUVTX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWSURIRUFERVJfTlVNVk9MVU1FU19ERUZBVUxUICgxKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZJREhFQURFUl9OVU1WT0xVTUVTX01BWCAoMjU1KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UOCBOdW1Wb2x1bWVzOyAgICAgICAgICAvLy88IE51bWJlciBvZiB2b2x1bWVzIHByZXNlbnQgaW4gdGhlIGJpbmFyeSBmaWxlLg0KLQ0KLX0gTFZWSURIZWFkZXJfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVlZDX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVlZDX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVlZDX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWVkNfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBDb250cm9sIHRoZSBvcGVyYXRpbmcgbW9kZSAoT04vT0ZGKSBvZiB0aGUgYWxnb3JpdGhtLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBPcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBUaGUgbW9kZSB3b3JkIHRvIGVuYWJsZS9kaXNhYmxlIGludGVybmFsIGFsZ29yaXRobSBibG9ja3Mgb2YgVm9pY2VDbGFyaXR5Lg0KLSAgICAqLw0KLSAgICBMVlZDX01vZGVXb3JkX2JtIG1vZGU7ICAgICAgICAgIC8vLzwgTW9kZSB3b3JkDQotDQotICAgIC8qKg0KLSAgICBNYXhpbXVtIEdhaW4gYXBwbGllZCB0byB0aGUgc2lnbmFsLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19HQUlOX0xJTl9NQVhfTUlOICg1MTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfR0FJTl9MSU5fTUFYX0RFRkFVTFQgKDEyODYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfR0FJTl9MSU5fTUFYX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEdhaW5fTGluX01heDsgICAgICAgICAgLy8vPCBNYXhpbXVtIEdhaW4uDQotDQotICAgIC8qKg0KLSAgICBUaGUgTm9pc2VfU2Vuc2l0aXZpdHkgcGFyYW1ldGVyIHNldHMgaG93IHNlbnNpdGl2ZSBWb2ljZUNsYXJpdHkgd2lsbCBiZSB0byB0aGUNCi0gICAgYmFja2dyb3VuZCBub2lzZSBsZXZlbC4gVGhlIE5vaXNlX1NlbnNpdGl2aXR5IHBhcmFtZXRlciBhbGxvd3MgYWRqdXN0aW5nIHRoZQ0KLSAgICBzZW5zaXRpdml0eSBvZiB0aG9zZSBwcm9jZXNzaW5nIGJsb2NrcyB0byB0aGUgbmVhcmVuZCBub2lzZSBsZXZlbC4gRm9yIGhpZ2gNCi0gICAgdmFsdWVzIG9mIHRoZSBOb2lzZV9TZW5zaXRpdml0eSB0aGUgZWZmZWN0IG9mIHRoZSBtZW50aW9uZWQgcHJvY2Vzc2luZyBibG9ja3MNCi0gICAgd2lsbCBiZSBiaWcsIGV2ZW4gYXQgbG93IHRvIG1vZGVyYXRlIG5lYXJlbmQgbm9pc2UgbGV2ZWxzLiBGb3IgbG93IHZhbHVlcyBvZg0KLSAgICB0aGUgTm9pc2VfU2Vuc2l0aXZpdHkgdGhlIGVmZmVjdCBvZiB0aGUgcHJvY2Vzc2luZyBibG9ja3Mgd2lsbCBiZSBzbWFsbGVyLCBldmVuDQotICAgIGZvciBoaWdoIG5lYXJlbmQgbm9pc2UgbGV2ZWxzLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfTk9JU0VfU0VOU0lUSVZJVFlfTUlOICgtNjcwOSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9ERUZBVUxUICgyMDAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19OT0lTRV9TRU5TSVRJVklUWV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOb2lzZV9TZW5zaXRpdml0eTsgICAgICAgICAgLy8vPCBOb2lzZSBTZW5zaXRpdml0eS4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBkZXNpcmVkIG91dHB1dCBsZXZlbCBvZiB0aGUgQUdDLiA8YnI+DQotICAgIEFWTF9UYXJnZXRfbGV2ZWxfbGluID0gXGYkMzI3NjcqMTBee1RhcmdldF9MZXZlbF9kQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9UQVJHRVRfTEVWRUxfTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfVEFSR0VUX0xFVkVMX0xJTl9ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfVEFSR0VUX0xFVkVMX0xJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfVGFyZ2V0X2xldmVsX2xpbjsgICAgICAgICAgLy8vPCBUaGUgZGVzaXJlZCBvdXRwdXQgbGV2ZWwgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbWFsIGF0dGVudWF0aW9uIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX01pbkdhaW5MaW4gPSBcZiQ1MTIqMTBee01pbkdhaW5fZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjYuOTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9NSU5HQUlOTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfTUlOR0FJTkxJTl9ERUZBVUxUICgyNTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX01JTkdBSU5MSU5fTUFYICg1MTIpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9NaW5HYWluTGluOyAgICAgICAgICAvLy88IFRoZSBtYXhpbWFsIGF0dGVudWF0aW9uIG9mIHRoZSBBR0MuDQotDQotICAgIC8qKg0KLSAgICBUaGUgbWF4aW1hbCBnYWluIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX01heEdhaW5MaW4gPSBcZiQ1MTIqMTBee01heEdhaW5fZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjYuOTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9NQVhHQUlOTElOX01JTiAoNTEyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9NQVhHQUlOTElOX0RFRkFVTFQgKDgxOTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX01BWEdBSU5MSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX01heEdhaW5MaW47ICAgICAgICAgIC8vLzwgVGhlIG1heGltYWwgZ2FpbiBvZiB0aGUgQUdDLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIG5vbWluYWwgZ2FpbiBvZiB0aGUgQUdDLjxicj4NCi0gICAgQVZMX05vbWluYWxHYWluID0gXGYkNTEyKjEwXntOb21pbmFsR2Fpbl9kQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ni45PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX05PTUlOQUxHQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfTk9NSU5BTEdBSU5fREVGQVVMVCAoNTEyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9OT01JTkFMR0FJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfTm9taW5hbEdhaW47ICAgICAgICAgIC8vLzwgVGhlIG5vbWluYWwgZ2FpbiBvZiB0aGUgQUdDLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGdhaW4gb2YgdGhlIEFHQyBpcyBzbW9vdGhlZCBhY3Jvc3MgdGltZS4gVGhlIHRpbWUgY29uc3RhbnQgb2YgdGhlIHNtb290aGluZw0KLSAgICBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nLiBXaGVuIGEgc3VkZGVuIGxvdWQNCi0gICAgc2lnbmFsIGlzIGVuY291bnRlcmVkIChlLmcuIGF0dGFjayBvZiBzcGVlY2gpLCB0aGUgYXR0YWNrIHRpbWUgaXMgdXNlZC4gV2hlbg0KLSAgICB0aGUgZ2FpbiBpcyBpbmNyZWFzaW5nIChlLmcuIGxvbmcgcGVyaW9kIG9mIHdoaXNwZXJlZCBzcGVlY2gpLCB0aGUgcmVsZWFzZSB0aW1lDQotICAgIGlzIHVzZWQuIDxicj4NCi0NCi0gICAgQVZMX0F0dGFjayA9IFxmJDMyNzY3KlxleHAoLTEvKDEwMCpBdHRhY2tUaW1lU2VjKSlcZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9BVFRBQ0tfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9BVFRBQ0tfREVGQVVMVCAoMTIwNTUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX0FUVEFDS19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfQXR0YWNrOyAgICAgICAgICAvLy88IFRoZSBhdHRhY2sgdGltZSBvZiB0aGUgQUdDLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGdhaW4gb2YgdGhlIEFHQyBpcyBzbW9vdGhlZCBhY3Jvc3MgdGltZS4gVGhlIHRpbWUgY29uc3RhbnQgb2YgdGhlIHNtb290aGluZw0KLSAgICBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nLiBXaGVuIGEgc3VkZGVuIGxvdWQNCi0gICAgc2lnbmFsIGlzIGVuY291bnRlcmVkIChlLmcuIGF0dGFjayBvZiBzcGVlY2gpLCB0aGUgYXR0YWNrIHRpbWUgaXMgdXNlZC4gV2hlbg0KLSAgICB0aGUgZ2FpbiBpcyBpbmNyZWFzaW5nIChlLmcuIGxvbmcgcGVyaW9kIG9mIHdoaXNwZXJlZCBzcGVlY2gpLCB0aGUgcmVsZWFzZSB0aW1lDQotICAgIGlzIHVzZWQuIDxicj4NCi0NCi0gICAgQVZMX1JlbGVhc2UgPSBcZiQzMjc2NypcZXhwKC0xLygxMDAqUmVsZWFzZVRpbWVTZWMpKVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX1JFTEVBU0VfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9SRUxFQVNFX0RFRkFVTFQgKDMyNjA0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9SRUxFQVNFX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9SZWxlYXNlOyAgICAgICAgICAvLy88IFRoZSByZWxlYXNlIHRpbWUgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSByZWxlYXNlIHRpbWUgYXQgbWF4aW11bSBub2lzZSBsZXZlbC48YnI+DQotDQotICAgIEFWTF9SZWxlYXNlTWF4ID0gXGYkMzI3NjcqXGV4cCgtMS8oMTAwKlJlbGVhc2VNYXhUaW1lU2VjKSlcZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZDX0FWTF9SRUxFQVNFTUFYX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfUkVMRUFTRU1BWF9ERUZBVUxUICgzMjQ0MSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfUkVMRUFTRU1BWF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfUmVsZWFzZU1heDsgICAgICAgICAgLy8vPCBUaGUgcmVsZWFzZSB0aW1lIGF0IG1heGltdW0gbm9pc2UgbGV2ZWwuDQotDQotICAgIC8qKg0KLSAgICBBVkxfTGltaXRfTWF4T3V0cHV0TGluID0gXGYkMzI3NjcqMTBee1RhcmdldExpbWl0ZXJMZXZlbGRCLzIwfVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX0xJTUlUX01BWE9VVFBVVExJTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfQVZMX0xJTUlUX01BWE9VVFBVVExJTl9ERUZBVUxUICgyMzE3MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19BVkxfTElNSVRfTUFYT1VUUFVUTElOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9MaW1pdF9NYXhPdXRwdXRMaW47ICAgICAgICAgIC8vLzwgVGhlIGxldmVsIHRvIHdoaWNoIHRoZSBzaWduYWwgd2lsbCBiZSBsaW1pdGVkLg0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGhpZ2hlciB0aGUgdmFsdWUgb2YgdGhlIHRocmVzaG9sZCwgdGhlIGxlc3Mgc3BlZWNoIGRldGVjdGlvbnMgd2lsbCBvY2N1ci4NCi0gICAgPGJyPg0KLSAgICBTcERldGVjdF9UaHJlc2hvbGQgPSBcZiQ1MTIgKiBbMCw2NF1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ni45PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkNfU1BERVRFQ1RfVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19TUERFVEVDVF9USFJFU0hPTERfREVGQVVMVCAoMTAyNCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWQ19TUERFVEVDVF9USFJFU0hPTERfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgU3BEZXRlY3RfVGhyZXNob2xkOyAgICAgICAgICAvLy88IFRoZSB0aHJlc2hvbGQgdXNlZCBpbiB0aGUgc3BlZWNoIGRldGVjdG9yIG9mIFZvaWNlQ2xhcml0eS4NCi0NCi19IExWVkNfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVkZFTlNfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWRkVOU19Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZGRU5TX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWRkVOU19Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE9wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgT3BlcmF0aW5nIE1vZGUNCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBub2lzZSBzdXBwcmVzc2lvbi4gPGJyPg0KLSAgICBVbml0OiBkQjxicj4NCi0gICAgRkVOU19saW1pdF9ucyA9IFxmJDMyNzY3KjEwXnstbWF4IG5vaXNlIHJlZHVjdGlvbltkQl0vMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZGRU5TX0ZFTlNfTElNSVRfTlNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkZFTlNfRkVOU19MSU1JVF9OU19ERUZBVUxUICgxMDk3Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZGRU5TX0ZFTlNfTElNSVRfTlNfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRkVOU19saW1pdF9OUzsgICAgICAgICAgLy8vPCBGRU5TIE5vaXNlIFN1cHByZXNzaW9uIExpbWl0DQotDQotICAgIC8qKg0KLSAgICBUaGUgbW9kZSB3b3JkIHRvIGNvbnRyb2wgdGhlIGludGVybmFsIG9wZXJhdGlvbiBvZiBGRU5TLg0KLSAgICAqLw0KLSAgICBMVkZFTlNfTW9kZVdvcmRfYm0gTW9kZTsgICAgICAgICAgLy8vPCBNb2RlIHdvcmQNCi0NCi19IExWRkVOU19Db250cm9sUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWV01fU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWV01fUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWV01fU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZXTV9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIENvbnRyb2wgdGhlIG9wZXJhdGluZyBtb2RlIChPTi9PRkYpIG9mIHRoZSBhbGdvcml0aG0uDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE9wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgT3BlcmF0aW5nIG1vZGUNCi0NCi0gICAgLyoqDQotICAgIFRoZSBtb2RlIHdvcmQgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJuYWwgYWxnb3JpdGhtIGJsb2NrcyBvZiBXaGlzcGVyTW9kZS4NCi0gICAgKi8NCi0gICAgTFZXTV9Nb2RlV29yZF9ibSBtb2RlOyAgICAgICAgICAvLy88IE1vZGUgd29yZA0KLQ0KLSAgICAvKioNCi0gICAgVGhlIGRlc2lyZWQgb3V0cHV0IGxldmVsIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX1RhcmdldF9sZXZlbF9saW4gPSBcZiQzMjc2NyoxMF57VGFyZ2V0TGV2ZWxkQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9UQVJHRVRfTEVWRUxfTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfVEFSR0VUX0xFVkVMX0xJTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBBVkxfVGFyZ2V0X2xldmVsX2xpbjsgICAgICAgICAgLy8vPCBUaGUgZGVzaXJlZCBvdXRwdXQgbGV2ZWwgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbWFsIGF0dGVudWF0aW9uIG9mIHRoZSBBR0MuIDxicj4NCi0gICAgQVZMX01pbkdhaW5MaW4gPSBcZiQ1MTIqMTBee01pbkdhaW5kQi8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ni45PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWV01fQVZMX01JTkdBSU5MSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9NSU5HQUlOTElOX0RFRkFVTFQgKDEyOCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTUlOR0FJTkxJTl9NQVggKDUxMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX01pbkdhaW5MaW47ICAgICAgICAgIC8vLzwgVGhlIG1heGltYWwgYXR0ZW51YXRpb24gb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBtYXhpbWFsIGdhaW4gb2YgdGhlIEFHQy4gPGJyPg0KLSAgICBBVkxfTWF4R2FpbkxpbiA9IFxmJDUxMioxMF57TWF4R2FpbmRCLzIwfVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTUFYR0FJTkxJTl9NSU4gKDUxMik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTUFYR0FJTkxJTl9ERUZBVUxUICg4MTg5KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9NQVhHQUlOTElOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9NYXhHYWluTGluOyAgICAgICAgICAvLy88IFRoZSBtYXhpbWFsIGdhaW4gb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBnYWluIG9mIHRoZSBBR0MgaXMgc21vb3RoZWQgYWNyb3NzIHRpbWUuIFRoZSB0aW1lIGNvbnN0YW50IG9mIHRoZSBzbW9vdGhpbmcNCi0gICAgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBnYWluIGlzIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZy4gV2hlbiBhIHN1ZGRlbiBsb3VkDQotICAgIHNpZ25hbCBpcyBlbmNvdW50ZXJlZCAoZS5nLiBhdHRhY2sgb2Ygc3BlZWNoKSwgdGhlIGF0dGFjayB0aW1lIGlzIHVzZWQuIFdoZW4NCi0gICAgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyAoZS5nLiBsb25nIHBlcmlvZCBvZiB3aGlzcGVyZWQgc3BlZWNoKSwgdGhlIHJlbGVhc2UgdGltZQ0KLSAgICBpcyB1c2VkLiA8YnI+DQotDQotICAgIEFWTF9BdHRhY2sgPSBcZiQzMjc2NypcZXhwKC0xLygxMDAqQXR0YWNrVGltZVNlYykpXGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfQVRUQUNLX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfQVRUQUNLX0RFRkFVTFQgKDI1NTIwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9BVFRBQ0tfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX0F0dGFjazsgICAgICAgICAgLy8vPCBUaGUgYXR0YWNrIHRpbWUgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIFRoZSBnYWluIG9mIHRoZSBBR0MgaXMgc21vb3RoZWQgYWNyb3NzIHRpbWUuIFRoZSB0aW1lIGNvbnN0YW50IG9mIHRoZSBzbW9vdGhpbmcNCi0gICAgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBnYWluIGlzIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZy4gV2hlbiBhIHN1ZGRlbiBsb3VkDQotICAgIHNpZ25hbCBpcyBlbmNvdW50ZXJlZCAoZS5nLiBhdHRhY2sgb2Ygc3BlZWNoKSwgdGhlIGF0dGFjayB0aW1lIGlzIHVzZWQuIFdoZW4NCi0gICAgdGhlIGdhaW4gaXMgaW5jcmVhc2luZyAoZS5nLiBsb25nIHBlcmlvZCBvZiB3aGlzcGVyZWQgc3BlZWNoKSwgdGhlIHJlbGVhc2UgdGltZQ0KLSAgICBpcyB1c2VkLiA8YnI+DQotDQotICAgIEFWTF9SZWxlYXNlID0gXGYkMzI3NjcqXGV4cCgtMS8oMTAwKlJlbGVhc1RpbWVTZWMpKVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWV01fQVZMX1JFTEVBU0VfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9SRUxFQVNFX0RFRkFVTFQgKDMyNjg1KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9SRUxFQVNFX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEFWTF9SZWxlYXNlOyAgICAgICAgICAvLy88IFRoZSByZWxlYXNlIHRpbWUgb2YgdGhlIEFHQy4NCi0NCi0gICAgLyoqDQotICAgIEFWTF9MaW1pdF9NYXhPdXRwdXRMaW4gPSBcZiQzMjc2NyoxMF57VGFyZ2V0TGltaXRlckxldmVsZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9BVkxfTElNSVRfTUFYT1VUUFVUTElOX0RFRkFVTFQgKDIzMTk3KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX0FWTF9MSU1JVF9NQVhPVVRQVVRMSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQVZMX0xpbWl0X01heE91dHB1dExpbjsgICAgICAgICAgLy8vPCBUaGUgbGV2ZWwgdG8gd2hpY2ggdGhlIHNpZ25hbCB3aWxsIGJlIGxpbWl0ZWQuDQotDQotICAgIC8qKg0KLSAgICBUaGUgaGlnaGVyIHRoZSB2YWx1ZSBvZiB0aGUgdGhyZXNob2xkLCB0aGUgbGVzcyBzcGVlY2ggZGV0ZWN0aW9ucyB3aWxsIG9jY3VyLg0KLSAgICA8YnI+DQotICAgIFNwRGV0ZWN0X1RocmVzaG9sZCA9IFxmJDUxMiAqIFswLDY0XVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD42Ljk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZXTV9TUERFVEVDVF9USFJFU0hPTERfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9ERUZBVUxUICg5MjE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVldNX1NQREVURUNUX1RIUkVTSE9MRF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBTcERldGVjdF9UaHJlc2hvbGQ7ICAgICAgICAgIC8vLzwgVGhlIHRocmVzaG9sZCB1c2VkIGluIHRoZSBzcGVlY2ggZGV0ZWN0b3Igb2YgV2hpc3Blck1vZGUuDQotDQotfSBMVldNX0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgY29udHJvbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG92ZXJhbGwgbW9kdWxlIGJlaGF2aW9yLiBUaGVzZSBwYXJhbWV0ZXJzIG1heQ0KLSogYmUgY2hhbmdlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZyB1c2luZyB0aGUgTFZEUkNfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWRFJDX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVkRSQ19TZXRDb250cm9sUGFyYW1ldGVycw0KLSogQHNlZSBMVkRSQ19Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIE9wZXJhdGluZyBtb2RlIGZvciBEUkMNCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBPcGVyYXRpbmcgbW9kZQ0KLQ0KLSAgICAvKioNCi0gICAgU2V0cyB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zIChrbmVlIHBvaW50cykgaW4gdGhlIGNvbXByZXNzb3IgY3VydmUNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19OVU1LTkVFU19NSU4gKDEpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX05VTUtORUVTX0RFRkFVTFQgKDUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX05VTUtORUVTX01BWCAoNSk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IE51bUtuZWVzOyAgICAgICAgICAvLy88IE51bWJlciBvZiBLbmVlIHBvaW50cyBpbiBjb21wcmVzc29yIGN1cnZlDQotDQotICAgIC8qKg0KLSAgICBBbiBhcnJheSBvZiBzaXplIDUobWF4aW11bSkgY29udGFpbmluZyB0aGUga25lZSBwb2ludHMgc3BlY2lmaWVkIGJ5IHRoZQ0KLSAgICBjb21wcmVzc2lvbiBjdXJ2ZSBpbiBkQkZzLiBUaGUgbnVtYmVyIG9mIGtuZWUgcG9pbnRzIGluIHVzZSBpcyBsaW1pdGVkIGJ5IHRoZQ0KLSAgICBOdW1LbmVlcyBwYXJhbWV0ZXIuIFRoIGlucHV0IGxldmVsIGZvciB0aGUgZmlyc3Qga25lZSBzaG91bGQgYmUgZXF1YWwgdG8gb3INCi0gICAgbGFyZ2VyIHRoYW4gLTk2ZEIsIGFuZCB0aGUgaW5wdXQgbGV2ZWwgZm9yIHRoZSBsYXN0IGtuZWUgc2hvdWxkIGJlIDBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19NSU4gKC05Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfREVGQVVMVCB7LTk2LC03MCwtNTAsIC0yNCwgMH08L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVsc1tMVkRSQ19DT01QUkVTU09SQ1VSVkVJTlBVVExFVkVMU19MRU5HVEhdOyAgICAgICAgICAvLy88IENvbXByZXNzb3IgQ3VydmUgSW5wdXQgTGV2ZWxzDQotDQotICAgIC8qKg0KLSAgICBBbiBhcnJheSBvZiBzaXplIDUobWF4aW11bSkgY29udGFpbmluZyB0aGUga25lZSBwb2ludHMgc3BlY2lmaWVkIGJ5IHRoZQ0KLSAgICBjb21wcmVzc2lvbiBjdXJ2ZSBpbiBkQkZzLiBUaGUgbnVtYmVyIG9mIGtuZWUgcG9pbnRzIGluIHVzZSBpcyBsaW1pdGVkIGJ5IHRoZQ0KLSAgICBOdW1LbmVlcyBwYXJhbWV0ZXIuIFRoZSBvdXRwdXQgbGV2ZWwgZm9yIHRoZSBmaXJzdCBrbmVlIHNob3VsZCBiZSBlcXVhbCB0byBvcg0KLSAgICBsYXJnZXIgdGhhbiAtOTZkQiwgYW5kIHRoZSBvdXRwdXQgbGV2ZWwgZm9yIHRoZSBsYXN0IGtuZWUgc2hvdWxkIGJlIGVxdWFsIHRvIG9yDQotICAgIHNtYWxsZXIgdGhhbiAwZEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQ09NUFJFU1NPUkNVUlZFT1VUUFVUTEVWRUxTX01JTiAoLTk2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfREVGQVVMVCB7LTk2LC03MCwtMzgsLTEyLDB9PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NQVggKDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IENvbXByZXNzb3JDdXJ2ZU91dHB1dExldmVsc1tMVkRSQ19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTEVOR1RIXTsgICAgICAgICAgLy8vPCBDb21wcmVzc29yIEN1cnZlIE91dHB1dCBMZXZlbHMNCi0NCi0gICAgLyoqDQotICAgIFRoZSBBdHRhY2tUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBpbmNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBBdHRhY2tUaW1lIGlzIHNwZWNpZmllZCBpbiBpbmNyZW1lbnRzIG9mIDEwMLVzDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfQVRUQUNLVElNRV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX0FUVEFDS1RJTUVfREVGQVVMVCAoNTApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX0FUVEFDS1RJTUVfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQXR0YWNrVGltZTsgICAgICAgICAgLy8vPCBBdHRhY2sgVGltZQ0KLQ0KLSAgICAvKioNCi0gICAgVGhlIFJlbGVhc2VUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBkZWNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBSZWxlYXNlVGltZSBpcyBzcGVjaWZpZWQgaW4gaW5jcmVtZW50cyBvZg0KLSAgICAxMDC1cy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19SRUxFQVNFVElNRV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRFJDX1JFTEVBU0VUSU1FX0RFRkFVTFQgKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19SRUxFQVNFVElNRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBSZWxlYXNlVGltZTsgICAgICAgICAgLy8vPCBSZWxlYXNlIFRpbWUNCi0NCi0gICAgLyoqDQotICAgIEVuYWJsZSBvciBEaXNhYmxlIGxpbWl0ZXIgd2l0aCBzb2Z0IGNsaXBwaW5nLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBMaW1pdGVyT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBFbmFibGUgb3IgRGlzYWJsZSBsaW1pdGVyIHdpdGggc29mdCBjbGlwcGluZw0KLQ0KLSAgICAvKioNCi0gICAgU2V0cyB0aGUgbGltaXQgbGV2ZWwgb2YgdGhlIGNvbXByZXNzb3IgaW4gZEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfTElNSVRMRVZFTF9NSU4gKC05Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZEUkNfTElNSVRMRVZFTF9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkRSQ19MSU1JVExFVkVMX01BWCAoMCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTGltaXRMZXZlbDsgICAgICAgICAgLy8vPCBTZXRzIHRoZSBsaW1pdCBsZXZlbCBvZiB0aGUgY29tcHJlc3NvciBpbiBkQg0KLQ0KLX0gTFZEUkNfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVk5HX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVk5HX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVk5HX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWTkdfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBPcGVyYXRpbmcgbW9kZSBmb3IgTm9pc2UgR2F0ZQ0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBPcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBTZXRzIHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMgKGtuZWUgcG9pbnRzKSBpbiB0aGUgY29tcHJlc3NvciBjdXJ2ZQ0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTkdfTlVNS05FRVNfTUlOICgxKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX05VTUtORUVTX0RFRkFVTFQgKDUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTkdfTlVNS05FRVNfTUFYICg1KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgTnVtS25lZXM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIEtuZWUgcG9pbnRzIGluIGNvbXByZXNzb3IgY3VydmUNCi0NCi0gICAgLyoqDQotICAgIEFuIGFycmF5IG9mIHNpemUgNShtYXhpbXVtKSBjb250YWluaW5nIHRoZSBrbmVlIHBvaW50cyBzcGVjaWZpZWQgYnkgdGhlDQotICAgIGNvbXByZXNzaW9uIGN1cnZlIGluIGRCRnMuIFRoZSBudW1iZXIgb2Yga25lZSBwb2ludHMgaW4gdXNlIGlzIGxpbWl0ZWQgYnkgdGhlDQotICAgIE51bUtuZWVzIHBhcmFtZXRlci4gVGhlIGlucHV0IGxldmVsIGZvciB0aGUgZmlyc3Qga25lZSBzaG91bGQgYmUgZXF1YWwgdG8gb3INCi0gICAgbGFyZ2VyIHRoYW4gLTk2ZEIsIGFuZCB0aGUgaW5wdXQgbGV2ZWwgZm9yIHRoZSBsYXN0IGtuZWUgc2hvdWxkIGJlIDBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX01JTiAoLTk2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0RFRkFVTFQgey04MCwtNzAsLTUwLCAtMjQsIDB9PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTkdfQ09NUFJFU1NPUkNVUlZFSU5QVVRMRVZFTFNfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBDb21wcmVzc29yQ3VydmVJbnB1dExldmVsc1tMVk5HX0NPTVBSRVNTT1JDVVJWRUlOUFVUTEVWRUxTX0xFTkdUSF07ICAgICAgICAgIC8vLzwgQ29tcHJlc3NvciBDdXJ2ZSBJbnB1dCBMZXZlbHMNCi0NCi0gICAgLyoqDQotICAgIEFuIGFycmF5IG9mIHNpemUgNShtYXhpbXVtKSBjb250YWluaW5nIHRoZSBrbmVlIHBvaW50cyBzcGVjaWZpZWQgYnkgdGhlDQotICAgIGNvbXByZXNzaW9uIGN1cnZlIGluIGRCRnMuIFRoZSBudW1iZXIgb2Yga25lZSBwb2ludHMgaW4gdXNlIGlzIGxpbWl0ZWQgYnkgdGhlDQotICAgIE51bUtuZWVzIHBhcmFtZXRlci4gVGhlIG91dHB1dCBsZXZlbCBmb3IgdGhlIGZpcnN0IGtuZWUgc2hvdWxkIGJlIGVxdWFsIHRvIG9yDQotICAgIGxhcmdlciB0aGFuIC05NmRCLCBhbmQgdGhlIG91dHB1dCBsZXZlbCBmb3IgdGhlIGxhc3Qga25lZSBzaG91bGQgYmUgZXF1YWwgdG8gb3INCi0gICAgc21hbGxlciB0aGFuIDBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0NPTVBSRVNTT1JDVVJWRU9VVFBVVExFVkVMU19NSU4gKC05Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfREVGQVVMVCB7LTk2LC04MCwtNTAsIC0yNCwgMH08L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBDb21wcmVzc29yQ3VydmVPdXRwdXRMZXZlbHNbTFZOR19DT01QUkVTU09SQ1VSVkVPVVRQVVRMRVZFTFNfTEVOR1RIXTsgICAgICAgICAgLy8vPCBDb21wcmVzc29yIEN1cnZlIE91dHB1dCBMZXZlbHMNCi0NCi0gICAgLyoqDQotICAgIFRoZSBBdHRhY2tUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBpbmNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBBdHRhY2tUaW1lIGlzIHNwZWNpZmllZCBpbiBpbmNyZW1lbnRzIG9mIDEwMLVzDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE1LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19BVFRBQ0tUSU1FX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19BVFRBQ0tUSU1FX0RFRkFVTFQgKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX0FUVEFDS1RJTUVfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgQXR0YWNrVGltZTsgICAgICAgICAgLy8vPCBBdHRhY2sgVGltZQ0KLQ0KLSAgICAvKioNCi0gICAgVGhlIFJlbGVhc2VUaW1lIHBhcmFtZXRlciBpcyB0aGUgdGltZSBjb25zdGFudCBjb250cm9sbGluZyB0aGUgcmF0ZSBvZiByZWFjdGlvbg0KLSAgICB0byBkZWNyZWFzZSBpbiBzaWduYWwgbGV2ZWwuIFRoZSBSZWxlYXNlVGltZSBpcyBzcGVjaWZpZWQgaW4gaW5jcmVtZW50cyBvZg0KLSAgICAxMDC1cy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5HX1JFTEVBU0VUSU1FX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19SRUxFQVNFVElNRV9ERUZBVUxUICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOR19SRUxFQVNFVElNRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBSZWxlYXNlVGltZTsgICAgICAgICAgLy8vPCBSZWxlYXNlIFRpbWUNCi0NCi19IExWTkdfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVk5MUFBfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWTkxQUF9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZOTFBQX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWTkxQUF9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIExpbWl0cyB0aGUgc2lnbmFsIGxldmVsIGNvbXBhcmVkIHRvIGRpZ2l0YWwgZnVsbCBzY2FsZSBpbiBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5MUFBfTkxQUF9MSU1JVF9NSU4gKC0yNCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOTFBQX05MUFBfTElNSVRfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOTFBQX05MUFBfTElNSVRfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTFBQX0xpbWl0OyAgICAgICAgICAvLy88IE5MUFAgTGltaXQNCi0NCi0gICAgLyoqDQotICAgIFNldHMgdGhlIC0zZEIgY29ybmVyIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaC1wYXNzIGZpbHRlciBpbiBIei4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9NSU4gKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5MUFBfTkxQUF9IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOTFBQX05MUFBfSFBGX0NPUk5FUkZSRVFfTUFYICgxMDAwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgTkxQUF9IUEZfQ29ybmVyRnJlcTsgICAgICAgICAgLy8vPCBOTFBQIEhQRiBDb3JuZXIgRnJlcXVlbmN5DQotDQotfSBMVk5MUFBfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVkVRX1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVkVRX1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVkVRX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWRVFfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBTZXRzIHRoZSBsZW5ndGggb2YgdGhlIEVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlLiBUaGlzIG11c3QgbmV2ZXIgYmUgbW9yZSB0aGFuDQotICAgIHRoZSB2YWx1ZSBvZiBFUV9NYXhMZW5ndGggc2V0IGF0IGluaXRpYWxpemF0aW9uIHRpbWUuIFRoZSBFUV9MZW5ndGggbXVzdCBiZSBhDQotICAgIG11bHRpcGxlIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZFUV9FUV9MRU5HVEhfTUlOICg4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkVRX0VRX0xFTkdUSF9ERUZBVUxUICgzMik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZFUV9FUV9MRU5HVEhfTUFYICgzMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IEVRX0xlbmd0aDsgICAgICAgICAgLy8vPCBFUSBUYXAgTGVuZ3RoDQotDQotICAgIC8qKg0KLSAgICBQb2ludGVyIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNhbXBsZXMgb2YgdGhlIEVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlLg0KLSAgICBUaGUgZm9ybWF0IG9mIHRoZSBhcnJheSBjb250ZW50IGlzIHNwZWNpZmllZCBiZWxvdy4gVGhlIHNhbXBsZXMgb2YgdGhlDQotICAgIEVxdWFsaXplciBpbXB1bHNlIHJlc3BvbnNlIG11c3QgYmUgaW4gUTMuMTIgZm9ybWF0Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4zLjEyPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRVFfRVFfQ09FRlNfTUlOICgtMzI3NjgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWRVFfRVFfQ09FRlNfREVGQVVMVCB7NDA5NiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwfTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkVRX0VRX0NPRUZTX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2ICpwRVFfQ29lZnM7ICAgICAgICAgIC8vLzwgRXF1YWxpemVyIGltcHVsc2UgcmVzcG9uc2UNCi0NCi19IExWRVFfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVlZPTF9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZWT0xfUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWVk9MX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWVk9MX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgVHVybnMgb24vb2ZmIFZPTF9HYWluLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBWT0xfT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBUdXJucyBvbi9vZmYgVk9MX0dhaW4NCi0NCi0gICAgLyoqDQotICAgIFRoZSB2b2x1bWUgY29udHJvbCBnYWluIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgb3ZlcmFsbCB2b2x1bWUgbGV2ZWwgb2YgdGhlDQotICAgIHNpZ25hbC4gVGhlIGdhaW4gaXMgc2V0IGluIGRCIHdpdGggc3RlcHMgb2YgMWRCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNS4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVk9MX1ZPTF9HQUlOX01JTiAoLTk2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZPTF9WT0xfR0FJTl9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZPTF9WT0xfR0FJTl9NQVggKDI0KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBWT0xfR2FpbjsgICAgICAgICAgLy8vPCBBcHBseSBHYWluIHRvIElucHV0IHNpZ25hbA0KLQ0KLX0gTFZWT0xfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVkhQRl9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZIUEZfUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWSFBGX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWSFBGX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgVHVybnMgb24vb2ZmIEhpZ2ggUGFzcyBmaWx0ZXIuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEhQRl9PcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFR1cm5zIG9uL29mZiBIaWdoIFBhc3MgZmlsdGVyDQotDQotICAgIC8qKg0KLSAgICBTZXRzIHRoZSAzZEIgY29ybmVyIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaC1wYXNzIGZpbHRlci4gSW4gY2FzZSBOb2lzZVZvaWQgaXMNCi0gICAgZW5hYmxlZCwgdGhlIHNhbWUgaGlnaC1wYXNzIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHNlY29uZCBtaWNyb3Bob25lDQotICAgIGNoYW5uZWwuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIUEZfSFBGX0NPUk5FUkZSRVFfTUlOICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIUEZfSFBGX0NPUk5FUkZSRVFfREVGQVVMVCAoNTApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSFBGX0hQRl9DT1JORVJGUkVRX01BWCAoMTUwMCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IEhQRl9Db3JuZXJGcmVxOyAgICAgICAgICAvLy88IEhpZ2ggUGFzcyBGaWx0ZXIgQ29ybmVyIEZyZXF1ZW5jeSBpbiBIeg0KLQ0KLX0gTFZIUEZfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVk1VVEVfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWTVVURV9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZNVVRFX1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWTVVURV9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgIFRoaXMgcGFyYW0gY2FuIG11dGUgdW5tdXRlIHRoZSBSeC9UeCBlbmdpbmUgb3V0cHV0Lg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBNdXRlOyAgICAgICAgICAvLy88IFRoaXMgcGFyYW0gY2FuIG11dGUgdW5tdXRlIHRoZSBSeC9UeCBlbmdpbmUgb3V0cHV0DQotDQotfSBMVk1VVEVfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVlZFX1J4X1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVlZFX1J4X1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVlZFX1J4X1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWVkVfUnhfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUaGlzIGVudW1lcmF0ZWQgdHlwZSBpcyB1c2VkIHRvIHNldCB0aGUgb3BlcmF0aW5nIG1vZGUgb2YgdGhlIFJ4IHBhdGguIFRoZQ0KLSAgICBwcm9jZXNzaW5nIGNhbiBiZSBzZXBhcmF0ZWx5IHNldCB0byBlbmFibGUgYWxsIHByb2Nlc3NpbmcgbW9kdWxlcyAoaS5lLiwgT04pLA0KLSAgICB0byBkaXNhYmxlIGFsbCBwcm9jZXNzaW5nIG1vZHVsZXMgKGkuZS4sIE9GRikgb3IgdG8gYnlwYXNzIGFsbCBwcm9jZXNzaW5nDQotICAgIG1vZHVsZXMgKGkuZS4sIEJZUEFTUykuIFdoZW4gYnlwYXNzZWQsIGFsbCBwcm9jZXNzaW5nIG1vZHVsZXMga2VlcCBvbiBydW5uaW5nLA0KLSAgICBidXQgdGhlaXIgb3V0cHV0IGlzIG5vdCB1c2VkLg0KLSAgICAqLw0KLSAgICBMVlZFX1J4X01vZGVfZW4gT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBUaGlzIHBhcmFtIGNvbnRyb2xzIHRoZSBvbi9vZmYgb2YgUlggdm9pY2UgZW5naW5lLg0KLQ0KLSAgICAvKioNCi0gICAgVGhpcyBwYXJhbSBjYW4gbXV0ZSB1bm11dGUgdGhlIFJ4L1R4IGVuZ2luZSBvdXRwdXQuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE11dGU7ICAgICAgICAgIC8vLzwgVGhpcyBwYXJhbSBjYW4gbXV0ZSB1bm11dGUgdGhlIFJ4L1R4IGVuZ2luZSBvdXRwdXQNCi0NCi0gICAgLyoqDQotICAgIFR1cm5zIG9uL29mZiBWT0xfR2Fpbi4NCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gVk9MX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgVHVybnMgb24vb2ZmIFZPTF9HYWluDQotDQotICAgIC8qKg0KLSAgICBUaGUgdm9sdW1lIGNvbnRyb2wgZ2FpbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG92ZXJhbGwgdm9sdW1lIGxldmVsIG9mIHRoZQ0KLSAgICBzaWduYWwuIFRoZSBnYWluIGlzIHNldCBpbiBkQiB3aXRoIHN0ZXBzIG9mIDFkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX1ZPTF9HQUlOX01JTiAoLTk2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1JYX1ZPTF9HQUlOX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfUlhfVk9MX0dBSU5fTUFYICgyNCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgVk9MX0dhaW47ICAgICAgICAgIC8vLzwgQXBwbHkgR2FpbiB0byBJbnB1dCBzaWduYWwNCi0NCi0gICAgLyoqDQotICAgIEZhciBFbmQgTm9pc2UgU3VwcHJlc3Npb24gQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVkZFTlNfQ29udHJvbFBhcmFtc19zdCBGRU5TX0NvbnRyb2xQYXJhbXM7ICAgICAgICAgIC8vLzwgRmFyIEVuZCBOb2lzZSBTdXBwcmVzc2lvbiBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi0NCi0gICAgLyoqDQotICAgIFR1cm5zIG9uL29mZiBOTFBQLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBOTFBQX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgVHVybnMgb24vb2ZmIE5MUFANCi0NCi0gICAgLyoqDQotICAgIE5MUFAgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVk5MUFBfQ29udHJvbFBhcmFtc19zdCBOTFBQX0NvbnRyb2xQYXJhbXM7ICAgICAgICAgIC8vLzwgTkxQUCBDb250cm9sIFBhcmFtZXRlciBTdHJ1Y3R1cmUNCi0NCi0gICAgLyoqDQotICAgIFZvaWNlIENsYXJpdHkgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVlZDX0NvbnRyb2xQYXJhbXNfc3QgVkNfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBWb2ljZSBDbGFyaXR5IENvbnRyb2wgUGFyYW1ldGVyIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgRXF1YWxpemVyIE9wZXJhdGluZyBtb2RlLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBFUV9PcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IEVxdWFsaXplciBPcGVyYXRpbmcgbW9kZQ0KLQ0KLSAgICAvKioNCi0gICAgRXF1YWxpemVyIENvbnRyb2wgUGFyYW1ldGVycyBTdHJ1Y3R1cmUuDQotICAgICovDQotICAgIExWRVFfQ29udHJvbFBhcmFtc19zdCBFUV9Db250cm9sUGFyYW1zOyAgICAgICAgICAvLy88IEVxdWFsaXplciBDb250cm9sIFBhcmFtZXRlcnMgU3RydWN0dXJlDQotDQotICAgIC8qKg0KLSAgICBEUkMgQ29udHJvbCBQYXJhbWV0ZXIgU3RyY3V0dXJlLg0KLSAgICAqLw0KLSAgICBMVkRSQ19Db250cm9sUGFyYW1zX3N0IERSQ19Db250cm9sUGFyYW1zOyAgICAgICAgICAvLy88IERSQyBDb250cm9sIFBhcmFtZXRlciBTdHJjdXR1cmUNCi0NCi0gICAgLyoqDQotICAgIFR1cm5zIG9uL29mZiBIaWdoIFBhc3MgZmlsdGVyLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBIUEZfT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBUdXJucyBvbi9vZmYgSGlnaCBQYXNzIGZpbHRlcg0KLQ0KLSAgICAvKioNCi0gICAgU2V0cyB0aGUgM2RCIGNvcm5lciBmcmVxdWVuY3kgb2YgdGhlIGhpZ2gtcGFzcyBmaWx0ZXIuIEluIGNhc2UgTm9pc2VWb2lkIGlzDQotICAgIGVuYWJsZWQsIHRoZSBzYW1lIGhpZ2gtcGFzcyBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBzZWNvbmQgbWljcm9waG9uZQ0KLSAgICBjaGFubmVsLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfUlhfSFBGX0NPUk5FUkZSRVFfTUlOICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9ERUZBVUxUICg1MCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9SWF9IUEZfQ09STkVSRlJFUV9NQVggKDE1MDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBIUEZfQ29ybmVyRnJlcTsgICAgICAgICAgLy8vPCBIaWdoIFBhc3MgRmlsdGVyIENvcm5lciBGcmVxdWVuY3kgaW4gSHoNCi0NCi0gICAgLyoqDQotICAgIFdoaXNwZXIgTW9kZSBDb250cm9sIFBhcmFtZXRlciBTdHJjdXR1cmUuDQotICAgICovDQotICAgIExWV01fQ29udHJvbFBhcmFtc19zdCBXTV9Db250cm9sUGFyYW1zOyAgICAgICAgICAvLy88IFdoaXNwZXIgTW9kZSBDb250cm9sIFBhcmFtZXRlciBTdHJjdXR1cmUNCi0NCi0gICAgLyoqDQotICAgIE5vaXNlIEdhdGUgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVk5HX0NvbnRyb2xQYXJhbXNfc3QgTkdfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBOb2lzZSBHYXRlIENvbnRyb2wgUGFyYW1ldGVyIFN0cnVjdHVyZQ0KLQ0KLX0gTFZWRV9SeF9Db250cm9sUGFyYW1zX3N0Ow0KLQ0KLS8qKg0KLSogVGhlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBvdmVyYWxsIG1vZHVsZSBiZWhhdmlvci4gVGhlc2UgcGFyYW1ldGVycyBtYXkNCi0qIGJlIGNoYW5nZWQgYXQgYW55IHRpbWUgZHVyaW5nIHByb2Nlc3NpbmcgdXNpbmcgdGhlIExWTlZfU2V0Q29udHJvbFBhcmFtZXRlcnMgZnVuY3Rpb24gYnV0IHRoZXkNCi0qIHdpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gdGhlIExWTlZfUHJvY2VzcyBmdW5jdGlvbi4NCi0qDQotKiBAc2VlIExWTlZfU2V0Q29udHJvbFBhcmFtZXRlcnMNCi0qIEBzZWUgTFZOVl9Qcm9jZXNzDQotKi8NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgLyoqDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIE9wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgT3BlcmF0aW5nIE1vZGUNCi0NCi0gICAgLyoqDQotICAgIFRoZSBtb2RlIHdvcmQgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJuYWwgYWxnb3JpdGhtIGJsb2NrcyBvZiBMVk5WLg0KLSAgICAqLw0KLSAgICBMVk5WX01vZGVXb3JkX2JtIE1vZGU7ICAgICAgICAgIC8vLzwgTW9kZSB3b3JkDQotDQotICAgIC8qKg0KLSAgICBUaGUgbW9kZTIgd29yZCB0byBhbGxvdyBzd2l0Y2hpbmcgb3IgY29tYmluaW5nIGRpZmZlcmVudCBibG9ja3MgaW5zaWRlIExWTlYuDQotICAgICovDQotICAgIExWTlZfTW9kZTJXb3JkX2JtIE1vZGUyOyAgICAgICAgICAvLy88IE1vZGUyIHdvcmQNCi0NCi0gICAgLyoqDQotICAgIFRoZSB0dW5pbmcgbW9kZSB3b3JkIHRvIGVuYWJsZS9kaXNhYmxlIGludGVybmFsIGFsZ29yaXRobSB0dW5pbmcgY2FwYWJpbGl0aWVzDQotICAgIGluIHRoZSBkaWZmZXJlbnQgYmxvY2tzIG9mIExWTlYuIE9ubHkgb25lIGJpdCBpcyBhbGxvd2VkIHRvIGJlIGVuYWJsZWQgYXQgYQ0KLSAgICB0aW1lLg0KLSAgICAqLw0KLSAgICBMVk5WX1R1bmluZ01vZGVXb3JkX2JtIFR1bmluZ19tb2RlOyAgICAgICAgICAvLy88IFR1bmluZyBtb2RlIHdvcmQNCi0NCi0gICAgLyoqDQotICAgIEdhaW4gYXBwbGllZCBhdCB0aGUgcHJpbWFyeSBjaGFubmVsIGluIHRoZSBUeCBpbnB1dC4gVXNlZCB0byBzY2FsZSB0aGUNCi0gICAgbWljcm9waG9uZSBzaWduYWwgaW4gb3JkZXIgdG8gZ2l2ZSB0aGUgTkxNUzBfTEIgYW5kIE5MTVMwX0hCIGZpbHRlcnMgaGVhZHJvb20NCi0gICAgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4yLjEzPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfSU5QVVRfR0FJTl9NSUMwX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9JTlBVVF9HQUlOX01JQzBfREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9JTlBVVF9HQUlOX01JQzBfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgSW5wdXRfR2Fpbl9NaWMwOyAgICAgICAgICAvLy88IFRoZSBwcmltYXJ5IGlucHV0IGdhaW4uDQotDQotICAgIC8qKg0KLSAgICBHYWluIGFwcGxpZWQgYXQgdGhlIHNlY29uZGFyeSBjaGFubmVsIGluIHRoZSBUeCBpbnB1dC4gVXNlZCB0byBzY2FsZSB0aGUNCi0gICAgbWljcm9waG9uZSBzaWduYWwgaW4gb3JkZXIgdG8gZ2l2ZSB0aGUgTkxNUzFfTEIgYW5kIE5MTVMxX0hCIGZpbHRlcnMgaGVhZHJvb20NCi0gICAgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4yLjEzPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfSU5QVVRfR0FJTl9NSUMxX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9JTlBVVF9HQUlOX01JQzFfREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9JTlBVVF9HQUlOX01JQzFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgSW5wdXRfR2Fpbl9NaWMxOyAgICAgICAgICAvLy88IFRoZSBzZWNvbmRhcnkgaW5wdXQgZ2Fpbi4NCi0NCi0gICAgLyoqDQotICAgIEdhaW4gYXBwbGllZCBhdCB0aGUgVHggb3V0cHV0IG9mIExWTlYuIENvbXBlbnNhdGVzIHRoZSBhcHBsaWVkIElucHV0X0dhaW5fTWljMA0KLSAgICBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgb3ZlcmFsbCBUeCBnYWluLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD40LjExPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfT1VUUFVUX0dBSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX09VVFBVVF9HQUlOX0RFRkFVTFQgKDIwNDgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfT1VUUFVUX0dBSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgT3V0cHV0X0dhaW47ICAgICAgICAgIC8vLzwgVGhlIG91dHB1dCBnYWluLg0KLQ0KLSAgICAvKioNCi0gICAgTGVuZ3RoIG9mIHRoZSBsb3ctYmFuZCAoMC00a0h6KSBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXIgZm9yIHRoZQ0KLSAgICBwcmltYXJ5IGNoYW5uZWwuIFRoZSBMZW5ndGggc2hvdWxkIGJlIGNob3NlbiBzdWNoIHRoYXQgbW9zdCBvZiB0aGUgZW5lcmd5IG9mDQotICAgIHRoZSBpbXB1bHNlIHJlc3BvbnNlIGlzIGNvdmVyZWQgYnkgdGhlIGZpbHRlci4gVGhlIGxlbmd0aCBzaG91bGQgYmUgYSBtdWx0aXBsZQ0KLSAgICBvZiA4Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfVEFQU19NSU4gKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0xCX1RBUFNfREVGQVVMVCAoMzIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfVEFQU19NQVggKDY0KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgTkxNUzBfTEJfdGFwczsgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgTkxNUzAgbG93LWJhbmQgdGFwcy4NCi0NCi0gICAgLyoqDQotICAgIFN0ZXAgc2l6ZSBmb3IgdGhlIHVwZGF0ZSBvZiB0aGUgbG93LWJhbmQgYWRhcHRpdmUgZmlsdGVyIGNvZWZmaWNpZW50cyBmb3IgdGhlDQotICAgIHByaW1hcnkgY2hhbm5lbC4gSXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0xCX1RXT0FMUEhBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9MQl9UV09BTFBIQV9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX0xCX1RXT0FMUEhBX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMwX0xCX3R3b2FscGhhOyAgICAgICAgICAvLy88IE5MTVMwIGxvdy1iYW5kIHN0ZXAgc2l6ZQ0KLQ0KLSAgICAvKioNCi0gICAgQWRhcHRpdmUgc3RlcC1zaXplIGNvbnRyb2wgZm9yIHRoZSBsb3ctYmFuZCBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXINCi0gICAgZm9yIHRoZSBwcmltYXJ5IGNoYW5uZWwuIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2xvdyBkb3duIHRoZSB1cGRhdGUgc3BlZWQNCi0gICAgb2YgdGhlIGFkYXB0aXZlIGZpbHRlciBkdXJpbmcgZG91YmxlIHRhbGsgc2l0dWF0aW9ucy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfRVJMX01JTiAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfRVJMX0RFRkFVTFQgKDEwMDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfTEJfRVJMX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMwX0xCX2VybDsgICAgICAgICAgLy8vPCBOTE1TMCBsb3ctYmFuZCBlcmwNCi0NCi0gICAgLyoqDQotICAgIExlbmd0aCBvZiB0aGUgaGlnaC1iYW5kICg0LThrSHopIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlciBmb3IgdGhlDQotICAgIHByaW1hcnkgY2hhbm5lbC4gVGhlIExlbmd0aCBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdCBtb3N0IG9mIHRoZSBlbmVyZ3kgb2YNCi0gICAgdGhlIGltcHVsc2UgcmVzcG9uc2UgaXMgY292ZXJlZCBieSB0aGUgZmlsdGVyLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBhIG11bHRpcGxlDQotICAgIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9UQVBTX01JTiAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfSEJfVEFQU19ERUZBVUxUICgyNCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9UQVBTX01BWCAoNjQpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBOTE1TMF9IQl90YXBzOyAgICAgICAgICAvLy88IE51bWJlciBvZiBOTE1TMCBoaWdoLWJhbmQgdGFwcy4NCi0NCi0gICAgLyoqDQotICAgIFN0ZXAgc2l6ZSBmb3IgdGhlIHVwZGF0ZSBvZiB0aGUgaGlnaC1iYW5kIGFkYXB0aXZlIGZpbHRlciBjb2VmZmljaWVudHMgZm9yIHRoZQ0KLSAgICBwcmltYXJ5IGNoYW5uZWwuIEl0IGlzIHJlY29tbWVuZGVkIG5vdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9UV09BTFBIQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfSEJfVFdPQUxQSEFfREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9IQl9UV09BTFBIQV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TMF9IQl90d29hbHBoYTsgICAgICAgICAgLy8vPCBOTE1TMCBoaWdoLWJhbmQgc3RlcCBzaXplDQotDQotICAgIC8qKg0KLSAgICBBZGFwdGl2ZSBzdGVwLXNpemUgY29udHJvbCBmb3IgdGhlIGhpZ2gtYmFuZCBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXINCi0gICAgZm9yIHRoZSBwcmltYXJ5IGNoYW5uZWwuIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2xvdyBkb3duIHRoZSB1cGRhdGUgc3BlZWQNCi0gICAgb2YgdGhlIGFkYXB0aXZlIGZpbHRlciBkdXJpbmcgZG91YmxlIHRhbGsgc2l0dWF0aW9ucy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfSEJfRVJMX01JTiAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfSEJfRVJMX0RFRkFVTFQgKDEwMDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfSEJfRVJMX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMwX0hCX2VybDsgICAgICAgICAgLy8vPCBOTE1TMCBoaWdoLWJhbmQgZXJsDQotDQotICAgIC8qKg0KLSAgICBJbmRpY2F0ZXMgd2hldGhlciBhIHByZXNldCBvZiBhZGFwdGl2ZSBmaWx0ZXIgY29lZmZpY2llbnRzIHNob3VsZCBiZSBkb25lLjxicj4NCi0gICAgMCA9IE5vIHByZXNldCAoY29lZmZpY2llbnRzIGFzIHRoZXkgYXJlKS48YnI+DQotICAgIDEgPSBQcmVzZXQgd2l0aCBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgY29lZmZpY2llbnRzLjxicj4NCi0gICAgMiA9IFByZXNldCB3aXRoIHplcm8gY29lZmZpY2llbnRzLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNS4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfUFJFU0VUX0NPRUZTX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9QUkVTRVRfQ09FRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9QUkVTRVRfQ09FRlNfTUFYICgyKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TMF9wcmVzZXRfY29lZnM7ICAgICAgICAgIC8vLzwgTkxNUzAgcHJlc2V0DQotDQotICAgIC8qKg0KLSAgICBPZmZzZXQgYWRkZWQgdG8gdGhlIG5vcm1hbGl6YXRpb24gb2YgdGhlIGFkYXB0YXRpb24gb2YgdGhlIGZpbHRlci4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMwX09GRlNFVF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzBfT0ZGU0VUX0RFRkFVTFQgKDc3Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMF9PRkZTRVRfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzBfb2Zmc2V0OyAgICAgICAgICAvLy88IE5MTVMwIG9mZnNldA0KLQ0KLSAgICAvKioNCi0gICAgTGVuZ3RoIG9mIHRoZSBsb3ctYmFuZCAoMC00a0h6KSBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXIgZm9yIHRoZQ0KLSAgICBzZWNvbmRhcnkgY2hhbm5lbC4gVGhlIExlbmd0aCBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdCBtb3N0IG9mIHRoZSBlbmVyZ3kgb2YNCi0gICAgdGhlIGltcHVsc2UgcmVzcG9uc2UgaXMgY292ZXJlZCBieSB0aGUgZmlsdGVyLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBhIG11bHRpcGxlDQotICAgIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9UQVBTX01JTiAoMTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfTEJfVEFQU19ERUZBVUxUICgzMik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9UQVBTX01BWCAoMzIpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBOTE1TMV9MQl90YXBzOyAgICAgICAgICAvLy88IE51bWJlciBvZiBOTE1TMSBsb3ctYmFuZCB0YXBzLg0KLQ0KLSAgICAvKioNCi0gICAgU3RlcCBzaXplIGZvciB0aGUgdXBkYXRlIG9mIHRoZSBsb3ctYmFuZCBhZGFwdGl2ZSBmaWx0ZXIgY29lZmZpY2llbnRzIGZvciB0aGUNCi0gICAgc2Vjb25kYXJ5IGNoYW5uZWwuIEl0IGlzIHJlY29tbWVuZGVkIG5vdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfTEJfVFdPQUxQSEFfREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9MQl9UV09BTFBIQV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TMV9MQl90d29hbHBoYTsgICAgICAgICAgLy8vPCBOTE1TMSBsb3ctYmFuZCBzdGVwIHNpemUNCi0NCi0gICAgLyoqDQotICAgIEFkYXB0aXZlIHN0ZXAtc2l6ZSBjb250cm9sIGZvciB0aGUgbG93LWJhbmQgYWRhcHRpdmUgZWNobyBjYW5jZWxsYXRpb24gZmlsdGVyDQotICAgIGZvciB0aGUgc2Vjb25kYXJ5IGNoYW5uZWwuIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2xvdyBkb3duIHRoZSB1cGRhdGUgc3BlZWQNCi0gICAgb2YgdGhlIGFkYXB0aXZlIGZpbHRlciBkdXJpbmcgZG91YmxlIHRhbGsgc2l0dWF0aW9ucy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfTEJfRVJMX01JTiAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfTEJfRVJMX0RFRkFVTFQgKDEwMDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfTEJfRVJMX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMxX0xCX2VybDsgICAgICAgICAgLy8vPCBOTE1TMSBsb3ctYmFuZCBlcmwNCi0NCi0gICAgLyoqDQotICAgIExlbmd0aCBvZiB0aGUgaGlnaC1iYW5kICg0LThrSHopIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlciBmb3IgdGhlDQotICAgIHNlY29uZGFyeSBjaGFubmVsLiBUaGUgTGVuZ3RoIHNob3VsZCBiZSBjaG9zZW4gc3VjaCB0aGF0IG1vc3Qgb2YgdGhlIGVuZXJneSBvZg0KLSAgICB0aGUgaW1wdWxzZSByZXNwb25zZSBpcyBjb3ZlcmVkIGJ5IHRoZSBmaWx0ZXIuIFRoZSBsZW5ndGggc2hvdWxkIGJlIGEgbXVsdGlwbGUNCi0gICAgb2YgOC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0hCX1RBUFNfTUlOICgxNik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9IQl9UQVBTX0RFRkFVTFQgKDI0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0hCX1RBUFNfTUFYICgzMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fVUlOVDE2IE5MTVMxX0hCX3RhcHM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIE5MTVMxIGhpZ2gtYmFuZCB0YXBzLg0KLQ0KLSAgICAvKioNCi0gICAgU3RlcCBzaXplIGZvciB0aGUgdXBkYXRlIG9mIHRoZSBoaWdoLWJhbmQgYWRhcHRpdmUgZmlsdGVyIGNvZWZmaWNpZW50cyBmb3IgdGhlDQotICAgIHNlY29uZGFyeSBjaGFubmVsLiBJdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfVFdPQUxQSEFfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX0hCX1RXT0FMUEhBX0RFRkFVTFQgKDgxOTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfVFdPQUxQSEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzFfSEJfdHdvYWxwaGE7ICAgICAgICAgIC8vLzwgTkxNUzEgaGlnaC1iYW5kIHN0ZXAgc2l6ZQ0KLQ0KLSAgICAvKioNCi0gICAgQWRhcHRpdmUgc3RlcC1zaXplIGNvbnRyb2wgZm9yIHRoZSBoaWdoLWJhbmQgYWRhcHRpdmUgZWNobyBjYW5jZWxsYXRpb24gZmlsdGVyDQotICAgIGZvciB0aGUgc2Vjb25kYXJ5IGNoYW5uZWwuIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2xvdyBkb3duIHRoZSB1cGRhdGUgc3BlZWQNCi0gICAgb2YgdGhlIGFkYXB0aXZlIGZpbHRlciBkdXJpbmcgZG91YmxlIHRhbGsgc2l0dWF0aW9ucy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfRVJMX01JTiAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfRVJMX0RFRkFVTFQgKDEwMDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfSEJfRVJMX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVMxX0hCX2VybDsgICAgICAgICAgLy8vPCBOTE1TMSBoaWdoLWJhbmQgZXJsDQotDQotICAgIC8qKg0KLSAgICBJbmRpY2F0ZXMgd2hldGhlciBhIHByZXNldCBvZiBhZGFwdGl2ZSBmaWx0ZXIgY29lZmZpY2llbnRzIHNob3VsZCBiZSBkb25lLjxicj4NCi0gICAgMCA9IE5vIHByZXNldCAoY29lZmZpY2llbnRzIGFzIHRoZXkgYXJlKS48YnI+DQotICAgIDEgPSBQcmVzZXQgd2l0aCBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgY29lZmZpY2llbnRzLjxicj4NCi0gICAgMiA9IFByZXNldCB3aXRoIHplcm8gY29lZmZpY2llbnRzLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNS4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfUFJFU0VUX0NPRUZTX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9QUkVTRVRfQ09FRlNfTUFYICgyKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TMV9wcmVzZXRfY29lZnM7ICAgICAgICAgIC8vLzwgTkxNUzEgcHJlc2V0DQotDQotICAgIC8qKg0KLSAgICBPZmZzZXQgYWRkZWQgdG8gdGhlIG5vcm1hbGl6YXRpb24gb2YgdGhlIGFkYXB0YXRpb24gb2YgdGhlIGZpbHRlci4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX05MTVMxX09GRlNFVF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfTkxNUzFfT0ZGU0VUX0RFRkFVTFQgKDc3Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9OTE1TMV9PRkZTRVRfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNUzFfb2Zmc2V0OyAgICAgICAgICAvLy88IE5MTVMxIG9mZnNldA0KLQ0KLSAgICAvKioNCi0gICAgQSBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIGEgdGhyZXNob2xkIGZvciB0aGUgZGV0ZWN0aW9uIG9mIGluc3RydW1lbnRhbCBub2lzZS4NCi0gICAgVGhlIGhpZ2hlciB0aGUgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCB0aGUgbG93ZXIgbm9pc2Ugc3VwcHJlc3Npb24NCi0gICAgcGVyZm9ybWFuY2UuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9DQUxfTUlDUE9XRkxPT1JNSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0NBTF9NSUNQT1dGTE9PUk1JTl9ERUZBVUxUICgxNTApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfQ0FMX01JQ1BPV0ZMT09STUlOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IENBTF9taWNQb3dGbG9vck1pbjsgICAgICAgICAgLy8vPCBJbnN0cnVtZW50YWwgbm9pc2UgdGhyZXNob2xkDQotDQotICAgIC8qKg0KLSAgICBUaHJlc2hvbGQgZm9yIFdpbmRndXNoIGRldGVjdG9yLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwgdGhlIGxlc3Mgc2Vuc2l0aXZlIHRoZQ0KLSAgICBkZXRlY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjYuOTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1dHVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9XR1RIUkVTSE9MRF9ERUZBVUxUICgzMjc2Nyk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9XR1RIUkVTSE9MRF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBXZ1RocmVzaG9sZDsgICAgICAgICAgLy8vPCBXaW5kZ3VzaCB0aHJlc2hvbGQNCi0NCi0gICAgLyoqDQotICAgIFRocmVzaG9sZCBmb3Igc3BlZWNoIGRldGVjdG9yIGJhc2VkIG9uIHBvd2VyIGNvbXBhcmlzb24gYmV0d2VlbiBwcmltYXJ5IGFuZA0KLSAgICBzZWNvbmRhcnkgbWljcm9waG9uZXMuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbGVzcyBzZW5zaXRpdmUgdGhlIGRldGVjdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+My4xMjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX01QVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9NUFRIUkVTSE9MRF9ERUZBVUxUICg2NTU0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX01QVEhSRVNIT0xEX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE1wVGhyZXNob2xkOyAgICAgICAgICAvLy88IE1pY1BvdyB0aHJlc2hvbGQNCi0NCi0gICAgLyoqDQotICAgIFNldCBvZiBmaXJzdCA4IGNvZWZmaWNpZW50cyBmb3IgYWRhcHRpdmUgZmlsdGVyIEZTQjAuIFRoZXNlIHZhbHVlcyBzaG91bGQgYmUNCi0gICAgZGV0ZXJtaW5lZCBmb3IgdGhlIGdpdmVuIG1pY3JvcGhvbmUgY29uZmlndXJhdGlvbg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX0lOSVRfVEFCTEUwX01JTiAoLTMyNzY4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMF9ERUZBVUxUIHszMjc2NywgMCwgMCwgMCwgMCwgMCwgMCwgMH08L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfSU5JVF9UQUJMRTBfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRlNCX2luaXRfdGFibGUwW0xWTlZfRlNCX0lOSVRfVEFCTEUwX0xFTkdUSF07ICAgICAgICAgIC8vLzwgRlNCMCBpbml0aWFsIGNvZWZmaWNpZW50cy4NCi0NCi0gICAgLyoqDQotICAgIFNldCBvZiBmaXJzdCA4IGNvZWZmaWNpZW50cyBmb3IgYWRhcHRpdmUgZmlsdGVyIEZTQjEuIFRoZXNlIHZhbHVlcyBzaG91bGQgYmUNCi0gICAgZGV0ZXJtaW5lZCBmb3IgdGhlIGdpdmVuIG1pY3JvcGhvbmUgY29uZmlndXJhdGlvbg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX0lOSVRfVEFCTEUxX01JTiAoLTMyNzY4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMV9ERUZBVUxUIHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9JTklUX1RBQkxFMV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBGU0JfaW5pdF90YWJsZTFbTFZOVl9GU0JfSU5JVF9UQUJMRTFfTEVOR1RIXTsgICAgICAgICAgLy8vPCBGU0IxIGluaXRpYWwgY29lZmZpY2llbnRzLg0KLQ0KLSAgICAvKioNCi0gICAgTGVuZ3RoIG9mIHRoZSBGU0IgdG8gbW9kZWwgdGhlIGFjb3VzdGljYWwgcGF0aHMgYmV0d2VlbiB0aGUgc3BlZWNoIHNvdXJjZSBhbmQNCi0gICAgdHdvIG1pY3JvcGhvbmVzLiBUaGUgbGVuZ3RoIG11c3QgYmUgZXF1YWwgdG8gMTYgZm9yIHRoZSBoYW5kc2V0IGFwcGxpY2F0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX1RBUFNfTUlOICg4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9UQVBTX0RFRkFVTFQgKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9UQVBTX01BWCAoMTYpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBGU0JfdGFwczsgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgRlNCIHRhcHMNCi0NCi0gICAgLyoqDQotICAgIFN0ZXAtc2l6ZSB0byB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgYWRhcHRpdmUgZmlsdGVycy4gQSBoaWdoZXIgdmFsdWUNCi0gICAgbGVhZHMgdG8gYSBmYXN0ZXIgc3BlZWQgb2YgdGhlIGFkYXB0YXRpb24sIHdoaWxlIGEgbG93ZXIgdmFsdWUgcHJvdmlkZXMgbW9yZQ0KLSAgICBzdGFiaWxpdHksIGJ1dCBhIHNsb3cgYWRhcHRpb24gc3BlZWQuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfVFdPQUxQSEFfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ZTQl9UV09BTFBIQV9ERUZBVUxUICg2NTUpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX1RXT0FMUEhBX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEZTQl90d29hbHBoYTsgICAgICAgICAgLy8vPCBGU0Igc3RlcCBzaXplIGNvbnRyb2wNCi0NCi0gICAgLyoqDQotICAgIEdhaW4gYXBwbGllZCBvbiB0aGUgc2FtcGxlcyBvZiB0aGUgc2Vjb25kIEZTQiByZWZlcmVuY2Ugc2lnbmFsIChmc2JyZWZbMV0pLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD41LjEwPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRlNCX1JFRl9HQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfUkVGX0dBSU5fREVGQVVMVCAoMTAyNCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9GU0JfUkVGX0dBSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRlNCX3JlZl9nYWluOyAgICAgICAgICAvLy88IEZTQiByZWYgZ2Fpbg0KLQ0KLSAgICAvKioNCi0gICAgTGVuZ3RoIG9mIHRoZSBHU0MgdG8gbW9kZWwgdGhlIHRyYW5zZmVyIGZ1bmN0aW9uIGJldHdlZW4gdGhlIG5vaXNlIHJlZmVyZW5jZQ0KLSAgICBhbmQgdGhlIHJlc2lkdWFsIHNpZ25hbCwgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBub2lzZSBhbmQgaW50ZXJmZXJpbmcgc291bmRzDQotICAgIGZyb20gdGhlIGRlc2lyZWQgc2lnbmFsLiBUaGlzIG51bWJlciBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA4Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX1RBUFNfTUlOICg4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0dTQ19UQVBTX0RFRkFVTFQgKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0dTQ19UQVBTX01BWCAoNDgpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBHU0NfdGFwczsgICAgICAgICAgLy8vPCBOdW1iZXIgb2YgR1NDIHRhcHMNCi0NCi0gICAgLyoqDQotICAgIFN0ZXAtc2l6ZSB0byB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgYWRhcHRpdmUgZmlsdGVyLiBBIGhpZ2hlciB2YWx1ZQ0KLSAgICBsZWFkcyB0byBhIGZhc3RlciBzcGVlZCBvZiB0aGUgYWRhcHRhdGlvbiwgd2hpbGUgYSBsb3dlciB2YWx1ZSBwcm92aWRlcyBtb3JlDQotICAgIHN0YWJpbGl0eSwgYnV0IGEgc2xvdyBhZGFwdGlvbiBzcGVlZC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0dTQ19UV09BTFBIQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX1RXT0FMUEhBX0RFRkFVTFQgKDE2MzgpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX1RXT0FMUEhBX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEdTQ190d29hbHBoYTsgICAgICAgICAgLy8vPCBHU0Mgc3RlcCBzaXplIGNvbnRyb2wNCi0NCi0gICAgLyoqDQotICAgIEFkYXB0aXZlIHN0ZXAtc2l6ZSBjb250cm9sIGZvciBHU0MgdG8gYXZvaWQgZGl2ZXJnZW5jZSBvZiB0aGUgYWRhcHRpdmUgZmlsdGVyDQotICAgIGR1cmluZyBkZXNpcmVkIHNwZWVjaC4gSW4gZ2VuZXJhbCwgR1NDX2VybCBpcyBsb3dlciB0aGFuIE5MTVNfZXJsIGFuZCByYW5nZXMNCi0gICAgYmV0d2VlbiAwIGFuZCAzMCBkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX0VSTF9NSU4gKDY0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0dTQ19FUkxfREVGQVVMVCAoMjU2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0dTQ19FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgR1NDX2VybDsgICAgICAgICAgLy8vPCBHU0MgZXJsDQotDQotICAgIC8qKg0KLSAgICBPZmZzZXQgYWRkZWQgdG8gdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBwb3dlciBvZiB0aGUgbm9pc2UgcmVmZXJlbmNlIHRvIGF2b2lkDQotICAgIHRoYXQgdGhlIHBvd2VyIGNvbnZlcmdlcyB0b3dhcmRzIHplcm8gd2hlbiB0aGUgaW5wdXQgaXMgbG93Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX09GRlNFVF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfR1NDX09GRlNFVF9ERUZBVUxUICgxNjM4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0dTQ19PRkZTRVRfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgR1NDX29mZnNldDsgICAgICAgICAgLy8vPCBHU0Mgb2Zmc2V0DQotDQotICAgIC8qKg0KLSAgICBFY2hvIHN1YnRyYWN0aW9uIGZhY3RvciBhcHBsaWVkIGR1cmluZyBmYXJlbmQtb25seS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT0dBTU1BSElfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT0dBTU1BSElfREVGQVVMVCAoMTYzODQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPR0FNTUFISV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX0VjaG9HYW1tYUhpOyAgICAgICAgICAvLy88IEhpZ2ggZWNobyBzdWJ0cmFjdGlvbiBmYWN0b3INCi0NCi0gICAgLyoqDQotICAgIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIGRvdWJsZSB0YWxrIGFuZCBuZWFyZW5kLW9ubHkuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjIuMTM8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUxPX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9HQU1NQUxPX0RFRkFVTFQgKDgxOTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPR0FNTUFMT19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX0VjaG9HYW1tYUxvOyAgICAgICAgICAvLy88IExvdyBlY2hvIHN1YnRyYWN0aW9uIGZhY3Rvcg0KLQ0KLSAgICAvKioNCi0gICAgUGFyYW1ldGVyIHJlbGF0ZWQgdG8gdGhlIHJldmVyYmVyYXRpb24gdGltZSBvZiB0aGUgYWNvdXN0aWNhbCBlbnZpcm9ubWVudCwNCi0gICAgd2hpY2ggcmVwcmVzZW50cyB0aGUgZGVjYXkgaW4gZW5lcmd5IG92ZXIgdGltZSBvZiB0aGUgZWNobyB0YWlsIG9mIHRoZSBpbXB1bHNlDQotICAgIHJlc3BvbnNlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPQUxQSEFSRVZfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT0FMUEhBUkVWX0RFRkFVTFQgKDEyMDAwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfRUNIT0FMUEhBUkVWX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfRWNob0FscGhhUmV2OyAgICAgICAgICAvLy88IEVjaG8gcmV2ZXJiZXJhdGlvbiBmYWN0b3INCi0NCi0gICAgLyoqDQotICAgIFBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIHBvcnRpb24gb2YgdGhlIGVjaG8gdGFpbCAoZXN0aW1hdGVkIGJ5IHRoZSBOTE1TDQotICAgIGZpbHRlcikgdGhhdCBoYXMgdG8gYmUgZXh0cmFwb2xhdGVkIGluIHRpbWUuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9UQUlMUE9SVElPTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19FQ0hPVEFJTFBPUlRJT05fREVGQVVMVCAoNzAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0VDSE9UQUlMUE9SVElPTl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX0VjaG9UYWlsUG9ydGlvbjsgICAgICAgICAgLy8vPCBFY2hvIHRhaWwgcG9ydGlvbg0KLQ0KLSAgICAvKioNCi0gICAgTm9uLWxpbmVhciBlY2hvIHN1YnRyYWN0aW9uIGZhY3RvciBhcHBsaWVkIGR1cmluZyBkb3VibGUgdGFsayBhbmQgbmVhcmVuZC1vbmx5Lg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD40LjExPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OTEFUVEVOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05MQVRURU5fREVGQVVMVCAoMjU2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTkxBVFRFTl9NQVggKDIwNDgpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfTmxBdHRlbjsgICAgICAgICAgLy8vPCBOb24tbGluZWFyIGVjaG8gc3VidHJhY3Rpb24gZmFjdG9yDQotDQotICAgIC8qKg0KLSAgICBHYWluIGZhY3RvciBmb3Igc3RhdGlvbmFyeSBub2lzZSBvdmVyc3VidHJhY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjIuMTM8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFTX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFTX0RFRkFVTFQgKDExNDcwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQU1NQVNfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19Ob2lzZUdhbW1hUzsgICAgICAgICAgLy8vPCBTdGF0aW9uYXJ5IG5vaXNlIG92ZXJzdWJ0cmFjdGlvbiBmYWN0b3INCi0NCi0gICAgLyoqDQotICAgIEdhaW4gZmFjdG9yIGZvciBub24tc3RhdGlvbmFyeSBub2lzZSBvdmVyc3VidHJhY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjIuMTM8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FNTUFOX0RFRkFVTFQgKDE2Mzg0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQU1NQU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19Ob2lzZUdhbW1hTjsgICAgICAgICAgLy8vPCBOb24tc3RhdGlvbmFyeSBub2lzZSBvdmVyc3VidHJhY3Rpb24gZmFjdG9yDQotDQotICAgIC8qKg0KLSAgICBUaGUgbWF4aW11bSBhbW91bnQgb2Ygc3RhdGlvbmFyeSBub2lzZSBzdXBwcmVzc2lvbi48YnI+DQotICAgIEROTlNfTm9pc2VHYWluTWluUyA9IFxmJDIqMzI3NjcqMTBee01heE5vaXNlUmVkdWN0aW9uZEIvMjB9XGYkDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPi0xLjE2PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFR0FJTk1JTlNfREVGQVVMVCAoMTExNDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5TX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfTm9pc2VHYWluTWluUzsgICAgICAgICAgLy8vPCBNYXhpbXVtIHN0YXRpb25hcnkgbm9pc2Ugc3VwcHJlc3Npb24uDQotDQotICAgIC8qKg0KLSAgICBUaGUgbWF4aW11bSBhbW91bnQgb2Ygbm9uLXN0YXRpb25hcnkgbm9pc2Ugc3VwcHJlc3Npb24uPGJyPg0KLSAgICBETk5TX05vaXNlR2Fpbk1pbk4gPSBcZiQyKjMyNzY3KjEwXntNYXhOb2lzZVJlZHVjdGlvbmRCLzIwfVxmJA0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4tMS4xNjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VHQUlOTUlOTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5OX0RFRkFVTFQgKDY1NTQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19OT0lTRUdBSU5NSU5OX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEROTlNfTm9pc2VHYWluTWluTjsgICAgICAgICAgLy8vPCBNYXhpbXVtIG5vbi1zdGF0aW9uYXJ5IG5vaXNlIHN1cHByZXNzaW9uLg0KLQ0KLSAgICAvKioNCi0gICAgQmlhcyBjb21wZW5zYXRpb24gZmFjdG9yIGZvciBzdGF0aW9uYXJ5IG5vaXNlIGVzdGltYXRpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjIuMTM8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX05PSVNFQklBU0NPTVBfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VCSUFTQ09NUF9ERUZBVUxUICg5ODMwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfTk9JU0VCSUFTQ09NUF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX05vaXNlQmlhc0NvbXA7ICAgICAgICAgIC8vLzwgQmlhcyBjb21wZW5zYXRpb24gZmFjdG9yLg0KLQ0KLSAgICAvKioNCi0gICAgRWNobyBvdmVyc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgdG8gdGhlIGVzdGltYXRlZCBub24tc3RhdGlvbmFyeSBub2lzZQ0KLSAgICBmbG9vci4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+My4xMjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfR0FJTkVUQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19HQUlORVRBX0RFRkFVTFQgKDI1Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0dBSU5FVEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19HYWluRXRhOyAgICAgICAgICAvLy88IEVjaG8gb3ZlcnN1YnRyYWN0aW9uIGZhY3Rvci4NCi0NCi0gICAgLyoqDQotICAgIERldGVjdGlvbiB0aHJlc2hvbGQgZm9yIG1pY3JvcGhvbmUgYWN0aXZpdHkuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjMuMTI8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0FDVEhSRVNIT0xEX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9ETk5TX0FDVEhSRVNIT0xEX0RFRkFVTFQgKDEyMjg4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfQUNUSFJFU0hPTERfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19BY1RocmVzaG9sZDsgICAgICAgICAgLy8vPCBBY3Rpdml0eSB0aHJlc2hvbGQuDQotDQotICAgIC8qKg0KLSAgICBEZXRlY3Rpb24gdGhyZXNob2xkIGZvciBhY3Rpdml0eSB3aXRoaW4gdGhlIGJlYW0gb2YgRlNCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4zLjEyPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19XQlRIUkVTSE9MRF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19XQlRIUkVTSE9MRF9ERUZBVUxUICg5MjE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX0ROTlNfV0JUSFJFU0hPTERfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgRE5OU19XYlRocmVzaG9sZDsgICAgICAgICAgLy8vPCBXaXRoaW5CZWFtIHRocmVzaG9sZC4NCi0NCi0gICAgLyoqDQotICAgIERldGVjdGlvbiB0aHJlc2hvbGQgZm9yIGxvc3QgYmVhbSB3aGVyZSB0aGUgbmVhcmVuZCBzcGVha2VyIGlzIHNwZWFraW5nIG91dHNpZGUNCi0gICAgdGhlIGJlYW0gb2YgdGhlIEZTQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19MT1NUQkVBTVRIUkVTSE9MRF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19MT1NUQkVBTVRIUkVTSE9MRF9ERUZBVUxUICgzMjApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfRE5OU19MT1NUQkVBTVRIUkVTSE9MRF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBETk5TX0xvc3RCZWFtVGhyZXNob2xkOyAgICAgICAgICAvLy88IExvc3QgYmVhbSB0aHJlc2hvbGQuDQotDQotICAgIC8qKg0KLSAgICBTbW9vdGhpbmcgZmFjdG9yIGFwcGxpZWQgdG8gZ2V0IGEgc21vb3RoZWQgdmFsdWUgb2YgdGhlIGludGVyLWNoYW5uZWwNCi0gICAgY29ycmVsYXRpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjkuNjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVk5WX1BDRF9CRVRBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQ0RfQkVUQV9ERUZBVUxUICgyMzApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENEX0JFVEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgUENEX2JldGE7ICAgICAgICAgIC8vLzwgSUNDIHNtb290aGluZyBmYWN0b3IuDQotDQotICAgIC8qKg0KLSAgICBEZXRlY3Rpb24gdGhyZXNob2xkIGZvciBicm9hZHNpZGUgd2hlbiB0aGUgbmVhcmVuZCBzcGVha2VyIGlzIG5vdCBpbiBlbmQtZmlyZQ0KLSAgICBwb3NpdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIG1pY3JvcGhvbmUgY29uZmlndXJhdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+OS42PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENEX1RIUkVTSE9MRF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWTlZfUENEX1RIUkVTSE9MRF9ERUZBVUxUICgyNjIxMyk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZOVl9QQ0RfVEhSRVNIT0xEX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFBDRF9UaHJlc2hvbGQ7ICAgICAgICAgIC8vLzwgQnJvYWRzaWRlIGRldGVjdGlvbiB0aHJlc2hvbGQuDQotDQotfSBMVk5WX0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgY29udHJvbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG92ZXJhbGwgbW9kdWxlIGJlaGF2aW9yLiBUaGVzZSBwYXJhbWV0ZXJzIG1heQ0KLSogYmUgY2hhbmdlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZyB1c2luZyB0aGUgTFZIRl9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZIRl9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZIRl9TZXRDb250cm9sUGFyYW1ldGVycw0KLSogQHNlZSBMVkhGX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBPcGVyYXRpbmcgTW9kZQ0KLQ0KLSAgICAvKioNCi0gICAgVGhlIG1vZGUgd29yZCB0byBlbmFibGUvZGlzYWJsZSBpbnRlcm5hbCBhbGdvcml0aG0gYmxvY2tzIG9mIEhhbmRzRnJlZQ0KLSAgICAqLw0KLSAgICBMVkhGX01vZGVXb3JkX2JtIE1vZGU7ICAgICAgICAgIC8vLzwgTW9kZSBXb3JkDQotDQotICAgIC8qKg0KLSAgICBUaGUgdHVuaW5nIG1vZGUgaXMgdXNlZCB0byBlbmFibGUvZGlzYWJsZSBpbnRlcm5hbCBhbGdvcml0aG0gdHVuaW5nDQotICAgIGNhcGFiaWxpdGllcyBpbiB0aGUgZGlmZmVyZW50IGJsb2NrcyBvZiBIYW5kc0ZyZWUuIE9ubHkgb25lIGJpdCBhbGxvd2VkIHRvIGJlDQotICAgIGVuYWJsZWQgYXQgYSB0aW1lLg0KLSAgICAqLw0KLSAgICBMVkhGX1R1bmluZ01vZGVXb3JkIFR1bmluZ01vZGU7ICAgICAgICAgIC8vLzwgVHVuaW5nIE1vZGUNCi0NCi0gICAgLyoqDQotICAgIEdhaW4gYXBwbGllZCBhdCB0aGUgVHggaW5wdXQgb2YgTFZIRi4gVXNlZCB0byBzY2FsZSB0aGUgbWljcm9waG9uZSBzaWduYWwgaW4NCi0gICAgb3JkZXIgdG8gZ2l2ZSB0aGUgTkxNUyBmaWx0ZXIgaGVhZHJvb20gZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4yLjEzPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfSU5QVVRHQUlOX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9JTlBVVEdBSU5fREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9JTlBVVEdBSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgSW5wdXRHYWluOyAgICAgICAgICAvLy88IElucHV0IEdhaW4NCi0NCi0gICAgLyoqDQotICAgIEdhaW4gYXBwbGllZCBhdCB0aGUgVHggb3V0cHV0IG9mIExWSEYuIENvbXBlbnNhdGVzIHRoZSBhcHBsaWVkIElucHV0R2FpbiBpbg0KLSAgICBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgb3ZlcmFsbCBUeCBnYWluLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD40LjExPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfT1VUUFVUR0FJTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfT1VUUFVUR0FJTl9ERUZBVUxUICgyMDQ4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX09VVFBVVEdBSU5fTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgT3V0cHV0R2FpbjsgICAgICAgICAgLy8vPCBPdXRwdXQgR2Fpbg0KLQ0KLSAgICAvKioNCi0gICAgTGltaXQgdGhlIE5MTVMgcmVmZXJlbmNlIHNpZ25hbC4gVmFsdWUgaW4gZEIgRnVsbCBTY2FsZS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfTElNSVRfTUlOICgtMjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MSU1JVF9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfTElNSVRfTUFYICgwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBOTE1TX2xpbWl0OyAgICAgICAgICAvLy88IExpbWl0IHRoZSBOTE1TIHJlZmVyZW5jZSBzaWduYWwuDQotDQotICAgIC8qKg0KLSAgICBMZW5ndGggb2YgdGhlIGxvdy1iYW5kICgwLTRrSHopIGFkYXB0aXZlIGVjaG8gY2FuY2VsbGF0aW9uIGZpbHRlci4gVGhlIExlbmd0aA0KLSAgICBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdCBtb3N0IG9mIHRoZSBlbmVyZ3kgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2UgaXMNCi0gICAgY292ZXJlZCBieSB0aGUgZmlsdGVyLiBUaGUgbGVuZ3RoIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0xCX1RBUFNfTUlOICgxNik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0xCX1RBUFNfREVGQVVMVCAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MQl9UQVBTX01BWCAoMjAwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgTkxNU19MQl90YXBzOyAgICAgICAgICAvLy88IE51bWJlciBvZiB0YXBzIGZvciBMQiBOTE1TLg0KLQ0KLSAgICAvKioNCi0gICAgU3RlcCBzaXplIGZvciB0aGUgdXBkYXRlIG9mIHRoZSBsb3ctYmFuZCAoMC00a0h6KSBhZGFwdGl2ZSBmaWx0ZXIgY29lZmZpY2llbnRzLg0KLSAgICBJdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MQl9UV09fQUxQSEFfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfTEJfVFdPX0FMUEhBX0RFRkFVTFQgKDgxOTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MQl9UV09fQUxQSEFfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNU19MQl90d29fYWxwaGE7ICAgICAgICAgIC8vLzwgU3RlcCBTaXplIG9mIExCIE5MTVMNCi0NCi0gICAgLyoqDQotICAgIEFkYXB0aXZlIHN0ZXAgc2l6ZSBjb250cm9sIGZvciB0aGUgbG93LWJhbmQgKDAtNGtIeikgYWRhcHRpdmUgZWNobyBjYW5jZWxsYXRpb24NCi0gICAgZmlsdGVyLiBUaGlzIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNsb3cgZG93biB0aGUgdXBkYXRlIHNwZWVkIG9mIHRoZSBhZGFwdGl2ZQ0KLSAgICBmaWx0ZXIgZHVyaW5nIGRvdWJsZSB0YWxrIHNpdHVhdGlvbnMuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjkuNjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfTEJfRVJMX01JTiAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19MQl9FUkxfREVGQVVMVCAoMTI4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfTEJfRVJMX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVNfTEJfZXJsOyAgICAgICAgICAvLy88IEVSTCBvZiBMQiBOTE1TDQotDQotICAgIC8qKg0KLSAgICBMZW5ndGggb2YgdGhlIGhpZ2gtYmFuZCAoNC04a0h6KSBhZGFwdGl2ZSBlY2hvIGNhbmNlbGxhdGlvbiBmaWx0ZXIuIFRoZSBMZW5ndGgNCi0gICAgc2hvdWxkIGJlIGNob3NlbiBzdWNoIHRoYXQgbW9zdCBvZiB0aGUgZW5lcmd5IG9mIHRoZSBpbXB1bHNlIHJlc3BvbnNlIGlzDQotICAgIGNvdmVyZWQgYnkgdGhlIGZpbHRlci4gVGhlIGxlbmd0aCBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA4LiBJbiBjYXNlIG9mDQotICAgIG5hcnJvd2JhbmQgcHJvY2Vzc2luZywgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTYuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfVEFQU19NSU4gKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfVEFQU19ERUZBVUxUICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0hCX1RBUFNfTUFYICgxMzYpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBOTE1TX0hCX3RhcHM7ICAgICAgICAgIC8vLzwgTnVtYmVyIG9mIHRhcHMgZm9yIEhCIE5MTVMuDQotDQotICAgIC8qKg0KLSAgICBTdGVwIHNpemUgZm9yIHRoZSB1cGRhdGUgb2YgdGhlIGhpZ2gtYmFuZCAoNC04a0h6KSBhZGFwdGl2ZSBmaWx0ZXINCi0gICAgY29lZmZpY2llbnRzLiBJdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlLiBJbiBjYXNlIG9mDQotICAgIG5hcnJvd2JhbmQgcHJvY2Vzc2luZywgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdC4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfVFdPX0FMUEhBX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX0hCX1RXT19BTFBIQV9ERUZBVUxUICg4MTkyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfVFdPX0FMUEhBX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVNfSEJfdHdvX2FscGhhOyAgICAgICAgICAvLy88IFN0ZXAgU2l6ZSBvZiBIQiBOTE1TDQotDQotICAgIC8qKg0KLSAgICBBZGFwdGl2ZSBzdGVwIHNpemUgY29udHJvbCBmb3IgdGhlIGhpZ2gtYmFuZCAoNC04a0h6KSBhZGFwdGl2ZSBlY2hvDQotICAgIGNhbmNlbGxhdGlvbiBmaWx0ZXIuIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2xvdyBkb3duIHRoZSB1cGRhdGUgc3BlZWQgb2YNCi0gICAgdGhlIGFkYXB0aXZlIGZpbHRlciBkdXJpbmcgZG91YmxlIHRhbGsgc2l0dWF0aW9ucy4gSW4gY2FzZSBvZiBuYXJyb3diYW5kDQotICAgIHByb2Nlc3NpbmcsIHRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjkuNjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfRVJMX01JTiAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19IQl9FUkxfREVGQVVMVCAoMTI4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfSEJfRVJMX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVNfSEJfZXJsOyAgICAgICAgICAvLy88IEVSTCBvZiBIQiBOTE1TDQotDQotICAgIC8qKg0KLSAgICBJbmRpY2F0ZXMgd2hldGhlciBhIHByZXNldCBvZiBhZGFwdGl2ZSBmaWx0ZXIgY29lZmZpY2llbnRzIHNob3VsZCBiZSBkb25lLiA8YnI+DQotICAgIDAgPSBObyBwcmVzZXQgKENvZWZmaWNpZW50cyBhcyB0aGV5IGFyZSk8YnI+DQotICAgIDE9IFByZXNldCB3aXRoIGludGVybmFsbHkgY2FsY3VsYXRlZCBjb2VmZmljaWVudHMuPGJyPg0KLSAgICAyPSBQcmVzZXQgd2l0aCB6ZXJvIGNvZWZmaWNpZW50cy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfUFJFU0VUX0NPRUZTX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX1BSRVNFVF9DT0VGU19ERUZBVUxUICgxKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfUFJFU0VUX0NPRUZTX01BWCAoMik8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgTkxNU19wcmVzZXRfY29lZnM7ICAgICAgICAgIC8vLzwgQ29lZmZpY2llbnQgcHJlc2V0Lg0KLQ0KLSAgICAvKioNCi0gICAgT2Zmc2V0IGFkZGVkIHRvIHRoZSBub3JtYWxpemF0aW9uIG9mIHRoZSBhZGFwdGF0aW9uIG9mIHRoZSBmaWx0ZXIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9OTE1TX09GRlNFVF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfTkxNU19PRkZTRVRfREVGQVVMVCAoNzY3KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX05MTVNfT0ZGU0VUX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IE5MTVNfb2Zmc2V0OyAgICAgICAgICAvLy88IE5MTVMgb2Zmc2V0DQotDQotICAgIC8qKg0KLSAgICBQYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGUgcmV2ZXJiZXJhdGlvbiBvZiB0aGUgYWNvdXN0aWMgZW52aXJvbm1lbnQuIEl0DQotICAgIHJlcHJlc2VudHMgdGhlIGRlY2F5IGluIHRpbWUgb2YgdGhlIGVuZXJneSBvZiB0aGUgZWNobyB0YWlsIG9mIHRoZSBpbXB1bHNlDQotICAgIHJlc3BvbnNlIGZvciB0aGUgTEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9MQl9ERUZBVUxUICgyNTM5NSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfQUxQSEFfTEJfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU190YWlsX2FscGhhX0xCOw0KLSAgICAvKioNCi0gICAgUGFyYW1ldGVyIHJlbGF0ZWQgdG8gdGhlIHBvcnRpb24gb2YgdGhlIGVjaG8gdGFpbCB0aGF0IGhhcyB0byBiZSBleHRyYXBvbGF0ZWQNCi0gICAgaW4gdGltZSBmb3IgTEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9MQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19UQUlMX1BPUlRJT05fTEJfREVGQVVMVCAoMjk0OTEpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19UQUlMX1BPUlRJT05fTEJfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU190YWlsX3BvcnRpb25fTEI7DQotICAgIC8qKg0KLSAgICBFY2hvIHN1YnRyYWN0aW9uIGZhY3RvciBhcHBsaWVkIGR1cmluZyBmYXJlbmQtb25seSBmb3IgdGhlIExCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9MQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfTEJfREVGQVVMVCAoNTEyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0xCX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfZ2FtbWFfZV9oaWdoX0xCOyAgICAgICAgICAvLy88IEZFIEVjaG8gc3VidHJhY3Rpb24gTEINCi0NCi0gICAgLyoqDQotICAgIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIGRvdWJsZSB0YWxrIGZvciB0aGUgTEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjcuODwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9MQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0RUX0xCX0RFRkFVTFQgKDI1Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfRFRfTEJfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU19nYW1tYV9lX2R0X0xCOyAgICAgICAgICAvLy88IERUIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIExCDQotDQotICAgIC8qKg0KLSAgICBFY2hvIHN1YnRyYWN0aW9uIGZhY3RvciBhcHBsaWVkIGR1cmluZyBuZWFyZW5kLW9ubHkgZm9yIHRoZSBMQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ny44PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0xPV19MQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0xPV19MQl9ERUZBVUxUICgyNTYpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0xPV19MQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX2dhbW1hX2VfbG93X0xCOyAgICAgICAgICAvLy88IE5FIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIExCDQotDQotICAgIC8qKg0KLSAgICBUaGUgYW1vdW50IG9mIGV4dHJhIG5vbi1saW5lYXIgc3VwcHJlc3Npb24gcmVsYXRpdmUgdG8gdGhlIG1heGltdW0gbGluZWFyIGVjaG8NCi0gICAgc3VwcHJlc3Npb24gZm9yIHRoZSBMQi4gVGhlIHVzZSBvZiB0aGVzZSBub24tbGluZWFyIGVjaG8gc3VwcHJlc3Npb24gbWVjaGFuaXNtcw0KLSAgICBzaG91bGQgYmUgYXZvaWRlZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHNpbmNlIGl0IGFmZmVjdHMgdGhlIGRvdWJsZSB0YWxrDQotICAgIHBlcmZvcm1hbmNlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD40LjExPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19OTF9BVFRFTl9MQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19OTF9BVFRFTl9MQl9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfTkxfQVRURU5fTEJfTUFYICgyMDQ4KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX05MX2F0dGVuX0xCOyAgICAgICAgICAvLy88IExCIE5vbiBsaW5lYXIgYXR0ZW51YXRpb24NCi0NCi0gICAgLyoqDQotICAgIFBhcmFtZXRlciByZWxhdGVkIHRvIHRoZSByZXZlcmJlcmF0aW9uIG9mIHRoZSBhY291c3RpYyBlbnZpcm9ubWVudC4gSXQNCi0gICAgcmVwcmVzZW50cyB0aGUgZGVjYXkgaW4gdGltZSBvZiB0aGUgZW5lcmd5IG9mIHRoZSBlY2hvIHRhaWwgb2YgdGhlIGltcHVsc2UNCi0gICAgcmVzcG9uc2UgZm9yIHRoZSBIQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9IQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19UQUlMX0FMUEhBX0hCX0RFRkFVTFQgKDI1Mzk1KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9BTFBIQV9IQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX3RhaWxfYWxwaGFfSEI7DQotICAgIC8qKg0KLSAgICBQYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgZWNobyB0YWlsIHRoYXQgaGFzIHRvIGJlIGV4dHJhcG9sYXRlZA0KLSAgICBpbiB0aW1lIGZvciBIQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfVEFJTF9QT1JUSU9OX0hCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9ERUZBVUxUICgyOTQ5MSk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1RBSUxfUE9SVElPTl9IQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX3RhaWxfcG9ydGlvbl9IQjsNCi0gICAgLyoqDQotICAgIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIGZhcmVuZC1vbmx5IGZvciB0aGUgSEIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjcuODwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9ISUdIX0hCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfSElHSF9IQl9ERUZBVUxUICg1MTIpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0hJR0hfSEJfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgREVOU19nYW1tYV9lX2hpZ2hfSEI7ICAgICAgICAgIC8vLzwgRkUgRWNobyBzdWJ0cmFjdGlvbiBIQg0KLQ0KLSAgICAvKioNCi0gICAgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgYXBwbGllZCBkdXJpbmcgZG91YmxlIHRhbGsgZm9yIHRoZSBIQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ny44PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0RUX0hCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfRFRfSEJfREVGQVVMVCAoMjU2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9EVF9IQl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX2dhbW1hX2VfZHRfSEI7ICAgICAgICAgIC8vLzwgRFQgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgSEINCi0NCi0gICAgLyoqDQotICAgIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIGFwcGxpZWQgZHVyaW5nIG5lYXJlbmQtb25seSBmb3IgdGhlIEhCLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX0RFRkFVTFQgKDI1Nik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX0VfTE9XX0hCX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfZ2FtbWFfZV9sb3dfSEI7ICAgICAgICAgIC8vLzwgTkUgRWNobyBzdWJ0cmFjdGlvbiBmYWN0b3IgSEINCi0NCi0gICAgLyoqDQotICAgIFRoZSBhbW91bnQgb2YgZXh0cmEgbm9uLWxpbmVhciBzdXBwcmVzc2lvbiByZWxhdGl2ZSB0byB0aGUgbWF4aW11bSBsaW5lYXIgZWNobw0KLSAgICBzdXBwcmVzc2lvbi4gZm9yIHRoZSBIQi4gVGhlIHVzZSBvZiB0aGVzZSBub24tbGluZWFyIGVjaG8gc3VwcHJlc3Npb24NCi0gICAgbWVjaGFuaXNtcyBzaG91bGQgYmUgYXZvaWRlZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHNpbmNlIGl0IGFmZmVjdHMgdGhlIGRvdWJsZQ0KLSAgICB0YWxrIHBlcmZvcm1hbmNlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD40LjExPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19OTF9BVFRFTl9IQl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19OTF9BVFRFTl9IQl9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfTkxfQVRURU5fSEJfTUFYICgyMDQ4KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX05MX2F0dGVuX0hCOyAgICAgICAgICAvLy88IE5FIEVjaG8gc3VidHJhY3Rpb24gZmFjdG9yIEhCDQotDQotICAgIC8qKg0KLSAgICBTbW9vdGhpbmcgZmFjdG9yIGFwcGxpZWQgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBnYW1tYV9lIHZhbHVlcy4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9FX0FMUEhBX0RFRkFVTFQgKDI0MDAwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfRV9BTFBIQV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX2dhbW1hX2VfYWxwaGE7ICAgICAgICAgIC8vLzwgU21vb3RoaW5nIGZhY3RvciBmb3IgZ2FtbWFfZQ0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBmYWN0b3IgZm9yIE5vaXNlIHN1YnRyYWN0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0dBTU1BX05fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfR0FNTUFfTl9ERUZBVUxUICgyODApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19HQU1NQV9OX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfZ2FtbWFfbjsgICAgICAgICAgLy8vPCBHYWluIGZhY3Rvcg0KLQ0KLSAgICAvKioNCi0gICAgVGhyZXNob2xkIGZvciBuZWFyZW5kIGFjdGl2aXR5IGRldGVjdGlvbi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ny44PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19TUERFVF9ORUFSX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1NQREVUX05FQVJfREVGQVVMVCAoNTEyKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfU1BERVRfTkVBUl9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX3NwZGV0X25lYXI7DQotICAgIC8qKg0KLSAgICBUaHJlc2hvbGQgZm9yIG1pY3JvcGhvbmUgYWN0aXZpdHkgZGV0ZWN0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD43Ljg8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX1NQREVUX0FDVF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19TUERFVF9BQ1RfREVGQVVMVCAoNzY4KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfU1BERVRfQUNUX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfc3BkZXRfYWN0Ow0KLSAgICAvKioNCi0gICAgVGhlIG1heGltdW0gYW1vdW50IG9mIG5vaXNlIHN1cHByZXNzaW9uLiA8YnI+DQotICAgIERFTlNfbGltaXRfbnMgPSBcZiQzMjc2NyoxMF57LU1heE5vaXNlUmVkdWN0aW9uW2RCXS8yMH1cZiQNCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MC4xNTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfTElNSVRfTlNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfTElNSVRfTlNfREVGQVVMVCAoMTAzNjEpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19MSU1JVF9OU19NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX2xpbWl0X25zOyAgICAgICAgICAvLy88IE1heGltdW0gbm9pc2Ugc3VwcHJlc3Npb24uDQotDQotICAgIC8qKg0KLSAgICBUaGUgYW1vdW50IG9mIGNvbWZvcnQgbm9pc2UgaW5zZXJ0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjE0PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19DTklfR0FJTl9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19DTklfR0FJTl9ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX0NOSV9HQUlOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IERFTlNfQ05JX0dhaW47ICAgICAgICAgIC8vLzwgQ05JIGdhaW4NCi0NCi0gICAgLyoqDQotICAgIFRoZSB3aW5kb3cgbGVuZ3RoIChleHByZXNzZWQgaW4gaW50ZWdlciBtdWx0aXBsZXMgb2YgMTBtcykgZm9yIHRoZSBlc3RpbWF0aW9uDQotICAgIG9mIHRoZSBub2lzZSBjb21wb25lbnRzLiBJdCBpcyByZWNvbW1lbmRlZCB0byBrZWVwIHRoaXMgcGFyYW1ldGVyIGF0IGl0cw0KLSAgICBkZWZhdWx0IHZhbHVlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfREVOU19ORkVfQkxPQ0tTSVpFX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9ERU5TX05GRV9CTE9DS1NJWkVfREVGQVVMVCAoMTUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX0RFTlNfTkZFX0JMT0NLU0laRV9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBERU5TX05GRV9ibG9ja3NpemU7ICAgICAgICAgIC8vLzwgTkZFIGJsb2Nrc2l6ZQ0KLQ0KLSAgICAvKioNCi0gICAgVGhyZXNob2xkIGZvciBmYXJlbmQgYWN0aXZpdHkgZGV0ZWN0aW9uLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1BERVRfRkFSX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TUERFVF9GQVJfREVGQVVMVCAoMTYzODQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfU1BERVRfRkFSX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFNQREVUX2ZhcjsNCi0gICAgLyoqDQotICAgIFRocmVzaG9sZCBmb3IgbWljcm9waG9uZSBhY3Rpdml0eSBkZXRlY3Rpb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TUERFVF9NSUNfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1NQREVUX01JQ19ERUZBVUxUICgxNjM4NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TUERFVF9NSUNfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgU1BERVRfbWljOw0KLSAgICAvKioNCi0gICAgVGhyZXNob2xkIHRvIGFjdGl2YXRlIHRoZSBub24tbGluZWFyIGVjaG8tc3VwcHJlc3Npb24uDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjAuMTU8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9TUERFVF9YX0NMSVBfTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1NQREVUX1hfQ0xJUF9ERUZBVUxUICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1NQREVUX1hfQ0xJUF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBTUERFVF94X2NsaXA7DQotICAgIC8qKg0KLSAgICBUaHJlc2hvbGQgdG8gZGV0ZWN0IGFjb3VzdGljYWwgcGF0aCBjaGFuZ2VzLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4wLjE1PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX1RIUkVTSE9MRF9NSU4gKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX1RIUkVTSE9MRF9ERUZBVUxUICgyMDAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfVEhSRVNIT0xEX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFBDRF90aHJlc2hvbGQ7ICAgICAgICAgIC8vLzwgUENEIHRocmVzaG9sZA0KLQ0KLSAgICAvKioNCi0gICAgTGVuZ3RoIG9mIHRoZSBiYWNrZ3JvdW5kIGFkYXB0aXZlIGZpbHRlci4gVGhlIGxlbmd0aCBzaG91bGQgYmUgY2hvc2VuIHN1Y2ggdGhhdA0KLSAgICBvbmx5IHRoZSBtYWluIHBlYWsgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2UgaXMgY292ZXJlZCBieSB0aGUgZmlsdGVyLiBUaGUgbGVuZ3RoDQotICAgIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDguDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjE2LjA8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfVEFQU19NSU4gKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9UQVBTX0RFRkFVTFQgKDE2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9UQVBTX01BWCAoNjQpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFBDRF90YXBzOyAgICAgICAgICAvLy88IE51bWJlciBvZiB0YXBzIG9mIGJhY2tncm91bmQgTkxNUy4NCi0NCi0gICAgLyoqDQotICAgIEFkYXB0aXZlIHN0ZXAgc2l6ZSBjb250cm9sIGZvciB0aGUgYmFja2dyb3VuZCBhZGFwdGl2ZSBmaWx0ZXIuDQotICAgIDx0YWJsZSBib3JkZXI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD48Yj5RLWZvcm1hdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1pbjwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPkRlZmF1bHQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NYXg8L2I+PC90ZD4NCi0gICAgPC90cj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjkuNjwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfRVJMX0RFRkFVTFQgKDY0KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9FUkxfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgUENEX2VybDsgICAgICAgICAgLy8vPCBTdGVwIHNpemUgb2YgYmFja2dyb3VuZCBOTE1TLg0KLQ0KLSAgICAvKioNCi0gICAgSWYgYSBwYXRoIGNoYW5nZSBpcyBkZXRlY3RlZCwgTkxNU19lcmwgb2YgdGhlIE5MTVMgaXMgc2V0IHRvIHRoaXMgdmFsdWUsIHRvDQotICAgIGVuc3VyZSBhIGZhc3QgYWRhcHRpbmcgZmlsdGVyLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD45LjY8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfTUlOSU1VTV9FUkxfTUlOICg2NCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfTUlOSU1VTV9FUkxfREVGQVVMVCAoNjQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX01JTklNVU1fRVJMX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IFBDRF9taW5pbXVtX2VybDsgICAgICAgICAgLy8vPCBTdGVwIHNpemUgb2YgTkxNUyBhZnRlciBQQ0QuDQotDQotICAgIC8qKg0KLSAgICBBZnRlciBhIHBhdGggY2hhbmdlIHRoZSBOTE1TX2VybCBvZiB0aGUgTkxNUyBpbmNyZWFzZXMgYmFjayB0byB0aGUgbm9taW5hbA0KLSAgICB2YWx1ZS4gVGhlIHNwZWVkIHRvIGluY3JlYXNlIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoaXMgcGFyYW1ldGVyLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xLjE0PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX0VSTF9TVEVQX01JTiAoMTYzODQpPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX0VSTF9TVEVQX0RFRkFVTFQgKDE2ODAwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkhGX1BDRF9FUkxfU1RFUF9NQVggKDMyNzY3KTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9JTlQxNiBQQ0RfZXJsX3N0ZXA7ICAgICAgICAgIC8vLzwgU3RlcCBvZiBFUkwgaW5jcmVhc2UgYWZ0ZXIgUENELg0KLQ0KLSAgICAvKioNCi0gICAgR2FpbiBmYWN0b3IgYXBwbGllZCB0byB0aGUgZWNobyBzdWJ0cmFjdGlvbiBkdXJpbmcgYWNvdXN0aWNhbCBwYXRoIGNoYW5nZS4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Ny44PC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWSEZfUENEX0dBTU1BX0VfUkVTQ1VFX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfR0FNTUFfRV9SRVNDVUVfREVGQVVMVCAoNTAwMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZIRl9QQ0RfR0FNTUFfRV9SRVNDVUVfTUFYICgzMjc2Nyk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgUENEX2dhbW1hX2VfcmVzY3VlOyAgICAgICAgICAvLy88IGdhbW1hX2UgYWZ0ZXIgUENEDQotDQotfSBMVkhGX0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotLyoqDQotKiBUaGUgY29udHJvbCBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG92ZXJhbGwgbW9kdWxlIGJlaGF2aW9yLiBUaGVzZSBwYXJhbWV0ZXJzIG1heQ0KLSogYmUgY2hhbmdlZCBhdCBhbnkgdGltZSBkdXJpbmcgcHJvY2Vzc2luZyB1c2luZyB0aGUgTFZCRF9TZXRDb250cm9sUGFyYW1ldGVycyBmdW5jdGlvbiBidXQgdGhleQ0KLSogd2lsbCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0aGUgTFZCRF9Qcm9jZXNzIGZ1bmN0aW9uLg0KLSoNCi0qIEBzZWUgTFZCRF9TZXRDb250cm9sUGFyYW1ldGVycw0KLSogQHNlZSBMVkJEX1Byb2Nlc3MNCi0qLw0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICAvKioNCi0gICAgU2V0IEJ1bGsgRGVsYXkgb3BlcmF0aW5nIG1vZGUgb24vb2ZmLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBCRF9PcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFNldCBCdWxrIERlbGF5IG9wZXJhdGluZyBtb2RlIG9uL29mZg0KLQ0KLSAgICAvKioNCi0gICAgVGhpcyBwYXJhbWV0ZXIgY29tcGVuc2F0ZXMgZm9yIHRoZSBmaXhlZCBkZWxheSBpbiB0aGUgZWNobyBwYXRoIGFuZCBjYW4gYmUNCi0gICAgbWVhc3VyZWQgaW4gYWR2YW5jZS4gVGhpcyBkZWxheSBpcyBjYXVzZWQgYnkgdGhlIGF1ZGlvIEkvTyBidWZmZXJpbmcsIEFEL0RBDQotICAgIGNvbnZlcnRlciBhbmQgcHJvcGFnYXRpb24gdGltZSBiZXR3ZWVuIHRoZSBsb3Vkc3BlYWtlciBhbmQgbWljcm9waG9uZS4gVGhlIHVuaXQNCi0gICAgb2YgJ0J1bGtEZWxheScgaXMgW251bWJlciBvZiBzYW1wbGVzXSBhdCB0aGUgcmVzcGVjdGl2ZSBzYW1wbGluZyByYXRlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWQkRfQlVMS0RFTEFZX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZCRF9CVUxLREVMQVlfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZCRF9CVUxLREVMQVlfTUFYICg2NDAwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgQnVsa0RlbGF5OyAgICAgICAgICAvLy88IFNldHMgQnVsayBEZWxheQ0KLQ0KLSAgICAvKioNCi0gICAgVGhpcyBwYXJhbSBzZXRzIHRoZSBnYWluIGZvciB0aGUgRWNobyByZWZlcmVuY2Ugc2lnbmFsLiBWYWx1ZSA4MTkyIGJlbG9uZyB0bw0KLSAgICAwZEINCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkJEX0JEX0dBSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVkJEX0JEX0dBSU5fREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZCRF9CRF9HQUlOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEJEX0dhaW47ICAgICAgICAgIC8vLzwgQXBwbHkgR2FpbiB0byBFY2hvIHJlZmVyZW5jZSBzaWduYWwNCi0NCi19IExWQkRfQ29udHJvbFBhcmFtc19zdDsNCi0NCi0vKioNCi0qIFRoZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgb3ZlcmFsbCBtb2R1bGUgYmVoYXZpb3IuIFRoZXNlIHBhcmFtZXRlcnMgbWF5DQotKiBiZSBjaGFuZ2VkIGF0IGFueSB0aW1lIGR1cmluZyBwcm9jZXNzaW5nIHVzaW5nIHRoZSBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzIGZ1bmN0aW9uIGJ1dCB0aGV5DQotKiB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHRoZSBMVlZFX1R4X1Byb2Nlc3MgZnVuY3Rpb24uDQotKg0KLSogQHNlZSBMVlZFX1R4X1NldENvbnRyb2xQYXJhbWV0ZXJzDQotKiBAc2VlIExWVkVfVHhfUHJvY2Vzcw0KLSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIC8qKg0KLSAgICBUaGlzIGVudW1lcmF0ZWQgdHlwZSBpcyB1c2VkIHRvIHNldCB0aGUgb3BlcmF0aW5nIG1vZGUgb2YgdGhlIFR4IHBhdGguIFRoZQ0KLSAgICBwcm9jZXNzaW5nIGNhbiBiZSBzZXBhcmF0ZWx5IHNldCB0byBlbmFibGUgYWxsIHByb2Nlc3NpbmcgbW9kdWxlcyAoaS5lLiwgT04pLA0KLSAgICB0byBkaXNhYmxlIGFsbCBwcm9jZXNzaW5nIG1vZHVsZXMgKGkuZS4sIE9GRikgb3IgdG8gYnlwYXNzIGFsbCBwcm9jZXNzaW5nDQotICAgIG1vZHVsZXMgKGkuZS4sIEJZUEFTUykuIFdoZW4gYnlwYXNzZWQsIGFsbCBwcm9jZXNzaW5nIG1vZHVsZXMga2VlcCBvbiBydW5uaW5nLA0KLSAgICBidXQgdGhlaXIgb3V0cHV0IGlzIG5vdCB1c2VkLiBXaGVuIGJ5cGFzc2luZyB0aGUgVHggcHJvY2Vzc2luZywgdGhlIHVzZXIgY2FuDQotICAgIHNlbGVjdCB3aGljaCBidWZmZXIgc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciwgaWYgcmVxdWlyZWQ6IEBsaQ0KLSAgICBJbnB1dCBtaWNyb3Bob25lIHNpZ25hbCAob3Igc2Vjb25kYXJ5IG1pY3JvcGhvbmUgc2lnbmFsIGluIGNhc2Ugb2YNCi0gICAgdHdvLW1pY3JvcGhvbmUgc2V0dXBzKTsgQGxpIFJ4IHJlZmVyZW5jZSBzaWduYWw7IFRoZXNlIG9wZXJhdGlvbnMgZW5zdXJlIHRoYXQNCi0gICAgdGhlIGlucHV0IGRhdGEgaXMgY29ycmVjdGx5IHRyYW5zZmVycmVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIGZvciBhbGwNCi0gICAgY29tYmluYXRpb25zIG9mIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVyIHR5cGVzIGFuZCBpbnB1dCBmb3JtYXQuIFdoZW4gT0ZGLCB0aGUNCi0gICAgaW5wdXQgaXMgY29waWVkIHRvIHRoZSBvdXRwdXQgYW5kIHRoZSBMVlZFIGNhbiBiZSBwcm92aWRlZCB3aXRoIGludmFsaWQNCi0gICAgcGFyYW1ldGVycyBmb3IgbW9kdWxlcy4gVGhlIHN1YiBtb2R1bGUgZnVuY3Rpb25zIGFyZSBub3QgZXhlY3V0ZWQgaW4gdGhpcw0KLSAgICBzY2VuYXJpby4gVGhlaXIgY29tYmluZWQgZnVuY3Rpb25hbGl0eSBpcyBzdW1tYXJpemVkIGluIGZvbGx3b2luZyB0YWJsZS4gPGJyPg0KLSAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPiA8dGFibGUgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSI0IiBib3JkZXI9IjMiPg0KLSAgICA8Y2FwdGlvbj5MVlZFIFR4IG9wZXJhdGluZyBtb2RlIGluIGNvbWJpbmF0aW9uIHdpdGggTFZWRSBtaWNyb3Bob25lIHJvdXRpbmcNCi0gICAgbW9kZTwvY2FwdGlvbj4gPHRyPiA8dGg+PC90aD4gPHRoIGNvbHNwYW49IjIiPk1JQ1JPVVRJTkdfTU9ERV9ERUZBVUxUPC90aD4gPHRoDQotICAgIGNvbHNwYW49IjIiPk1JQ1JPVVRJTkdfTU9ERV9TV0FQUEVEPC90aD4gPC90cj4gPHRyPiA8dGggd2lkdGg9IjcwIj48L3RoPiA8dGgNCi0gICAgd2lkdGg9IjcwIj5Qcm9jZXNzPC90aD4gPHRoIHdpZHRoPSI3MCI+T3V0cHV0PC90aD4gPHRoIHdpZHRoPSI3MCI+UHJvY2VzczwvdGg+DQotICAgIDx0aCB3aWR0aD0iNzAiPk91dHB1dDwvdGg+IDwvdHI+IDx0ciBhbGlnbj0ibGVmdCI+IDx0ZD5MVlZFX1RYX01PREVfT0ZGPC90ZD4NCi0gICAgPHRkPk5vbmU8L3RkPiA8dGQ+VHggaW5wdXQgMDwvdGQ+IDx0ZD5Ob25lPC90ZD4gPHRkPlR4IGlucHV0IDE8L3RkPiA8L3RyPiA8dHINCi0gICAgYWxpZ249ImxlZnQiPiA8dGQ+TFZWRV9UWF9NT0RFX09OPC90ZD4gPHRkPlR4IGlucHV0IDA8L3RkPiA8dGQ+VHggb3V0cHV0PC90ZD4NCi0gICAgPHRkPlR4IGlucHV0IDE8L3RkPiA8dGQ+VHggb3V0cHV0PC90ZD4gPC90cj4gPHRyIGFsaWduPSJsZWZ0Ij4NCi0gICAgPHRkPkxWVkVfVFhfTU9ERV9CWVBBU1NfTUlDMDwvdGQ+IDx0ZD5UeCBpbnB1dCAwPC90ZD4gPHRkPlR4IGlucHV0IDA8L3RkPg0KLSAgICA8dGQ+VHggaW5wdXQgMTwvdGQ+IDx0ZD5UeCBpbnB1dCAxPC90ZD4gPC90cj4gPHRyIGFsaWduPSJsZWZ0Ij4NCi0gICAgPHRkPkxWVkVfVFhfTU9ERV9CWVBBU1NfTUlDMTwvdGQ+IDx0ZD5UeCBpbnB1dCAwPC90ZD4gPHRkPlR4IGlucHV0IDE8L3RkPg0KLSAgICA8dGQ+VHggaW5wdXQgMTwvdGQ+IDx0ZD5UeCBpbnB1dCAwPC90ZD4gPC90cj4gPHRyIGFsaWduPSJsZWZ0Ij4NCi0gICAgPHRkPkxWVkVfVFhfTU9ERV9CWVBBU1NfUkVGPC90ZD4gPHRkPlR4IGlucHV0IDA8L3RkPiA8dGQ+VHggcmVmIGlucHV0PC90ZD4NCi0gICAgPHRkPlR4IGlucHV0IDE8L3RkPiA8dGQ+VHggcmVmIGlucHV0PC90ZD4gPC90cj4gPC90YWJsZT4gPC9kaXY+DQotICAgICovDQotICAgIExWVkVfVHhfTW9kZV9lbiBPcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFRYIE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBUaGlzIHBhcmFtIGNhbiBtdXRlIHVubXV0ZSB0aGUgUngvVHggZW5naW5lIG91dHB1dC4NCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gTXV0ZTsgICAgICAgICAgLy8vPCBUaGlzIHBhcmFtIGNhbiBtdXRlIHVubXV0ZSB0aGUgUngvVHggZW5naW5lIG91dHB1dA0KLQ0KLSAgICAvKioNCi0gICAgU2V0IEJ1bGsgRGVsYXkgb3BlcmF0aW5nIG1vZGUgb24vb2ZmLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBCRF9PcGVyYXRpbmdNb2RlOyAgICAgICAgICAvLy88IFNldCBCdWxrIERlbGF5IG9wZXJhdGluZyBtb2RlIG9uL29mZg0KLQ0KLSAgICAvKioNCi0gICAgVGhpcyBwYXJhbWV0ZXIgY29tcGVuc2F0ZXMgZm9yIHRoZSBmaXhlZCBkZWxheSBpbiB0aGUgZWNobyBwYXRoIGFuZCBjYW4gYmUNCi0gICAgbWVhc3VyZWQgaW4gYWR2YW5jZS4gVGhpcyBkZWxheSBpcyBjYXVzZWQgYnkgdGhlIGF1ZGlvIEkvTyBidWZmZXJpbmcsIEFEL0RBDQotICAgIGNvbnZlcnRlciBhbmQgcHJvcGFnYXRpb24gdGltZSBiZXR3ZWVuIHRoZSBsb3Vkc3BlYWtlciBhbmQgbWljcm9waG9uZS4gVGhlIHVuaXQNCi0gICAgb2YgJ0J1bGtEZWxheScgaXMgW251bWJlciBvZiBzYW1wbGVzXSBhdCB0aGUgcmVzcGVjdGl2ZSBzYW1wbGluZyByYXRlLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfQlVMS0RFTEFZX01JTiAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9CVUxLREVMQVlfREVGQVVMVCAoMCk8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9CVUxLREVMQVlfTUFYICg2NDAwKTwvdGQ+DQotICAgIDwvdHI+DQotICAgIDwvdGFibGU+ICovDQotICAgIExWTV9VSU5UMTYgQnVsa0RlbGF5OyAgICAgICAgICAvLy88IFNldHMgQnVsayBEZWxheQ0KLQ0KLSAgICAvKioNCi0gICAgVGhpcyBwYXJhbSBzZXRzIHRoZSBnYWluIGZvciB0aGUgRWNobyByZWZlcmVuY2Ugc2lnbmFsLiBWYWx1ZSA4MTkyIGJlbG9uZyB0bw0KLSAgICAwZEINCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+Mi4xMzwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0JEX0dBSU5fTUlOICgwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX0JEX0dBSU5fREVGQVVMVCAoODE5Mik8L3RkPg0KLSAgICAgICAgPHRkPkByZWYgTFZWRV9UWF9CRF9HQUlOX01BWCAoMzI3NjcpPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX0lOVDE2IEJEX0dhaW47ICAgICAgICAgIC8vLzwgQXBwbHkgR2FpbiB0byBFY2hvIHJlZmVyZW5jZSBzaWduYWwNCi0NCi0gICAgLyoqDQotICAgIFR1cm5zIG9uL29mZiBWT0xfR2Fpbi4NCi0gICAgKi8NCi0gICAgTFZNX01vZGVfZW4gVk9MX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgVHVybnMgb24vb2ZmIFZPTF9HYWluDQotDQotICAgIC8qKg0KLSAgICBUaGUgdm9sdW1lIGNvbnRyb2wgZ2FpbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG92ZXJhbGwgdm9sdW1lIGxldmVsIG9mIHRoZQ0KLSAgICBzaWduYWwuIFRoZSBnYWluIGlzIHNldCBpbiBkQiB3aXRoIHN0ZXBzIG9mIDFkQi4NCi0gICAgPHRhYmxlIGJvcmRlcj4NCi0gICAgPHRyPg0KLSAgICAgICAgPHRkPjxiPlEtZm9ybWF0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWluPC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+RGVmYXVsdDwvYj48L3RkPg0KLSAgICAgICAgPHRkPjxiPk1heDwvYj48L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+MTUuMDwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX1ZPTF9HQUlOX01JTiAoLTk2KTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX1ZPTF9HQUlOX0RFRkFVTFQgKDApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfVk9MX0dBSU5fTUFYICgyNCk8L3RkPg0KLSAgICA8L3RyPg0KLSAgICA8L3RhYmxlPiAqLw0KLSAgICBMVk1fSU5UMTYgVk9MX0dhaW47ICAgICAgICAgIC8vLzwgQXBwbHkgR2FpbiB0byBJbnB1dCBzaWduYWwNCi0NCi0gICAgLyoqDQotICAgIFR1cm5zIG9uL29mZiBIaWdoIFBhc3MgZmlsdGVyLg0KLSAgICAqLw0KLSAgICBMVk1fTW9kZV9lbiBIUEZfT3BlcmF0aW5nTW9kZTsgICAgICAgICAgLy8vPCBUdXJucyBvbi9vZmYgSGlnaCBQYXNzIGZpbHRlcg0KLQ0KLSAgICAvKioNCi0gICAgU2V0cyB0aGUgM2RCIGNvcm5lciBmcmVxdWVuY3kgb2YgdGhlIGhpZ2gtcGFzcyBmaWx0ZXIuIEluIGNhc2UgTm9pc2VWb2lkIGlzDQotICAgIGVuYWJsZWQsIHRoZSBzYW1lIGhpZ2gtcGFzcyBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBzZWNvbmQgbWljcm9waG9uZQ0KLSAgICBjaGFubmVsLg0KLSAgICA8dGFibGUgYm9yZGVyPg0KLSAgICA8dHI+DQotICAgICAgICA8dGQ+PGI+US1mb3JtYXQ8L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5NaW48L2I+PC90ZD4NCi0gICAgICAgIDx0ZD48Yj5EZWZhdWx0PC9iPjwvdGQ+DQotICAgICAgICA8dGQ+PGI+TWF4PC9iPjwvdGQ+DQotICAgIDwvdHI+DQotICAgIDx0cj4NCi0gICAgICAgIDx0ZD4xNi4wPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX01JTiAoNTApPC90ZD4NCi0gICAgICAgIDx0ZD5AcmVmIExWVkVfVFhfTUlDX0hQRl9DT1JORVJGUkVRX0RFRkFVTFQgKDUwKTwvdGQ+DQotICAgICAgICA8dGQ+QHJlZiBMVlZFX1RYX01JQ19IUEZfQ09STkVSRlJFUV9NQVggKDE1MDApPC90ZD4NCi0gICAgPC90cj4NCi0gICAgPC90YWJsZT4gKi8NCi0gICAgTFZNX1VJTlQxNiBNSUNfSFBGX0Nvcm5lckZyZXE7ICAgICAgICAgIC8vLzwgSGlnaCBQYXNzIEZpbHRlciBDb3JuZXIgRnJlcXVlbmN5IGluIEh6DQotDQotICAgIC8qKg0KLSAgICBIYW5kc0ZyZWUgQ29udHJvbCBQYXJhbWV0ZXIgU3RyY3V0dXJlLg0KLSAgICAqLw0KLSAgICBMVkhGX0NvbnRyb2xQYXJhbXNfc3QgSEZfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBIYW5kc0ZyZWUgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlDQotDQotICAgIC8qKg0KLSAgICBOb2lzZVZvaWQgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVk5WX0NvbnRyb2xQYXJhbXNfc3QgTlZfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBOb2lzZVZvaWQgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlDQotDQotICAgIC8qKg0KLSAgICBFcXVhbGl6ZXIgT3BlcmF0aW5nIG1vZGUuDQotICAgICovDQotICAgIExWTV9Nb2RlX2VuIEVRX09wZXJhdGluZ01vZGU7ICAgICAgICAgIC8vLzwgRXF1YWxpemVyIE9wZXJhdGluZyBtb2RlDQotDQotICAgIC8qKg0KLSAgICBFcXVhbGl6ZXIgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlLg0KLSAgICAqLw0KLSAgICBMVkVRX0NvbnRyb2xQYXJhbXNfc3QgRVFfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBFcXVhbGl6ZXIgQ29udHJvbCBQYXJhbWV0ZXJzIFN0cnVjdHVyZQ0KLQ0KLSAgICAvKioNCi0gICAgRFJDIENvbnRyb2wgUGFyYW1ldGVyIFN0cnVjdHVyZS4NCi0gICAgKi8NCi0gICAgTFZEUkNfQ29udHJvbFBhcmFtc19zdCBEUkNfQ29udHJvbFBhcmFtczsgICAgICAgICAgLy8vPCBEUkMgQ29udHJvbCBQYXJhbWV0ZXIgU3RydWN0dXJlDQotDQotfSBMVlZFX1R4X0NvbnRyb2xQYXJhbXNfc3Q7DQotDQotLy9hZGIgYnkgeHV4aW5xaWFuZyAgMjAxNTA1MTkNCi0jZGVmaW5lIExWVkVfTUFYX0VRX0xFTkdUSF9OQiAgICAgICAgICAgICAgICAzMiAgICAgICAgICAgLyogTWF4aW11bSBlcXVhbGlzZXIgbGVuZ3RoIGZvciBuYXJyb3diYW5kIGNvbmZpZ3VyYXRpb24gKi8NCi0jZGVmaW5lIExWVkVfTUFYX0VRX0xFTkdUSF9XQiAgICAgICAgICAgICAgICA2NCAgICAgICAgICAgLyogTWF4aW11bSBlcXVhbGlzZXIgbGVuZ3RoIGZvciB3aWRlYmFuZCBjb25maWd1cmF0aW9uICovDQotLypbQmVnaW5dIFtsdndlbmh1YS0yMDEzLzEwLzIxXSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIExWTV9JTlQxNiAgICAgICAgICAgICAgICAgICAgIEVxQ29lZnNbTFZWRV9NQVhfRVFfTEVOR1RIX05CXTsNCi19IExWRVFfQ29lZnNfc3Q7DQotLypbRW5kXSBbbHZ3ZW5odWEtMjAxMy8xMC8yMV0qLw0KLS8qW0JlZ2luXSBbbHZ3ZW5odWEtMjAxMi8zLzEyXSovDQotI2RlZmluZSBMVlZDX1ZPTFVNRV9OVU0gICAgICAgICAgICAgMTINCi0NCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX0lOVDE2ICAgICAgICAgICAgICAgICAgIE5vaXNlU2Vuc2l0aXZpdHlbTFZWQ19WT0xVTUVfTlVNXTsNCi19IExWVkNfTm9pc2VTZW5zX3N0Ow0KLS8qW0VuZF0gW2x2d2VuaHVhLTIwMTIvMy8xMl0qLw0KLQ0KLS8qW0JlZ2luXSBbbHZ3ZW5odWEtMjAxMS84LzIzXSovDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIExWVkVfVHhfQ29udHJvbFBhcmFtc19zdCAgICBUeF9Db250cm9sUGFyYW1zOw0KLSAgICBMVlZFX1J4X0NvbnRyb2xQYXJhbXNfc3QgICAgUnhfQ29udHJvbFBhcmFtczsNCi0gICAgTFZFUV9Db2Vmc19zdCBUeEVxQ29lZnM7DQotICAgIExWRVFfQ29lZnNfc3QgUnhFcUNvZWZzOw0KLSAgICAvKltCZWdpbl0gW2x2d2VuaHVhLTIwMTIvMy8xMl0qLw0KLSAgICBMVlZDX05vaXNlU2Vuc19zdCBSeFZjTm9pc2VTZW5zOw0KLSAgICAvKltFbmRdIFtsdndlbmh1YS0yMDEyLzMvMTJdKi8NCi19IExWVkVfQ29udHJvbFBhcmFtc19zdDsNCi10eXBlZGVmIHN0cnVjdA0KLXsNCi0gICAgTFZNX1VJTlQzMiBpc1ZwUGFyYW1Jbk52Ow0KLSAgICBMVlZFX0NvbnRyb2xQYXJhbXNfc3QgICAgSGFuZHNldF9Db250cm9sUGFyYW1zOw0KLSAgICBMVlZFX0NvbnRyb2xQYXJhbXNfc3QgICAgSGFuZHNmcmVlX0NvbnRyb2xQYXJhbXM7DQotICAgIExWVkVfQ29udHJvbFBhcmFtc19zdCAgICBIZWFkc2V0X0NvbnRyb2xQYXJhbXM7DQotICAgIExWVkVfQ29udHJvbFBhcmFtc19zdCAgICBCbHVldG9vdGhfQ29udHJvbFBhcmFtczsNCi19IExWVkVfQ29udHJvbFBhcmFtc19BbGxfc3Q7DQotLypbRW5kXSBbbHZ3ZW5odWEtMjAxMS84LzIzXSovDQotDQotDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KLQ0KLSNlbmRpZiAgICAgIC8qIF9fUkVMX0xWVkVfSEZfTlYxX1ZDX0FHQ19SWF9EUkNfUlhfVklEUFBfSF9fICovDQotDQotLyogRW5kIG9mIGZpbGUgKi8NCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC91Y2xpbnV4L1BBUkFNX0RlZmF1bHQuaCBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3VjbGludXgvUEFSQU1fRGVmYXVsdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMTUzZTgyLi4wMDAwMDAwCi0tLSBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3VjbGludXgvUEFSQU1fRGVmYXVsdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLXN0YXRpYyBMVk1fQ0hBUiBMVlZFX1R4X1ByZXNldF9CdWZmZXJfVm9pY2VfVG9vbFtdID17DQotMHgwMywgMHgwMCwgMHgwOSwgMHgxOCwgMHgwMywgMHhENSwgMHgwNywgMHgwMCwgMHgwMCwgMHhCNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgyMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgDQotMHgwMCwgMHgwMSwgMHgwMCwgMHhGRiwgMHgwMiwgMHgzMywgMHg2MywgMHgzMywgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgDQotMHgwMCwgMHgzMywgMHg2MywgMHgzMywgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhDMCwgMHg1RCwgMHgxOCwgDQotMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMywgMHg3OSwgMHgyOCwgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgDQotMHgwMCwgMHgyMCwgMHg0RSwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhBMCwgMHg0MSwgMHg4OCwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHhGNywgMHg0OSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwOCwgMHgyMCwgMHgwMCwgMHgwMCwgDQotMHgyMCwgMHhFOCwgMHgwMywgMHgxOCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhFOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMywgMHgyMCwgMHgwMCwgMHgwMCwgDQotMHgyMCwgMHhFOCwgMHgwMywgMHgxOCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhFOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMywgMHg5NiwgMHgwMCwgMHhGRiwgDQotMHg3RiwgMHg5QSwgMHgxOSwgMHhGRiwgMHg3RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg4RiwgMHgwMiwgMHgwMCwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2NiwgMHgwNiwgMHgwMCwgMHgwMSwgMHg2NiwgDQotMHgwNiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHhFMCwgMHgyRSwgMHg1OCwgMHgxQiwgMHgwMCwgMHgwMSwgMHhDRSwgMHgyQywgMHgwMCwgMHg0MCwgMHg4NCwgDQotMHgyQiwgMHg5QSwgMHgxOSwgMHg2NiwgMHgyNiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyNCwgMHg0MCwgMHgwMSwgMHhFNiwgMHgwMCwgMHg2NSwgDQotMHg2NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgDQotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHhBMCwgMHhGRiwgMHhCQSwgDQotMHhGRiwgMHhDRSwgMHhGRiwgMHhFOCwgMHhGRiwgMHgwMCwgMHgwMCwgMHhBMCwgMHhGRiwgMHhCQSwgMHhGRiwgMHhEQSwgMHhGRiwgMHhGNCwgMHhGRiwgMHgwMCwgDQotMHgwMCwgMHgzMiwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMA0KLX07DQotc3RhdGljIExWTV9DSEFSIExWVkVfUnhfUHJlc2V0X0J1ZmZlcl9Wb2ljZV9Ub29sIFtdPXsNCi0weDAzLCAweDAwLCAweDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEI1LCAweDAyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLCAweDJBLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCANCi0weDA1LCAweDIwLCAweDRFLCAweDAwLCAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAyLCAweDE3LCAweDJGLCAweDVDLCAweDdGLCAweEI5LCANCi0weDdFLCAweDgyLCAweDVBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCANCi0weDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCANCi0weEZGLCAweEY0LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweEZELCANCi0weDFGLCAweEIwLCAweDYzLCAweEFELCAweDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEIwLCANCi0weEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEIwLCAweEZGLCAweENFLCAweEZGLCAweEU4LCANCi0weEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAzLCAweDAwLCAweDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCANCi0weEI1LCAweDAyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAxLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLCAweDJBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA1LCAweDIwLCAweDRFLCAweDAwLCAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCANCi0weDAwLCAweDAyLCAweDE3LCAweDJGLCAweDVDLCAweDdGLCAweEI5LCAweDdFLCAweDgyLCAweDVBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCANCi0weDAwLCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCAweEZGLCAweEY0LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDA3LCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweEZELCAweDFGLCAweEIwLCAweDYzLCAweEFELCAweDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEIwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCANCi0weEEwLCAweEZGLCAweEIwLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAzLCAweDAwLCANCi0weDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEI1LCAweDAyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLCAweDJBLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA1LCAweDIwLCANCi0weDRFLCAweDAwLCAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAyLCAweDE3LCAweDJGLCAweDVDLCAweDdGLCAweEI5LCAweDdFLCAweDgyLCANCi0weDVBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEEwLCANCi0weEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCAweEZGLCAweEY0LCANCi0weEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweEZELCAweDFGLCAweEIwLCANCi0weDYzLCAweEFELCAweDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEIwLCAweEZGLCAweEJBLCANCi0weEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEIwLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCANCi0weDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAzLCAweDAwLCAweDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEI1LCAweDAyLCANCi0weDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA2LCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweEUwLCAweDJBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA1LCAweDIwLCAweDRFLCAweDAwLCAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAyLCANCi0weDE3LCAweDJGLCAweDVDLCAweDdGLCAweEI5LCAweDdFLCAweDgyLCAweDVBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCANCi0weDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCANCi0weEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCAweEZGLCAweEY0LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCANCi0weDAwLCAweDQwLCAweDgwLCAweDAwLCAweEZELCAweDFGLCAweEIwLCAweDYzLCAweEFELCAweDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDA1LCAweDAwLCAweEIwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCANCi0weEIwLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAzLCAweDAwLCAweDA5LCAweDE4LCANCi0weDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEI1LCAweDAyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLCAweDJBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA1LCAweDIwLCAweDRFLCAweDAwLCANCi0weDQwLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAyLCAweDE3LCAweDJGLCAweDVDLCAweDdGLCAweEI5LCAweDdFLCAweDgyLCAweDVBLCAweDAwLCANCi0weDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEEwLCAweEZGLCAweEJBLCANCi0weEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCAweEZGLCAweEY0LCAweEZGLCAweDAwLCANCi0weDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweEZELCAweDFGLCAweEIwLCAweDYzLCAweEFELCANCi0weDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEIwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCANCi0weEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEIwLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCANCi0weDAwLCAweDMyLCAweDAwLCAweDAzLCAweDAwLCAweDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEI1LCAweDAyLCAweDAwLCAweDAwLCANCi0weDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA2LCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weEUwLCAweDJBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDA2LCAweDA1LCAweDIwLCAweDRFLCAweDAwLCAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAyLCAweDE3LCAweDJGLCANCi0weDVDLCAweDdGLCAweEI5LCAweDdFLCAweDgyLCAweDVBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDA1LCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCANCi0weEJBLCAweEZGLCAweERBLCAweEZGLCAweEY0LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCANCi0weDgwLCAweDAwLCAweEZELCAweDFGLCAweEIwLCAweDYzLCAweEFELCAweDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDA1LCAweDAwLCAweEIwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEIwLCAweEZGLCANCi0weENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwDQotfTsNCi1jb25zdCBzdGF0aWMgTFZNX0NIQVIgTFZWRV9UeF9NdXRlX0ZpbGVfQnVmZmVyW10gPXsNCi0weDAzLCAweDAwLCAweDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEI1LCAweDAyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDExLCAweDAwLCAweDAwLCAweDAwLCANCi0weDIwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCANCi0weDAwLCAweDAxLCAweDAwLCAweEZGLCAweDAyLCAweDMzLCAweDYzLCAweDMzLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCANCi0weDAwLCAweDMzLCAweDYzLCAweDMzLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweEMwLCAweDVELCAweDE4LCANCi0weDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDc5LCAweDI4LCAweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCANCi0weDAwLCAweDIwLCAweDRFLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweEEwLCAweDQxLCAweDg4LCAweDEzLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweEY3LCAweDQ5LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweDAwLCAweDA4LCAweDIwLCAweDAwLCAweDAwLCANCi0weDIwLCAweEU4LCAweDAzLCAweDE4LCAweDAwLCAweDAwLCAweDIwLCAweEU4LCAweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDAzLCAweDIwLCAweDAwLCAweDAwLCANCi0weDIwLCAweEU4LCAweDAzLCAweDE4LCAweDAwLCAweDAwLCAweDIwLCAweEU4LCAweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDAzLCAweDk2LCAweDAwLCAweEZGLCANCi0weDdGLCAweDlBLCAweDE5LCAweEZGLCAweDdGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhGLCAweDAyLCAweDAwLCAweDA0LCAweDEwLCAweDAwLCAweDY2LCAweDA2LCAweDAwLCAweDAxLCAweDY2LCANCi0weDA2LCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweEUwLCAweDJFLCAweDU4LCAweDFCLCAweDAwLCAweDAxLCAweENFLCAweDJDLCAweDAwLCAweDQwLCAweDg0LCANCi0weDJCLCAweDlBLCAweDE5LCAweDY2LCAweDI2LCAweDAwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDI0LCAweDQwLCAweDAxLCAweEU2LCAweDAwLCAweDY1LCANCi0weDY2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweEEwLCAweEZGLCAweEJBLCANCi0weEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCAweEZGLCAweEY0LCAweEZGLCAweDAwLCANCi0weDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwDQotfTsNCi1jb25zdCBzdGF0aWMgTFZNX0NIQVIgTFZWRV9UeF9XYl9NdXRlX0ZpbGVfQnVmZmVyW10gPXsNCi0weDAzLCAweDAwLCAweDA5LCAweDE4LCAweDAzLCAweEQ1LCAweDA3LCAweDAwLCAweDAwLCAweEJELCAweDAyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweDExLCAweDAwLCAweDAwLCAweDAwLCANCi0weDIwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCANCi0weDAwLCAweDAxLCAweDAwLCAweEZGLCAweDAyLCAweDMzLCAweDYzLCAweDMzLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCANCi0weDAwLCAweDMzLCAweDYzLCAweDMzLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweEMwLCAweDVELCAweDE4LCANCi0weDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDc5LCAweDI4LCAweDAwLCAweDQwLCAweDk2LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCANCi0weDAwLCAweDIwLCAweDRFLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweEEwLCAweDQxLCAweDg4LCAweDEzLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweEY3LCAweDQ5LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweDAwLCAweDA4LCAweDIwLCAweDAwLCAweDAwLCANCi0weDIwLCAweEU4LCAweDAzLCAweDE4LCAweDAwLCAweDAwLCAweDIwLCAweEU4LCAweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDAzLCAweDIwLCAweDAwLCAweDAwLCANCi0weDIwLCAweEU4LCAweDAzLCAweDE4LCAweDAwLCAweDAwLCAweDIwLCAweEU4LCAweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDAzLCAweDk2LCAweDAwLCAweEZGLCANCi0weDdGLCAweDlBLCAweDE5LCAweEZGLCAweDdGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhGLCAweDAyLCAweDAwLCAweDA0LCAweDEwLCAweDAwLCAweDY2LCAweDA2LCAweDAwLCAweDAxLCAweDY2LCANCi0weDA2LCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweEUwLCAweDJFLCAweDU4LCAweDFCLCAweDAwLCAweDAxLCAweENFLCAweDJDLCAweDAwLCAweDQwLCAweDg0LCANCi0weDJCLCAweDlBLCAweDE5LCAweDY2LCAweDI2LCAweDAwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDI0LCAweDQwLCAweDAxLCAweEU2LCAweDAwLCAweDY1LCANCi0weDY2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweEZELCAweDFGLCAweEIwLCAweDYzLCAweEFELCANCi0weDdGLCAweDlELCAweDVBLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCANCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCANCi0weDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweENFLCAweEZGLCAweEU4LCAweEZGLCAweDAwLCAweDAwLCAweEEwLCAweEZGLCAweEJBLCAweEZGLCAweERBLCANCi0weEZGLCAweEY0LCAweEZGLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIA0KLX07DQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdWNsaW51eC9hdWRpb19wcm9jZXNzLmEgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC91Y2xpbnV4L2F1ZGlvX3Byb2Nlc3MuYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNDQ5ZmViZi4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL254cC91Y2xpbnV4L2F1ZGlvX3Byb2Nlc3MuYQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvbnhwL3VjbGludXgvbnhwX0Rydk52RGF0YS5oIGIvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdWNsaW51eC9ueHBfRHJ2TnZEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGNlOTVhODcuLjAwMDAwMDAKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS9ueHAvdWNsaW51eC9ueHBfRHJ2TnZEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vLzYgbGV2ZWwgdm9sdW1lDQotLy8jZGVmaW5lIExWV01fVFhfRklMRV9TSVpFICAgIDQ2MyAgICAgLy/X1r3ayv0NCi0vLyNkZWZpbmUgTFZXTV9SWF9GSUxFX1NJWkUgICAgIDE4NjYNCi0vL3VjIGFjdHVhbCBzaXplDQotLy8jZGVmaW5lIExWV01fVFhfRklMRV9TSVpFICAgIDM3OSAgICAgLy/X1r3ayv0NCi0vLyNkZWZpbmUgTFZXTV9SWF9GSUxFX1NJWkUgICAgMTQ4Mg0KLQ0KLQ0KLQ0KLS8vY29uc3Qgc3RhdGljIExWTV9DSEFSIExWVkVfUGFyYW1fVGVzdFtdID17fTsNCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3RkbS9oYWxfdGRtLmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3RkbS9oYWxfdGRtLmMKaW5kZXggNTBlMjhkYS4uMzIyYWVhNCAxMDA3NTUKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS90ZG0vaGFsX3RkbS5jCisrKyBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2UvdGRtL2hhbF90ZG0uYwpAQCAtNTQsNyArNTQsNiBAQAogI2RlZmluZSBURE1fRFJJVkVSX1ZFUlNJT04gICAgICAgICAgMQ0KIA0KIC8vI2RlZmluZSBBUk1fVERNX0xPT1BfU0VUCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShaWF9TT0NfU1lTX0JBU0UgKyAweDYwKSkNCi0jZGVmaW5lIEFSTV9URE1fTE9PUF9DRkcJKigodm9sYXRpbGUgVUlOVDMyICopKFNPQ19TWVNfUkVHX0JBU0UrMHg2MCkpDQogDQogLyogdmVyc2lvbiByZWdpc3RlciAqLw0KICNkZWZpbmUgVERNX1ZFUlNJT04gICAgIAkJCQkweDAxMDQJLypURE0gVmVyc2lvbiBWMS40Ki8NCkBAIC0yNDE2LDEyICsyNDE1LDcgQEAKIAltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsNCiAJdGRtRG1hU3RhdGVbVERNX1JYXS5jaGFubmVsID0gRE1BX0NIX1RETV9SWDA7DQogCXRkbURtYVN0YXRlW1RETV9SWF0uY2ggPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIHp4MjlfZG1hX2ZpbHRlcl9mbiwgKHZvaWQqKSh0ZG1EbWFTdGF0ZVtURE1fUlhdLmNoYW5uZWwpKTsNCi0JaWYoIXRkbURtYVN0YXRlW1RETV9SWF0uY2gpew0KLQkJDQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCIlczogZG1hX3JlcXVlc3RfY2hhbm5lbCBmYWlsLCAgZG1hX2lkKCVkKS5cbiIsX19mdW5jX18sdGRtRG1hU3RhdGVbVERNX1JYXS5jaGFubmVsKTsNCi0JCXJldHVybiBEUlZfRVJSX0JVU1k7DQotDQotCX0JDQorCQ0KIAlmb3IgKGkgPSAwOyBpIDwgVERNX09VVF9CVUZfTlVNOyBpKyspIHsNCiAJCXRlbXBbaV0uZGVzdF9hZGRyIAk9IHRkbURtYVN0YXRlW1RETV9SWF0uZG1hX3BoeWFkZHIgICsgKHRkbVN0cmVhbS0+cnhMZW4pICogaTsNCiAJCXRlbXBbaV0uc3JjX2FkZHIJPSBaWDI5X1RETV9QSFlTICsgMHgyNDsNCkBAIC0yNDkwLDEyICsyNDg0LDYgQEAKIAltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsNCiAJdGRtRG1hU3RhdGVbVERNX1RYXS5jaGFubmVsID0gRE1BX0NIX1RETV9UWDA7CQ0KIAl0ZG1EbWFTdGF0ZVtURE1fVFhdLmNoID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCB6eDI5X2RtYV9maWx0ZXJfZm4sICh2b2lkKikodGRtRG1hU3RhdGVbVERNX1RYXS5jaGFubmVsKSk7DQotCWlmKCF0ZG1EbWFTdGF0ZVtURE1fVFhdLmNoKXsNCi0JCQ0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywiJXM6IGRtYV9yZXF1ZXN0X2NoYW5uZWwgZmFpbCwgIGRtYV9pZCglZCkuXG4iLF9fZnVuY19fLHRkbURtYVN0YXRlW1RETV9UWF0uY2hhbm5lbCk7DQotCQlyZXR1cm4gRFJWX0VSUl9CVVNZOw0KLQ0KLQl9DQogCQ0KIAlmb3IgKGkgPSAwOyBpIDwgVERNX09VVF9CVUZfTlVNOyBpKyspIHsNCiAJCXRlbXBbaV0uc3JjX2FkZHIgCT0gdGRtRG1hU3RhdGVbVERNX1RYXS5kbWFfcGh5YWRkciArICh0eFN0cmVhbS0+dHhMZW4pICogaTsNCkBAIC0yODUyLDcgKzI4NDAsNiBAQAogCVNJTlQzMiByZXQgPSBEUlZfU1VDQ0VTUzsNCiANCiAJcmV0ID0gdGRtX1Jlc2V0KCk7DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ6RHJ2VERNX1Jlc2V0ICwgcmV0PSVkIixyZXQpOw0KIAkNCiAJcmV0dXJuIHJldDsNCiB9DQpAQCAtMzc2NCwyMSArMzc1MSw2IEBACiANCiBWT0lEIHZwX1NldFRvcFRkbUNvbmZpZyhWT0lEKQ0KIHsNCi0gICAgVUlOVDMyIEFtclJlZ0JpdCA9IDA7DQotDQotCS8qIGludGVyIGxvb3AgKi8NCi0JQW1yUmVnQml0ID0gQVJNX1RETV9MT09QX0NGRzsNCi0JDQotCUFtclJlZ0JpdCAmPSAweGZmZmZmZTA3Ow0KLQlBbXJSZWdCaXQgfD0gMHgwMDAwMDBhODsgLyogMHgwMDAwMDBhOCBsb29wIGRzcCBhZmUobG9vcCBpMnMxKS0tYXJtIGkyczIobG9vcCBpMnMyKSAweDAwMDAwMTUwIGxvb3AgZHNwIGFybShsb29wIGkyczEpLS1hZmUgaTJzMihsb29wIGkyczIpKi8NCi0NCi0JQVJNX1RETV9MT09QX0NGRyA9IEFtclJlZ0JpdDsNCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1NldFRvcFRETUNvbmZpZyBBUk1fVERNX0xPT1BfQ0ZHPTB4JXhcbiIsIEFSTV9URE1fTE9PUF9DRkcpOw0KLQkNCi0NCi0NCi0NCiAjaWYgMA0KICAgICBVSU5UMzIgQW1yUmVnQml0ID0gMDsNCiAJaW50IHJldCA9IDA7DQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS92b2ljZXByb2Nlc3MvaGFsX3ZvaWNlYnVmZmVyLmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3ZvaWNlcHJvY2Vzcy9oYWxfdm9pY2VidWZmZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGQwZTVmNy4uMDAwMDAwMAotLS0gYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3ZvaWNlcHJvY2Vzcy9oYWxfdm9pY2VidWZmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIFpURSBDb3Jwb3JhdGlvbi4NCi0gKg0KLSAqIEZpbGUgTmFtZTpoYWxfdm9pY2VidWZmZXIuYw0KLSAqIEZpbGUgTWFyazoNCi0gKiBEZXNjcmlwdGlvbjogdm9pY2UgYnVmZmVyIGZ1bmN0aW9uLg0KLSAqIE90aGVyczoNCi0gKiBWZXJzaW9uOg0KLSAqIEF1dGhvcjogICAgICAgIHh4cQ0KLSAqIERhdGU6ICAgICAgICAgIDIwMjQtMDctMDMNCi0gKiBIaXN0b3J5IDE6DQotICogICAgIERhdGU6IA0KLSAqICAgICBWZXJzaW9uOg0KLSAqICAgICBBdXRob3I6DQotICogICAgIE1vZGlmaWNhdGlvbjogZWRpdCBmb3IgdW5pb24gdmVyc2lvbg0KLSAqIEhpc3RvcnkgMjoNCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgZmlsZXMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSNpbmNsdWRlICJkcnZzX2dlbmVyYWwuaCINCi0jaW5jbHVkZSAiZHJ2c192b2x0ZS5oIg0KLSNpbmNsdWRlICJkcnZzX2kycy5oIg0KLSNpbmNsdWRlICJkcnZzX3ZvaWNlcHJvY2Vzcy5oIg0KLSNpbmNsdWRlICJoYWxfdm9pY2Vwcm9jZXNzLmgiDQotI2luY2x1ZGUgImRydnNfdm9pY2VfY29uZmlnLmgiDQotLy8jaW5jbHVkZSAiaGFsX3BjbW1peGVyLmgiDQotI2luY2x1ZGUgIk52UGFyYW1fZHJ2LmgiDQotI2luY2x1ZGUgImRydnNfaW9fdm9pY2UuaCINCi0jaW5jbHVkZSAiaGFsX3JpbmdkYXRhLmgiDQotI2luY2x1ZGUgImRydnNfdGRtLmgiDQotI2luY2x1ZGUgImhhbF9kdG1mX2RldGVjdC5oIg0KLSNpbmNsdWRlICJoYWxfYXVkaW9fZGF0YS5oIg0KLS8vI2RlZmluZSBURVNUX1dISVRFX05PSVNFDQotDQotLy8jZGVmaW5lICBWQl9EQVRBX0xPU1NfVEVTVA0KLSNpZmRlZiBURVNUX1dISVRFX05PSVNFDQotI2luY2x1ZGUgIkZzODAwMF9XaGl0ZU5vaXNlX01vbi5oIg0KLS8vI2luY2x1ZGUgIkZzODAwMF9TaW5lXzQ0MEh6X01vbi5oIg0KLSNlbmRpZg0KLQ0KLSNpbmNsdWRlICJkcnZzX2ljcC5oIg0KLSNpbmNsdWRlICJkcnZzX3JwbXNnLmgiDQotLy8jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPg0KLSNpbmNsdWRlICJoYWxfdm9pY2VidWZmZXIuaCINCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbCBNYWNyb3MNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8vI2RlZmluZSBVU0VfQVVESU9fUklORw0KLS8vI2RlZmluZSBWUF9HRVRfVFhfQUxMX0RBVEENCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbCBUeXBlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWwgQ29uc3RhbnRzDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1zdGF0aWMgU0lOVDMyIHZwX0dldF9BZGRfUnBNc2dfVmJ1ZmZlcihWT0lEKTsNCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbCBGdW5jdGlvbiBQcm90b3R5cGVzDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbCBDb25zdGFudHMNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIFZhcmlhYmxlcw0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotLy9zdGF0aWMgVF96RHJ2VnBfU3BlZWNoU3RhdGUgKnNfcFNwZWVjaFN0YXRlID0gTlVMTDsNCi1leHRlcm4gVF96RHJ2VnBfU3BlZWNoU3RhdGUgc19zcGVlY2hTdGF0ZTsgIC8vMTA0IGJ5dGVzDQotZXh0ZXJuIFRfekRydlZvaWNlX0diVmFyIGdfdm9pY2VWYXI7DQotZXh0ZXJuIFRfekRydlZwX1N0YXRlIHNfdnBTdGF0ZTsNCi0NCi0NCi0jaWZkZWYgRUNBTExfU1VQUE9SVA0KLWV4dGVybiBpbnQgZVdyRXJyOw0KLWV4dGVybiBVSU5UOCBlX3JlZ19mbGFnOw0KLQ0KLSNlbmRpZg0KLQ0KLS8vZm9yIHRlc3Qgd2hpdGVOb2lzZQ0KLSNpZmRlZiBURVNUX1dISVRFX05PSVNFDQotZXh0ZXJuIFVJTlQzMiB0ZW1wQ291bnQ7DQotZXh0ZXJuIFVJTlQ4ICpwVm9pY2VUZW1wQnVmOw0KLSNlbmRpZg0KLQ0KLQ0KLWV4dGVybiBUX1pEcnZfVnBJbk91dEJ1ZmZlciB2cEluT3V0QnVmZmVyOw0KLQ0KLWV4dGVybiBUX0hhbE1peGVyVG9uZUluZm8gbWl4ZXJUb25lSW5mbzsNCi0NCi1zdGF0aWMgaW50IHZidWZmZXJfaW5pdF9mbGFnID0gMDsNCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0vL2FkdXZvaWNlIGNvbmZpZyBjb2RlDQotDQotDQotDQotDQotDQotDQotZXh0ZXJuIFNJTlQzMiB2b2ljZV9Ub25lTWl4ZXJEYXRhKFVJTlQ4ICpwdmRhdGEsIFVJTlQzMiBzaXplLCBVSU5UOCAqcG1peGRhdGEpOy8veGl1IGdhaSBjaHUgc2hlbmcgbWluZw0KLWV4dGVybiBTSU5UMzIgekRydkkyU19SZWFkX1N0YXJ0KFRfWkRydkkyU19JZCB0SWQsIFRfWkRydkkyc19QYXJhbXMgKnBhcmFtcywgVF9aRHJ2STJTX0NmZyAqcHRDZmcpOy8veGl1IGdhaSBjaHUgc2hlbmcgbWluZw0KLWV4dGVybiBTSU5UMzIgekRydkkyU19Xcml0ZV9TdGFydChUX1pEcnZJMlNfSWQgdElkLCBUX1pEcnZJMnNfUGFyYW1zICpwYXJhbXMsIFRfWkRydkkyU19DZmcgKnB0Q2ZnKTsvL3hpdSBnYWkgY2h1IHNoZW5nIG1pbmcNCi0NCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIERlZmluaXRpb25zDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1aT1NTX1RJTUVSX0lEIHNfdm9pY2VUaW1lcklkIDsNCi1aT1NTX1NFTUFQSE9SRV9JRCBzX3ZvaWNlUmRTZW1hOw0KLVpPU1NfU0VNQVBIT1JFX0lEIHNfdm9pY2VXclNlbWE7DQotDQotLy8jaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KLS8vI2lmZGVmIF9WQlVGRl9JTl9NVUxUSV9DT1JFDQotLy92b2ljZSBidWZmZXIgdXNlIGluIG11bHRpIGNvcmUgDQotLy8jZGVmaW5lIFJQTVNHX0NBUF9JRCAxDQotDQotDQotDQotaW50IHRpbWVyX2NiX2NvdW50ID0gMDsNCi1pbnQgZmlyc3RfZnVsbF9mbGFnID0gMDsNCi1pbnQgZmlyc3RfZW1wdHlfZmxhZyA9IDA7DQotDQotaW50IHZiX3JlYWRfY291bnQgPSAwOw0KLWludCB2Yl93cml0ZV9jb3VudCA9IDA7DQotDQotDQotDQotc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyICp2b2ljZV9idWZmWzJdID0ge05VTEwsTlVMTH07DQotDQotDQotDQotc3RhdGljIGJvb2wgdm9pY2VfYnVmZl9pc19mdWxsKGludCByZWFkX3BvcywgaW50IHdyaXRlX3BvcykNCi17DQotDQotDQotCWlmICgod3JpdGVfcG9zIC0gcmVhZF9wb3MpID49IDIwMDAwMDAwKSB7DQotCQl3cml0ZV9wb3MgPSB3cml0ZV9wb3MgLSAyMDAwMDAwMDsNCi0JCS8vdm9pY2VfYnVmZltVUF9MSU5LXS0+d3JpdGVfcG9zID0gd3JpdGVfcG9zOw0KLQkJdm9pY2VfYnVmZltET1dOX0xJTktdLT53cml0ZV9wb3MgPSB3cml0ZV9wb3M7DQotCX0NCi0JcmV0dXJuICgod3JpdGVfcG9zIC0gcmVhZF9wb3MpID09IE1BWF9CVUZfTlVNKTsNCi19DQotc3RhdGljIGJvb2wgdm9pY2VfYnVmZl9pc19lbXB0eShpbnQgcmVhZF9wb3MsIGludCB3cml0ZV9wb3MpDQotew0KLQkNCi0JcmV0dXJuICh3cml0ZV9wb3MgPT0gcmVhZF9wb3MpOw0KLX0NCi1zdGF0aWMgaW50IHZvaWNlX2J1ZmZlcl93cml0ZSggY2hhciAqYnVmLCBpbnQgY291bnQpDQotew0KLQlpbnQgcmVhZF9wb3MsIHdyaXRlX3BvczsJDQotDQotDQotCXJlYWRfcG9zID0gdm9pY2VfYnVmZltET1dOX0xJTktdLT5yZWFkX3BvczsNCi0Jd3JpdGVfcG9zID0gdm9pY2VfYnVmZltET1dOX0xJTktdLT53cml0ZV9wb3M7CQ0KLQlpZih2Yl93cml0ZV9jb3VudCA9PSAwKXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sIiVzOiBmaXJzdCByZWFkX3Bvcz0lZCB3cml0ZV9wb3M9JWQgXG4iLF9fRlVOQ1RJT05fXyxyZWFkX3Bvcyx3cml0ZV9wb3MpOw0KLQl9DQotDQotCQ0KLQlpZih2b2ljZV9idWZmX2lzX2Z1bGwocmVhZF9wb3MsIHdyaXRlX3Bvcykpew0KLQkJLy96RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidm9pY2VfYnVmZmVyX3JlYWQgcmVhZGJ1ZmZlciBpcyBmdWxsIFxuIik7DQotICAgCQkgZmlyc3RfZnVsbF9mbGFnKys7DQotCQlWQl9JTlRfT1ZFUkZMT1coZmlyc3RfZnVsbF9mbGFnKTsNCi0JCWlmKGZpcnN0X2Z1bGxfZmxhZyA9PSAxKQ0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogd3JpdGVidWZmZXIgaXMgZnVsbCAgcmVhZF9wb3MgJWQsd3JpdGVfcG9zICVkLHZiX3dyaXRlX2NvdW50ICVkLGNvdW50ICVkXG4iLF9fRlVOQ1RJT05fXyxyZWFkX3Bvcyx3cml0ZV9wb3MsdmJfd3JpdGVfY291bnQsY291bnQpOw0KLQkJcmV0dXJuIERSVl9FUlJPUl9GVUxMOw0KLQl9DQotCWVsc2Ugew0KLQkJdmJfd3JpdGVfY291bnQrKzsJDQotCQkNCi0JCVZCX0lOVF9PVkVSRkxPVyh2Yl93cml0ZV9jb3VudCk7DQotCQlmaXJzdF9mdWxsX2ZsYWcgPSAwOw0KLQkJek9zc19NZW1jcHkoJih2b2ljZV9idWZmW0RPV05fTElOS10tPmRhdGFbKHdyaXRlX3BvcyVNQVhfQlVGX05VTSkqTUFYX0JVRl9TSVpFXSksIGJ1ZiwgY291bnQpOw0KLQkNCi0JCXdyaXRlX3BvcysrOw0KLQ0KLQkJdm9pY2VfYnVmZltET1dOX0xJTktdLT53cml0ZV9wb3MgPSB3cml0ZV9wb3M7DQotDQotCX0NCi0JDQotCXJldHVybiBEUlZfU1VDQ0VTUzsNCi19DQotc3RhdGljIGludCB2b2ljZV9idWZmZXJfcmVhZChjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCi17DQotCWludCByZWFkX3Bvcywgd3JpdGVfcG9zOw0KLQlpbnQqIGJ1Zl9pbnQ7DQotCWludCBpOw0KLQkNCi0JcmVhZF9wb3MgPSB2b2ljZV9idWZmW1VQX0xJTktdLT5yZWFkX3BvczsNCi0Jd3JpdGVfcG9zID0gdm9pY2VfYnVmZltVUF9MSU5LXS0+d3JpdGVfcG9zOw0KLQlpZih2Yl9yZWFkX2NvdW50ID09IDApew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywiJXM6IGZpcnN0IHJlYWRfcG9zPSVkIHdyaXRlX3Bvcz0lZCBcbiIsX19GVU5DVElPTl9fLHJlYWRfcG9zLHdyaXRlX3Bvcyk7DQotCX0NCi0NCi0JaWYgKChjb3VudCA+IDApICYmIChjb3VudCA8PSBNQVhfQlVGX1NJWkUpKSAgew0KLQkJaWYodm9pY2VfYnVmZl9pc19lbXB0eShyZWFkX3Bvcywgd3JpdGVfcG9zKSl7DQotCQkJZmlyc3RfZW1wdHlfZmxhZysrOw0KLQkJCVZCX0lOVF9PVkVSRkxPVyhmaXJzdF9lbXB0eV9mbGFnKTsNCi0JCQlpZihmaXJzdF9lbXB0eV9mbGFnID09MSkNCi0JCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywiJXM6IHJlYWRidWZmZXIgaXMgZW1wdHkscmVhZF9wb3MgJWQsd3JpdGVfcG9zICVkLHZiX3JlYWRfY291bnQgJWQsY291bnQgJWRcbiIsX19GVU5DVElPTl9fLHJlYWRfcG9zLHdyaXRlX3Bvcyx2Yl9yZWFkX2NvdW50LGNvdW50KTsNCi0JCQkvL2FkZCBtZW1zZXQsZGVsIHJldHVybiAuIGVkaXQgZm9yICBmYXIgZW5kIGhlYXIgbmVhciBlbmQgcmVwcmVhdCB2b2ljZSBwY20sIEZST00gTUJCIFRFU1QNCi0JCQkNCi0JCSNpZm5kZWYgIFZCX0RBVEFfTE9TU19URVNUDQotCQkJek9zc19NZW1zZXQoJih2b2ljZV9idWZmW1VQX0xJTktdLT5kYXRhWyhyZWFkX3BvcyVNQVhfQlVGX05VTSkqTUFYX0JVRl9TSVpFXSksMCwgY291bnQpOw0KLQkJCXpPc3NfTWVtc2V0KGJ1ZiwwLCBjb3VudCk7DQotCQkjZW5kaWYJCQkNCi0JCQkvL3JldHVybiBEUlZfRVJST1JfRU1QVFk7DQotCQkJDQotDQotCQl9DQotCQllbHNlIHsNCi0JCQkNCi0JCSAgICB2Yl9yZWFkX2NvdW50Kys7IAkJCQ0KLQkJCVZCX0lOVF9PVkVSRkxPVyh2Yl9yZWFkX2NvdW50KTsJCQ0KLQkJCWZpcnN0X2VtcHR5X2ZsYWcgPSAwOw0KLQkJCQ0KLQkJCXpPc3NfTWVtY3B5KGJ1ZiwgJih2b2ljZV9idWZmW1VQX0xJTktdLT5kYXRhWyhyZWFkX3BvcyVNQVhfQlVGX05VTSkqTUFYX0JVRl9TSVpFXSksIGNvdW50KTsNCi0JCQkvL3pPc3NfTWVtc2V0KCYodm9pY2VfYnVmZltVUF9MSU5LXS0+ZGF0YVsocmVhZF9wb3MlTUFYX0JVRl9OVU0pKk1BWF9CVUZfU0laRV0pLDAsIGNvdW50KTsNCi0NCi0jaWZkZWYgVkJfREFUQV9MT1NTX1RFU1QNCi0NCi0JCQkNCi0JCQlpZih2Yl9yZWFkX2NvdW50IDwgNSl7DQotCQkJCXByX2luZm8oInBzIDpjb3VudD0lZCB2Yl9yZWFkX2NvdW50PSVkLHJlYWRfcG9zPSVkLHdyaXRlX3Bvcz0lZFxuIixjb3VudCx2Yl9yZWFkX2NvdW50LHJlYWRfcG9zLHdyaXRlX3Bvcyk7DQotDQotCQkJDQotCQkJCWJ1Zl9pbnQgPSggaW50KikgJnZvaWNlX2J1ZmZbVVBfTElOS10tPmRhdGFbKHdyaXRlX3BvcyVNQVhfQlVGX05VTSkqTUFYX0JVRl9TSVpFXTsNCi0JCQkJDQotCQkJCWZvcihpPTA7aTwoY291bnQvNCk7aSsrKXsNCi0JCQkJICAgLy8qKGJ1Zl9pbnQraSkgPSBpOw0KLQkJCQkgICAvL2J1Zl9pbnRbaV0gPSBpOw0KLQkJCQkgaWYoaT4weDFmKSAgDQotCQkJCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCJwczogKihidWZfaW50KyVkKT0lZFxuIixpLCooYnVmX2ludCtpKSk7DQotCQkJCX0NCi0JCQkNCi0JCQl9DQotI2VuZGlmDQotCQkJcmVhZF9wb3MrKzsNCi0JCQlpZihyZWFkX3BvcyA9PSAyMDAwMDAwMCkNCi0JCQkJcmVhZF9wb3MgPSAwOw0KLQkJCXZvaWNlX2J1ZmZbVVBfTElOS10tPnJlYWRfcG9zID0gcmVhZF9wb3M7DQotCQl9DQotDQotDQotCX0NCi0JCQ0KLQkNCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0NCi0NCi0vL3ZvaWNlIGJ1ZmZlciB1c2UgaW4gc2luZ2xlIGNvcmUgDQotZXh0ZXJuIGludCB2b2ljZWJ1ZmZlcl91bHF1ZXVlX3JlYWQodm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSk7DQotZXh0ZXJuIGludCB2b2ljZWJ1ZmZlcl9kbHF1ZXVlX3dyaXRlKHZvaWQgICpidWYsIHVuc2lnbmVkIGludCAgc2l6ZSk7DQotZXh0ZXJuIHZvaWQgdm9pY2VfaW5mb3JtX3RvX2FwcCh2b2lkKTsNCi0vL3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oc192b2ljZV9jb21wbGV0aW9uKTsNCi0vL1pPU1NfVElNRVJfSUQgc192b2ljZVRpbWVySWQgOw0KLS8vWk9TU19TRU1BUEhPUkVfSUQgc192b2ljZVJkU2VtYTsNCi0vL1pPU1NfU0VNQVBIT1JFX0lEIHNfdm9pY2VXclNlbWE7DQotc3RhdGljIHZvaWQgdm9pY2VUaW1lckNhbGxCYWNrKFNJTlQzMiBwYXJhKQ0KLXsNCi0NCi0NCi0JaWYgKGdfdm9pY2VWYXIudm9pY2VCdWZmZXJUeXBlID09IDEpLy9tdWx0aSBjb3JlDQotCXsJDQotDQotDQotCQlUX1pEcnZScE1zZ19Nc2cgaWNwX3BNc2cgPSB7MH07IA0KLQkJDQotCQlVSU5UOCBzID0gMTsNCi0JCWljcF9wTXNnLmFjdG9ySUQgPSBSUE1TR19DQVBfSUQ7DQotDQotCQlpY3BfcE1zZy5jaElEID0gY2hhbm5lbF80MTsNCi0JCWljcF9wTXNnLmZsYWcgfD0gUlBNU0dfV1JJVEVfSU5UOw0KLQkJaWNwX3BNc2cuYnVmID0gKHZvaWQgKikmczsNCi0JCWljcF9wTXNnLmxlbiA9IDE7DQotDQotDQotCQl6T3NzX1B1dFNlbWFwaG9yZShzX3ZvaWNlV3JTZW1hKTsNCi0JCXpPc3NfUHV0U2VtYXBob3JlKHNfdm9pY2VSZFNlbWEpOw0KLQkJLy96RHJ2UnBNc2dfV3JpdGUoJmljcF9wTXNnKTsgDQotI2lmZGVmIF9VU0VfVkVISUNMRV9EQwkNCi0JCXpEcnZScE1zZ19Xcml0ZV9DYXAoJmljcF9wTXNnKTsNCi0jZW5kaWYNCi0JCXRpbWVyX2NiX2NvdW50Kys7DQotCQlWQl9JTlRfT1ZFUkZMT1codGltZXJfY2JfY291bnQpOw0KLSNpZmRlZiBWQl9EQVRBX0xPU1NfVEVTVA0KLQ0KLQkJaWYoKHRpbWVyX2NiX2NvdW50JTEwMDAgKSA9PSAwKXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6dGltZXJfY2JfY291bnQoJWQpXG4iLF9fRlVOQ1RJT05fXyx0aW1lcl9jYl9jb3VudCk7DQotCQkJaWYodGltZXJfY2JfY291bnQ+IDEwMDAwMDAwKSANCi0JCQkJdGltZXJfY2JfY291bnQ9MDsNCi0JCX0NCi0NCi0jZW5kaWYNCi0JDQotDQotCX0NCi0JZWxzZXsNCi0NCi0NCi0NCi0JLy8JY29tcGxldGVfYWxsKCZzX3ZvaWNlX2NvbXBsZXRpb24pOw0KLQkJek9zc19QdXRTZW1hcGhvcmUoc192b2ljZVdyU2VtYSk7DQotCQl6T3NzX1B1dFNlbWFwaG9yZShzX3ZvaWNlUmRTZW1hKTsNCi0JCXZvaWNlX2luZm9ybV90b19hcHAoKTsNCi0JLy8JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZvaWNlVGltZXJDYWxsQmFjayB0aW1lcj0ldVxuIiwgY3B1X2Nsb2NrKDApPj4xMCk7DQotCX0NCi0NCi0NCi19DQotDQotDQotDQotDQotDQotc3RhdGljIFNJTlQzMiB2cF9yeHNlbV9jb3VudF9Jbml0KHZvaWQpDQotew0KLQlVSU5UMzIgaSA9IDA7DQotCVVJTlQzMiBzZW1Db3VudCA9IDA7DQotCVNJTlQzMiBDb3VudCA9IDA7DQotDQotCXNlbUNvdW50ID0gek9zc19HZXRTZW1hcGhvcmVDb3VudChzX3ZvaWNlUmRTZW1hKTsNCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX3J4c2VtX2NvdW50X0luaXQgcnhTZW0gY291bnQ9JWRcbiIsICBzZW1Db3VudCk7DQotDQotCUNvdW50ID0gc2VtQ291bnQ7DQotCWlmKENvdW50ID4gMCkgIHsNCi0JCWZvcihpID0gMDsgaSA8IENvdW50OyBpKyspIHsNCi0JCQl6T3NzX0dldFNlbWFwaG9yZShzX3ZvaWNlUmRTZW1hLCBaT1NTX05PX1dBSVQpOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBEUlZfU1VDQ0VTUzsNCi19DQotDQotc3RhdGljIFNJTlQzMiB2cF90eHNlbV9jb3VudF9Jbml0KHZvaWQpDQotew0KLQlVSU5UMzIgaSA9IDA7DQotCVVJTlQzMiBzZW1Db3VudCA9IDA7DQotCVNJTlQzMiBDb3VudCA9IDA7DQotDQotCXNlbUNvdW50ID0gek9zc19HZXRTZW1hcGhvcmVDb3VudChzX3ZvaWNlV3JTZW1hKTsNCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX3R4c2VtX2NvdW50X0luaXQgdHhTZW0gY291bnQ9JWQgXG4iLCAgc2VtQ291bnQpOw0KLQ0KLQlDb3VudCA9IDMgLSBzZW1Db3VudDsNCi0JaWYoQ291bnQgPiAwKSB7DQotCQlmb3IoaSA9IDA7IGkgPCBDb3VudDsgaSsrKSB7DQotCQkJek9zc19QdXRTZW1hcGhvcmUoc192b2ljZVdyU2VtYSk7DQotCQl9DQotCX0gZWxzZSBpZihDb3VudCA8IDApIHsNCi0JCUNvdW50ID0gMCAtIENvdW50Ow0KLQkJZm9yKGkgPSAwOyBpIDwgQ291bnQ7IGkrKykgew0KLQkJCXpPc3NfR2V0U2VtYXBob3JlKHNfdm9pY2VXclNlbWEsIFpPU1NfTk9fV0FJVCk7DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBEUlZfU1VDQ0VTUzsNCi19DQotDQotDQotDQotDQotDQotU0lOVDMyIHZwX09wZW5fVmJ1ZmZlcih2b2lkKQ0KLXsNCi0JU0lOVDMyIHJldCA9IERSVl9TVUNDRVNTOw0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6ICBzdGFydCBcbiIsIF9fZnVuY19fKTsNCi0JaWYgKGdfdm9pY2VWYXIudm9pY2VCdWZmZXJUeXBlID09IDEpLy9tdWx0aSBjb3JlDQotCXsNCi0gCQl2cF9HZXRfQWRkX1JwTXNnX1ZidWZmZXIoKTsJDQotCQkNCi0JCXZwX3J4c2VtX2NvdW50X0luaXQoKTsNCi0JCXZwX3R4c2VtX2NvdW50X0luaXQoKTsNCi0JCXZvaWNlX2J1ZmZbVVBfTElOS10tPnJlYWRfcG9zID0gMDsNCi0JCXZvaWNlX2J1ZmZbVVBfTElOS10tPndyaXRlX3BvcyA9IDA7IA0KLQkJdm9pY2VfYnVmZltET1dOX0xJTktdLT5yZWFkX3BvcyA9IDA7DQotCQl2b2ljZV9idWZmW0RPV05fTElOS10tPndyaXRlX3BvcyA9IDA7IA0KLQkJek9zc19NZW1zZXQoJih2b2ljZV9idWZmW0RPV05fTElOS10tPmRhdGFbMF0pLDAsIE1BWF9CVUZfTlVNKk1BWF9CVUZfU0laRSk7DQotCQl6T3NzX01lbXNldCgmKHZvaWNlX2J1ZmZbVVBfTElOS10tPmRhdGFbMF0pLDAsIE1BWF9CVUZfTlVNKk1BWF9CVUZfU0laRSk7DQotCQkvL2ZvciBkZWJ1Zw0KLQkJdGltZXJfY2JfY291bnQgPSAwOw0KLQkJZmlyc3RfZnVsbF9mbGFnID0gMDsNCi0JCWZpcnN0X2VtcHR5X2ZsYWcgPSAwOw0KLQ0KLQkJdmJfcmVhZF9jb3VudCA9IDA7DQotCQl2Yl93cml0ZV9jb3VudCA9IDA7CQ0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX09wZW5fVmJ1ZmZlciAgaW5pdCB2b2ljZSBidWZmZXIgdmFsIVxuIik7DQotDQotCQkNCi0JfWVsc2V7DQotDQotCS8vCUlOSVRfQ09NUExFVElPTihzX3ZvaWNlX2NvcGxldGlvbik7DQotCQl2cF9yeHNlbV9jb3VudF9Jbml0KCk7DQotCQl2cF90eHNlbV9jb3VudF9Jbml0KCk7DQotCX0NCi0NCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLQ0KLX0NCi0NCi0NCi1TSU5UMzIgdnBfQ2xvc2VfVmJ1ZmZlcih2b2lkKQ0KLXsNCi0JU0lOVDMyIHJldCA9IERSVl9TVUNDRVNTOw0KLSAgICANCi0JaWYgKGdfdm9pY2VWYXIudm9pY2VCdWZmZXJUeXBlID09IDEpLy9tdWx0aSBjb3JlDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogdGltZXJfY2JfY291bnQgJWQsZmlyc3RfZnVsbF9mbGFnICVkLGZpcnN0X2VtcHR5X2ZsYWcgJWQsdmJfcmVhZF9jb3VudCAlZCx2Yl93cml0ZV9jb3VudCAlZCFcbiIsX19GVU5DVElPTl9fLHRpbWVyX2NiX2NvdW50LGZpcnN0X2Z1bGxfZmxhZyxmaXJzdF9lbXB0eV9mbGFnLHZiX3JlYWRfY291bnQsdmJfd3JpdGVfY291bnQpOw0KLQl9DQotDQotCXJldHVybiBEUlZfU1VDQ0VTUzsNCi19DQotDQotU0lOVDMyIHZwX1ZvaWNlSTJzU3RhcnRfVmJ1ZmZlcihWT0lEKQ0KLXsNCi0JU0lOVDMyIHJldCA9IERSVl9TVUNDRVNTOw0KLQ0KLQlVSU5UOCAqcmVhZF9idWYgPSBOVUxMOw0KLQlVSU5UOCAqd3JpdGVfYnVmID0gTlVMTDsNCi0JVUlOVDMyIHJlYWRfbGVuID0gMDsNCi0JVUlOVDMyIHdyaXRlX2xlbiA9IDA7DQotDQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogc3RhcnQuXG4iLF9fZnVuY19fKTsNCi0NCi0NCi0JcmV0ID0gekRydkkyU19SZWFkX1N0YXJ0KEkyU18yLCAmc19zcGVlY2hTdGF0ZS5pMnNSZWFkUGFyYW0sIHNfdnBTdGF0ZS5wVnBJbm5lckkyc0NmZyk7DQotCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0X1ZidWZmZXIgZmFpbGVkIHJldCBpcyAlZCAuXG4iLCByZXQpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQl6T3NzX1N0YXJ0VGltZXIoc192b2ljZVRpbWVySWQsIDIwLCB2b2ljZVRpbWVyQ2FsbEJhY2ssIDApOw0KLQ0KLQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydF9WYnVmZmVyIFZCIHpPc3NfU3RhcnRUaW1lclxuIik7DQotDQotCXJldCA9IHpEcnZJMlNfV3JpdGVfU3RhcnQoSTJTXzIsICZzX3NwZWVjaFN0YXRlLmkyc1dyaXRlUGFyYW0sIHNfdnBTdGF0ZS5wVnBJbm5lckkyc0NmZyk7DQotDQotCXJldCArPSB6RHJ2STJTX0dldEJ1ZihJMlNfMiwgJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQotCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0X1ZidWZmZXIgZXJyb3I3OnpEcnZJMlNfR2V0QnVmIEkyU18yIHJldD0lZCIsIHJldCk7DQotCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQl9DQotCXpPc3NfTWVtc2V0KHdyaXRlX2J1ZiwgMCwgd3JpdGVfbGVuKTsNCi0JcmV0ID0gekRydkkyU19Xcml0ZShJMlNfMiwgd3JpdGVfYnVmLCB3cml0ZV9sZW4pOw0KLQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydF9WYnVmZmVyIGVycm9yMTI6ekRydkkyU19Xcml0ZSBJMlNfMiByZXQ9JWQiLCByZXQpOw0KLQl9DQotCQ0KLQlyZXQgKz0gekRydkkyU19HZXRCdWYoSTJTXzIsICZ3cml0ZV9idWYsICZ3cml0ZV9sZW4pOw0KLQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydF9WYnVmZmVyIGVycm9yMTM6ekRydkkyU19HZXRCdWYgSTJTXzIgcmV0PSVkIiwgcmV0KTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0Jek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KLQlyZXQgPSB6RHJ2STJTX1dyaXRlKEkyU18yLCB3cml0ZV9idWYsIHdyaXRlX2xlbik7DQotCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0X1ZidWZmZXIgZXJyb3IxNDp6RHJ2STJTX1dyaXRlIEkyU18yIHJldD0lZCIsIHJldCk7DQotCX0NCi0gICAgDQotCWlmIChnX3ZvaWNlVmFyLnZvaWNlQnVmZmVyVHlwZSA9PSAxKS8vbXVsdGkgY29yZQ0KLQl7DQotDQotCQl2b2ljZV9idWZmZXJfd3JpdGUoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KLQ0KLQl9ZWxzZXsNCi0JCXZvaWNlYnVmZmVyX2RscXVldWVfd3JpdGUoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KLQl9DQotCQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6IGVuZC5cbiIsX19mdW5jX18pOw0KLQlyZXR1cm4gcmV0Ow0KLX0NCi1WT0lEIHZwX1ZvaWNlSTJzU3RvcF9WYnVmZmVyKFZPSUQpDQotew0KLQlTSU5UMzIgcmV0ID0gRFJWX1NVQ0NFU1M7DQotICAgIHJldHVybiByZXQ7DQotfQ0KLQ0KLQ0KLQ0KLVNJTlQzMiB6RHJ2VnBfVm9pY2VXb3JrU3RvcF9WYnVmZmVyKFZPSUQpDQotew0KLQlTSU5UMzIgIHJldCA9IERSVl9TVUNDRVNTOw0KLQ0KLQkvL2NvbXBsZXRlX2FsbCgmc192b2ljZV9jb21wbGV0aW9uKTsNCi0Jek9zc19QdXRTZW1hcGhvcmUoc192b2ljZVJkU2VtYSk7DQotCXpPc3NfUHV0U2VtYXBob3JlKHNfdm9pY2VXclNlbWEpOw0KLQl6T3NzX1N0b3BUaW1lcihzX3ZvaWNlVGltZXJJZCk7DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogek9zc19TdG9wVGltZXJcbiIsX19mdW5jX18pOw0KLQ0KLQ0KLQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6IHN1Y2Nlc3MiLF9fZnVuY19fKTsNCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0NCi0NCi1TSU5UMzIgdnBfVm9sdGVSZWFkU3RhcnRfVmJ1ZmZlcihWT0lEKQ0KLXsNCi0JU0lOVDMyIHJldCA9IERSVl9TVUNDRVNTOw0KLQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9sdGVSZWFkU3RhcnRfVmJ1ZmZlciBzdGFydFxuIik7DQotICAgIA0KLQl6T3NzX1N0YXJ0VGltZXIoc192b2ljZVRpbWVySWQsIDIwLCB2b2ljZVRpbWVyQ2FsbEJhY2ssIDApOw0KLQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9sdGVSZWFkU3RhcnRfVmJ1ZmZlciB6T3NzX1N0YXJ0VGltZXIgc3RhcnRcbiIpOw0KLQ0KLQlyZXR1cm4gRFJWX1NVQ0NFU1M7DQotfQ0KLS8vd2hvbGUgcmVwbGFjZSANCi1TSU5UMzIgdnBfVm9sdGVSZWFkU3RvcF9WYnVmZmVyKFZPSUQpDQotew0KLQlTSU5UMzIgIHJldCA9IERSVl9TVUNDRVNTOw0KLQ0KLQlpZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKQ0KLQl7DQotCQl6T3NzX1B1dFNlbWFwaG9yZShzX3ZvaWNlUmRTZW1hKTsNCi0JDQotCX0NCi0JZWxzZQ0KLQl7DQotDQotI2lmZGVmICBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgDQotCQl6T3NzX1B1dFNlbWFwaG9yZShzX3ZvaWNlUmRTZW1hKTsNCi0jZWxzZQ0KLQ0KLQkJLy96RHJ2STJzX1J4UmxzU2VtYUJlZm9yZVN0b3AoSTJTXzEpOw0KLQkJekRydkV4dEF1ZGlvX1J4UmxzU2VtYUJlZm9yZVN0b3AoKTsNCi0NCi0jaWYgMC8vbW92ZSB0byBjbG9zZSBsdndlbmh1YSAyMDE1MDkxMA0KLQkJcmV0ID0gekRydkV4dEF1ZGlvX1JlYWRfU3RvcCgpOw0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydlZvbHRlX1JlYWRTdG9wIEkyUzEgU3RvcCB3cm9uZyAgcmV0PSVkIiwgcmV0KTsNCi0JCX0NCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0JfQ0KLQ0KLQlpZiAoc19zcGVlY2hTdGF0ZS52b2x0ZVZwQ2ZnRW5GbGFnID09IDEpDQotCXsNCi0JCXJldCA9IGhhbFZwQ2ZnX0Rpc2FibGUoKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIiVzOiBoYWxWcENmZ19FbmFibGUgZXJyIHJldD0leCAhXG4iLF9fZnVuY19fLCByZXQpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXNfc3BlZWNoU3RhdGUudm9sdGVWcENmZ0VuRmxhZyA9IDA7DQotCQl9DQotCX0NCi0NCi0Jc19zcGVlY2hTdGF0ZS52b2x0ZVZwUmVhZFN0b3BGbGFnID0gMTsvL3RvZ2V0aGVyIGNvbnRyb2wgdnAgc19zcGVlY2hTdGF0ZQ0KLQlpZiAoKHNfc3BlZWNoU3RhdGUudm9sdGVWcFdyaXRlU3RvcEZsYWcgPT0gMSkgJiYgKHNfc3BlZWNoU3RhdGUudm9sdGVWcFJlYWRTdG9wRmxhZyA9PSAxKSkNCi0Jew0KLQkJZ192b2ljZVZhci52cEkyc1N0YXR1cyA9IFZQX0kyU19PUEVOOw0KLQkJDQotCQlpZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKQ0KLQkJew0KLQkJCXpPc3NfU3RvcFRpbWVyKHNfdm9pY2VUaW1lcklkKTsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6IHpPc3NfU3RvcFRpbWVyXG4iLF9fZnVuY19fKTsNCi0JCQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLSNpZmRlZiAgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIAkNCi0JCQl6T3NzX1N0b3BUaW1lcihzX3ZvaWNlVGltZXJJZCk7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvbHRlUmVhZFN0b3BfVmJ1ZmZlciB6T3NzX1N0b3BUaW1lclxuIik7DQotI2VuZGlmDQotCX0NCi0JfQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6IGVuZFxuIixfX2Z1bmNfXyk7DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLVNJTlQzMiB2cF9Wb2x0ZVdyaXRlU3RhcnRfVmJ1ZmZlcihWT0lEKQ0KLXsNCi0JU0lOVDMyIHJldCA9IERSVl9TVUNDRVNTOw0KLQ0KLQkvLz8/Pz8gZm9yIGNoZWNrDQotCWlmIChnX3ZvaWNlVmFyLnZvaWNlQnVmZmVyVHlwZSA9PSAxKS8vbXVsdGkgY29yZQ0KLQl7DQotCQl2b2ljZV9idWZmZXJfd3JpdGUoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJdm9pY2VidWZmZXJfZGxxdWV1ZV93cml0ZShzX3NwZWVjaFN0YXRlLnBWcFRlbXBSeE91dFB1dEJ1ZmZlciwgc19zcGVlY2hTdGF0ZS50b3RhbEZyYW1lQnVmU2l6ZSk7DQotCX0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgICIlczplbmQgXG4iLF9fZnVuY19fKTsNCi0NCi0JcmV0dXJuIHJldDsNCi19DQotLy93aG9sZSByZXBsYWNlDQotU0lOVDMyIHZwX1ZvbHRlV3JpdGVTdG9wX1ZidWZmZXIoVk9JRCkNCi17DQotCVNJTlQzMiAgcmV0ID0gRFJWX1NVQ0NFU1M7DQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpDQotCXsNCi0JCXpPc3NfUHV0U2VtYXBob3JlKHNfdm9pY2VXclNlbWEpOw0KLQkNCi0JfQ0KLQllbHNlDQotCXsNCi0NCi0jaWZkZWYgIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCi0JCS8vY29tcGxldGVfYWxsKCZzX3ZvaWNlX2NvbXBsZXRpb24pOw0KLQkJek9zc19QdXRTZW1hcGhvcmUoc192b2ljZVdyU2VtYSk7DQotI2Vsc2UNCi0JCS8vekRydkkyc19UeFJsc1NlbWFCZWZvcmVTdG9wKEkyU18xKTsNCi0JCXpEcnZFeHRBdWRpb19UeFJsc1NlbWFCZWZvcmVTdG9wKCk7DQotI2VuZGlmDQotCX0NCi0jaWYgMC8vbW92ZSB0byBjbG9zZSBsdndlbmh1YSAyMDE1MDkxMA0KLQkvL3dhaXQgZm9yIHdyaXRlIGRyYWluIHNlbWFwaG9yZQ0KLSNpZmRlZiBWT0lDRV9UT05FX01JWEVSX0ZVTkNUSU9ODQotCXZvaWNlX1RvbmVNaXhlclN0b3AoKTsNCi0jZW5kaWYNCi0NCi0JcmV0ID0gekRydkV4dEF1ZGlvX1dyaXRlX1N0b3AoKTsNCi0JaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInpEcnZWb2x0ZV9Xcml0ZVN0b3AgSTJTMSBTdG9wIHdyb25nICByZXQ9JWQiLCByZXQpOw0KLQl9DQotDQotCS8vc19Wb2x0ZVdyaXRlU2VtYSA9IDA7DQotI2VuZGlmDQotDQotCWlmIChzX3NwZWVjaFN0YXRlLnZvbHRlVnBDZmdFbkZsYWcgPT0gMSkNCi0Jew0KLQkJcmV0ID0gaGFsVnBDZmdfRGlzYWJsZSgpOw0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9sdGVXcml0ZVN0b3BfVmJ1ZmZlciBoYWxWcENmZ19FbmFibGUgZXJyIHJldD0leCAhXG4iLCByZXQpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXNfc3BlZWNoU3RhdGUudm9sdGVWcENmZ0VuRmxhZyA9IDA7DQotCQl9DQotCX0NCi0NCi0Jc19zcGVlY2hTdGF0ZS52b2x0ZVZwV3JpdGVTdG9wRmxhZyA9IDE7Ly90b2dldGhlciBjb250cm9sIHZwIHNfc3BlZWNoU3RhdGUNCi0JaWYgKChzX3NwZWVjaFN0YXRlLnZvbHRlVnBXcml0ZVN0b3BGbGFnID09IDEpICYmIChzX3NwZWVjaFN0YXRlLnZvbHRlVnBSZWFkU3RvcEZsYWcgPT0gMSkpDQotCXsNCi0JCWdfdm9pY2VWYXIudnBJMnNTdGF0dXMgPSBWUF9JMlNfT1BFTjsNCi0JCQ0KLQkJaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSkNCi0JCXsNCi0NCi0JCQl6T3NzX1N0b3BUaW1lcihzX3ZvaWNlVGltZXJJZCk7DQotCQkJCQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCQ0KLSNpZmRlZiAgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgDQotCQkJek9zc19TdG9wVGltZXIoc192b2ljZVRpbWVySWQpOw0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2x0ZVdyaXRlU3RvcF9WYnVmZmVyIHpPc3NfU3RvcFRpbWVyXG4iKTsNCi0jZW5kaWYNCi0JCX0NCi0JfQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9sdGVXcml0ZVN0b3BfVmJ1ZmZlciBcbiIpOw0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIEZvciB1bmlvbiB2ZXJzaW9uDQotICogT3RoZXJzOg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1TSU5UMzIgdnBfV3JpdGVEYXRhVG9Db2RlY19WYnVmZmVyKFVJTlQ4ICpwQnVmLCBVSU5UMzIgY291bnQpDQotew0KLQlTSU5UMzIgIHJldCA9IERSVl9TVUNDRVNTOw0KLQlTSU5UMzIgIGVfcmV0ID0gRFJWX1NVQ0NFU1M7CQ0KLQlVSU5UOCAqd3JpdGVfYnVmID0gTlVMTDsNCi0JVUlOVDMyIHdyaXRlX2xlbiA9IDA7DQotCVVJTlQ4ICplX3dyaXRlX2J1ZiA9IE5VTEw7DQotCVVJTlQzMiBlX3dyaXRlX2xlbiA9IDA7DQotCVVJTlQzMiBpID0gMCwgaiA9IDA7DQotI2lmZGVmIFRFU1RfV0hJVEVfTk9JU0UNCi0JLy8gVUlOVDMyIHRlbXBDb3VudCA9IDA7DQotCS8vekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInRlc3QgdGhlIHdoaXRlIG5vaXNlIik7DQotCS8vVUlOVDggKnBWb2ljZVRlbXBCdWYgPSBzX3ZvaWNlVGVtcEJ1ZmZlcjsNCi0jZW5kaWYNCi0NCi0NCi0NCi0JaWYgKHBCdWYgPT0gTlVMTCkNCi0Jew0KLQkJcmV0dXJuIERSVl9FUlJfSU5WQUxJRF9QQVJBTTsNCi0JfQ0KLQ0KLQlpZiAoY291bnQgIT0gc19zcGVlY2hTdGF0ZS5pMnNXcml0ZVBhcmFtLmJ1ZmZlcnNpemUpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Xcml0ZURhdGFUb0NvZGVjX1ZidWZmZXIgd3JpdGUgZGF0YSBsZW5ndGggZXJyLGNvdW50PSVkLHdyaXRlYnVmZmVyc2l6ZT0lZCBcbiIsIGNvdW50LCBzX3NwZWVjaFN0YXRlLmkyc1dyaXRlUGFyYW0uYnVmZmVyc2l6ZSk7DQotCQlyZXR1cm4gRFJWX0VSUl9JTlZBTElEX1BBUkFNOw0KLQl9DQotCSNpZmRlZiBFQ0FMTF9TVVBQT1JUCQ0KLQ0KLQlpZihlX3JlZ19mbGFnID09IDEpDQotCXsJCQ0KLQkJZV9yZXQgPSB1cGRhdGVfZWNhbGxfc3RhdGUoRElSX1JYKTsgDQotCQlpZiAoZV9yZXQgPT0gRFJWX0VSUl9OT1RfU1VQUE9SVEVEKQ0KLQkJew0KLQkJCXpPc3NfUHJpbnRmKFNVQk1ETF9IQUwsIFBSSU5UX0xFVkVMX05PUk1BTCwgInZwX1dyaXRlRGF0YVRvQ29kZWNfVmJ1ZmZlciBnZXRfX2VjYWxsX3N0YXRlIGZ1biBub3QgcmVnaXN0ZXIgb3IgaW52YWxpZCBwYXJhLGVfcmV0PSVkICFcbiIsZV9yZXQpOw0KLQkNCi0JCX0JDQotCX0JDQotCSNlbmRpZg0KLQ0KLQ0KLQ0KLQkjaWZkZWYgVEVTVF9XSElURV9OT0lTRQ0KLQ0KLQl6T3NzX01lbWNweShzX3NwZWVjaFN0YXRlLnBWcFRlbXBSeEluQnVmZmVyLCBwVm9pY2VUZW1wQnVmLCBzX3NwZWVjaFN0YXRlLnRvdGFsRnJhbWVCdWZTaXplKTsNCi0NCi0JcFZvaWNlVGVtcEJ1ZiArPSBzX3NwZWVjaFN0YXRlLnRvdGFsRnJhbWVCdWZTaXplOw0KLQl0ZW1wQ291bnQgKz0gc19zcGVlY2hTdGF0ZS50b3RhbEZyYW1lQnVmU2l6ZTsNCi0JaWYgKHRlbXBDb3VudCA+PSAweDRkZjgwKSAgIC8vMzA3MjAwDQotCQkvL2lmKHRlbXBDb3VudCA+PSAweDRlMjAwKSAgIC8vMzIwMDAwDQotCXsNCi0JCXBWb2ljZVRlbXBCdWYgPSBzX3ZvaWNlVGVtcEJ1ZmZlcjsNCi0JCXRlbXBDb3VudCA9IDA7DQotCX0NCi0JI2VuZGlmDQotDQotCSNpZmRlZiBWT0lDRV9UT05FX01JWEVSX0ZVTkNUSU9ODQotDQotCWlmIChtaXhlclRvbmVJbmZvLlN0YXJ0TWl4ZXIgPT0gVFJVRSkgDQotCXsNCi0JCS8vdm9pY2VfVG9uZU1peGVyRGF0YSggc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhJbkJ1ZmZlcik7DQotCQlpZiAoKGdfdm9pY2VWYXIudm9pY2VJblZvbHRlTW9kZSA9PSAxKSAmJiAoZ192b2ljZVZhci52b2x0ZUlzV2IgPT0gMSkpIA0KLQkJew0KLQkJCXZvaWNlX1RvbmVNaXhlckRhdGEoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhJbkJ1ZmZlciwgNjQwLCAgc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhJbkJ1ZmZlcik7DQotCQl9IA0KLQkJZWxzZSANCi0JCXsNCi0JCQl2b2ljZV9Ub25lTWl4ZXJEYXRhKHNfc3BlZWNoU3RhdGUucFZwVGVtcFJ4SW5CdWZmZXIsIDMyMCwgIHNfc3BlZWNoU3RhdGUucFZwVGVtcFJ4SW5CdWZmZXIpOw0KLQkJfQ0KLQ0KLQl9DQotDQotCSNlbmRpZg0KLQlpZiAocEJ1ZiAhPSAgc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhJbkJ1ZmZlcikNCi0Jew0KLQkJek9zc19NZW1jcHkoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhJbkJ1ZmZlciwgcEJ1Ziwgc19zcGVlY2hTdGF0ZS50b3RhbEZyYW1lQnVmU2l6ZSk7DQotCX0NCi0gICAgDQotCWlmIChnX3ZvaWNlVmFyLnZQcm9jSXNOb3JtYWwgPT0gVFJVRSkNCi0Jew0KLQkJVm9pY2VQcm9jX1J4UHJvY2VzcygmIHNfc3BlZWNoU3RhdGUucFZwVGVtcFJ4SW5CdWZmZXIsICYgc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUuZnJhbWVDb3VudCk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl6T3NzX01lbWNweSgoVk9JRCAqKShzX3NwZWVjaFN0YXRlLnBWcFRlbXBSeE91dFB1dEJ1ZmZlciksIChWT0lEICopIHNfc3BlZWNoU3RhdGUucFZwVGVtcFJ4SW5CdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KLQl9DQotCS8vd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzX3ZvaWNlX2NvbXBsZXRpb24sIDYwKTsNCi0Jek9zc19HZXRTZW1hcGhvcmUoc192b2ljZVdyU2VtYSwgIDYwKTsNCi0JLy8jaWZkZWYgX1ZCVUZGX0lOX01VTFRJX0NPUkUNCi0JaWYgKGdfdm9pY2VWYXIudm9pY2VCdWZmZXJUeXBlID09IDEpDQotCXsNCi0JCXZvaWNlX2J1ZmZlcl93cml0ZShzX3NwZWVjaFN0YXRlLnBWcFRlbXBSeE91dFB1dEJ1ZmZlciwgc19zcGVlY2hTdGF0ZS50b3RhbEZyYW1lQnVmU2l6ZSk7DQotCX0NCi0JZWxzZQ0KLQl7CQkJDQotCQl2b2ljZWJ1ZmZlcl9kbHF1ZXVlX3dyaXRlKHNfc3BlZWNoU3RhdGUucFZwVGVtcFJ4T3V0UHV0QnVmZmVyLCBzX3NwZWVjaFN0YXRlLnRvdGFsRnJhbWVCdWZTaXplKTsNCi0JfQ0KLQlpZiAoZ192b2ljZVZhci52b2ljZUluVm9sdGVNb2RlID09IDEpDQotCXsNCi0JCXNfc3BlZWNoU3RhdGUucnhTYXZlTGVuICs9IHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemU7DQotCQlpZiAoc19zcGVlY2hTdGF0ZS5yeFNhdmVMZW4gPj0gc19zcGVlY2hTdGF0ZS5pbk91dEJ1ZlVzZVNpemUpDQotCQl7DQotCQkJc19zcGVlY2hTdGF0ZS5yeFNhdmVMZW4gPSAwOw0KLQkJfQ0KLQkJc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhJbkJ1ZmZlciA9IHNfdnBTdGF0ZS5wVnBSeEluQnVmZmVyICsgc19zcGVlY2hTdGF0ZS5yeFNhdmVMZW47DQotCQkjaWZkZWYgX1VTRV9WUF9PVVRQVVRfUlhPVVRfREFUQQ0KLSAgICAgICAgc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIgPSBzX3ZwU3RhdGUucFZwUnhPdXRQdXRCdWZmZXIgKyBzX3NwZWVjaFN0YXRlLnJ4U2F2ZUxlbjsNCi0JCSNlbHNlDQotCQlzX3NwZWVjaFN0YXRlLnBWcFRlbXBSeE91dFB1dEJ1ZmZlciA9IHNfdnBTdGF0ZS5wVnBSeE91dFB1dEJ1ZmZlcjsNCi0JCSNlbmRpZg0KLQl9DQotDQotCQ0KLQlpZiAoc19zcGVlY2hTdGF0ZS5maXJzdFdyaXRlRGF0YUZsYWcgPT0gRkFMU0UpDQotCXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Xcml0ZURhdGFUb0NvZGVjX1ZidWZmZXIgZmlyc3Qgd3JpdGUgcmV0PSVkLHRpY2s9JWQuXG4iLCByZXQsIHpPc3NfR2V0VGlja0NvdW50KCkpOw0KLQkJc19zcGVlY2hTdGF0ZS5maXJzdFdyaXRlRGF0YUZsYWcgPSBUUlVFOw0KLQl9DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLQ0KLQ0KLVNJTlQzMiB2cF9SZWFkRGF0YUZyb21Db2RlY19WYnVmZmVyKFVJTlQ4ICpwQnVmLCBVSU5UMzIgY291bnQpDQotew0KLQlTSU5UMzIgIHJldCA9IERSVl9TVUNDRVNTOw0KLQlVSU5UOCAqcmVhZF9idWYgPSBOVUxMOw0KLQlVSU5UMzIgcmVhZF9sZW4gPSAwOw0KLQ0KLQlVSU5UMzIgaSA9IDAsIGogPSAwOw0KLSNpZmRlZiBDT05GSUdfQVJDSF9aWDI5NzUyMFYzX0NQRV9TV0lUQ0gNCi0JVUlOVDggdGVtcDhiaXQgPSAwOw0KLQlVSU5UOCAqcHRlbXA4Yml0ID0gTlVMTDsNCi0jZW5kaWYNCi0NCi0JaWYgKHBCdWYgPT0gTlVMTCkNCi0Jew0KLQkJcmV0dXJuIERSVl9FUlJfSU5WQUxJRF9QQVJBTTsNCi0JfQ0KLQ0KLQlpZiAoY291bnQgIT0gc19zcGVlY2hTdGF0ZS5pMnNSZWFkUGFyYW0uYnVmZmVyc2l6ZSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIiVzOiByZWFkIGRhdGEgbGVuZ3RoIGVycixjb3VudD0lZCxyZWFkYnVmZmVyc2l6ZT0lZCBcbiIsX19mdW5jX18sIGNvdW50LCBzX3NwZWVjaFN0YXRlLmkyc1JlYWRQYXJhbS5idWZmZXJzaXplKTsNCi0JCXJldHVybiBEUlZfRVJSX0lOVkFMSURfUEFSQU07DQotCX0NCi0jaWZkZWYgRUNBTExfU1VQUE9SVA0KLQ0KLQlpZihlX3JlZ19mbGFnID09IDEpDQotCXsJCQ0KLQkJcmV0ID0gdXBkYXRlX2VjYWxsX3N0YXRlKERJUl9UWCk7IA0KLQkJaWYgKHJldCA9PSBEUlZfRVJSX05PVF9TVVBQT1JURUQpDQotCQl7DQotCQkJek9zc19QcmludGYoU1VCTURMX0hBTCwgUFJJTlRfTEVWRUxfTk9STUFMLCAidnBfUmVhZERhdGFGcm9tQ29kZWN2cF9SZWFkRGF0YUZyb21Db2RlYyBnZXRfX2VjYWxsX3N0YXRlIGZ1biBub3QgcmVnaXN0ZXIscmV0PSVkICFcbiIscmV0KTsNCi0JDQotCQl9CQ0KLQl9CQ0KLSNlbmRpZg0KLQkNCi0NCi0vLwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNfdm9pY2VfY29tcGxldGlvbiwgNjApOw0KLQl6T3NzX0dldFNlbWFwaG9yZShzX3ZvaWNlUmRTZW1hLCAgNjApOw0KLQlpZiAoZ192b2ljZVZhci52b2ljZUJ1ZmZlclR5cGUgPT0gMSkNCi0Jew0KLQkJdm9pY2VfYnVmZmVyX3JlYWQoc19zcGVlY2hTdGF0ZS5wVnBUZW1wVHhJbkJ1ZmZlciwgIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KLQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJdm9pY2VidWZmZXJfdWxxdWV1ZV9yZWFkKHNfc3BlZWNoU3RhdGUucFZwVGVtcFR4SW5CdWZmZXIsICBzX3NwZWVjaFN0YXRlLnRvdGFsRnJhbWVCdWZTaXplKTsNCi0JfQ0KLQlpZiAoZ192b2ljZVZhci52UHJvY0lzTm9ybWFsID09IFRSVUUpDQotCXsNCi0JCVZvaWNlUHJvY19UeFByb2Nlc3MoJnNfc3BlZWNoU3RhdGUucFZwVGVtcFR4SW5CdWZmZXIsIE5VTEwsICZzX3NwZWVjaFN0YXRlLnBWcFRlbXBUeE91dFB1dEJ1ZmZlciwgc19zcGVlY2hTdGF0ZS5mcmFtZUNvdW50KTsJDQotCX0NCi0JZWxzZQ0KLQl7DQotCQl6T3NzX01lbWNweSgoVk9JRCAqKShzX3NwZWVjaFN0YXRlLnBWcFRlbXBUeE91dFB1dEJ1ZmZlciksIChWT0lEICopIHNfc3BlZWNoU3RhdGUucFZwVGVtcFR4SW5CdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KLQl9DQotDQotCWlmIChwQnVmICE9ICBzX3NwZWVjaFN0YXRlLnBWcFRlbXBUeE91dFB1dEJ1ZmZlcikNCi0Jew0KLQkJek9zc19NZW1jcHkocEJ1Ziwgc19zcGVlY2hTdGF0ZS5wVnBUZW1wVHhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KLQl9DQotCQ0KLQlpZiAoZ192b2ljZVZhci52b2ljZUluVm9sdGVNb2RlID09IDEpDQotCXsNCi0JCS8vIHNfc3BlZWNoU3RhdGUudHhTYXZlTGVuICs9IFZQX0ZSQU1FX0JVRkZFUl9TSVpFOw0KLQkJc19zcGVlY2hTdGF0ZS50eFNhdmVMZW4gKz0gc19zcGVlY2hTdGF0ZS50b3RhbEZyYW1lQnVmU2l6ZTsNCi0JCWlmIChzX3NwZWVjaFN0YXRlLnR4U2F2ZUxlbiA+PSBzX3NwZWVjaFN0YXRlLmluT3V0QnVmVXNlU2l6ZSkNCi0JCXsNCi0JCQlzX3NwZWVjaFN0YXRlLnR4U2F2ZUxlbiA9IDA7DQotCQl9DQotCQlzX3NwZWVjaFN0YXRlLnBWcFRlbXBUeEluQnVmZmVyID0gc192cFN0YXRlLnBWcFR4SW5CdWZmZXIgKyBzX3NwZWVjaFN0YXRlLnR4U2F2ZUxlbjsNCi0JCXNfc3BlZWNoU3RhdGUucFZwVGVtcFR4T3V0UHV0QnVmZmVyID0gc192cFN0YXRlLnBWcFR4T3V0UHV0QnVmZmVyICsgc19zcGVlY2hTdGF0ZS50eFNhdmVMZW47DQotCX0NCi0JDQotCQ0KLQlpZiAoc19zcGVlY2hTdGF0ZS5maXJzdFJlYWREYXRhRmxhZyA9PSBGQUxTRSkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1JlYWREYXRhRnJvbUNvZGVjIGZpcnN0IHJlYWQgdGljaz0lZC5cbiIsIHpPc3NfR2V0VGlja0NvdW50KCkpOw0KLQkJc19zcGVlY2hTdGF0ZS5maXJzdFJlYWREYXRhRmxhZyA9IFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotDQotDQotDQotU0lOVDMyIHZwX0NyZWF0ZVRocmVhZFNlbWFwaF9WYnVmZmVyKFZPSUQpDQotew0KLQlTSU5UMzIgcmV0ID0gMDsNCi0vLyNpZmRlZiBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgCQ0KLS8vCWluaXRfY29tcGxldGlvbigmc192b2ljZV9jb21wbGV0aW9uKTsNCi0gICAgLyoNCi0JaWYodmJ1ZmZlcl9pbml0X2ZsYWcgPT0gMSl7DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidmJ1ZmZlciBhbHJlYWR5IGluaXQscmV0dXJuISBcbiIpOw0KLQkJcmV0dXJuIERSVl9TVUNDRVNTOw0KLQ0KLQl9DQotCSovDQotCXNfdm9pY2VSZFNlbWEgPSB6T3NzX0NyZWF0ZVNlbWFwaG9yZSgidm9pY2Vfcnhfc2VtIiwgMCk7DQotCWlmKE5VTEwgPT0gc192b2ljZVJkU2VtYSkgew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgImNyZWF0ZSB2b2ljZV9yeF9zZW0gZXJyIFxuIik7DQotCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQl9DQotDQotCXNfdm9pY2VXclNlbWEgID0gek9zc19DcmVhdGVTZW1hcGhvcmUoInZvaWNlX3R4X3NlbSIsIDApOw0KLQlpZihOVUxMID09IHNfdm9pY2VXclNlbWEpIHsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJjcmVhdGUgdm9pY2VfdHhfc2VtIGVyciBcbiIpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLQ0KLQkNCi0gDQotCXNfdm9pY2VUaW1lcklkCT0gek9zc19DcmVhdGVUaW1lcigidm9pY2VfZnJhbWVUaW1lciIsIHZvaWNlVGltZXJDYWxsQmFjaywgMCwgVFJVRSk7CSANCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInNfdm9pY2VUaW1lcklkPSVwXG4iLCBzX3ZvaWNlVGltZXJJZCk7DQotCWlmKCFzX3ZvaWNlVGltZXJJZCkNCi0Jew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZvaWNlX2ZyYW1lVGltZXIgIGZhaWxlZFxuIik7DQotCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQl9DQotDQotDQotDQotDQotCS8vcmV0ID0gekRydlJwTXNnX0NyZWF0ZUNoYW5uZWwoSVBDX01TR19BQ1RPUl9BOSxjaGFubmVsXzQxLDB4MTApOw0KLSNpZmRlZiBfVVNFX1ZFSElDTEVfREMJCQ0KLQlyZXQgPSB6RHJ2UnBNc2dfQ3JlYXRlQ2hhbm5lbF9DYXAoUlBNU0dfQ0FQX0lELGNoYW5uZWxfNDEsMHgxMCk7DQotDQotCWlmKERSVl9TVUNDRVNTICE9IHJldCkgew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgImNyZWF0ZSBycG1zZyBlcnIoJWQpIFxuIixyZXQpOw0KLQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JfQ0KLS8qCQ0KLQl2b2xhdGlsZSBUX1pEcnZScE1zZ19Nc2cgaWNwX3BNc2cgPSB7MH07IA0KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnBNc2dCdWZbMl0gPSB7MCwwfTsgDQotCS8vcHJpbnRrKCAidmlyX2J1ZjE6MHgleCwgdmlyX2J1ZjI6MHgleCwgcGh5X2J1ZjE6MHgleCwgcGh5X2J1ZjI6MHgleCxcbiIsdm9pY2VfYnVmZlswXSx2b2ljZV9idWZmWzFdLHJwTXNnQnVmWzBdLHJwTXNnQnVmWzFdKTsNCi0JaWNwX3BNc2cuYWN0b3JJRCA9IFJQTVNHX0NBUF9JRDsNCi0JaWNwX3BNc2cuY2hJRCA9IGNoYW5uZWxfNDE7DQotCWljcF9wTXNnLmZsYWcgJj0gflJQTVNHX1JFQURfUE9MTDsNCi0JaWNwX3BNc2cuYnVmID0gcnBNc2dCdWY7DQotCWljcF9wTXNnLmxlbiA9IDg7DQotDQotCQ0KLQlyZXQgPSB6RHJ2UnBNc2dfUmVhZF9DYXAoJmljcF9wTXNnKTsNCi0JaWYocmV0IDw9IDApew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZvaWNlIGJ1ZmZlciAgcnBtc2cgYWRkciByZWFkICBmYWlsLHJldD0lZCBcbiIscmV0KTsNCi0JCXpPc3NfUHJpbnRmKFNVQk1ETF9IQUwsIFBSSU5UX0xFVkVMX05PUk1BTCwgInBzIHZvaWNlIGJ1ZmZlciAgcnBtc2cgYWRkciByZWFkICBmYWlsLHJldD0lZCBcbiIscmV0KTsNCi0JCQ0KLQ0KLQl9DQotCWVsc2V7DQotCQkjaWYgMA0KLQ0KLQkJdm9pY2VfYnVmZltVUF9MSU5LXSA9IChzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIgKikocnBNc2dCdWZbMF0pOw0KLQkJdm9pY2VfYnVmZltET1dOX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKShycE1zZ0J1ZlsxXSk7CQ0KLQkJI2Vsc2UNCi0NCi0JCXZvaWNlX2J1ZmZbVVBfTElOS10gPSAoc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyICopaW9yZW1hcF93YyhycE1zZ0J1ZlswXSwgKHNpemVvZihzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIpICsgTUFYX0JVRl9TSVpFKk1BWF9CVUZfTlVNKSk7DQotCQl2b2ljZV9idWZmW0RPV05fTElOS10gPSAoc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyICopaW9yZW1hcF93YyhycE1zZ0J1ZlsxXSwoc2l6ZW9mKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlcikgKyBNQVhfQlVGX1NJWkUqTUFYX0JVRl9OVU0pKTsJDQotCQkjZW5kaWYNCi0NCi0JCXpPc3NfUHJpbnRmKFNVQk1ETF9IQUwsIFBSSU5UX0xFVkVMX05PUk1BTCwgInBzIHJwbXNnIHZvaWNlIGJ1ZmZlciBhZGRyLHVwIHZpciBidWY9MHgleCwgIGRvd24gdmlyIGJ1Zj0weCV4ICx1cCBwaHkgYnVmPTB4JXgsICBkb3duIHBoeSBidWY9MHgleCxzaXplPSVkIFxuIiBcDQotCQksdm9pY2VfYnVmZlswXSx2b2ljZV9idWZmWzFdLHJwTXNnQnVmWzBdLHJwTXNnQnVmWzFdLChzaXplb2Yoc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyKSArIE1BWF9CVUZfU0laRSpNQVhfQlVGX05VTSkpOw0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZvaWNlIGJ1ZmZlciBhZGRyLHVwIHZpciBidWY9MHgleCwgIGRvd24gdmlyIGJ1Zj0weCV4ICx1cCBwaHkgYnVmPTB4JXgsICBkb3duIHBoeSBidWY9MHgleCxzaXplPSVkIFxuIiBcDQotCQkJLHZvaWNlX2J1ZmZbMF0sdm9pY2VfYnVmZlsxXSxycE1zZ0J1ZlswXSxycE1zZ0J1ZlsxXSwoc2l6ZW9mKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlcikgKyBNQVhfQlVGX1NJWkUqTUFYX0JVRl9OVU0pKTsNCi0JfQ0KLSovCQ0KLQ0KLQkNCi0jZW5kaWYNCi0JLy92YnVmZmVyX2luaXRfZmxhZyA9IDE7DQotDQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9DcmVhdGVUaHJlYWRTZW1hcGggc3VjY2Vzcy4gXHJcbiIpOw0KLQlyZXR1cm4gRFJWX1NVQ0NFU1M7DQotfQ0KLQ0KLQ0KLQ0KLQ0KLXN0YXRpYyBTSU5UMzIgdnBfR2V0X0FkZF9ScE1zZ19WYnVmZmVyKFZPSUQpDQotew0KLQlTSU5UMzIgcmV0ID0gMDsNCi0vLyNpZmRlZiBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgCQ0KLS8vCWluaXRfY29tcGxldGlvbigmc192b2ljZV9jb21wbGV0aW9uKTsNCi0gICAgDQotCWlmKHZidWZmZXJfaW5pdF9mbGFnID09IDEpew0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZidWZmZXIgYWxyZWFkeSBpbml0LHJldHVybiEgXG4iKTsNCi0JCXJldHVybiBEUlZfU1VDQ0VTUzsNCi0NCi0JfQ0KLQ0KLQkvL3JldCA9IHpEcnZScE1zZ19DcmVhdGVDaGFubmVsKElQQ19NU0dfQUNUT1JfQTksY2hhbm5lbF80MSwweDEwKTsNCi0jaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCQkNCi0NCi0Jdm9sYXRpbGUgVF9aRHJ2UnBNc2dfTXNnIGljcF9wTXNnID0gezB9OyANCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IHJwTXNnQnVmWzJdID0gezAsMH07IA0KLQkvL3ByaW50ayggInZpcl9idWYxOjB4JXgsIHZpcl9idWYyOjB4JXgsIHBoeV9idWYxOjB4JXgsIHBoeV9idWYyOjB4JXgsXG4iLHZvaWNlX2J1ZmZbMF0sdm9pY2VfYnVmZlsxXSxycE1zZ0J1ZlswXSxycE1zZ0J1ZlsxXSk7DQotCWljcF9wTXNnLmFjdG9ySUQgPSBSUE1TR19DQVBfSUQ7DQotCWljcF9wTXNnLmNoSUQgPSBjaGFubmVsXzQxOw0KLQlpY3BfcE1zZy5mbGFnICY9IH5SUE1TR19SRUFEX1BPTEw7DQotCWljcF9wTXNnLmJ1ZiA9IHJwTXNnQnVmOw0KLQlpY3BfcE1zZy5sZW4gPSA4Ow0KLQ0KLQkNCi0JcmV0ID0gekRydlJwTXNnX1JlYWRfQ2FwKCZpY3BfcE1zZyk7DQotCWlmKHJldCA8PSAwKXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2b2ljZSBidWZmZXIgIHJwbXNnIGFkZHIgcmVhZCAgZmFpbCxyZXQ9JWQgXG4iLHJldCk7DQotCQl6T3NzX1ByaW50ZihTVUJNRExfSEFMLCBQUklOVF9MRVZFTF9OT1JNQUwsICJwcyB2b2ljZSBidWZmZXIgIHJwbXNnIGFkZHIgcmVhZCAgZmFpbCxyZXQ9JWQgXG4iLHJldCk7DQotCQkNCi0NCi0JfQ0KLQllbHNlew0KLQkJI2lmIDANCi0NCi0JCXZvaWNlX2J1ZmZbVVBfTElOS10gPSAoc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyICopKHJwTXNnQnVmWzBdKTsNCi0JCXZvaWNlX2J1ZmZbRE9XTl9MSU5LXSA9IChzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIgKikocnBNc2dCdWZbMV0pOwkNCi0JCSNlbHNlDQotDQotCQl2b2ljZV9idWZmW1VQX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKWlvcmVtYXBfd2MocnBNc2dCdWZbMF0sIChzaXplb2Yoc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyKSArIE1BWF9CVUZfU0laRSpNQVhfQlVGX05VTSkpOw0KLQkJdm9pY2VfYnVmZltET1dOX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKWlvcmVtYXBfd2MocnBNc2dCdWZbMV0sKHNpemVvZihzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIpICsgTUFYX0JVRl9TSVpFKk1BWF9CVUZfTlVNKSk7CQ0KLQkJI2VuZGlmDQotDQotCQl6T3NzX1ByaW50ZihTVUJNRExfSEFMLCBQUklOVF9MRVZFTF9OT1JNQUwsICJwcyBycG1zZyB2b2ljZSBidWZmZXIgYWRkcix1cCB2aXIgYnVmPTB4JXgsICBkb3duIHZpciBidWY9MHgleCAsdXAgcGh5IGJ1Zj0weCV4LCAgZG93biBwaHkgYnVmPTB4JXgsc2l6ZT0lZCBcbiIgXA0KLQkJLHZvaWNlX2J1ZmZbMF0sdm9pY2VfYnVmZlsxXSxycE1zZ0J1ZlswXSxycE1zZ0J1ZlsxXSwoc2l6ZW9mKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlcikgKyBNQVhfQlVGX1NJWkUqTUFYX0JVRl9OVU0pKTsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2b2ljZSBidWZmZXIgYWRkcix1cCB2aXIgYnVmPTB4JXgsICBkb3duIHZpciBidWY9MHgleCAsdXAgcGh5IGJ1Zj0weCV4LCAgZG93biBwaHkgYnVmPTB4JXgsc2l6ZT0lZCBcbiIgXA0KLQkJCSx2b2ljZV9idWZmWzBdLHZvaWNlX2J1ZmZbMV0scnBNc2dCdWZbMF0scnBNc2dCdWZbMV0sKHNpemVvZihzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIpICsgTUFYX0JVRl9TSVpFKk1BWF9CVUZfTlVNKSk7DQotDQotCQl2YnVmZmVyX2luaXRfZmxhZyA9IDE7DQotDQotCX0NCi0JDQotDQotCQ0KLSNlbmRpZg0KLQ0KLQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6IHN1Y2Nlc3MuIFxyXG4iLF9fZnVuY19fKTsNCi0JcmV0dXJuIERSVl9TVUNDRVNTOw0KLX0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3ZvaWNlcHJvY2Vzcy9oYWxfdm9pY2Vwcm9jZXNzLmMgYi9VYm9vdC9jcC9wcy9kcml2ZXIvc3JjL2NoaXBzZXRzL3NyYy9hdWRpb19iYXNlL3ZvaWNlcHJvY2Vzcy9oYWxfdm9pY2Vwcm9jZXNzLmMKaW5kZXggMzI5NmRhZC4uZjM0ZDBiNyAxMDA3NTUKLS0tIGEvVWJvb3QvY3AvcHMvZHJpdmVyL3NyYy9jaGlwc2V0cy9zcmMvYXVkaW9fYmFzZS92b2ljZXByb2Nlc3MvaGFsX3ZvaWNlcHJvY2Vzcy5jCisrKyBiL1Vib290L2NwL3BzL2RyaXZlci9zcmMvY2hpcHNldHMvc3JjL2F1ZGlvX2Jhc2Uvdm9pY2Vwcm9jZXNzL2hhbF92b2ljZXByb2Nlc3MuYwpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgImRydnNfdGRtLmgiDQogI2luY2x1ZGUgImhhbF9kdG1mX2RldGVjdC5oIg0KICNpbmNsdWRlICJoYWxfYXVkaW9fZGF0YS5oIg0KKy8vI2RlZmluZSBURVNUX1dISVRFX05PSVNFDQogDQorLy8jZGVmaW5lICBWQl9EQVRBX0xPU1NfVEVTVA0KICNpZmRlZiBURVNUX1dISVRFX05PSVNFDQogI2luY2x1ZGUgIkZzODAwMF9XaGl0ZU5vaXNlX01vbi5oIg0KIC8vI2luY2x1ZGUgIkZzODAwMF9TaW5lXzQ0MEh6X01vbi5oIg0KQEAgLTQzLDE5ICs0NSw0MCBAQAogI2luY2x1ZGUgImRydnNfaWNwLmgiDQogI2luY2x1ZGUgImRydnNfcnBtc2cuaCINCiAvLyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+DQotDQotI2luY2x1ZGUgImhhbF92b2ljZWJ1ZmZlci5oIg0KLQ0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsIE1hY3Jvcw0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogLy8jZGVmaW5lIFVTRV9BVURJT19SSU5HDQogLy8jZGVmaW5lIFZQX0dFVF9UWF9BTExfREFUQQ0KIA0KKyNkZWZpbmUgVlBfQlVGX0xFTkdUSCAgMHg3RkY4MCAvLzB4RkZEODAgICAvLzB4N0ZFNDAgIC8vMHg0ZGY4MC8vICgwLjVNICAweDgwMDAwKQ0KKyNkZWZpbmUgVlBfRlJBTUVfQlVGRkVSX1NJWkUgMzIwIC8vMjBtcyA4MDBLSFoNCisjZGVmaW5lIFZQX0kyU19CVUZGRVJfU0laRSAzMjANCisjZGVmaW5lIFZPSUNFX1NZTkNfVElNRU9VVF9USU1FIDEwMA0KKw0KKyNkZWZpbmUgVlBfSU5PVVRfQkFLX0JVRkZFUl9TSVpFIDB4MzAwMDAgIC8vIDB4NjAwMDANCisjZGVmaW5lIFZQX0lOT1VUX05PQkFLX0JVRlNJWkUgIDY0MA0KKyNkZWZpbmUgVkJfTUFYX0lOVAkgICAgIDB4N2ZmZmZmZmYNCisjZGVmaW5lIFZCX01JTl9JTlQgICAgICAgIDAgLy8oMC0yPDwzMSkvLzB4ODAwMDAwMDANCisNCisjZGVmaW5lIFZCX0lOVF9PVkVSRkxPVyh4KSBpZigoeCA8IFZCX01JTl9JTlQpfHwoeCA+IFZCX01BWF9JTlQpKSAgeCA9IDA7DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWwgVHlwZXMNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKwl0eXBlZGVmIGVudW0NCisJew0KKwkJVkJVRl9TRU0gPSAwLC8vdm9pY2UgYnVmZmVyDQorCQlFQ0FMTF9TRU0sCQkNCisJCVNFTV9NQVgNCisJfSBUX1NlbV9Pd25lcjsNCiANCisJdHlwZWRlZiBlbnVtDQorCXsNCisJCURJUl9SWCwNCisJCURJUl9UWCwgCQ0KKwkJRElSX0FMTCwNCisJCURJUl9NQVgNCisJfSBUX0RhdGFfRGlyX1R5cGU7DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWwgQ29uc3RhbnRzDQpAQCAtODEsNDYgKzEwNCw3IEBACiAqIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgVmFyaWFibGVzDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAvL3N0YXRpYyBUX3pEcnZWcF9TcGVlY2hTdGF0ZSAqc19wU3BlZWNoU3RhdGUgPSBOVUxMOw0KLSNpZiAwDQogc3RhdGljIFRfekRydlZwX1NwZWVjaFN0YXRlIHNfc3BlZWNoU3RhdGUgPSB7MH07ICAvLzEwNCBieXRlcw0KLSNlbHNlDQotVF96RHJ2VnBfU3BlZWNoU3RhdGUgc19zcGVlY2hTdGF0ZSA9IHsNCi0JCS8vdXNlIGZvciB2cCBkYXRhIHByb2Nlc3MNCi0JLnBWcFRlbXBSeEluQnVmZmVyID0gTlVMTCwJDQotCS5wVnBUZW1wVHhJbkJ1ZmZlciA9IE5VTEwsCQ0KLQkucFZwVGVtcFJ4T3V0UHV0QnVmZmVyID0gTlVMTCwJDQotCS5wVnBUZW1wVHhPdXRQdXRCdWZmZXIgPSBOVUxMLAkNCi0JCQ0KLQkucFZwSTJzQ2ZnID0gTlVMTCwJDQotCQkNCi0JLnZwQ2ZnUGFyYW0gPSB7MH0sDQotCQkNCi0JLmkyc1dyaXRlUGFyYW0gPSB7MH0sDQotCS5pMnNSZWFkUGFyYW0gPSB7MH0sDQotCQkNCi0JLmZyYW1lQ291bnQgPSAwLA0KLQkudG90YWxGcmFtZUJ1ZlNpemUgPSAwLA0KLQkuaW5PdXRCdWZVc2VTaXplID0gMCwNCi0JLnJ4U2F2ZUxlbiA9IDAsDQotCS50eFNhdmVMZW4gPSAwLA0KLQkuc2F2ZUxlbiA9IDAsDQotCQkNCi0JLnBjbVNsb3ROdW0gPSAwLA0KLQkucGNtV2JTZWNEYXRhUG9zaXRpb24gPSAwLA0KLQkJDQotCS52b2x0ZVZwV3JpdGVTdG9wRmxhZyA9IDAsDQotCS52b2x0ZVZwUmVhZFN0b3BGbGFnID0gMCwNCi0JLiB2b2x0ZVZwQ2ZnRW5GbGFnID0gMCwNCi0JLmZpcnN0V3JpdGVEYXRhRmxhZyA9IEZBTFNFLA0KLQkuZmlyc3RSZWFkRGF0YUZsYWcgPSBGQUxTRSwNCi0JLmkyc0lzUnN0RmxhZyA9IEZBTFNFLA0KLQ0KLX07DQotDQotDQotI2VuZGlmDQotDQotI2lmIDANCiANCiBUX3pEcnZWb2ljZV9HYlZhciBnX3ZvaWNlVmFyID0NCiB7DQpAQCAtMTU0LDEwNCArMTM4LDMyIEBACiAjZW5kaWYNCiAgICAgMCAvLzI3IHZvaWNlX252X3VwZGF0ZQ0KIH07DQotI2Vsc2UNCi1UX3pEcnZWb2ljZV9HYlZhciBnX3ZvaWNlVmFyID0NCi17DQotCS52b2x0ZUlzV2IgPSAwLAkJCQkJLy92b2x0ZUlzV2INCi0JLmlzVXNlU2xpY0NvZGVjID0gMCwJCQkJCS8vaXNVc2VTbGljQ29kZWMNCi0JLmdfaXNVc2VUZG0gPSAwLAkJCQkJLy9nX2lzVXNlVGRtDQotCS52b2ljZUluR3NtVGRNb2RlID0gMCwJCQkJCS8vdm9pY2VJbkdzbVRkTW9kZQ0KLQkudm9pY2VJblZvbHRlTW9kZSA9IDAsCQkJCQkvL3ZvaWNlSW5Wb2x0ZU1vZGUNCi0JLmlubmVySTJzSXNNYXN0ZXIgPSBGQUxTRSwJCQkJLy9pbm5lckkyc0lzTWFzdGVyDQotCS5pbm5lckkyc0lzSTJzTW9kZSA9IFRSVUUsCQkJCS8vaW5uZXJJMnNJc0kyc01vZGUNCi0JLnZwTG9vcFJ1bmluZyA9IEZBTFNFLAkJCQkvL3ZwTG9vcFJ1bm5pbmcNCi0JLm11dGVFbiA9IEZBTFNFLAkJCQkvL211dGVFbg0KLQkudlByb2NJc05vcm1hbCA9IEZBTFNFLAkJCQkvL3ZQcm9jSXNOb3JtYWwNCi0JLnZwSTJzU3RhdHVzID0gVlBfSTJTX0lETEUsCQkvL3ZwSTJzU3RhdHVzDQotCS52cFBhdGggPSBWUF9QQVRIX0hBTkRTRVQsCS8vdnBQYXRoDQotCS52cExvb3BQYXRoID0gVlBfUEFUSF9IQU5EU0VULAkvL3ZwTG9vcFBhdGgNCi0JLnZwVm9sID0gVlBfVk9MXzMsCQkJLy92cFZvbA0KLQkudm9pY2VNb2RlID0gTUFYX1ZPSUNFX01PREUsCQkvL3ZvaWNlTW9kZQ0KLQkudnBJbml0R2FpbiA9IC0xLAkJCQkJLy92cEluaXRHYWluDQotCS5hdWRpb19jdHJsRmxhZyA9IHswfSwJCQkJLy9hdWRpb19jdHJsRmxhZw0KLQkNCi0gICAgLmR0bWZEaXJTZWwgPSBEVE1GX0lETEUsCQkJLy9kdG1mRGlyU2VsDQotICAgIC5zYW1wbGVfcmF0ZSA9IDAsCQkJCQkvL3NhbXBsZV9yYXRlDQotICAgIC51c2VEdG1mTG9vcCA9IDAsCQkJCQkvL3VzZUR0bWZMb29wDQotICAgIC5tdXRlQ291bnQgPSAwLAkJCQkJLy9tdXRlQ291bnQNCi0gICAgLnZwTG9vcEJrUnVubmluZyA9IEZBTFNFLAkJCQkvL3ZwTG9vcEJrUnVubmluZw0KLQkucnhNdXRlRW4gPSBGQUxTRSwgICAgICAgICAgICAgIC8vcnhNdXRlRW4NCi0JLmZpcnN0UmVnWkNBVEZsYWcgPSBGQUxTRSwNCi0jaWZkZWYgRUNBTExfU1VQUE9SVAkNCi0gICAgLmVjYWxsRGF0YSA9IHswfSwJCQkgICAgLy9lY2FsbERhdGENCi0jZW5kaWYNCi0JLnZvaWNlX252X3VwZGF0ZSA9IDAsIC8vIHZvaWNlX252X3VwZGF0ZQ0KLQkudXNlVm9pY2VCdWZmZXIgPSAwLC8vIDAgbm90IHVzZSwxIHVzZQ0KLQkudm9pY2VCdWZmZXJUeXBlID0gMCwgLy8wIHNpbmdsZSBjb3JlLCAxIGR1YWwgY29yZQ0KLQkNCi19Ow0KLQ0KLSNlbmRpZg0KLQ0KLSNpZiAwDQotDQogDQogc3RhdGljIFRfekRydlZwX1N0YXRlIHNfdnBTdGF0ZSA9DQogew0KLQlOVUxMLC8vMSBwVnBSeEluQnVmZmVyDQotCU5VTEwsLy8yIHBWcFR4SW5CdWZmZXINCi0JTlVMTCwvLzMgcFZwUnhPdXRQdXRCdWZmZXINCi0JTlVMTCwvLzQgcFZwVHhPdXRQdXRCdWZmZXINCi0JMCwvLzUgaW5PdXRCdWZTaXplDQotCU5VTEwsLy82IHBWcElubmVySTJzQ2ZnDQotCU5VTEwsLy83IHBWcEV4dEkyc0NmZw0KLQlOVUxMLC8vOCBwVnBFeHRJMnNXYkNmZw0KLQlOVUxMLC8vOSBzX3BWcFRkbUNmZw0KLQlOVUxMLC8vMTAgc19wVnBUZG1XYkNmZw0KLQlOVUxMLC8vMTEgcFZwVGRtQ2ZnDQotCXswfSwvLzEyIHBNc2cNCi0JezB9LC8vMTMgcE1zZ0J1ZlsyXQ0KLQkvLzAsLy8xNA0KLQlOVUxMLC8vMTUgdnBUaHJlYWQNCi0JTlVMTCwvLzE2IHJjdkR0bWZUaHJlYWQNCi0JTlVMTCwvLzE3IHZwU2VtYXBob3JlDQotCU5VTEwsLy8xOCB2cFRocmVhZFF1aXRTZW1hDQotCU5VTEwsLy8xOSB2cExvb3BUaHJlYWQNCi0JTlVMTCwvLzIwIHZwTG9vcFNlbWFwaG9yZQ0KLQlOVUxMLy8yMSB2cFN0YXRlDQorCU5VTEwsDQorCU5VTEwsDQorCU5VTEwsDQorCU5VTEwsDQorCTAsDQorCU5VTEwsDQorCU5VTEwsDQorCU5VTEwsDQorCU5VTEwsDQorCU5VTEwsDQorCU5VTEwsDQorCXswfSwNCisJezB9LA0KKwkwLA0KKwlOVUxMLA0KKwlOVUxMLA0KKwlOVUxMLA0KKwlOVUxMLA0KKwlOVUxMLA0KKwlOVUxMLA0KKwlOVUxMDQogLy8JezB9DQogfTsNCi0jZWxzZQ0KLVRfekRydlZwX1N0YXRlIHNfdnBTdGF0ZSA9DQotew0KLQkucFZwUnhJbkJ1ZmZlciA9IE5VTEwsLy8xDQotCS5wVnBUeEluQnVmZmVyID0gTlVMTCwvLzINCi0JLnBWcFJ4T3V0UHV0QnVmZmVyID0gTlVMTCwvLzMNCi0JLnBWcFR4T3V0UHV0QnVmZmVyID0gTlVMTCwvLzQNCi0JLmluT3V0QnVmU2l6ZSA9IDAsLy81DQotCS5wVnBJbm5lckkyc0NmZyA9IE5VTEwsLy82DQotCS5wVnBFeHRJMnNDZmcgPSBOVUxMLC8vNw0KLQkucFZwRXh0STJzV2JDZmcgPSBOVUxMLC8vOA0KLQkuc19wVnBUZG1DZmcgPSBOVUxMLC8vOQ0KLQkuc19wVnBUZG1XYkNmZyA9IE5VTEwsLy8xMA0KLQkucFZwVGRtQ2ZnID0gTlVMTCwvLzExDQotCS5wTXNnID0gezB9LC8vMTINCi0JLnBNc2dCdWYgPSB7MH0sLy8xMw0KLQkudnBUaHJlYWQgPSBOVUxMLC8vMTQNCi0JLnJjdkR0bWZUaHJlYWQgPSBOVUxMLC8vMTUNCi0JLnZwU2VtYXBob3JlID0gTlVMTCwvLzE2DQotCS52cFRocmVhZFF1aXRTZW1hID0gTlVMTCwvLzE3DQotCS52cExvb3BUaHJlYWQgPSBOVUxMLC8vMTgNCi0JLnZwTG9vcFNlbWFwaG9yZSA9IE5VTEwsLy8xOQ0KLQ0KLQkudnBTdGF0ZSA9IE5VTEwsLy8NCi0vLwl7MH0NCi19Ow0KLQ0KLQ0KLSNlbmRpZg0KLQ0KLQ0KIA0KIC8vZm9yIHRlc3Qgd2hpdGVOb2lzZQ0KICNpZmRlZiBURVNUX1dISVRFX05PSVNFDQpAQCAtMzU5LDggKzI3MSw4IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICNpZmRlZiBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgDQogI2lmZGVmIF9WQlVGRl9JTl9NVUxUSV9DT1JFDQotLy8jZGVmaW5lIFJQTVNHX0NBUF9JRCAxDQotI2lmIDANCisjZGVmaW5lIFJQTVNHX0NBUF9JRCAxDQorDQogWk9TU19USU1FUl9JRCBzX3ZvaWNlVGltZXJJZCA7DQogWk9TU19TRU1BUEhPUkVfSUQgc192b2ljZVJkU2VtYTsNCiBaT1NTX1NFTUFQSE9SRV9JRCBzX3ZvaWNlV3JTZW1hOw0KQEAgLTM3MSwyMiArMjgzLDkgQEAKIA0KIGludCB2Yl9yZWFkX2NvdW50ID0gMDsNCiBpbnQgdmJfd3JpdGVfY291bnQgPSAwOw0KLSNlbHNlDQotLy9kZWZpbmUgaW4gaGFsX3ZvaWNlYnVmZmVyLmMNCi1leHRlcm4gWk9TU19USU1FUl9JRCBzX3ZvaWNlVGltZXJJZCA7DQotZXh0ZXJuIFpPU1NfU0VNQVBIT1JFX0lEIHNfdm9pY2VSZFNlbWE7DQotZXh0ZXJuIFpPU1NfU0VNQVBIT1JFX0lEIHNfdm9pY2VXclNlbWE7DQogDQotZXh0ZXJuIGludCB0aW1lcl9jYl9jb3VudDsNCi1leHRlcm4gaW50IGZpcnN0X2Z1bGxfZmxhZzsNCi1leHRlcm4gaW50IGZpcnN0X2VtcHR5X2ZsYWc7DQogDQotZXh0ZXJuIGludCB2Yl9yZWFkX2NvdW50Ow0KLWV4dGVybiBpbnQgdmJfd3JpdGVfY291bnQ7DQotDQotI2VuZGlmDQotDQotc3RhdGljIHZvaWQgdm9pY2VUaW1lckNhbGxCYWNrKFNJTlQzMiBwYXJhKQ0KK3ZvaWQgdm9pY2VUaW1lckNhbGxCYWNrKFNJTlQzMiBwYXJhKQ0KIHsNCiAJVF9aRHJ2UnBNc2dfTXNnIGljcF9wTXNnID0gezB9OyANCiAJDQpAQCAtNDE3LDggKzMxNiwyMiBAQAogCQ0KIC8vCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2b2ljZVRpbWVyQ2FsbEJhY2sgdGltZXI9JXVcbiIsIGNwdV9jbG9jaygwKT4+MTApOw0KIH0NCisjZGVmaW5lIE1BWF9CVUZfU0laRQkgICAgIDY0MA0KKyNkZWZpbmUgTUFYX0JVRl9OVU0gICAgICAgIDMNCiANCi1leHRlcm4gc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyICp2b2ljZV9idWZmWzJdOw0KKw0KK2VudW17DQorCVVQX0xJTkssDQorCURPV05fTElOSwkNCit9Ow0KKw0KK3N0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciB7DQorCXZvbGF0aWxlIHVpbnQgcmVhZF9wb3M7DQorCXZvbGF0aWxlIHVpbnQgd3JpdGVfcG9zOw0KKwl2b2xhdGlsZSBjaGFyIGRhdGFbXTsNCisNCit9Ow0KK3N0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqdm9pY2VfYnVmZlsyXSA9IHtOVUxMLE5VTEx9Ow0KIA0KIA0KIA0KQEAgLTU0NywxMCArNDYwLDEwIEBACiBleHRlcm4gaW50ICB2b2ljZWJ1ZmZlcl9kbHF1ZXVlX3dyaXRlKHZvaWQgICpidWYsIHVuc2lnbmVkIGludCAgc2l6ZSk7DQogZXh0ZXJuIHZvaWQgdm9pY2VfaW5mb3JtX3RvX2FwcCh2b2lkKTsNCiAvL3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oc192b2ljZV9jb21wbGV0aW9uKTsNCi1leHRlcm4gWk9TU19USU1FUl9JRCBzX3ZvaWNlVGltZXJJZCA7DQotZXh0ZXJuIFpPU1NfU0VNQVBIT1JFX0lEIHNfdm9pY2VSZFNlbWE7DQotZXh0ZXJuIFpPU1NfU0VNQVBIT1JFX0lEIHNfdm9pY2VXclNlbWE7DQotc3RhdGljIHZvaWQgdm9pY2VUaW1lckNhbGxCYWNrKFNJTlQzMiBwYXJhKQ0KK1pPU1NfVElNRVJfSUQgc192b2ljZVRpbWVySWQgOw0KK1pPU1NfU0VNQVBIT1JFX0lEIHNfdm9pY2VSZFNlbWE7DQorWk9TU19TRU1BUEhPUkVfSUQgc192b2ljZVdyU2VtYTsNCit2b2lkIHZvaWNlVGltZXJDYWxsQmFjayhTSU5UMzIgcGFyYSkNCiB7DQogLy8JY29tcGxldGVfYWxsKCZzX3ZvaWNlX2NvbXBsZXRpb24pOw0KIAl6T3NzX1B1dFNlbWFwaG9yZShzX3ZvaWNlV3JTZW1hKTsNCkBAIC01NjMsNyArNDc2LDcgQEAKIA0KICNlbmRpZg0KIA0KLXN0YXRpYyBTSU5UMzIgdnBfcnhzZW1fY291bnRfSW5pdCh2b2lkKQ0KK1NJTlQzMiB2cF9yeHNlbV9jb3VudF9Jbml0KHZvaWQpDQogew0KIAlVSU5UMzIgaSA9IDA7DQogCVVJTlQzMiBzZW1Db3VudCA9IDA7DQpAQCAtNTgyLDcgKzQ5NSw3IEBACiAJcmV0dXJuIERSVl9TVUNDRVNTOw0KIH0NCiANCi1zdGF0aWMgU0lOVDMyIHZwX3R4c2VtX2NvdW50X0luaXQodm9pZCkNCitTSU5UMzIgdnBfdHhzZW1fY291bnRfSW5pdCh2b2lkKQ0KIHsNCiAJVUlOVDMyIGkgPSAwOw0KIAlVSU5UMzIgc2VtQ291bnQgPSAwOw0KQEAgLTYwOSw3ICs1MjIsNiBAQAogI2VuZGlmDQogDQogDQotDQogI2lmZGVmIEVDQUxMX1NVUFBPUlQNCiBpbnQgZVdyRXJyID0gMDsNCiBVSU5UOCBlX3JlZ19mbGFnID0gMDsNCkBAIC02MjEsNyArNTMzLDYgQEAKIFRfRWNhbGxfU3RhdGUgcHJlRWNhbGxSeFN0YSA9IDA7DQogVF9FY2FsbF9TdGF0ZSBwcmVFY2FsbFR4U3RhID0gMDsJDQogDQotDQogLy90eA0KIFNJTlQzMiByZHNlbV9jb3VudF9Jbml0KFRfU2VtX093bmVyIG93bmVyKQ0KIHsNCkBAIC03OTUsNyArNzA2LDcgQEAKIA0KIAllX3N0YXJ0Q291bnQgPSAwOw0KICAgICBlX3N0b3BDb3VudCA9IDA7DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJlY2FsbF9PcGVuIGJ1ZnNpemU9JWQgZW5kIVxuIixidWZzaXplKTsNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgImVjYWxsX09wZW4gIGVuZCFcbiIpOw0KIA0KIAlyZXR1cm4gRFJWX1NVQ0NFU1M7DQogDQpAQCAtODQ3LDcgKzc1OCw3IEBACiB7DQogCVNJTlQzMiByZXQgPSBEUlZfU1VDQ0VTUzsNCiANCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIiVzOiBzdGFydCBlX3N0YXJ0Q291bnQ9JWQgXG4iLF9fRlVOQ1RJT05fXyxlX3N0YXJ0Q291bnQpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXMgc3RhcnQgZV9zdGFydENvdW50PSVkIFxuIixfX0ZVTkNUSU9OX18sZV9zdGFydENvdW50KTsNCiAJaWYoZ192b2ljZVZhci5lY2FsbERhdGEuZWNhbGxTdGEgPT0gRUNBTExfU1RfU1RBUlQpDQogCXsNCiAJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJlY2FsbF9TdGFydCByZXBlYXQgZWNhbGxTdGE9JWRcbiIsZ192b2ljZVZhci5lY2FsbERhdGEuZWNhbGxTdGEpOw0KQEAgLTg3NCw3ICs3ODUsNyBAQAogU0lOVDMyIGVjYWxsX1N0b3AoVk9JRCkNCiB7DQogCVNJTlQzMiAgcmV0ID0gRFJWX1NVQ0NFU1M7DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogc3RhcnQgZV9zdG9wQ291bnQ9JWQgXG4iLF9fRlVOQ1RJT05fXyxlX3N0b3BDb3VudCk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlcyBzdGFydCBlX3N0b3BDb3VudD0lZCBcbiIsX19GVU5DVElPTl9fLGVfc3RvcENvdW50KTsNCiAJDQogCWlmKChnX3ZvaWNlVmFyLmVjYWxsRGF0YS5lY2FsbFN0YSA9PSBFQ0FMTF9TVF9TVE9QKXx8KGdfdm9pY2VWYXIuZWNhbGxEYXRhLmVjYWxsU3RhID09IEVDQUxMX1NUX0NMT1NFKSkNCiAJew0KQEAgLTkyMiw3ICs4MzMsNyBAQAogCXsJCQkJCQkNCiAJCWlmKGRpciA9PSBESVJfUlgpDQogCQl7DQotDQorCQkJDQogCQkJcHJlRWNhbGxSeFN0YSA9IGdfdm9pY2VWYXIuZWNhbGxEYXRhLmVjYWxsUnhTdGE7DQogCQkJZ192b2ljZVZhci5lY2FsbERhdGEuZWNhbGxSeFN0YSA9IEVDQUxMX1NUX1JYX0lOVVNFOw0KIAkJCS8vekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInVwZGF0ZV9lY2FsbF9zdGF0ZSByeCBzdGF0ZSBjaGFuZ2UgdG8gZWNhbGxSeFN0YSA9ICVkXG4iLCBnX3ZvaWNlVmFyLmVjYWxsRGF0YS5lY2FsbFJ4U3RhKTsNCkBAIC0xMDUzLDE1ICs5NjQsOSBAQAogCXJldHVybiBEUlZfU1VDQ0VTUzsNCiB9DQogDQotDQogU0lOVDMyIHpEcnZFeHRBdWRpb19PcGVuKFRfWkRydkkyc19UcmFuc01vZGUgaTJzVHJhbnNNb2RlKQ0KIHsNCi0NCiAJaW50IHJldCA9IDA7DQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpeyANCi0JCXJldHVybiByZXQ7DQotCX0NCi0JDQogI2lmZGVmIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCiAjZWxzZQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTA3OSw5ICs5ODQsNiBAQAogU0lOVDMyIHpEcnZFeHRBdWRpb19SZXNldCgpDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTA5OCw5ICsxMDAwLDYgQEAKIFNJTlQzMiB6RHJ2RXh0QXVkaW9fQ2xvc2UoKQ0KIHsNCiAJaW50IHJldCA9IDA7DQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpeyANCi0JCXJldHVybiByZXQ7DQotCX0JDQogI2lmZGVmIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCiAjZWxzZQkNCiAJaWYgKGdfdm9pY2VWYXIuZ19pc1VzZVRkbSAhPSAxKQ0KQEAgLTExMTgsOSArMTAxNyw2IEBACiBTSU5UMzIgekRydkV4dEF1ZGlvX1dyaXRlX1ByZXBhcmUoVF9aRHJ2STJTX0NmZyAqaTJzQ2ZnLCBUX1pEcnZUZG1fQ2ZnICp0ZG1DZmcpDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTEzOSw5ICsxMDM1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF9aRHJ2VGRtX1BhcmFtcyAqdGRtUGFyYW1zLCBUX1pEcnZUZG1fQ2ZnICp0ZG1DZmcpDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTE1OSw5ICsxMDUyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF9aRHJ2VGRtX1BhcmFtcyAqdGRtUGFyYW1zLCBUX1pEcnZUZG1fQ2ZnICp0ZG1DZmcpDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTE3OCw5ICsxMDY4LDYgQEAKIFNJTlQzMiB6RHJ2RXh0QXVkaW9fUmVhZF9QcmVwYXJlKFRfWkRydkkyU19DZmcgKmkyc0NmZywgVF9aRHJ2VGRtX0NmZyAqdGRtQ2ZnKQ0KIHsNCiAJaW50IHJldCA9IDA7DQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpeyANCi0JCXJldHVybiByZXQ7DQotCX0JDQogI2lmZGVmIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCiAjZWxzZQkNCiAJaWYgKGdfdm9pY2VWYXIuZ19pc1VzZVRkbSAhPSAxKQ0KQEAgLTExOTksOSArMTA4Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF9aRHJ2VGRtX1BhcmFtcyAqdGRtUGFyYW1zLCBUX1pEcnZUZG1fQ2ZnICp0ZG1DZmcpDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTIxOSw5ICsxMTAzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX1pEcnZUZG1fUGFyYW1zICp0ZG1QYXJhbXMsIFRfWkRydlRkbV9DZmcgKnRkbUNmZykNCiB7DQogCWludCByZXQgPSAwOw0KLQlpZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKXsgDQotCQlyZXR1cm4gcmV0Ow0KLQl9CQ0KICNpZmRlZiBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgDQogI2Vsc2UJDQogCWlmIChnX3ZvaWNlVmFyLmdfaXNVc2VUZG0gIT0gMSkNCkBAIC0xMjM4LDkgKzExMTksNiBAQAogU0lOVDMyIHpEcnZFeHRBdWRpb19Xcml0ZShjb25zdCBVSU5UOCAqcEJ1ZiwgVUlOVDMyIHVpTGVuKQ0KIHsNCiAJaW50IHJldCA9IDA7DQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpeyANCi0JCXJldHVybiByZXQ7DQotCX0JDQogI2lmZGVmIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCiAjZWxzZQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTI1OCw5ICsxMTM2LDYgQEAKIFNJTlQzMiB6RHJ2RXh0QXVkaW9fUmVhZChjb25zdCBVSU5UOCAqKnBCdWYsIFVJTlQzMiAqdWlMZW4pDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIAkNCiAjZWxzZQkNCiAJaWYgKGdfdm9pY2VWYXIuZ19pc1VzZVRkbSAhPSAxKQ0KQEAgLTEzMjAsMTMgKzExOTUsOSBAQAogCXJldHVybiByZXQ7DQogfQ0KICNlbmRpZg0KLQ0KIFNJTlQzMiB6RHJ2RXh0QXVkaW9fV3JpdGVfU3RvcCgpDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtICE9IDEpDQpAQCAtMTM0NCw5ICsxMjE1LDYgQEAKIFNJTlQzMiB6RHJ2RXh0QXVkaW9fUmVhZF9TdG9wKCkNCiB7DQogCWludCByZXQgPSAwOw0KLQlpZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKXsgDQotCQlyZXR1cm4gcmV0Ow0KLQl9CQ0KICNpZmRlZiBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgDQogI2Vsc2UJDQogCWlmIChnX3ZvaWNlVmFyLmdfaXNVc2VUZG0gIT0gMSkNCkBAIC0xMzY0LDkgKzEyMzIsNiBAQAogU0lOVDMyIHpEcnZFeHRBdWRpb19HZXRCdWYoVUlOVDggKipwQnVmLCBVSU5UMzIgKnVpTGVuKQ0KIHsNCiAJaW50IHJldCA9IDA7DQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpeyANCi0JCXJldHVybiByZXQ7DQotCX0JDQogI2lmZGVmIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICAJDQogI2Vsc2UNCiAJaWYgKGdfdm9pY2VWYXIuZ19pc1VzZVRkbSAhPSAxKQ0KQEAgLTEzOTgsOSArMTI2Myw2IEBACiBTSU5UMzIgekRydkV4dEF1ZGlvX0ZyZWVCdWYoVUlOVDggKnBCdWYpDQogew0KIAlpbnQgcmV0ID0gMDsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuIHJldDsNCi0JfQkNCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQkNCiAJaWYgKGdfdm9pY2VWYXIuZ19pc1VzZVRkbSAhPSAxKQ0KQEAgLTE0MTcsMTAgKzEyNzksNiBAQAogDQogdm9pZCB6RHJ2RXh0QXVkaW9fUmxzQWxsU2VtYUJlZm9yZVN0b3Aodm9pZCkNCiB7DQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpeyANCi0JCXJldHVybjsNCi0JfQ0KLQ0KICNpZmRlZiBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgDQogI2Vsc2UJCQ0KIAlpZiAoZ192b2ljZVZhci5nX2lzVXNlVGRtID09IDEpDQpAQCAtMTQzOCwxMCArMTI5Niw2IEBACiANCiB2b2lkIHpEcnZFeHRBdWRpb19SeFJsc1NlbWFCZWZvcmVTdG9wKHZvaWQpDQogew0KLQlpZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKXsgDQotCQlyZXR1cm47DQotCX0NCi0NCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KICNlbHNlCQkNCiAJaWYgKGdfdm9pY2VWYXIuZ19pc1VzZVRkbSA9PSAxKQ0KQEAgLTE0NTcsMTAgKzEzMTEsNiBAQAogDQogdm9pZCB6RHJ2RXh0QXVkaW9fVHhSbHNTZW1hQmVmb3JlU3RvcCh2b2lkKQ0KIHsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSl7IA0KLQkJcmV0dXJuOw0KLQl9DQotDQogI2lmZGVmIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCiAjZWxzZQkJDQogCWlmIChnX3ZvaWNlVmFyLmdfaXNVc2VUZG0gPT0gMSkNCkBAIC0xNzQ1LDE5ICsxNTk1LDcgQEAKIA0KIAlleHRfYVJkQ291bnQgPSAwOw0KIAlleHRfYVJkRkJ1ZkNvdW50ID0gMDsNCi0JDQotCQ0KIA0KLQlpZiAoZ192b2ljZVZhci51c2VWb2ljZUJ1ZmZlciA9PSAxKQ0KLQl7DQotCQlyZXQgPSB2cF9PcGVuX1ZidWZmZXIoKTsJCQ0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX09wZW5fVmJ1ZmZlciByZXQ9JWQhXG4iLHJldCk7DQotCX0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX09wZW5fVmJ1ZmZlciB1c2VWb2ljZUJ1ZmZlcj0lZCB2b2ljZUJ1ZmZlclR5cGU9JWQhXG4iLGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIsZ192b2ljZVZhci52b2ljZUJ1ZmZlclR5cGUpOw0KLQ0KLQkNCi0NCi0JekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX09wZW4gIGVuZCFcbiIpOw0KIA0KIAlyZXR1cm4gRFJWX1NVQ0NFU1M7DQogDQpAQCAtMjQ0NCw3ICsyMjgyLDcgQEAKIAkJcmV0ID0gZWNhbGxfQ2xvc2UoKTsNCiAJCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQogCQl7DQotCQkgICB6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiJXM6ZWNhbGxfQ2xvc2UgZXJyb3IscmV0PSVkIixfX2Z1bmNfXyxyZXQpOw0KKwkJICAgekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgImVjYWxsX09wZW4gZXJyb3IscmV0PSVkIiwgcmV0KTsNCiAJCX0JDQogCQllX3JlZ19mbGFnID0gMDsNCiAJfQ0KQEAgLTI0NjcsMTIgKzIzMDUsNiBAQAogCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICIlczogdGltZXJfY2JfY291bnQgJWQsZmlyc3RfZnVsbF9mbGFnICVkLGZpcnN0X2VtcHR5X2ZsYWcgJWQsdmJfcmVhZF9jb3VudCAlZCx2Yl93cml0ZV9jb3VudCAlZCFcbiIsX19GVU5DVElPTl9fLHRpbWVyX2NiX2NvdW50LGZpcnN0X2Z1bGxfZmxhZyxmaXJzdF9lbXB0eV9mbGFnLHZiX3JlYWRfY291bnQsdmJfd3JpdGVfY291bnQpOw0KICNlbmRpZg0KIA0KLQlpZihnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpDQotCXsNCi0JCXJldCA9IHZwX0Nsb3NlX1ZidWZmZXIoKTsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9DbG9zZV9WYnVmZmVyIHJldD0lZCFcbiIscmV0KTsNCi0JDQotCX0NCiAJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgIiVzOiBleHRfYVJkQ291bnQgJWQsZXh0X2FSZEZCdWZDb3VudCAlZCFcbiIsX19GVU5DVElPTl9fLGV4dF9hUmRDb3VudCxleHRfYVJkRkJ1ZkNvdW50KTsNCiANCiANCkBAIC0yNTA1LDE4NSArMjMzNywxNzYgQEAKIC8vCXsNCiAvLwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgImlzIHRoZSBpMnMgbG9vcGJhY2sgbW9kZSIpOw0KIC8vCX0NCi0JDQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpDQotCXsNCi0JCXJldCA9IHZwX1ZvaWNlSTJzU3RhcnRfVmJ1ZmZlcigpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQ0KICNpZmRlZiAgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIAkNCi0JCXJldCA9IHpEcnZJMlNfUmVhZF9TdGFydChJMlNfMiwgJnNfc3BlZWNoU3RhdGUuaTJzUmVhZFBhcmFtLCBzX3ZwU3RhdGUucFZwSW5uZXJJMnNDZmcpOw0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydkkyUzJfUmVhZF9TdGFydCBmYWlsZWQgcmV0IGlzICVkIC5cbiIsIHJldCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCi0JCQ0KLQkJek9zc19TdGFydFRpbWVyKHNfdm9pY2VUaW1lcklkLCAyMCwgdm9pY2VUaW1lckNhbGxCYWNrLCAwKTsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IFZCIHpPc3NfU3RhcnRUaW1lclxuIik7DQorCXJldCA9IHpEcnZJMlNfUmVhZF9TdGFydChJMlNfMiwgJnNfc3BlZWNoU3RhdGUuaTJzUmVhZFBhcmFtLCBzX3ZwU3RhdGUucFZwSW5uZXJJMnNDZmcpOw0KKwlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KKwl7DQorCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydkkyUzJfUmVhZF9TdGFydCBmYWlsZWQgcmV0IGlzICVkIC5cbiIsIHJldCk7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCQ0KKwl6T3NzX1N0YXJ0VGltZXIoc192b2ljZVRpbWVySWQsIDIwLCB2b2ljZVRpbWVyQ2FsbEJhY2ssIDApOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBWQiB6T3NzX1N0YXJ0VGltZXJcbiIpOw0KIA0KLQkJcmV0ID0gekRydkkyU19Xcml0ZV9TdGFydChJMlNfMiwgJnNfc3BlZWNoU3RhdGUuaTJzV3JpdGVQYXJhbSwgc192cFN0YXRlLnBWcElubmVySTJzQ2ZnKTsNCisJcmV0ID0gekRydkkyU19Xcml0ZV9TdGFydChJMlNfMiwgJnNfc3BlZWNoU3RhdGUuaTJzV3JpdGVQYXJhbSwgc192cFN0YXRlLnBWcElubmVySTJzQ2ZnKTsNCiANCi0JCXJldCArPSB6RHJ2STJTX0dldEJ1ZihJMlNfMiwgJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yNzp6RHJ2STJTX0dldEJ1ZiBJMlNfMiByZXQ9JWQiLCByZXQpOw0KLQkJCXJldHVybiBEUlZfRVJST1I7DQotCQl9DQotCQl6T3NzX01lbXNldCh3cml0ZV9idWYsIDAsIHdyaXRlX2xlbik7DQotCQlyZXQgPSB6RHJ2STJTX1dyaXRlKEkyU18yLCB3cml0ZV9idWYsIHdyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yMTI6ekRydkkyU19Xcml0ZSBJMlNfMiByZXQ9JWQiLCByZXQpOw0KLQkJfQ0KLQkJDQotCQlyZXQgKz0gekRydkkyU19HZXRCdWYoSTJTXzIsICZ3cml0ZV9idWYsICZ3cml0ZV9sZW4pOw0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjEzOnpEcnZJMlNfR2V0QnVmIEkyU18yIHJldD0lZCIsIHJldCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCi0JCXpPc3NfTWVtc2V0KHdyaXRlX2J1ZiwgMCwgd3JpdGVfbGVuKTsNCi0JCXJldCA9IHpEcnZJMlNfV3JpdGUoSTJTXzIsIHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3IxNDp6RHJ2STJTX1dyaXRlIEkyU18yIHJldD0lZCIsIHJldCk7DQotCQl9DQorCXJldCArPSB6RHJ2STJTX0dldEJ1ZihJMlNfMiwgJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yNzp6RHJ2STJTX0dldEJ1ZiBJMlNfMiByZXQ9JWQiLCByZXQpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwl6T3NzX01lbXNldCh3cml0ZV9idWYsIDAsIHdyaXRlX2xlbik7DQorCXJldCA9IHpEcnZJMlNfV3JpdGUoSTJTXzIsIHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3IxMjp6RHJ2STJTX1dyaXRlIEkyU18yIHJldD0lZCIsIHJldCk7DQorCX0NCisJDQorCXJldCArPSB6RHJ2STJTX0dldEJ1ZihJMlNfMiwgJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yMTM6ekRydkkyU19HZXRCdWYgSTJTXzIgcmV0PSVkIiwgcmV0KTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisJek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KKwlyZXQgPSB6RHJ2STJTX1dyaXRlKEkyU18yLCB3cml0ZV9idWYsIHdyaXRlX2xlbik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yMTQ6ekRydkkyU19Xcml0ZSBJMlNfMiByZXQ9JWQiLCByZXQpOw0KKwl9DQogI2lmZGVmIF9WQlVGRl9JTl9NVUxUSV9DT1JFDQotCQl2b2ljZV9idWZmZXJfd3JpdGUoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KKwl2b2ljZV9idWZmZXJfd3JpdGUoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KIA0KICNlbHNlDQotCQl2b2ljZWJ1ZmZlcl9kbHF1ZXVlX3dyaXRlKHNfc3BlZWNoU3RhdGUucFZwVGVtcFJ4T3V0UHV0QnVmZmVyLCBzX3NwZWVjaFN0YXRlLnRvdGFsRnJhbWVCdWZTaXplKTsNCisJdm9pY2VidWZmZXJfZGxxdWV1ZV93cml0ZShzX3NwZWVjaFN0YXRlLnBWcFRlbXBSeE91dFB1dEJ1ZmZlciwgc19zcGVlY2hTdGF0ZS50b3RhbEZyYW1lQnVmU2l6ZSk7DQogI2VuZGlmDQogI2Vsc2UJDQotCQlpZiAoZ192b2ljZVZhci5pc1VzZVNsaWNDb2RlYyA9PSAxKQ0KLQkJew0KKwlpZiAoZ192b2ljZVZhci5pc1VzZVNsaWNDb2RlYyA9PSAxKQ0KKwl7DQogDQotCQkJaWYgKHNfc3BlZWNoU3RhdGUuaTJzSXNSc3RGbGFnID09IEZBTFNFKQ0KKwkJaWYgKHNfc3BlZWNoU3RhdGUuaTJzSXNSc3RGbGFnID09IEZBTFNFKQ0KKwkJew0KKwkJCXJldCA9IHpEcnZFeHRBdWRpb19SZXNldCgpOw0KKwkJCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQogCQkJew0KLQkJCQlyZXQgPSB6RHJ2RXh0QXVkaW9fUmVzZXQoKTsNCi0JCQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCQkJew0KLQkJCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgekRydkV4dEF1ZGlvX1Jlc2V0KCkgZXJyIHJldD0lZCAiLCByZXQpOw0KLQkJCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCQkJfQ0KLQkJCQlzX3NwZWVjaFN0YXRlLmkyc0lzUnN0RmxhZyA9IFRSVUU7DQorCQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IHpEcnZFeHRBdWRpb19SZXNldCgpIGVyciByZXQ9JWQgIiwgcmV0KTsNCisJCQkJcmV0dXJuIERSVl9FUlJPUjsNCiAJCQl9DQotDQorCQkJc19zcGVlY2hTdGF0ZS5pMnNJc1JzdEZsYWcgPSBUUlVFOw0KIAkJfQ0KIA0KLQkJcmV0ID0gekRydkkyU19SZWFkX1N0YXJ0KEkyU18yLCAmc19zcGVlY2hTdGF0ZS5pMnNSZWFkUGFyYW0sIHNfdnBTdGF0ZS5wVnBJbm5lckkyc0NmZyk7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ6RHJ2STJTMl9SZWFkX1N0YXJ0IGZhaWxlZCByZXQgaXMgJWQgLlxuIiwgcmV0KTsNCi0JCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQkJfQ0KKwl9DQogDQotCQlyZXQgKz0gekRydkV4dEF1ZGlvX1JlYWRfU3RhcnQoJnNfc3BlZWNoU3RhdGUuaTJzUmVhZFBhcmFtLCBzX3NwZWVjaFN0YXRlLnBWcEkyc0NmZywgJnNfdnBUZG1SZWFkUGFyYW0sIHNfdnBTdGF0ZS5wVnBUZG1DZmcpOw0KKwlyZXQgPSB6RHJ2STJTX1JlYWRfU3RhcnQoSTJTXzIsICZzX3NwZWVjaFN0YXRlLmkyc1JlYWRQYXJhbSwgc192cFN0YXRlLnBWcElubmVySTJzQ2ZnKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInpEcnZJMlMyX1JlYWRfU3RhcnQgZmFpbGVkIHJldCBpcyAlZCAuXG4iLCByZXQpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KIA0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydkkyUzFfUmVhZF9TdGFydCBmYWlsZWQgcmV0IGlzICVkIC5cbiIsIHJldCk7DQotCQkJekRydkkyU19SZWFkX1N0b3AoSTJTXzIpOw0KLQkJCXJldHVybiBEUlZfRVJST1I7DQotCQl9DQorCXJldCArPSB6RHJ2RXh0QXVkaW9fUmVhZF9TdGFydCgmc19zcGVlY2hTdGF0ZS5pMnNSZWFkUGFyYW0sIHNfc3BlZWNoU3RhdGUucFZwSTJzQ2ZnLCAmc192cFRkbVJlYWRQYXJhbSwgc192cFN0YXRlLnBWcFRkbUNmZyk7DQogDQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCB6RHJ2STJTX1JlYWRfU3RhcnQgIHJldD0lZCIsIHJldCk7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ6RHJ2STJTMV9SZWFkX1N0YXJ0IGZhaWxlZCByZXQgaXMgJWQgLlxuIiwgcmV0KTsNCisJCXpEcnZJMlNfUmVhZF9TdG9wKEkyU18yKTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCiANCi0JCXJldCA9IHpEcnZJMlNfUmVhZChJMlNfMiwgJnJlYWRfYnVmLCAmcmVhZF9sZW4pOw0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjp6RHJ2STJTX1JlYWQgSTJTXzIgcmV0PSVkIiwgcmV0KTsNCi0JCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQkJfQ0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgekRydkkyU19SZWFkIEkyU18yIHJldD0lZCIsIHJldCk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IHpEcnZJMlNfUmVhZF9TdGFydCAgcmV0PSVkIiwgcmV0KTsNCiANCi0JCXJldCA9IHpEcnZFeHRBdWRpb19SZWFkKCZyZWFkX2J1ZiwgJnJlYWRfbGVuKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3I6ekRydkkyU19SZWFkICByZXQ9JWQiLCByZXQpOw0KLQkJCXJldHVybiBEUlZfRVJST1I7DQotCQl9DQotCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCB6RHJ2STJTX1JlYWQgSTJTXzEgcmV0PSVkIiwgcmV0KTsNCisJcmV0ID0gekRydkkyU19SZWFkKEkyU18yLCAmcmVhZF9idWYsICZyZWFkX2xlbik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yOnpEcnZJMlNfUmVhZCBJMlNfMiByZXQ9JWQiLCByZXQpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCB6RHJ2STJTX1JlYWQgSTJTXzIgcmV0PSVkIiwgcmV0KTsNCiANCi0JCXJldCArPSB6RHJ2RXh0QXVkaW9fUmVhZF9TdG9wKCk7DQotCQlyZXQgKz0gekRydkkyU19SZWFkX1N0b3AoSTJTXzIpOw0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjp6RHJ2STJTX1JlYWQgIHJldD0lZCIsIHJldCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCisJcmV0ID0gekRydkV4dEF1ZGlvX1JlYWQoJnJlYWRfYnVmLCAmcmVhZF9sZW4pOw0KKwlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KKwl7DQorCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjp6RHJ2STJTX1JlYWQgIHJldD0lZCIsIHJldCk7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IHpEcnZJMlNfUmVhZCBJMlNfMSByZXQ9JWQiLCByZXQpOw0KIA0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZmlyc3QgcmVhZC93cml0ZSBzdG9wIHJldD0lZCIsIHJldCk7DQorCXJldCArPSB6RHJ2RXh0QXVkaW9fUmVhZF9TdG9wKCk7DQorCXJldCArPSB6RHJ2STJTX1JlYWRfU3RvcChJMlNfMik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yOnpEcnZJMlNfUmVhZCAgcmV0PSVkIiwgcmV0KTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCiANCi0JCXJldCArPSB6RHJ2RXh0QXVkaW9fUmVhZF9TdGFydCgmc19zcGVlY2hTdGF0ZS5pMnNSZWFkUGFyYW0sIHNfc3BlZWNoU3RhdGUucFZwSTJzQ2ZnLCAmc192cFRkbVJlYWRQYXJhbSwgc192cFN0YXRlLnBWcFRkbUNmZyk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGZpcnN0IHJlYWQvd3JpdGUgc3RvcCByZXQ9JWQiLCByZXQpOw0KIA0KLQkJcmV0ICs9IHpEcnZJMlNfUmVhZF9TdGFydChJMlNfMiwgJnNfc3BlZWNoU3RhdGUuaTJzUmVhZFBhcmFtLCBzX3ZwU3RhdGUucFZwSW5uZXJJMnNDZmcpOw0KKwlyZXQgKz0gekRydkV4dEF1ZGlvX1JlYWRfU3RhcnQoJnNfc3BlZWNoU3RhdGUuaTJzUmVhZFBhcmFtLCBzX3NwZWVjaFN0YXRlLnBWcEkyc0NmZywgJnNfdnBUZG1SZWFkUGFyYW0sIHNfdnBTdGF0ZS5wVnBUZG1DZmcpOw0KIA0KLQkJcmV0ICs9IHpEcnZFeHRBdWRpb19Xcml0ZV9TdGFydCgmc19zcGVlY2hTdGF0ZS5pMnNXcml0ZVBhcmFtLCBzX3NwZWVjaFN0YXRlLnBWcEkyc0NmZywgJnNfVnBUZG1Xcml0ZVBhcmFtLCBzX3ZwU3RhdGUucFZwVGRtQ2ZnKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3I0OnpEcnZJMlNfV3JpdGVfU3RhcnQgIHJldD0lZCIsIHJldCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCi0JCXJldCArPSB6RHJ2RXh0QXVkaW9fR2V0QnVmKCZ3cml0ZV9idWYsICZ3cml0ZV9sZW4pOw0KLQkJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCi0JCXsNCi0JCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjU6ekRydkkyU19HZXRCdWYgIHJldD0lZCIsIHJldCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCisJcmV0ICs9IHpEcnZJMlNfUmVhZF9TdGFydChJMlNfMiwgJnNfc3BlZWNoU3RhdGUuaTJzUmVhZFBhcmFtLCBzX3ZwU3RhdGUucFZwSW5uZXJJMnNDZmcpOw0KIA0KLQkJek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KLQkJcmV0ICs9IHpEcnZFeHRBdWRpb19Xcml0ZSh3cml0ZV9idWYsIHdyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yNjp6RHJ2STJTX1dyaXRlICByZXQ9JWQiLCByZXQpOw0KLQkJCXJldHVybiBEUlZfRVJST1I7DQotCQl9DQotCQlyZXQgPSB6RHJ2STJTX1dyaXRlX1N0YXJ0KEkyU18yLCAmc19zcGVlY2hTdGF0ZS5pMnNXcml0ZVBhcmFtLCBzX3ZwU3RhdGUucFZwSW5uZXJJMnNDZmcpOw0KLQkJcmV0ICs9IHpEcnZJMlNfR2V0QnVmKEkyU18yLCAmd3JpdGVfYnVmLCAmd3JpdGVfbGVuKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3I3OnpEcnZJMlNfR2V0QnVmIEkyU18yIHJldD0lZCIsIHJldCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCi0JCXpPc3NfTWVtc2V0KHdyaXRlX2J1ZiwgMCwgd3JpdGVfbGVuKTsNCi0JCXJldCA9IHpEcnZJMlNfV3JpdGUoSTJTXzIsIHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3I4OnpEcnZJMlNfV3JpdGUgSTJTXzIgcmV0PSVkIiwgcmV0KTsNCi0JCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQkJfQ0KLQkJcmV0ICs9IHpEcnZFeHRBdWRpb19HZXRCdWYoJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yOTp6RHJ2STJTX0dldEJ1ZiAgcmV0PSVkIiwgcmV0KTsNCi0JCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQkJfQ0KLQkJek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KLQkJcmV0ICs9IHpEcnZFeHRBdWRpb19Xcml0ZSh3cml0ZV9idWYsIHdyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yMTA6ekRydkkyU19Xcml0ZSAgcmV0PSVkIiwgcmV0KTsNCi0JCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQkJfQ0KLQkJcmV0ICs9IHpEcnZJMlNfR2V0QnVmKEkyU18yLCAmd3JpdGVfYnVmLCAmd3JpdGVfbGVuKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3IxMTp6RHJ2STJTX0dldEJ1ZiBJMlNfMiByZXQ9JWQiLCByZXQpOw0KLQkJCXJldHVybiBEUlZfRVJST1I7DQotCQl9DQotCQl6T3NzX01lbXNldCh3cml0ZV9idWYsIDAsIHdyaXRlX2xlbik7DQotCQlyZXQgPSB6RHJ2STJTX1dyaXRlKEkyU18yLCB3cml0ZV9idWYsIHdyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yMTI6ekRydkkyU19Xcml0ZSBJMlNfMiByZXQ9JWQiLCByZXQpOw0KLQkJfQ0KKwlyZXQgKz0gekRydkV4dEF1ZGlvX1dyaXRlX1N0YXJ0KCZzX3NwZWVjaFN0YXRlLmkyc1dyaXRlUGFyYW0sIHNfc3BlZWNoU3RhdGUucFZwSTJzQ2ZnLCAmc19WcFRkbVdyaXRlUGFyYW0sIHNfdnBTdGF0ZS5wVnBUZG1DZmcpOw0KKwlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KKwl7DQorCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjQ6ekRydkkyU19Xcml0ZV9TdGFydCAgcmV0PSVkIiwgcmV0KTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisJcmV0ICs9IHpEcnZFeHRBdWRpb19HZXRCdWYoJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yNTp6RHJ2STJTX0dldEJ1ZiAgcmV0PSVkIiwgcmV0KTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisNCisJek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KKwlyZXQgKz0gekRydkV4dEF1ZGlvX1dyaXRlKHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3I2OnpEcnZJMlNfV3JpdGUgIHJldD0lZCIsIHJldCk7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCXJldCA9IHpEcnZJMlNfV3JpdGVfU3RhcnQoSTJTXzIsICZzX3NwZWVjaFN0YXRlLmkyc1dyaXRlUGFyYW0sIHNfdnBTdGF0ZS5wVnBJbm5lckkyc0NmZyk7DQorCXJldCArPSB6RHJ2STJTX0dldEJ1ZihJMlNfMiwgJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yNzp6RHJ2STJTX0dldEJ1ZiBJMlNfMiByZXQ9JWQiLCByZXQpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwl6T3NzX01lbXNldCh3cml0ZV9idWYsIDAsIHdyaXRlX2xlbik7DQorCXJldCA9IHpEcnZJMlNfV3JpdGUoSTJTXzIsIHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3I4OnpEcnZJMlNfV3JpdGUgSTJTXzIgcmV0PSVkIiwgcmV0KTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisJcmV0ICs9IHpEcnZFeHRBdWRpb19HZXRCdWYoJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQorCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQorCXsNCisJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2ljZUkyc1N0YXJ0IGVycm9yOTp6RHJ2STJTX0dldEJ1ZiAgcmV0PSVkIiwgcmV0KTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisJek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KKwlyZXQgKz0gekRydkV4dEF1ZGlvX1dyaXRlKHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvaWNlSTJzU3RhcnQgZXJyb3IxMDp6RHJ2STJTX1dyaXRlICByZXQ9JWQiLCByZXQpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwlyZXQgKz0gekRydkkyU19HZXRCdWYoSTJTXzIsICZ3cml0ZV9idWYsICZ3cml0ZV9sZW4pOw0KKwlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KKwl7DQorCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjExOnpEcnZJMlNfR2V0QnVmIEkyU18yIHJldD0lZCIsIHJldCk7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCXpPc3NfTWVtc2V0KHdyaXRlX2J1ZiwgMCwgd3JpdGVfbGVuKTsNCisJcmV0ID0gekRydkkyU19Xcml0ZShJMlNfMiwgd3JpdGVfYnVmLCB3cml0ZV9sZW4pOw0KKwlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KKwl7DQorCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfVm9pY2VJMnNTdGFydCBlcnJvcjEyOnpEcnZJMlNfV3JpdGUgSTJTXzIgcmV0PSVkIiwgcmV0KTsNCisJfQ0KIA0KICNlbmRpZg0KLQl9DQogI2lmZGVmIEVDQUxMX1NVUFBPUlQNCiAJaWYoKGdfdm9pY2VWYXIuYXVkaW9fY3RybEZsYWcuaXNVc2VFY2FsbCA9PSAxKSYmKGVfcmVnX2ZsYWcgPT0gMSkpDQogCXsNCkBAIC0yODM0LDI3ICsyNjU3LDE4IEBACiAJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInpEcnZWcF9Wb2ljZVdvcmtTdG9wIGNhbGwgdm9pY2VfVG9uZU1peGVyU3RvcCAhXG4iKTsNCiANCiAJZ192b2ljZVZhci52cEkyc1N0YXR1cyA9IFZQX0kyU19PUEVOOw0KLQ0KLQkNCi0NCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSkNCi0Jew0KLQkJcmV0ID0gekRydlZwX1ZvaWNlV29ya1N0b3BfVmJ1ZmZlcigpOw0KLQl9DQotCWVsc2UNCi0JewkNCiAjaWZkZWYgIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWIA0KLQkJLy9jb21wbGV0ZV9hbGwoJnNfdm9pY2VfY29tcGxldGlvbik7DQotCQl6T3NzX1B1dFNlbWFwaG9yZShzX3ZvaWNlUmRTZW1hKTsNCi0JCXpPc3NfUHV0U2VtYXBob3JlKHNfdm9pY2VXclNlbWEpOw0KLQkJek9zc19TdG9wVGltZXIoc192b2ljZVRpbWVySWQpOw0KLQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInpEcnZWcF9Wb2ljZVdvcmtTdG9wIHpPc3NfU3RvcFRpbWVyXG4iKTsNCisJLy9jb21wbGV0ZV9hbGwoJnNfdm9pY2VfY29tcGxldGlvbik7DQorCXpPc3NfUHV0U2VtYXBob3JlKHNfdm9pY2VSZFNlbWEpOw0KKwl6T3NzX1B1dFNlbWFwaG9yZShzX3ZvaWNlV3JTZW1hKTsNCisJek9zc19TdG9wVGltZXIoc192b2ljZVRpbWVySWQpOw0KKwl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiekRydlZwX1ZvaWNlV29ya1N0b3Agek9zc19TdG9wVGltZXJcbiIpOw0KICNlbHNlDQotCQkvL3pEcnZJMnNfUnhSbHNTZW1hQmVmb3JlU3RvcChJMlNfMSk7DQotCQkvL3pEcnZJMnNfVHhSbHNTZW1hQmVmb3JlU3RvcChJMlNfMSk7DQotCQl6RHJ2RXh0QXVkaW9fUmxzQWxsU2VtYUJlZm9yZVN0b3AoKTsNCisJLy96RHJ2STJzX1J4UmxzU2VtYUJlZm9yZVN0b3AoSTJTXzEpOw0KKwkvL3pEcnZJMnNfVHhSbHNTZW1hQmVmb3JlU3RvcChJMlNfMSk7DQorCXpEcnZFeHRBdWRpb19SbHNBbGxTZW1hQmVmb3JlU3RvcCgpOw0KICNlbmRpZg0KLQl9CQ0KKwkNCiAJekRydkkyc19SeFJsc1NlbWFCZWZvcmVTdG9wKEkyU18yKTsNCiAJekRydkkyc19UeFJsc1NlbWFCZWZvcmVTdG9wKEkyU18yKTsNCiANCkBAIC0yOTIyLDE5ICsyNzM2LDEwIEBACiAJfQ0KIA0KIAlnX3ZvaWNlVmFyLnZwSTJzU3RhdHVzID0gVlBfSTJTX0lOVVNFOw0KLQkNCi0JDQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpDQotCXsNCi0JCXJldCA9IHZwX1ZvbHRlUmVhZFN0YXJ0X1ZidWZmZXIoKTsNCi0JfQ0KLQllbHNlDQotCXsJDQogI2lmZGVmICBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSVg0KLQkJek9zc19TdGFydFRpbWVyKHNfdm9pY2VUaW1lcklkLCAyMCwgdm9pY2VUaW1lckNhbGxCYWNrLCAwKTsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2x0ZVJlYWRTdGFydCB6T3NzX1N0YXJ0VGltZXIgc3RhcnRcbiIpOw0KLSNlbmRpZg0KLQl9DQorCXpPc3NfU3RhcnRUaW1lcihzX3ZvaWNlVGltZXJJZCwgMjAsIHZvaWNlVGltZXJDYWxsQmFjaywgMCk7DQorCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2x0ZVJlYWRTdGFydCB6T3NzX1N0YXJ0VGltZXIgc3RhcnRcbiIpOw0KKyNlbmRpZgkNCiAJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgICJ2cF9Wb2x0ZVJlYWRTdGFydCBcbiIpOw0KIA0KIAlyZXR1cm4gRFJWX1NVQ0NFU1M7DQpAQCAtMjk0MywxNSArMjc0OCw2IEBACiBTSU5UMzIgdnBfVm9sdGVSZWFkU3RvcChWT0lEKQ0KIHsNCiAJU0lOVDMyICByZXQgPSBEUlZfU1VDQ0VTUzsNCi0NCi0JDQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpDQotCXsNCi0JCXJldCA9IHZwX1ZvbHRlUmVhZFN0b3BfVmJ1ZmZlcigpOw0KLQkgICAgcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQkNCiAjaWZkZWYgIENPTkZJR19WT0lDRV9CVUZGRVJfRFJWICANCiAJek9zc19QdXRTZW1hcGhvcmUoc192b2ljZVJkU2VtYSk7DQogI2Vsc2UNCkBAIC0zMDQ4LDU0ICsyODQ0LDQ2IEBACiAJfQ0KIA0KIAlnX3ZvaWNlVmFyLnZwSTJzU3RhdHVzID0gVlBfSTJTX0lOVVNFOw0KLQkNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSkNCi0Jew0KLQkJdnBfVm9sdGVXcml0ZVN0YXJ0X1ZidWZmZXIoKTsJDQotCX0NCi0JZWxzZQ0KLQl7DQogI2lmZGVmICBDT05GSUdfVk9JQ0VfQlVGRkVSX0RSViAgDQogI2lmZGVmIF9WQlVGRl9JTl9NVUxUSV9DT1JFDQotCQl2b2ljZV9idWZmZXJfd3JpdGUoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KKwl2b2ljZV9idWZmZXJfd3JpdGUoc19zcGVlY2hTdGF0ZS5wVnBUZW1wUnhPdXRQdXRCdWZmZXIsIHNfc3BlZWNoU3RhdGUudG90YWxGcmFtZUJ1ZlNpemUpOw0KIA0KICNlbHNlDQotCQl2b2ljZWJ1ZmZlcl9kbHF1ZXVlX3dyaXRlKHNfc3BlZWNoU3RhdGUucFZwVGVtcFJ4T3V0UHV0QnVmZmVyLCBzX3NwZWVjaFN0YXRlLnRvdGFsRnJhbWVCdWZTaXplKTsNCisJdm9pY2VidWZmZXJfZGxxdWV1ZV93cml0ZShzX3NwZWVjaFN0YXRlLnBWcFRlbXBSeE91dFB1dEJ1ZmZlciwgc19zcGVlY2hTdGF0ZS50b3RhbEZyYW1lQnVmU2l6ZSk7DQogI2VuZGlmDQogI2Vsc2UNCi0JCXJldCA9IHpEcnZFeHRBdWRpb19HZXRCdWYoJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2x0ZVdyaXRlU3RhcnQgZXJyb3IxOnpEcnZJMlNfR2V0QnVmIEkyU18xIHJldD0lZCIsIHJldCk7DQotCQkJekRydkV4dEF1ZGlvX1dyaXRlX1N0b3AoKTsNCi0JCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQkJfQ0KLQkJek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KLQkJcmV0ID0gekRydkV4dEF1ZGlvX1dyaXRlKHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvbHRlV3JpdGVTdGFydCBlcnJvcjI6ekRydkkyU19Xcml0ZSBJMlNfMSByZXQ9JWQiLCByZXQpOw0KLQkJCXpEcnZFeHRBdWRpb19Xcml0ZV9TdG9wKCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCi0JCXJldCA9IHpEcnZFeHRBdWRpb19HZXRCdWYoJndyaXRlX2J1ZiwgJndyaXRlX2xlbik7DQotCQlpZiAocmV0ICE9IERSVl9TVUNDRVNTKQ0KLQkJew0KLQkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2cF9Wb2x0ZVdyaXRlU3RhcnQgZXJyb3IzOnpEcnZJMlNfR2V0QnVmIEkyU18xIHJldD0lZCIsIHJldCk7DQotCQkJekRydkV4dEF1ZGlvX1dyaXRlX1N0b3AoKTsNCi0JCQlyZXR1cm4gRFJWX0VSUk9SOw0KLQkJfQ0KLQkJek9zc19NZW1zZXQod3JpdGVfYnVmLCAwLCB3cml0ZV9sZW4pOw0KLQkJcmV0ID0gekRydkV4dEF1ZGlvX1dyaXRlKHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCi0JCWlmIChyZXQgIT0gRFJWX1NVQ0NFU1MpDQotCQl7DQotCQkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvbHRlV3JpdGVTdGFydCBlcnJvcjQ6ekRydkkyU19Xcml0ZSBJMlNfMSByZXQ9JWQiLCByZXQpOw0KLQkJCXpEcnZFeHRBdWRpb19Xcml0ZV9TdG9wKCk7DQotCQkJcmV0dXJuIERSVl9FUlJPUjsNCi0JCX0NCi0jZW5kaWYNCisJcmV0ID0gekRydkV4dEF1ZGlvX0dldEJ1Zigmd3JpdGVfYnVmLCAmd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvbHRlV3JpdGVTdGFydCBlcnJvcjE6ekRydkkyU19HZXRCdWYgSTJTXzEgcmV0PSVkIiwgcmV0KTsNCisJCXpEcnZFeHRBdWRpb19Xcml0ZV9TdG9wKCk7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KIAl9DQotCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICAidnBfVm9sdGVXcml0ZVN0YXJ0IGVuZFxuIik7DQorCXpPc3NfTWVtc2V0KHdyaXRlX2J1ZiwgMCwgd3JpdGVfbGVuKTsNCisJcmV0ID0gekRydkV4dEF1ZGlvX1dyaXRlKHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvbHRlV3JpdGVTdGFydCBlcnJvcjI6ekRydkkyU19Xcml0ZSBJMlNfMSByZXQ9JWQiLCByZXQpOw0KKwkJekRydkV4dEF1ZGlvX1dyaXRlX1N0b3AoKTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisJcmV0ID0gekRydkV4dEF1ZGlvX0dldEJ1Zigmd3JpdGVfYnVmLCAmd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvbHRlV3JpdGVTdGFydCBlcnJvcjM6ekRydkkyU19HZXRCdWYgSTJTXzEgcmV0PSVkIiwgcmV0KTsNCisJCXpEcnZFeHRBdWRpb19Xcml0ZV9TdG9wKCk7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCXpPc3NfTWVtc2V0KHdyaXRlX2J1ZiwgMCwgd3JpdGVfbGVuKTsNCisJcmV0ID0gekRydkV4dEF1ZGlvX1dyaXRlKHdyaXRlX2J1Ziwgd3JpdGVfbGVuKTsNCisJaWYgKHJldCAhPSBEUlZfU1VDQ0VTUykNCisJew0KKwkJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgInZwX1ZvbHRlV3JpdGVTdGFydCBlcnJvcjQ6ekRydkkyU19Xcml0ZSBJMlNfMSByZXQ9JWQiLCByZXQpOw0KKwkJekRydkV4dEF1ZGlvX1dyaXRlX1N0b3AoKTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisjZW5kaWYNCisJekRydlJhbWxvZ19QUklOVEYoUkFNTE9HX01PRF9BVURJTywgICJ2cF9Wb2x0ZVdyaXRlU3RhcnQgXG4iKTsNCiANCiAJcmV0dXJuIERSVl9TVUNDRVNTOw0KIH0NCkBAIC0zMTAzLDEzICsyODkxLDYgQEAKIFNJTlQzMiB2cF9Wb2x0ZVdyaXRlU3RvcChWT0lEKQ0KIHsNCiAJU0lOVDMyICByZXQgPSBEUlZfU1VDQ0VTUzsNCi0JaWYgKGdfdm9pY2VWYXIudXNlVm9pY2VCdWZmZXIgPT0gMSkNCi0Jew0KLQkJcmV0ID0gdnBfVm9sdGVXcml0ZVN0b3BfVmJ1ZmZlcigpOw0KLQkgICAgcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQ0KIA0KICNpZmRlZiAgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIA0KIAkvL2NvbXBsZXRlX2FsbCgmc192b2ljZV9jb21wbGV0aW9uKTsNCkBAIC0zMTgwLDExICsyOTYxLDYgQEAKIAkvL1VJTlQ4ICpwVm9pY2VUZW1wQnVmID0gc192b2ljZVRlbXBCdWZmZXI7DQogI2VuZGlmDQogDQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpDQotCXsNCi0JCXJldCA9IHZwX1dyaXRlRGF0YVRvQ29kZWNfVmJ1ZmZlcihwQnVmLCBjb3VudCk7DQotCSAgICByZXR1cm4gcmV0Ow0KLQl9DQogDQogDQogCWlmIChwQnVmID09IE5VTEwpDQpAQCAtMzUwOSwxNCArMzI4NSw2IEBACiAJVUlOVDggKnB0ZW1wOGJpdCA9IE5VTEw7DQogI2VuZGlmDQogDQotCWlmIChnX3ZvaWNlVmFyLnVzZVZvaWNlQnVmZmVyID09IDEpDQotCXsNCi0JCXJldCA9IHZwX1JlYWREYXRhRnJvbUNvZGVjX1ZidWZmZXIocEJ1ZiwgY291bnQpOw0KLQkgICAgcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQ0KLQ0KIAlpZiAocEJ1ZiA9PSBOVUxMKQ0KIAl7DQogCQlyZXR1cm4gRFJWX0VSUl9JTlZBTElEX1BBUkFNOw0KQEAgLTM1NDUsOCArMzMxMyw2IEBACiAvLwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNfdm9pY2VfY29tcGxldGlvbiwgNjApOw0KIAl6T3NzX0dldFNlbWFwaG9yZShzX3ZvaWNlUmRTZW1hLCAgNjApOw0KIAkjaWZkZWYgX1ZCVUZGX0lOX01VTFRJX0NPUkUNCi0NCi0JDQogCXZvaWNlX2J1ZmZlcl9yZWFkKHNfc3BlZWNoU3RhdGUucFZwVGVtcFR4SW5CdWZmZXIsICBzX3NwZWVjaFN0YXRlLnRvdGFsRnJhbWVCdWZTaXplKTsNCiANCiAJI2Vsc2UNCkBAIC00MTQ1LDE0ICszOTExLDExIEBACiANCiBTSU5UMzIgdnBfQ3JlYXRlVGhyZWFkU2VtYXBoKFZPSUQpDQogew0KLQlTSU5UMzIgcmV0ID0gMDsNCi0NCiAJc192cFN0YXRlLnZwU2VtYXBob3JlID0gek9zc19DcmVhdGVTZW1hcGhvcmUoIlZwSTJzUmVhZFdyaXRlU2VtYXBob3JlIiwgMCk7DQogI2lmZGVmIF9VU0VfV0VCUlRDX0FVRA0KIAlzX3ZwU3RhdGUudnBUaHJlYWQgPSB6T3NzX0NyZWF0ZVRocmVhZCgidnBfRGF0YVByb2Nlc3NUaHJlYWRFbnRyeSIsIHZwX0RhdGFQcm9jZXNzVGhyZWFkRW50cnksIDAsIDgxOTIsIDE1LCAwLCAxKTsNCiAjZWxzZQ0KLQkvL3NfdnBTdGF0ZS52cFRocmVhZCA9IHpPc3NfQ3JlYXRlVGhyZWFkKCJ2cF9EYXRhUHJvY2Vzc1RocmVhZEVudHJ5IiwgdnBfRGF0YVByb2Nlc3NUaHJlYWRFbnRyeSwgMCwgMTAyNCwgMTUsIDAsIDEpOw0KLQlzX3ZwU3RhdGUudnBUaHJlYWQgPSB6T3NzX0NyZWF0ZVRocmVhZCgidnBfRGF0YVByb2Nlc3NUaHJlYWRFbnRyeSIsIHZwX0RhdGFQcm9jZXNzVGhyZWFkRW50cnksIDAsIDgxOTIsIDE1LCAwLCAxKTsJDQorCXNfdnBTdGF0ZS52cFRocmVhZCA9IHpPc3NfQ3JlYXRlVGhyZWFkKCJ2cF9EYXRhUHJvY2Vzc1RocmVhZEVudHJ5IiwgdnBfRGF0YVByb2Nlc3NUaHJlYWRFbnRyeSwgMCwgMTAyNCwgMTUsIDAsIDEpOw0KICNlbmRpZg0KIA0KICNpZmRlZiAgX09TX1RPUw0KQEAgLTQxNzQsOSArMzkzNyw2IEBACiAJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJjcmVhdGUgdnAgVGhyZWFkIHNlbSBlcnIgc192cFN0YXRlLnZwVGhyZWFkPSVwLHNfdnBTdGF0ZS52cFNlbWFwaG9yZT0lcCAhXHJcbiIsIHNfdnBTdGF0ZS52cFRocmVhZCwgc192cFN0YXRlLnZwU2VtYXBob3JlKTsNCiAJCXJldHVybiBEUlZfRVJST1I7DQogCX0NCi0NCi0NCi0NCiAjaWZkZWYgQ09ORklHX1ZPSUNFX0JVRkZFUl9EUlYgIAkNCiAvLwlpbml0X2NvbXBsZXRpb24oJnNfdm9pY2VfY29tcGxldGlvbik7DQogCXNfdm9pY2VSZFNlbWEgPSB6T3NzX0NyZWF0ZVNlbWFwaG9yZSgidm9pY2Vfcnhfc2VtIiwgMCk7DQpAQCAtNDE5OSw1NyArMzk1OSw1MCBAQAogCQlyZXR1cm4gRFJWX0VSUk9SOw0KIAl9DQogI2lmZGVmIF9WQlVGRl9JTl9NVUxUSV9DT1JFDQotCS8vU0lOVDMyIHJldCA9IDA7DQorCQlTSU5UMzIgcmV0ID0gMDsNCiANCi0JLy9yZXQgPSB6RHJ2UnBNc2dfQ3JlYXRlQ2hhbm5lbChJUENfTVNHX0FDVE9SX0E5LGNoYW5uZWxfNDEsMHgxMCk7DQotCXJldCA9IHpEcnZScE1zZ19DcmVhdGVDaGFubmVsX0NhcChSUE1TR19DQVBfSUQsY2hhbm5lbF80MSwweDEwKTsNCisJCS8vcmV0ID0gekRydlJwTXNnX0NyZWF0ZUNoYW5uZWwoSVBDX01TR19BQ1RPUl9BOSxjaGFubmVsXzQxLDB4MTApOw0KKwkJcmV0ID0gekRydlJwTXNnX0NyZWF0ZUNoYW5uZWxfQ2FwKFJQTVNHX0NBUF9JRCxjaGFubmVsXzQxLDB4MTApOw0KIA0KLQlpZihEUlZfU1VDQ0VTUyAhPSByZXQpIHsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJjcmVhdGUgcnBtc2cgZXJyKCVkKSBcbiIscmV0KTsNCi0JCXJldHVybiBEUlZfRVJST1I7DQotCX0NCi0JDQotCXZvbGF0aWxlIFRfWkRydlJwTXNnX01zZyBpY3BfcE1zZyA9IHswfTsgDQotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBycE1zZ0J1ZlsyXSA9IHswLDB9OyANCi0JLy9wcmludGsoICJ2aXJfYnVmMToweCV4LCB2aXJfYnVmMjoweCV4LCBwaHlfYnVmMToweCV4LCBwaHlfYnVmMjoweCV4LFxuIix2b2ljZV9idWZmWzBdLHZvaWNlX2J1ZmZbMV0scnBNc2dCdWZbMF0scnBNc2dCdWZbMV0pOw0KLQlpY3BfcE1zZy5hY3RvcklEID0gUlBNU0dfQ0FQX0lEOw0KLQlpY3BfcE1zZy5jaElEID0gY2hhbm5lbF80MTsNCi0JaWNwX3BNc2cuZmxhZyAmPSB+UlBNU0dfUkVBRF9QT0xMOw0KLQlpY3BfcE1zZy5idWYgPSBycE1zZ0J1ZjsNCi0JaWNwX3BNc2cubGVuID0gODsNCi0JcmV0ID0gekRydlJwTXNnX1JlYWRfQ2FwKCZpY3BfcE1zZyk7DQotCWlmKHJldCA8PSAwKXsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2b2ljZSBidWZmZXIgIHJwbXNnIGFkZHIgcmVhZCAgZmFpbCxyZXQ9JWQgXG4iLHJldCk7DQotCQl6T3NzX1ByaW50ZihTVUJNRExfSEFMLCBQUklOVF9MRVZFTF9OT1JNQUwsICJwcyB2b2ljZSBidWZmZXIgIHJwbXNnIGFkZHIgcmVhZCAgZmFpbCxyZXQ9JWQgXG4iLHJldCk7DQorCQlpZihEUlZfU1VDQ0VTUyAhPSByZXQpIHsNCisJCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAiY3JlYXRlIHJwbXNnIGVyciglZCkgXG4iLHJldCk7DQorCQkJcmV0dXJuIERSVl9FUlJPUjsNCisJCX0NCiAJCQ0KKwkJdm9sYXRpbGUgVF9aRHJ2UnBNc2dfTXNnIGljcF9wTXNnID0gezB9OyANCisJCXZvbGF0aWxlIHVuc2lnbmVkIGludCBycE1zZ0J1ZlsyXSA9IHswLDB9OyANCisJCS8vcHJpbnRrKCAidmlyX2J1ZjE6MHgleCwgdmlyX2J1ZjI6MHgleCwgcGh5X2J1ZjE6MHgleCwgcGh5X2J1ZjI6MHgleCxcbiIsdm9pY2VfYnVmZlswXSx2b2ljZV9idWZmWzFdLHJwTXNnQnVmWzBdLHJwTXNnQnVmWzFdKTsNCisJCWljcF9wTXNnLmFjdG9ySUQgPSBSUE1TR19DQVBfSUQ7DQorCQlpY3BfcE1zZy5jaElEID0gY2hhbm5lbF80MTsNCisJCWljcF9wTXNnLmZsYWcgJj0gflJQTVNHX1JFQURfUE9MTDsNCisJCWljcF9wTXNnLmJ1ZiA9IHJwTXNnQnVmOw0KKwkJaWNwX3BNc2cubGVuID0gODsNCisJCXJldCA9IHpEcnZScE1zZ19SZWFkX0NhcCgmaWNwX3BNc2cpOw0KKwkJaWYocmV0IDw9IDApew0KKwkJCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2b2ljZSBidWZmZXIgIHJwbXNnIGFkZHIgcmVhZCAgZmFpbCxyZXQ9JWQgXG4iLHJldCk7DQorCQkJek9zc19QcmludGYoU1VCTURMX0hBTCwgUFJJTlRfTEVWRUxfTk9STUFMLCAicHMgdm9pY2UgYnVmZmVyICBycG1zZyBhZGRyIHJlYWQgIGZhaWwscmV0PSVkIFxuIixyZXQpOw0KKwkJCQ0KIA0KLQl9DQotCWVsc2V7DQotCQkjaWYgMA0KKwkJfQ0KKwkJZWxzZXsNCisJCQkjaWYgMA0KIA0KLQkJdm9pY2VfYnVmZltVUF9MSU5LXSA9IChzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIgKikocnBNc2dCdWZbMF0pOw0KLQkJdm9pY2VfYnVmZltET1dOX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKShycE1zZ0J1ZlsxXSk7CQ0KLQkJI2Vsc2UNCisJCQl2b2ljZV9idWZmW1VQX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKShycE1zZ0J1ZlswXSk7DQorCQkJdm9pY2VfYnVmZltET1dOX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKShycE1zZ0J1ZlsxXSk7CQ0KKwkJCSNlbHNlDQogDQotCQl2b2ljZV9idWZmW1VQX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKWlvcmVtYXBfd2MocnBNc2dCdWZbMF0sIChzaXplb2Yoc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyKSArIE1BWF9CVUZfU0laRSpNQVhfQlVGX05VTSkpOw0KLQkJdm9pY2VfYnVmZltET1dOX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKWlvcmVtYXBfd2MocnBNc2dCdWZbMV0sKHNpemVvZihzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIpICsgTUFYX0JVRl9TSVpFKk1BWF9CVUZfTlVNKSk7CQ0KLQkJI2VuZGlmDQotDQotCQl6T3NzX1ByaW50ZihTVUJNRExfSEFMLCBQUklOVF9MRVZFTF9OT1JNQUwsICJwcyBycG1zZyB2b2ljZSBidWZmZXIgYWRkcix1cCB2aXIgYnVmPTB4JXgsICBkb3duIHZpciBidWY9MHgleCAsdXAgcGh5IGJ1Zj0weCV4LCAgZG93biBwaHkgYnVmPTB4JXgsc2l6ZT0lZCBcbiIgXA0KLQkJLHZvaWNlX2J1ZmZbMF0sdm9pY2VfYnVmZlsxXSxycE1zZ0J1ZlswXSxycE1zZ0J1ZlsxXSwoc2l6ZW9mKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlcikgKyBNQVhfQlVGX1NJWkUqTUFYX0JVRl9OVU0pKTsNCi0JCXpEcnZSYW1sb2dfUFJJTlRGKFJBTUxPR19NT0RfQVVESU8sICJ2b2ljZSBidWZmZXIgYWRkcix1cCB2aXIgYnVmPTB4JXgsICBkb3duIHZpciBidWY9MHgleCAsdXAgcGh5IGJ1Zj0weCV4LCAgZG93biBwaHkgYnVmPTB4JXgsc2l6ZT0lZCBcbiIgXA0KKwkJCXZvaWNlX2J1ZmZbVVBfTElOS10gPSAoc3RydWN0IHZvaWNlX3JpbmdfYnVmZmVyICopaW9yZW1hcF93YyhycE1zZ0J1ZlswXSwgKHNpemVvZihzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIpICsgTUFYX0JVRl9TSVpFKk1BWF9CVUZfTlVNKSk7DQorCQkJdm9pY2VfYnVmZltET1dOX0xJTktdID0gKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlciAqKWlvcmVtYXBfd2MocnBNc2dCdWZbMV0sKHNpemVvZihzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIpICsgTUFYX0JVRl9TSVpFKk1BWF9CVUZfTlVNKSk7CQ0KKwkJCSNlbmRpZg0KKwkNCisJCQl6T3NzX1ByaW50ZihTVUJNRExfSEFMLCBQUklOVF9MRVZFTF9OT1JNQUwsICJwcyBycG1zZyB2b2ljZSBidWZmZXIgYWRkcix1cCB2aXIgYnVmPTB4JXgsICBkb3duIHZpciBidWY9MHgleCAsdXAgcGh5IGJ1Zj0weCV4LCAgZG93biBwaHkgYnVmPTB4JXgsc2l6ZT0lZCBcbiIgXA0KIAkJCSx2b2ljZV9idWZmWzBdLHZvaWNlX2J1ZmZbMV0scnBNc2dCdWZbMF0scnBNc2dCdWZbMV0sKHNpemVvZihzdHJ1Y3Qgdm9pY2VfcmluZ19idWZmZXIpICsgTUFYX0JVRl9TSVpFKk1BWF9CVUZfTlVNKSk7DQotCX0NCisJCQl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidm9pY2UgYnVmZmVyIGFkZHIsdXAgdmlyIGJ1Zj0weCV4LCAgZG93biB2aXIgYnVmPTB4JXggLHVwIHBoeSBidWY9MHgleCwgIGRvd24gcGh5IGJ1Zj0weCV4LHNpemU9JWQgXG4iIFwNCisJCQkJLHZvaWNlX2J1ZmZbMF0sdm9pY2VfYnVmZlsxXSxycE1zZ0J1ZlswXSxycE1zZ0J1ZlsxXSwoc2l6ZW9mKHN0cnVjdCB2b2ljZV9yaW5nX2J1ZmZlcikgKyBNQVhfQlVGX1NJWkUqTUFYX0JVRl9OVU0pKTsNCisJCX0NCiAjZW5kaWYNCi0NCi0jZWxzZQ0KLSAgICAvL2ZsYWcgY3RybCB2b2ljZWJ1ZmZlciBmdW5jDQotCXZwX0NyZWF0ZVRocmVhZFNlbWFwaF9WYnVmZmVyKCk7DQotDQotDQogI2VuZGlmDQotDQotDQorCQ0KIAl6RHJ2UmFtbG9nX1BSSU5URihSQU1MT0dfTU9EX0FVRElPLCAidnBfQ3JlYXRlVGhyZWFkU2VtYXBoIHN1Y2Nlc3MuIFxyXG4iKTsNCiAJcmV0dXJuIERSVl9TVUNDRVNTOw0KIH0NCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9tb2RlbS9jb20vc3JjL2FwcHN0YXJ0L2luYy92ZXJzaW9uX251bWJlci5oIGIvVWJvb3QvY3AvcHMvbW9kZW0vY29tL3NyYy9hcHBzdGFydC9pbmMvdmVyc2lvbl9udW1iZXIuaAppbmRleCAyOGZhNzc1Li4wNzJmMTMxIDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9tb2RlbS9jb20vc3JjL2FwcHN0YXJ0L2luYy92ZXJzaW9uX251bWJlci5oCisrKyBiL1Vib290L2NwL3BzL21vZGVtL2NvbS9zcmMvYXBwc3RhcnQvaW5jL3ZlcnNpb25fbnVtYmVyLmgKQEAgLTEsOSArMSw5IEBACiAjaWYgZGVmaW5lZCBfQ0hJUF9aWDI5NzUyMAotI2RlZmluZSBWRVJTSU9OX05VTUJFUiAiNzUyMFNDVjIuMDEuMDEuMDJQNTZVMDgiCisjZGVmaW5lIFZFUlNJT05fTlVNQkVSICI3NTIwU0NWMi4wMS4wMS4wMlA1NlUwNiIKICNlbmRpZgogI2lmIGRlZmluZWQgX0NISVBfWlgyOTc1MjBWMgotI2RlZmluZSBWRVJTSU9OX05VTUJFUiAiNzUyMFYyU0NWMi4wMS4wMS4wMlA1NlUwOCIKKyNkZWZpbmUgVkVSU0lPTl9OVU1CRVIgIjc1MjBWMlNDVjIuMDEuMDEuMDJQNTZVMDYiCiAjZW5kaWYKICNpZiBkZWZpbmVkIF9DSElQX1pYMjk3NTIwVjMKLSNkZWZpbmUgVkVSU0lPTl9OVU1CRVIgIjc1MjBWM1NDVjIuMDEuMDEuMDJQNTZVMDgiCisjZGVmaW5lIFZFUlNJT05fTlVNQkVSICI3NTIwVjNTQ1YyLjAxLjAxLjAyUDU2VTA2IgogI2VuZGlmCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9tb2RlbS9wcy9pbmMvYXB1aWNjaW50LmggYi9VYm9vdC9jcC9wcy9tb2RlbS9wcy9pbmMvYXB1aWNjaW50LmgKaW5kZXggNmQwNzUzNC4uNTdkMzY0ZiAxMDA3NTUKLS0tIGEvVWJvb3QvY3AvcHMvbW9kZW0vcHMvaW5jL2FwdWljY2ludC5oCisrKyBiL1Vib290L2NwL3BzL21vZGVtL3BzL2luYy9hcHVpY2NpbnQuaApAQCAtMTYxNCwxMSArMTYxNCw2IEBACiANCiAjZGVmaW5lICAgIFpfQVBVSUNDX0VJRF9MRU4gICAgICAgICAgICAoQllURSkxMCAgDQogDQotI2RlZmluZSBaX1VJQ0NfQ0FSRF9SRUFEWSAgICAgICAgICAgICAoQllURSkwDQotI2RlZmluZSBaX1VJQ0NfQ0FSRF9QV1JPRkYgICAgICAgICAgICAoQllURSkxDQotI2RlZmluZSBaX1VJQ0NfQ0FSRF9SRU1PVkUgICAgICAgICAgICAoQllURSkyDQotI2RlZmluZSBaX1VJQ0NfQ0FSRF9FUlJPUiAgICAgICAgICAgICAoQllURSkzDQotDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiAgICAgICAgICAgICAgICAgICAgICAgICDIq77Wyv2+3cDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvbW9kZW0vcHMvaW5jL2F0aXBzY29tLmggYi9VYm9vdC9jcC9wcy9tb2RlbS9wcy9pbmMvYXRpcHNjb20uaAppbmRleCAxOWJmOTA3Li43MjU2MGJhIDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9tb2RlbS9wcy9pbmMvYXRpcHNjb20uaAorKysgYi9VYm9vdC9jcC9wcy9tb2RlbS9wcy9pbmMvYXRpcHNjb20uaApAQCAtNDI5LDE1ICs0MjksNiBAQAogI2RlZmluZSBaX0RFVl9OVl9SQVRfVkVSU0lPTl9HU01fUFJJT1JJVFkgICAgICAgICAgICAgICAgICAoQllURSkzDQogI2RlZmluZSBaX0RFVl9OVl9SQVRfVkVSU0lPTl9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAoQllURSk0DQogDQotLyoqKioqKioqKioqKioqKioqKioqKioqKipDRUVSvMfCvMSjv+nD+yoqKioqKioqKioqKioqKioqKiovDQotI2RlZmluZSBaX0NFRVJfTU1fSUQgICAgICAgICAgICAgICAgKEJZVEUpMA0KLSNkZWZpbmUgWl9DRUVSX1NNX0lEICAgICAgICAgICAgICAgIChCWVRFKTENCi0jZGVmaW5lIFpfQ0VFUl9VSUNDTU5HX0lEICAgICAgICAgICAoQllURSkyDQotI2RlZmluZSBaX0NFRVJfQVRJX0lEICAgICAgICAgICAgICAgKEJZVEUpMw0KLSNkZWZpbmUgWl9DRUVSX0NDX0lEICAgICAgICAgICAgICAgKEJZVEUpNA0KLSNkZWZpbmUgWl9DRUVSX1NNU19JRCAgICAgICAgICAgICAgIChCWVRFKTUNCi0jZGVmaW5lIFpfQ0VFUl9TU19JRCAgICAgICAgICAgICAgIChCWVRFKTYNCi0NCiAvKlYyLVYzw/vX1rzmyN1lbmQqLw0KICNkZWZpbmUgWl9TVUJNRExfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkoKFNVQk1ETF9QU0VORCAtIFNVQk1ETF9QU0JBU0UpICsgMSkNCiANCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9tb2RlbS9wcy9pbmMvYXRpcHNpbnQuaCBiL1Vib290L2NwL3BzL21vZGVtL3BzL2luYy9hdGlwc2ludC5oCmluZGV4IDkwYWFjOWUuLjVhNzllYmEgMTAwNzU1Ci0tLSBhL1Vib290L2NwL3BzL21vZGVtL3BzL2luYy9hdGlwc2ludC5oCisrKyBiL1Vib290L2NwL3BzL21vZGVtL3BzL2luYy9hdGlwc2ludC5oCkBAIC0yNTgsMTQgKzI1OCw4IEBACiAjZGVmaW5lICBaX0FUSVVNTV9Nc2dOb3JtYWxXaXRoTmV3Q2VsbF9FcnIgICAgICAgICAgKEJZVEUpMTgwICAgIC8vcmV0cnkgdXBvbiBlbnRyeSBpbnRvIGEgbmV3IGNlbGwNCiAjZGVmaW5lICBaX0FUSVVNTV9VZVNlY3VyaXR5Q2FwYU1pc21hdGNoICAgICAgICAgICAgKEJZVEUpMTgxICAgIC8vVUUgc2VjdXJpdHkgY2FwYWJpbGl0aWVzIG1pc21hdGNoDQogI2RlZmluZSAgWl9BVElVTU1fU2VjdXJpdHltb2RlcmVqZWN0ZWQgICAgICAgICAgICAgIChCWVRFKTE4MiAgICAvL1NlY3VyaXR5IG1vZGUgcmVqZWN0ZWQsIHVuc3BlY2lmaWVkDQotI2RlZmluZSAgWl9BVElVTU1fVGVtcGVyYXR1cmVTdGFydCAgICAgICAgICAgICAgICAgIChCWVRFKTE4MyAgLy/Owr/Yv6rKvA0KLSNkZWZpbmUgIFpfQVRJVU1NX1RlbXBlcmF0dXJlU3RvcCAgICAgICAgICAgICAgICAgICAoQllURSkxODQgIC8vzsK/2L3hyvgNCi0jZGVmaW5lICBaX0FUSVVNTV9Hc21SZk9uRmFpbCAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTkwICAvL0dTTb+qyeTGtcqnsNwNCi0jZGVmaW5lICBaX0FUSVVNTV9Hc21SZk9mZkZhaWwgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTkxICAvL0dTTbnYyeTGtcqnsNwNCi0jZGVmaW5lICBaX0FUSVVNTV9XUmZPbkZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTkyICAvL1e/qsnkxrXKp7DcDQotI2RlZmluZSAgWl9BVElVTU1fV1JmT2ZmRmFpbCAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTE5MyAgLy9XudjJ5Ma1yqew3A0KLSNkZWZpbmUgIFpfQVRJVU1NX0x0ZVJmT25GYWlsICAgICAgICAgICAgICAgICAgICAgICAoQllURSkxOTQgIC8vTFRFv6rJ5Ma1yqew3A0KLSNkZWZpbmUgIFpfQVRJVU1NX0x0ZVJmT2ZmRmFpbCAgICAgICAgICAgICAgICAgICAgICAoQllURSkxOTUgIC8vTFRFudjJ5Ma1yqew3A0KKyNkZWZpbmUgIFpfQVRJVU1NX1RlbXBlcmF0dXJlU3RhcnQgICAgICAgICAgICAgICAgICAgIChCWVRFKTE4MyAgLy/Owr/Yv6rKvA0KKyNkZWZpbmUgIFpfQVRJVU1NX1RlbXBlcmF0dXJlU3RvcCAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTg0ICAvL87Cv9i94cr4DQogDQogLyo9PT09PT09PT09PT1NTcSjv+lDRUVStO3O88LrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KICNkZWZpbmUgWl9BVElNTV9JbXNpVW5rbm93bkluSGxyICAgICAgICAgICAoQllURSkyIC8vSU1TSSB1bmtub3duIGluIEhMUg0KQEAgLTMyMSwxNyArMzE1LDcgQEAKICNkZWZpbmUgWl9BVElNTV9Nc2dOb3RDb21wYXRQcm90b2NvbFN0YXRlICAgICAgICAgICAgIChCWVRFKTEwMSAvL01lc3NhZ2Ugbm90IGNvbXBhdGlibGUgd2l0aCBwcm90b2NvbCBzdGF0ZQ0KICNkZWZpbmUgWl9BVElNTV9Qcm90b2NvbEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTExMSAvL1Byb3RvY29sIGVycm9yLCB1bnNwZWNpZmllZA0KIA0KLSNkZWZpbmUgWl9BVElNTV9VbnNwZWNpZmllZEZhaWwgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTEyMCAvL1Vuc3BlY2lmaWVkIEZhaWx1cmUNCi0jZGVmaW5lIFpfQVRJTU1fUnJjRmFpbFVuc3BlY2lmaWVkRmFpbCAgICAgICAgICAgICAgICAoQllURSkxMjEgLy9SUkPBtMK3yqew3KOst8fM2Mri1K3S8g0KLQ0KLSNkZWZpbmUgWl9BVElNTV9UMzIxMEV4aXByZSAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTEyMyAvLzMyMTCzrMqxDQotI2RlZmluZSBaX0FUSU1NX1QzMjEzRXhpcHJlICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTIzIC8vMzIxM7OsyrENCi0jZGVmaW5lIFpfQVRJTU1fVDMyMTRfMTZFeGlwcmUgICAgICAgICAgICAgICAgICAgICAoQllURSkxMjQgLy8zMjE0LzMyMTazrMqxDQotI2RlZmluZSBaX0FUSU1NX1QzMjIwRXhpcHJlICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTI1IC8vMzIyMLOsyrENCi0jZGVmaW5lIFpfQVRJTU1fVDMyMzBFeGlwcmUgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkxMjYgLy8zMjMws6zKsQ0KLSNkZWZpbmUgWl9BVElNTV9UMzIyNUV4aXByZSAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFKTEyNyAvLzMyMjWzrMqxDQotI2RlZmluZSBaX0FUSU1NX1QzMjMxRXhpcHJlICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMTI4IC8vMzIzMbOsyrENCi0jZGVmaW5lIFpfQVRJTU1fVHdwZ3JFeGlwcmUgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkxMjkgLy9Ud3BncrOsyrENCisjZGVmaW5lIFpfQVRJTU1fVW5zcGVjaWZpZWRGYWlsICAgICAgICAgICAoQllURSkxMjAgLy9VbnNwZWNpZmllZCBGYWlsdXJlDQogDQogLyo9PT09PT09PT09PT09PT09IMurv6jLq7T9xdC2z8G91cW/qMrHt/HQ6NKqvbu7uz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLyANCiAjZGVmaW5lICBaX05PX05FRURfQ0hBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEUpMA0KQEAgLTkwNTYsOCArOTA0MCw1IEBACiBleHRlcm4gaW50IGdldF9jaWRfc3RhdGUodW5zaWduZWQgY2hhciBjaWQpOw0KIGV4dGVybiBCWVRFIHpBdGlfR2V0UzBWYWx1ZShWT0lEKTsNCiBleHRlcm4gRFdPUkQgekF0aV9HZXRVbFJhdGVJbmRUaW1lclZhbChCWVRFIGJJbnNJZHgpOw0KLQ0KLWV4dGVybiBWT0lEIHpBc19BZGROYXNUcmFjZUluZm8oQllURSAgYlJhdCwgV09SRCBiQ2VlciwgQllURSBNb2RlSWQsIEJZVEUgYkRvbWFpbik7DQotDQogI2VuZGlmDQogDQpkaWZmIC0tZ2l0IGEvVWJvb3QvY3AvcHMvbW9kZW0vcHMvc3JjL25hcy9hdGkvc3JjL3phdGlfZm5jLmMgYi9VYm9vdC9jcC9wcy9tb2RlbS9wcy9zcmMvbmFzL2F0aS9zcmMvemF0aV9mbmMuYwppbmRleCA1NTIzNmUwLi5hYjNhMDNmIDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9tb2RlbS9wcy9zcmMvbmFzL2F0aS9zcmMvemF0aV9mbmMuYworKysgYi9VYm9vdC9jcC9wcy9tb2RlbS9wcy9zcmMvbmFzL2F0aS9zcmMvemF0aV9mbmMuYwpAQCAtMzE1MiwxNyArMzE1Miw2IEBACiB9DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotKrqvyv3D+7PGOnpBdF9BZGRBdGlUcmFjZUluZm8NCi0quq/K/bmmxNw6zai1wLbCyPvQxc+ivNPI686ssuLQxc+iDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotVk9JRCB6QXRfQWRkQXRpVHJhY2VJbmZvKFdPUkQgd0NtZElkLCBCWVRFIGJDaG5lbElEKQ0KLXsNCi0gICAgQllURSBiQ3VyQWN0ID0gekF0aV9HZXRDdXJBY3RfQnlJbmRleChnX3pBdGlfQ3VySW5zdGFuY2UpOw0KLQ0KLSAgICB6QXNfQWRkTmFzVHJhY2VJbmZvKGJDdXJBY3QsIHdDbWRJZCwgWl9DRUVSX0FUSV9JRCwgIGJDaG5lbElEKTsNCi19DQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiC6r8r9w/uzxiA6IHpBdGlfUHJvY2Vzc0NtZA0KICoguabE3MPoyvYgOiC0psDtyc+y47eiwLS1xMP8we4NCiAqILLOyv3LtcP3o7ogKElOKaO6IA0KQEAgLTMxODksMTAgKzMxNzgsNiBAQAogDQogICAgIGlmICggWkFUMl9OT19DT01NQU5EICE9IHBDaG5lbE5vZGUtPmNtZF9pZCAmJiBaQVQyX0NPX0lOVkFMSUQgIT0gcENobmVsTm9kZS0+Y21kX29wKQ0KICAgICB7DQotICAgICAgICBDSEFSIGFiU3RyWzMwXSA9IHswfTsNCi0gICAgICAgIHNwcmludGYoYWJTdHIsICJDb25mbGljdCBDbWQgaWQ9JWRcbiIsIHBDaG5lbE5vZGUtPmNtZF9pZCk7DQotICAgICAgICB6QXRpX1NlbmRFeHB0MlRyYWNlQWd0KEVSUl9JbnZhbGlkTXNnLCAgVFJBQ0VfRVJSX0xFVkVMX05PUk1BTCwgYWJTdHIpOw0KLSAgICAgICAgekF0X0FkZEF0aVRyYWNlSW5mbyhwQ2huZWxOb2RlLT5jbWRfaWQsIHBDaG5lbE5vZGUtPmlDaG5lbElkKTsNCiAgICAgICAgIHpBdGlfUHJvY0NobmVsQ29uZmxpY3QocENobmVsTm9kZSk7DQogICAgICAgICByZXR1cm47DQogICAgIH0NCmRpZmYgLS1naXQgYS9VYm9vdC9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3N1cC5oIGIvVWJvb3QvY3AvcHMvcGxhdC9pbmMvb3NzL29zc19zdXAuaAppbmRleCAzMTNjY2Q0Li42ODZjMzE4IDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9wbGF0L2luYy9vc3Mvb3NzX3N1cC5oCisrKyBiL1Vib290L2NwL3BzL3BsYXQvaW5jL29zcy9vc3Nfc3VwLmgKQEAgLTQ2Miw3ICs0NjIsNyBAQAogVk9JRCB6T3NzX1JhbVByaW50ZihWT0lEKTsNCiANCiAvKiDOrLLiICovDQotVUlOVDMyIHpPc3NfRGVidWdJbmZvUmVjb3JkKGNoYXIgKmlkLCBjb25zdCBWT0lEICpwRm9ybWF0LCAuLi4pOw0KK1VJTlQzMiB6T3NzX0RlYnVnSW5mb1JlY29yZChVSU5UMzIgaWQsIGNvbnN0IFZPSUQgKnBGb3JtYXQsIC4uLik7DQogDQogLyogc2hlbGzEo7/pICovDQogVUlOVDMyIHpPc3NfQWRkU2hlbGxDbWQoY29uc3QgQ0hBUiAqY21kX25hbWUsIGNvbnN0IFNoZWxsX0Z1bmMgZnVuYywgY29uc3QgQ0hBUiAqZGVzY3JpcHRpb24pOw0KZGlmZiAtLWdpdCBhL1Vib290L2NwL3BzL3BsYXQvc3JjL29zcy9zdXAvc3JjL3N1cF9leGNlcHQuYyBiL1Vib290L2NwL3BzL3BsYXQvc3JjL29zcy9zdXAvc3JjL3N1cF9leGNlcHQuYwppbmRleCA4Yzg3YTQ4Li5mZDM1NWIyIDEwMDc1NQotLS0gYS9VYm9vdC9jcC9wcy9wbGF0L3NyYy9vc3Mvc3VwL3NyYy9zdXBfZXhjZXB0LmMKKysrIGIvVWJvb3QvY3AvcHMvcGxhdC9zcmMvb3NzL3N1cC9zcmMvc3VwX2V4Y2VwdC5jCkBAIC0zNzEsNyArMzcxLDcgQEAKICogt7Ugu9gg1rWjuiCzybmmOiDQtMjrs6S2yDsgyqew3DogWk9TU19FUlJPUg0KICogxuTL/Mu1w/ejug0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLVVJTlQzMiB6T3NzX0RlYnVnSW5mb1JlY29yZChjaGFyICppZCwgY29uc3QgVk9JRCAqcEZvcm1hdCwgLi4uKQ0KK1VJTlQzMiB6T3NzX0RlYnVnSW5mb1JlY29yZChVSU5UMzIgaWQsIGNvbnN0IFZPSUQgKnBGb3JtYXQsIC4uLikNCiB7DQogI2lmZGVmIF9PU19XSU4NCiAgICAgcmV0dXJuIFpPU1NfRVJST1I7DQpAQCAtMzg3LDcgKzM4Nyw3IEBACiAjZW5kaWYNCiB9DQogI2Vsc2UNCi1VSU5UMzIgek9zc19EZWJ1Z0luZm9SZWNvcmQoY2hhciAqaWQsIGNvbnN0IFZPSUQgKnBGb3JtYXQsIC4uLikNCitVSU5UMzIgek9zc19EZWJ1Z0luZm9SZWNvcmQoVUlOVDMyIGlkLCBjb25zdCBWT0lEICpwRm9ybWF0LCAuLi4pDQogew0KICAgICByZXR1cm4gWk9TU19TVUNDRVNTOw0KIH0NCmRpZmYgLS1naXQgYS9VYm9vdC9wdWIvaW5jbHVkZS9pbmZyYS9wdWJfZGVidWdfaW5mby5oIGIvVWJvb3QvcHViL2luY2x1ZGUvaW5mcmEvcHViX2RlYnVnX2luZm8uaAppbmRleCA5NWE0ODBmLi4xMDM1N2FhIDEwMDc1NQotLS0gYS9VYm9vdC9wdWIvaW5jbHVkZS9pbmZyYS9wdWJfZGVidWdfaW5mby5oCisrKyBiL1Vib290L3B1Yi9pbmNsdWRlL2luZnJhL3B1Yl9kZWJ1Z19pbmZvLmgKQEAgLTYsNDMgKzYsNjIgQEAKICNkZWZpbmUgREVCVUdfSU5GT19ERVZfUEFUSCAiL2Rldi9kZWJ1Z19pbmZvIgogCiAvKiBBULLgus1DQVCy4LXEUFNcS0VSTkVMXERSSVZFUlxGU1xBUFAgINLUU1RBUlR+RU5EzqrH+Lzko6y497K/t9bUpMH0wcsxMDC49klEICovCisjZGVmaW5lIE1PRFVMRV9JRF9QU19TVEFSVAkJCSgxKQorI2RlZmluZSBNT0RVTEVfSURfUFNfTkFTCQkJKDEpCisjZGVmaW5lIE1PRFVMRV9JRF9QU19SUkMJCQkoMikKKyNkZWZpbmUgTU9EVUxFX0lEX1BTX0wyCQkJCSgzKQorI2RlZmluZSBNT0RVTEVfSURfUFNfVUlDQwkJCSg5OSkKKyNkZWZpbmUgTU9EVUxFX0lEX1BTX0VORAkJCSgxMDApCiAKLSNkZWZpbmUgTU9EVUxFX0lEX1BTX05BUyAgICAgICAgICAgICAoInBzX25hcyIpCi0jZGVmaW5lIE1PRFVMRV9JRF9QU19SUkMgICAgICAgICAgICAgKCJwc19ycmMiKQotI2RlZmluZSBNT0RVTEVfSURfUFNfTDIgICAgICAgICAgICAgICgicHNfbDIiKQotI2RlZmluZSBNT0RVTEVfSURfUFNfVUlDQyAgICAgICAgICAgICgicHNfdWljYyIpCi0jZGVmaW5lIE1PRFVMRV9JRF9BUF9VU0IJCSAgICAgKCJhcF91c2IiKQotI2RlZmluZSBNT0RVTEVfSURfQVBfUkVCT09UCSAgICAgICAgICgiYXBfcmVib290IikKLSNkZWZpbmUgTU9EVUxFX0lEX0FQX1RTQwkJICAgICAoImFwX3RzYyIpCi0jZGVmaW5lIE1PRFVMRV9JRF9BUF9QU00JCSAgICAgKCJhcF9wc20iKQotI2RlZmluZSBNT0RVTEVfSURfQVBfTkFORAkJCSAoImFwX25hbmQiKQotI2RlZmluZSBNT0RVTEVfSURfQVBfTU1DCQkJICgiYXBfbW1jIikKLSNkZWZpbmUgTU9EVUxFX0lEX0FQX1dJRkkJCQkgKCJhcF93aWZpIikKKyNkZWZpbmUgTU9EVUxFX0lEX0FQX0tFUk5FTF9TVEFSVAkoMTAxKQorI2RlZmluZSBNT0RVTEVfSURfQVBfS0VSTkVMX0VORAkJKDIwMCkKIAorI2RlZmluZSBNT0RVTEVfSURfQ0FQX0tFUk5FTF9TVEFSVAkoMjAxKQorI2RlZmluZSBNT0RVTEVfSURfQ0FQX0tFUk5FTF9FTkQJKDMwMCkKIAotI2RlZmluZSBNT0RVTEVfSURfQ0FQX1VTQgkJCSAoImNhcF91c2IiKQotI2RlZmluZSBNT0RVTEVfSURfQ0FQX1RTQwkJCSAoImNhcF90c2MiKQotI2RlZmluZSBNT0RVTEVfSURfQ0FQX1BTTQkJCSAoImNhcF9wc20iKQotI2RlZmluZSBNT0RVTEVfSURfQ0FQX05BTkQJCQkgKCJjYXBfbmFuZCIpCi0jZGVmaW5lIE1PRFVMRV9JRF9DQVBfU1BJCQkJICgiY2FwX3NwaSIpCi0jZGVmaW5lIE1PRFVMRV9JRF9DQVBfTU1DCQkJICgiY2FwX21tYyIpCi0jZGVmaW5lIE1PRFVMRV9JRF9DQVBfVUFSVAkJCSAoImNhcF91YXJ0IikKLSNkZWZpbmUgTU9EVUxFX0lEX0NBUF9QTQkJCSAoImNhcF9wbSIpCisjZGVmaW5lIE1PRFVMRV9JRF9BUF9EUklWRVNfU1RBUlQJKDMwMSkKKyNkZWZpbmUgTU9EVUxFX0lEX0FQX1VTQgkJCSgzMDEpCisjZGVmaW5lIE1PRFVMRV9JRF9BUF9SRUJPT1QJCQkoMzAyKQorI2RlZmluZSBNT0RVTEVfSURfQVBfVFNDCQkJKDMwMykKKyNkZWZpbmUgTU9EVUxFX0lEX0FQX1BTTQkJCSgzMDQpCisjZGVmaW5lIE1PRFVMRV9JRF9BUF9OQU5ECQkJKDMwNSkKKyNkZWZpbmUgTU9EVUxFX0lEX0FQX01NQwkJCSgzMDYpCisjZGVmaW5lIE1PRFVMRV9JRF9BUF9XSUZJCQkJKDMwNykKKyNkZWZpbmUgTU9EVUxFX0lEX0FQX0RSSVZFU19FTkQJCSg0MDApCiAKKyNkZWZpbmUgTU9EVUxFX0lEX0NBUF9EUklWRVNfU1RBUlQJKDQwMSkKKyNkZWZpbmUgTU9EVUxFX0lEX0NBUF9VU0IJCQkoNDAxKQorI2RlZmluZSBNT0RVTEVfSURfQ0FQX1RTQwkJCSg0MDIpCisjZGVmaW5lIE1PRFVMRV9JRF9DQVBfUFNNCQkJKDQwMykKKyNkZWZpbmUgTU9EVUxFX0lEX0NBUF9OQU5ECQkJKDQwNCkKKyNkZWZpbmUgTU9EVUxFX0lEX0NBUF9TUEkJCQkoNDA1KQorI2RlZmluZSBNT0RVTEVfSURfQ0FQX01NQwkJCSg0MDYpCisjZGVmaW5lIE1PRFVMRV9JRF9DQVBfVUFSVAkJCSg0MDcpCisjZGVmaW5lIE1PRFVMRV9JRF9DQVBfRFJJVkVTX0VORAkoNTAwKQogCi0jZGVmaW5lIE1PRFVMRV9JRF9BUF9KRkZTMiAgICAgICAgICAgKCJhcF9qZmZzMiIpCi0jZGVmaW5lIE1PRFVMRV9JRF9BUF9GT1RBICAgICAgICAgICAgKCJhcF9mb3RhIikKLSNkZWZpbmUgTU9EVUxFX0lEX0FQX0ZTX0NIRUNLICAgICAgICAoImFwX2ZzX2NoZWNrIikKKyNkZWZpbmUgTU9EVUxFX0lEX0FQX0ZTX1NUQVJUCQkoNTAxKQorI2RlZmluZSBNT0RVTEVfSURfQVBfSkZGUzIJCQkoNTAxKQorI2RlZmluZSBNT0RVTEVfSURfQVBfRlNfRU5ECQkJKDYwMCkKIAotI2RlZmluZSBNT0RVTEVfSURfQ0FQX0ZPVEEJCQkgKCJjYXBfZm90YSIpCi0jZGVmaW5lIE1PRFVMRV9JRF9DQVBfRlNfQ0hFQ0sJCSAoImNhcF9mc19jaGVjayIpCi0gCi0jaWYgZGVmaW5lZChfVVNFX1pYSUNfREVCVUdfSU5GTykKLWludCBzY19kZWJ1Z19pbmZvX3ZyZWNvcmQoY2hhciAqaWQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKLWludCBzY19kZWJ1Z19pbmZvX3JlY29yZChjaGFyICppZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworI2RlZmluZSBNT0RVTEVfSURfQ0FQX0ZTX1NUQVJUCQkoNjAxKQorI2RlZmluZSBNT0RVTEVfSURfQ0FQX0ZTX0VORAkJKDcwMCkKKworI2RlZmluZSBNT0RVTEVfSURfQVBfQVBQX1NUQVJUCQkoNzAxKQorI2RlZmluZSBNT0RVTEVfSURfQVBfRk9UQQkJCSg3MDEpCisjZGVmaW5lIE1PRFVMRV9JRF9BUF9GU19DSEVDSwkJKDcwMikKKyNkZWZpbmUgTU9EVUxFX0lEX0FQX0FQUF9FTkQJCSg4MDApCisKKyNkZWZpbmUgTU9EVUxFX0lEX0NBUF9BUFBfU1RBUlQJCSg4MDEpCisjZGVmaW5lIE1PRFVMRV9JRF9DQVBfRk9UQQkJCSg4MDEpCisjZGVmaW5lIE1PRFVMRV9JRF9DQVBfRlNfQ0hFQ0sJCSg4MDIpCisjZGVmaW5lIE1PRFVMRV9JRF9DQVBfQVBQX0VORAkJKDkwMCkKKworI2lmIGRlZmluZWQoX1VTRV9aWElDX0RFQlVHX0lORk8pICYmICFkZWZpbmVkKENPTkZJR19TWVNURU1fUkVDT1ZFUlkpCitpbnQgc2NfZGVidWdfaW5mb192cmVjb3JkKHVuc2lnbmVkIGludCBpZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworaW50IHNjX2RlYnVnX2luZm9fcmVjb3JkKHVuc2lnbmVkIGludCBpZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHNjX2RlYnVnX2luZm9fdnJlY29yZChjaGFyICppZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHNjX2RlYnVnX2luZm9fcmVjb3JkKGNoYXIgKmlkLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgc2NfZGVidWdfaW5mb192cmVjb3JkKHVuc2lnbmVkIGludCBpZCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHNjX2RlYnVnX2luZm9fcmVjb3JkKHVuc2lnbmVkIGludCBpZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9VYm9vdC9wdWIvcHJvamVjdC96eDI5NzUyMHYzL2luY2x1ZGUvZHJ2L052UGFyYW1fZHJ2LmggYi9VYm9vdC9wdWIvcHJvamVjdC96eDI5NzUyMHYzL2luY2x1ZGUvZHJ2L052UGFyYW1fZHJ2LmgKaW5kZXggOTVjMzE1OC4uNjZjNmY2ZCAxMDA3NTUKLS0tIGEvVWJvb3QvcHViL3Byb2plY3QvengyOTc1MjB2My9pbmNsdWRlL2Rydi9OdlBhcmFtX2Rydi5oCisrKyBiL1Vib290L3B1Yi9wcm9qZWN0L3p4Mjk3NTIwdjMvaW5jbHVkZS9kcnYvTnZQYXJhbV9kcnYuaApAQCAtMjE0LDEwICsyMTQsOCBAQAogCVVJTlQ4CQkJaXNVc2VUeER0bWZEZXQ7ICAgICANCiAgICAgVUlOVDgJCQlpc1VzZVJ4TWl4RGF0YTsNCiAJVUlOVDgJCQlpc1VzZVR4TWl4RGF0YTsvLzEyDQotCVVJTlQ4CQkJaXNVc2VFY2FsbDsgLy8xMw0KLQlVSU5UOCAJCQlpc1VzZVZvaWNlQnVmZmVyOyAvLzE0ICAwIG5vdCB1c2UsMSB1c2UNCi0JVUlOVDggCQkJc2VsVm9pY2VCdWZmZXJUeXBlOyAvLzE1IDAgc2luZ2xlIGNvcmUsIDEgZHVhbCBjb3JlCQ0KLSAgICBVSU5UOCAgICAgICAgICAgcmVzZXJ2ZWRbMTddOy8vMzItMTUNCisJVUlOVDgJCQlpc1VzZUVjYWxsOw0KKyAgICBVSU5UOCAgICAgICAgICAgcmVzZXJ2ZWRbMTldOy8vMzItMTMNCiAJDQogfSAgVF9BdWRpb19OdkZsYWc7DQogDQpkaWZmIC0tZ2l0IGEvVWJvb3QvcHViL3Byb2plY3QvengyOTc1MjB2My9pbmNsdWRlL2luZnJhL3JhbV9iYXNlX2NvbmZpZ183NTIwdjMuaCBiL1Vib290L3B1Yi9wcm9qZWN0L3p4Mjk3NTIwdjMvaW5jbHVkZS9pbmZyYS9yYW1fYmFzZV9jb25maWdfNzUyMHYzLmgKaW5kZXggZWRiM2JmYi4uNmExNjI2ZCAxMDA3NTUKLS0tIGEvVWJvb3QvcHViL3Byb2plY3QvengyOTc1MjB2My9pbmNsdWRlL2luZnJhL3JhbV9iYXNlX2NvbmZpZ183NTIwdjMuaAorKysgYi9VYm9vdC9wdWIvcHJvamVjdC96eDI5NzUyMHYzL2luY2x1ZGUvaW5mcmEvcmFtX2Jhc2VfY29uZmlnXzc1MjB2My5oCkBAIC0xNjMsNyArMTYzLDcgQEAKICNkZWZpbmUgRERSX0JBU0VfT0ZGX0NBUCAgICAgICAgICAgICAgICAoRERSX0JBU0VfT0ZGX0NBUF9CVUYgKyBERFJfQkFTRV9MRU5fQ0FQX0JVRikNCiANCiAvKiBjYXC6y7XEZHRitdjWt7mpdWJvb3S6y2NhcCBrZXJuZWzKudPDICovDQotI2RlZmluZSBERFJfQkFTRV9DQVBfRFRCX0FERFIgICAgICAgICAgIChERFJfQkFTRV9BRERSX0NBUF9CVUYgKyAoMHgwMDE5NDAwMFVMPj5DUFVfU0hJRlQpKQ0KKyNkZWZpbmUgRERSX0JBU0VfQ0FQX0RUQl9BRERSICAgICAgICAgICAoRERSX0JBU0VfQUREUl9DQVBfQlVGICsgKDB4MDAxMDAwMDBVTD4+Q1BVX1NISUZUKSkNCiAjZWxzZQ0KIC8qIDQyLjc1TaOsQVC5srrLsOaxvii0y7Tz0KHKx7C01dW6rENBULrLtcQ2NE3E2rTmxeTWw7ao0uWjrLjDuuqx8LSmsru74bG7yrnTwykgKi8NCiAjZGVmaW5lIEREUl9CQVNFX0FERFJfQVAgICAgICAgICAgICAgICAgKEREUl9CQVNFX0FERFJfUkFNRFVNUCArIEREUl9CQVNFX0xFTl9SQU1EVU1QKQ0KQEAgLTI1MywxMyArMjUzLDYgQEAKICNkZWZpbmUgVEVFX1NIQVJFX0JVRl9BRERSICAgICAgICAgICAgICAoUkFNRFVNUF9BUF9UT19DQVBfQlVGX0FERFIgKyBSQU1EVU1QX0FQX1RPX0NBUF9CVUZfTEVOKQ0KICNkZWZpbmUgVEVFX1NIQVJFX0JVRl9MRU4gICAgICAgICAgICAgICAoKDM4NCAqIDEwMjRVTCk+PkNQVV9TSElGVCkNCiANCi0vKiBwc86ssuK/1bzkKMr9vt0gKyC/2NbGKbi008NBUF9UT19DQVC1xHJhbWR1bXC05rSiv9W85CAqLw0KLSNkZWZpbmUgUFNfREVCVUdfSU5GT19MRU5fQUREUiAgICAgICAgICAoUkFNRFVNUF9BUF9UT19DQVBfQlVGX0FERFIgKyAoKDQgKiAxMDI0VUwpPj5DUFVfU0hJRlQpKQ0KLSNkZWZpbmUgUFNfREVCVUdfSU5GT19MRU5fU0laRSAgICAgICAgICAoKDQgKiAxMDI0VUwpPj5DUFVfU0hJRlQpDQotDQotI2RlZmluZSBQU19ERUJVR19JTkZPX0FERFIgICAgICAgICAgICAgIChQU19ERUJVR19JTkZPX0xFTl9BRERSICsgUFNfREVCVUdfSU5GT19MRU5fU0laRSkNCi0jZGVmaW5lIFBTX0RFQlVHX0lORk9fU0laRSAgICAgICAgICAgICAgKCg2NCAqIDEwMjRVTCk+PkNQVV9TSElGVCkNCi0NCiAjZGVmaW5lIElDUF9DQVBfQlVGX0FERFJfUEEgICAgICAgICAgICAgRERSX0JBU0VfQ0FQQlVGX0FERFJfUEENCiAjZGVmaW5lIFRPT0xfQ0FQX0JVRl9BRERSX1BBICAgICAgICAgICAgKElDUF9DQVBfQlVGX0FERFJfUEEgKyBJQ1BfQ0FQX0JVRl9MRU4pDQogI2RlZmluZSBSSU5HQlVGX0NBUF9UT19BUF9BRERSX1BBICAgICAgIChUT09MX0NBUF9CVUZfQUREUl9QQSArIFRPT0xfQ0FQX0JVRl9MRU4pDQpAQCAtMjY5LDkgKzI2Miw2IEBACiAjZGVmaW5lIFRPT0xfWlNQX1RPX0NBUF9MT0dfQUREUl9QQSAgICAgKFJJTkdCVUZfQVBfVE9fQ0FQX0FERFJfUEEgKyBSSU5HQlVGX0FQX1RPX0NBUF9MRU4pDQogI2RlZmluZSBSQU1EVU1QX0FQX1RPX0NBUF9CVUZfQUREUl9QQSAgIChUT09MX1pTUF9UT19DQVBfTE9HX0FERFJfUEEgKyBUT09MX1pTUF9UT19DQVBfTE9HX0xFTikNCiAjZGVmaW5lIFRFRV9TSEFSRV9CVUZfQUREUl9QQSAgICAgICAgICAgKFJBTURVTVBfQVBfVE9fQ0FQX0JVRl9BRERSX1BBICsgUkFNRFVNUF9BUF9UT19DQVBfQlVGX0xFTikNCi0NCi0jZGVmaW5lIFBTX0RFQlVHX0lORk9fTEVOX0FERFJfUEEgICAgICAgKFJBTURVTVBfQVBfVE9fQ0FQX0JVRl9BRERSX1BBICsgKCg0ICogMTAyNFVMKT4+Q1BVX1NISUZUKSkNCi0jZGVmaW5lIFBTX0RFQlVHX0lORk9fQUREUl9QQSAgICAgICAgICAgKFBTX0RFQlVHX0lORk9fTEVOX0FERFJfUEEgKyBQU19ERUJVR19JTkZPX0xFTl9TSVpFKQ0KICNlbmRpZg0KIA0KIC8qIDc1MjBWM9C+xqxJUkFNMNG5y/WjrNCt0unVu87vwO2y4727u6W/1bzk0sa2r7W9RERSo6y4tNPDUmFtZHVtcL/VvOQgKi8NCg==