ZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icCBiL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icAppbmRleCAyNDNlNzdlLi4wY2FlYTU2IDEwMDY0NAotLS0gYS9iYWNrcG9ydGVkX2ZpeGVzL0FuZHJvaWQuYnAKKysrIGIvYmFja3BvcnRlZF9maXhlcy9BbmRyb2lkLmJwCkBAIC0zOCw2ICszOCw3IEBACiAgICAgbmFtZTogImJhY2twb3J0ZWRfZml4ZXNfcHJvdG8iLAogICAgIHNyY3M6IFsiYmFja3BvcnRlZF9maXhlcy5wcm90byJdLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIHNka192ZXJzaW9uOiAiY3VycmVudCIsCiB9CiAKIGphdmFfbGlicmFyeSB7CmRpZmYgLS1naXQgYS9jb3JlL01ha2VmaWxlIGIvY29yZS9NYWtlZmlsZQppbmRleCBhOTUxNzE1Li44MGFkMzNjIDEwMDY0NAotLS0gYS9jb3JlL01ha2VmaWxlCisrKyBiL2NvcmUvTWFrZWZpbGUKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgICAgICAgICAgJChldmFsICQoY2FsbCBjb3B5LXhtbC1maWxlLWNoZWNrZWQsJChfc3JjKSwkKF9mdWxsZGVzdCkpKSxcCiAgICAgICAgICAgICAkKGlmICQoYW5kICQoZmlsdGVyICUuamFyLCQoX2Rlc3QpKSwkKGZpbHRlciAkKGJhc2VuYW1lICQobm90ZGlyICQoX2Rlc3QpKSksJChQUk9EVUNUX0xPQURFRF9CWV9QUklWSUxFR0VEX01PRFVMRVMpKSksXAogICAgICAgICAgICAgICAgICQoZXZhbCAkKGNhbGwgY29weS1hbmQtdW5jb21wcmVzcy1kZXhzLCQoX3NyYyksJChfZnVsbGRlc3QpKSksIFwKLSAgICAgICAgICAgICAgICAkKGlmICQoZmlsdGVyIGluaXQlcmMsJChub3RkaXIgJChfZGVzdCkpKSQoZmlsdGVyICUvZXRjL2luaXQsJChkaXIgJChfZGVzdCkpKSxcCisgICAgICAgICAgICAgICAgJChpZiAkKGZpbHRlciBpbml0JXJjLCQobm90ZGlyICQoX2Rlc3QpKSkkKGZpbHRlciAlL2V0Yy9pbml0LywkKGRpciAkKF9kZXN0KSkpLFwKICAgICAgICAgICAgICAgICAgICAgJChldmFsICQoY2FsbCBjb3B5LWluaXQtc2NyaXB0LWZpbGUtY2hlY2tlZCwkKF9zcmMpLCQoX2Z1bGxkZXN0KSkpLFwKICAgICAgICAgICAgICAgICAgICAgJChpZiAkKGFuZCAkKGZpbHRlciB0cnVlLCQoY2hlY2tfZWxmX3ByZWJ1aWx0X3Byb2R1Y3RfY29weV9maWxlcykpLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXIgYmluIGxpYiBsaWI2NCwkKHN1YnN0IC8sJChzcGFjZSksJChfZGVzdCkpKSksIFwKQEAgLTIzOTgsNyArMjM5OCw3IEBACiAkKGhpZGUpIGVjaG8gInJvb3RfZGlyPSQoVEFSR0VUX1JPT1RfT1VUKSIgPj4gJCgxKQogJChpZiAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9VU0VfRFlOQU1JQ19QQVJUSVRJT05fU0laRSkpLFwKICAgICAkKGhpZGUpIGVjaG8gInVzZV9keW5hbWljX3BhcnRpdGlvbl9zaXplPXRydWUiID4+ICQoMSkpCi0kKGlmICQoQ09QWV9JTUFHRVNfRk9SX1RBUkdFVF9GSUxFU19aSVApLFwKKyQoaWYgJChVU0VfRklYRURfVElNRVNUQU1QX0lNR19GSUxFUykkKENPUFlfSU1BR0VTX0ZPUl9UQVJHRVRfRklMRVNfWklQKSxcCiAgICAgJChoaWRlKSBlY2hvICJ1c2VfZml4ZWRfdGltZXN0YW1wPXRydWUiID4+ICQoMSkpCiAkKGlmICQoMyksJChoaWRlKSAkKGZvcmVhY2gga3YsJCgzKSxlY2hvICIkKGt2KSIgPj4gJCgxKTspKQogJChoaWRlKSBzb3J0IC1vICQoMSkgJCgxKQpAQCAtMzU1Myw3ICszNTUzLDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQpIFwKLSAgICAgICAgICAkKFRBUkdFVF9PVVQpICQoc3lzdGVtaW1hZ2VfaW50ZXJtZWRpYXRlcykvc3lzdGVtX2ltYWdlX2luZm8udHh0ICQoMSkgJChUQVJHRVRfT1VUKSAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUKSAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9pbWFnZV9pbmZvLnR4dCAkKDEpICQoVEFSR0VUX09VVCkgXAogICAgICAgICAgIHx8ICggbWtkaXIgLXAgJCR7RElTVF9ESVJ9OyBcCiAgICAgICAgICAgICAgICBjcCAkKElOU1RBTExFRF9GSUxFU19GSUxFKSAkJHtESVNUX0RJUn0vaW5zdGFsbGVkLWZpbGVzLXJlc2N1ZWQudHh0OyBcCiAgICAgICAgICAgICAgICBleGl0IDEgKQpAQCAtMzcwNCw3ICszNzA0LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHVzZXJkYXRhaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9EQVRBKSAkKHVzZXJkYXRhaW1hZ2VfaW50ZXJtZWRpYXRlcykvdXNlcmRhdGFfaW1hZ2VfaW5mby50eHQgLS1idWlsZF9kYXRldGltZV9maWxlICQoQlVJTERfREFURVRJTUVfRklMRSkgXAorICAgICAgICAgICQoVEFSR0VUX09VVF9EQVRBKSAkKHVzZXJkYXRhaW1hZ2VfaW50ZXJtZWRpYXRlcykvdXNlcmRhdGFfaW1hZ2VfaW5mby50eHQgXAogICAgICAgICAgICQoSU5TVEFMTEVEX1VTRVJEQVRBSU1BR0VfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCiAgICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJChJTlNUQUxMRURfVVNFUkRBVEFJTUFHRV9UQVJHRVQpLCQoQk9BUkRfVVNFUkRBVEFJTUFHRV9QQVJUSVRJT05fU0laRSkpCiBlbmRlZgpAQCAtMzc2Niw3ICszNzY2LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKGNhY2hlaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9DQUNIRSkgJChjYWNoZWltYWdlX2ludGVybWVkaWF0ZXMpL2NhY2hlX2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKFRBUkdFVF9PVVRfQ0FDSEUpICQoY2FjaGVpbWFnZV9pbnRlcm1lZGlhdGVzKS9jYWNoZV9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfQ0FDSEVJTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9DQUNIRUlNQUdFX1RBUkdFVCksJChCT0FSRF9DQUNIRUlNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC0zODUzLDcgKzM4NTMsNyBAQAogICBQQVRIPSQoSU5URVJOQUxfVVNFUklNQUdFU19CSU5BUllfUEFUSFMpOiQkUEFUSCBcCiAgICAgICAkKEJVSUxEX0lNQUdFKSBcCiAgICAgICAgICAgJChpZiAkKEJVSUxEX0JST0tFTl9JTkNPUlJFQ1RfUEFSVElUSU9OX0lNQUdFUyksLC0taW5wdXQtZGlyZWN0b3J5LWZpbHRlci1maWxlICQoc3lzdGVtb3RoZXJpbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCi0gICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9PVEhFUikgJChzeXN0ZW1vdGhlcmltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9vdGhlcl9pbWFnZV9pbmZvLnR4dCAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9PVEhFUikgJChzeXN0ZW1vdGhlcmltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9vdGhlcl9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfU1lTVEVNT1RIRVJJTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9TWVNURU1PVEhFUklNQUdFX1RBUkdFVCksJChCT0FSRF9TWVNURU1JTUFHRV9QQVJUSVRJT05fU0laRSkpCiBlbmRlZgpAQCAtMzk1OSw3ICszOTU5LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHZlbmRvcmltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQpIFwKLSAgICAgICAgICAkKFRBUkdFVF9PVVRfVkVORE9SKSAkKHZlbmRvcmltYWdlX2ludGVybWVkaWF0ZXMpL3ZlbmRvcl9pbWFnZV9pbmZvLnR4dCAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUX1ZFTkRPUikgJCh2ZW5kb3JpbWFnZV9pbnRlcm1lZGlhdGVzKS92ZW5kb3JfaW1hZ2VfaW5mby50eHQgXAogICAgICAgICAgICQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkgJChSRUNPVkVSWV9GUk9NX0JPT1RfUEFUQ0gpLCQoQk9BUkRfVkVORE9SSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogZW5kZWYKQEAgLTQwNDcsNyArNDA0Nyw3IEBACiAgIFBBVEg9JChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyk6JCRQQVRIIFwKICAgICAgICQoQlVJTERfSU1BR0UpIFwKICAgICAgICAgICAkKGlmICQoQlVJTERfQlJPS0VOX0lOQ09SUkVDVF9QQVJUSVRJT05fSU1BR0VTKSwsLS1pbnB1dC1kaXJlY3RvcnktZmlsdGVyLWZpbGUgJChwcm9kdWN0aW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9QUk9EVUNUKSAkKHByb2R1Y3RpbWFnZV9pbnRlcm1lZGlhdGVzKS9wcm9kdWN0X2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKFRBUkdFVF9PVVRfUFJPRFVDVCkgJChwcm9kdWN0aW1hZ2VfaW50ZXJtZWRpYXRlcykvcHJvZHVjdF9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVCkgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1BST0RVQ1RJTUFHRV9UQVJHRVQpLCQoQk9BUkRfUFJPRFVDVElNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC00MTE2LDcgKzQxMTYsNyBAQAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHN5c3RlbV9leHRpbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCiAgICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9FWFQpIFwKLSAgICAgICAgICAkKHN5c3RlbV9leHRpbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1fZXh0X2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKHN5c3RlbV9leHRpbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1fZXh0X2ltYWdlX2luZm8udHh0IFwKICAgICAgICAgICAkKElOU1RBTExFRF9TWVNURU1fRVhUSU1BR0VfVEFSR0VUKSBcCiAgICAgICAgICAgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1BST0RVQ1RfU0VSVklDRVNJTUFHRV9UQVJHRVQpLCQoQk9BUkRfUFJPRFVDVF9TRVJWSUNFU0lNQUdFX1BBUlRJVElPTl9TSVpFKSkKQEAgLTQyMDYsNyArNDIwNiw3IEBACiAgIFBBVEg9JChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyk6JCRQQVRIIFwKICAgICAgICQoQlVJTERfSU1BR0UpIFwKICAgICAgICAgICAkKGlmICQoQlVJTERfQlJPS0VOX0lOQ09SUkVDVF9QQVJUSVRJT05fSU1BR0VTKSwsLS1pbnB1dC1kaXJlY3RvcnktZmlsdGVyLWZpbGUgJChvZG1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCi0gICAgICAgICAgJChUQVJHRVRfT1VUX09ETSkgJChvZG1pbWFnZV9pbnRlcm1lZGlhdGVzKS9vZG1faW1hZ2VfaW5mby50eHQgLS1idWlsZF9kYXRldGltZV9maWxlICQoQlVJTERfREFURVRJTUVfRklMRSkgXAorICAgICAgICAgICQoVEFSR0VUX09VVF9PRE0pICQob2RtaW1hZ2VfaW50ZXJtZWRpYXRlcykvb2RtX2ltYWdlX2luZm8udHh0IFwKICAgICAgICAgICAkKElOU1RBTExFRF9PRE1JTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9PRE1JTUFHRV9UQVJHRVQpLCQoQk9BUkRfT0RNSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogZW5kZWYKQEAgLTQyNzUsNyArNDI3NSw3IEBACiAgIFBBVEg9JChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyk6JCRQQVRIIFwKICAgICAgICQoQlVJTERfSU1BR0UpIFwKICAgICAgICAgICAkKGlmICQoQlVJTERfQlJPS0VOX0lOQ09SUkVDVF9QQVJUSVRJT05fSU1BR0VTKSwsLS1pbnB1dC1kaXJlY3RvcnktZmlsdGVyLWZpbGUgJCh2ZW5kb3JfZGxrbWltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQpIFwKLSAgICAgICAgICAkKFRBUkdFVF9PVVRfVkVORE9SX0RMS00pICQodmVuZG9yX2Rsa21pbWFnZV9pbnRlcm1lZGlhdGVzKS92ZW5kb3JfZGxrbV9pbWFnZV9pbmZvLnR4dCAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKSAkKHZlbmRvcl9kbGttaW1hZ2VfaW50ZXJtZWRpYXRlcykvdmVuZG9yX2Rsa21faW1hZ2VfaW5mby50eHQgXAogICAgICAgICAgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNSU1BR0VfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCiAgICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJChJTlNUQUxMRURfVkVORE9SX0RMS01JTUFHRV9UQVJHRVQpLCQoQk9BUkRfVkVORE9SX0RMS01JTUFHRV9QQVJUSVRJT05fU0laRSkpCiBlbmRlZgpAQCAtNDM0NCw3ICs0MzQ0LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKG9kbV9kbGttaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9PRE1fRExLTSkgJChvZG1fZGxrbWltYWdlX2ludGVybWVkaWF0ZXMpL29kbV9kbGttX2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKFRBUkdFVF9PVVRfT0RNX0RMS00pICQob2RtX2Rsa21pbWFnZV9pbnRlcm1lZGlhdGVzKS9vZG1fZGxrbV9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfT0RNX0RMS01JTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9PRE1fRExLTUlNQUdFX1RBUkdFVCksJChCT0FSRF9PRE1fRExLTUlNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC00NDE1LDcgKzQ0MTUsNyBAQAogICBQQVRIPSQoSU5URVJOQUxfVVNFUklNQUdFU19CSU5BUllfUEFUSFMpOiQkUEFUSCBcCiAgICAgICAkKEJVSUxEX0lNQUdFKSBcCiAgICAgICAgICAgJChpZiAkKEJVSUxEX0JST0tFTl9JTkNPUlJFQ1RfUEFSVElUSU9OX0lNQUdFUyksLC0taW5wdXQtZGlyZWN0b3J5LWZpbHRlci1maWxlICQoc3lzdGVtX2Rsa21pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCi0gICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9ETEtNKSAkKHN5c3RlbV9kbGttaW1hZ2VfaW50ZXJtZWRpYXRlcykvc3lzdGVtX2Rsa21faW1hZ2VfaW5mby50eHQgLS1idWlsZF9kYXRldGltZV9maWxlICQoQlVJTERfREFURVRJTUVfRklMRSkgXAorICAgICAgICAgICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkgJChzeXN0ZW1fZGxrbWltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9kbGttX2ltYWdlX2luZm8udHh0IFwKICAgICAgICAgICAkKElOU1RBTExFRF9TWVNURU1fRExLTUlNQUdFX1RBUkdFVCkgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNSU1BR0VfVEFSR0VUKSwkKEJPQVJEX1NZU1RFTV9ETEtNSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogZW5kZWYKQEAgLTYxODEsMTEgKzYxODEsMTQgQEAKIAogYnVpbHRfb3RhX3Rvb2xzIDo9CiAKKwogIyBXZSBjYW4ndCBidWlsZCBzdGF0aWMgZXhlY3V0YWJsZXMgd2hlbiBTQU5JVElaRV9UQVJHRVQ9YWRkcmVzcwogaWZlcSAoLCQoZmlsdGVyIGFkZHJlc3MsICQoU0FOSVRJWkVfVEFSR0VUKSkpCitpZmVxIChmYWxzZSwkKEFCX09UQV9VUERBVEVSKSkKIGJ1aWx0X290YV90b29scyArPSBcCiAgICAgJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixFWEVDVVRBQkxFUyx1cGRhdGVyKS91cGRhdGVyCiBlbmRpZgorZW5kaWYKIAogJChCVUlMVF9UQVJHRVRfRklMRVNfRElSKTogUFJJVkFURV9PVEFfVE9PTFMgOj0gJChidWlsdF9vdGFfdG9vbHMpCiAKZGlmZiAtLWdpdCBhL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tayBiL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tawppbmRleCA5NWMwNzM2Li43MzgzMWRjIDEwMDY0NAotLS0gYS9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsKKysrIGIvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rCkBAIC0zOSw2ICszOSw4IEBACiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRFlOQU1JQ182NF8zMl9EUk1TRVJWRVIpCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRU5BQkxFX01FRElBRFJNXzY0KQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsVEFSR0VUX0RZTkFNSUNfNjRfMzJfTUVESUFTRVJWRVIpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsVEFSR0VUX1NVUFBPUlRTXzMyX0JJVF9BUFBTLCQoaWYgJChUQVJHRVRfU1VQUE9SVFNfMzJfQklUX0FQUFMpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELFRBUkdFVF9TVVBQT1JUU182NF9CSVRfQVBQUywkKGlmICQoVEFSR0VUX1NVUFBPUlRTXzY0X0JJVF9BUFBTKSx0cnVlLGZhbHNlKSkKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELEJPQVJEX0dFTkZTX0xBQkVMU19WRVJTSU9OKQogCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxBRERJVElPTkFMX000REVGUywkKGlmICQoQk9BUkRfU0VQT0xJQ1lfTTRERUZTKSwkKGFkZHByZWZpeCAtRCwkKEJPQVJEX1NFUE9MSUNZX000REVGUykpKSkKQEAgLTEyOCw2ICsxMzAsOCBAQAogCiBpZmRlZiBQUk9EVUNUX0NHUk9VUF9WMl9TWVNfQVBQX0lTT0xBVElPTl9FTkFCTEVECiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXJfdmFsdWUsQU5EUk9JRCxjZ3JvdXBfdjJfc3lzX2FwcF9pc29sYXRpb24sJChQUk9EVUNUX0NHUk9VUF9WMl9TWVNfQVBQX0lTT0xBVElPTl9FTkFCTEVEKSkKK2Vsc2UKKyQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3Zhcl92YWx1ZSxBTkRST0lELGNncm91cF92Ml9zeXNfYXBwX2lzb2xhdGlvbix0cnVlKQogZW5kaWYKIAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQscmVsZWFzZV9hdmZfYWxsb3dfcHJlaW5zdGFsbGVkX2FwcHMsJChSRUxFQVNFX0FWRl9BTExPV19QUkVJTlNUQUxMRURfQVBQUykpCmRpZmYgLS1naXQgYS9jb3JlL21haW4ubWsgYi9jb3JlL21haW4ubWsKaW5kZXggNjI0ZGY0OS4uZGE1ZDQ5YyAxMDA2NDQKLS0tIGEvY29yZS9tYWluLm1rCisrKyBiL2NvcmUvbWFpbi5tawpAQCAtMTc1OSwxMCArMTc1OSw2IEBACiAJQGVjaG8gJChzb3J0ICQocGF0c3Vic3QgJChQUk9EVUNUX09VVCkvJSwlLCQoZmlsdGVyICQoUFJPRFVDVF9PVVQpLyUsJChtb2R1bGVzX3RvX2luc3RhbGwpKSkpIHwgdHIgLXMgJyAnICdcbicKIAlAZWNobyBTdWNjZXNzZnVsbHkgZHVtcGVkIHByb2R1Y3QgdGFyZ2V0IGZpbGUgbGlzdC4KIAotLlBIT05ZOiBub3RoaW5nCi1ub3RoaW5nOgotCUBlY2hvIFN1Y2Nlc3NmdWxseSByZWFkIHRoZSBtYWtlZmlsZXMuCi0KIC5QSE9OWTogdGlkeV9vbmx5CiB0aWR5X29ubHk6CiAJQGVjaG8gU3VjY2Vzc2Z1bGx5IG1ha2UgdGlkeV9vbmx5LgpAQCAtMTkyNyw3ICsxOTIzLDggQEAKIAkgICQoZXZhbCBfaXNfcGxhdGZvcm1fZ2VuZXJhdGVkIDo9ICQoX2lzX2J1aWxkX3Byb3ApJChfaXNfbm90aWNlX2ZpbGUpJChfaXNfcHJvZHVjdF9zeXN0ZW1fb3RoZXJfYXZia2V5KSQoX2lzX2V2ZW50X2xvZ190YWdzX2ZpbGUpJChfaXNfc3lzdGVtX290aGVyX29kZXhfbWFya2VyKSQoX2lzX2tlcm5lbF9tb2R1bGVzX2Jsb2NrbGlzdCkkKF9pc19mc3Zlcml0eV9idWlsZF9tYW5pZmVzdF9hcGspJChfaXNfbGlua2VyX2NvbmZpZykkKF9pc19wYXJ0aXRpb25fY29tcGF0X3N5bWxpbmspJChfaXNfZmxhZ3NfZmlsZSkkKF9pc19yb290ZGlyX3N5bWxpbmspKSBcCiAJICAkKGV2YWwgX3N0YXRpY19saWJzIDo9ICQoaWYgJChfaXNfc29vbmdfbW9kdWxlKSwsJChBTExfSU5TVEFMTEVEX0ZJTEVTLiRmLlNUQVRJQ19MSUJSQVJJRVMpKSkgXAogCSAgJChldmFsIF93aG9sZV9zdGF0aWNfbGlicyA6PSAkKGlmICQoX2lzX3Nvb25nX21vZHVsZSksLCQoQUxMX0lOU1RBTExFRF9GSUxFUy4kZi5XSE9MRV9TVEFUSUNfTElCUkFSSUVTKSkpIFwKLQkgICQoZXZhbCBfbGljZW5zZV90ZXh0IDo9ICQoaWYgJChmaWx0ZXIgJChfYnVpbGRfb3V0cHV0X3BhdGgpLCQoQUxMX05PTl9NT0RVTEVTKSksJChBTExfTk9OX01PRFVMRVMuJChfYnVpbGRfb3V0cHV0X3BhdGgpLk5PVElDRVMpKSkgXAorCSAgJChldmFsIF9saWNlbnNlX3RleHQgOj0gJChpZiAkKGZpbHRlciAkKF9idWlsZF9vdXRwdXRfcGF0aCksJChBTExfTk9OX01PRFVMRVMpKSwkKEFMTF9OT05fTU9EVUxFUy4kKF9idWlsZF9vdXRwdXRfcGF0aCkuTk9USUNFUyksXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgJChpZiAkKF9pc19wYXJ0aXRpb25fY29tcGF0X3N5bWxpbmspLGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UpKSkgXAogCSAgZWNobyAnJChfYnVpbGRfb3V0cHV0X3BhdGgpLCQoX21vZHVsZV9wYXRoKSwkKF9pc19zb29uZ19tb2R1bGUpLCQoX2lzX3ByZWJ1aWx0X21ha2VfbW9kdWxlKSwkKF9wcm9kdWN0X2NvcHlfZmlsZXMpLCQoX2tlcm5lbF9tb2R1bGVfY29weV9maWxlcyksJChfaXNfcGxhdGZvcm1fZ2VuZXJhdGVkKSwkKF9zdGF0aWNfbGlicyksJChfd2hvbGVfc3RhdGljX2xpYnMpLCQoX2xpY2Vuc2VfdGV4dCknID4+ICRAOyBcCiAJKQogCmRpZmYgLS1naXQgYS9jb3JlL21pc2NfcHJlYnVpbHRfaW50ZXJuYWwubWsgYi9jb3JlL21pc2NfcHJlYnVpbHRfaW50ZXJuYWwubWsKaW5kZXggYTU2MjIwNy4uYjE0YjljZSAxMDA2NDQKLS0tIGEvY29yZS9taXNjX3ByZWJ1aWx0X2ludGVybmFsLm1rCisrKyBiL2NvcmUvbWlzY19wcmVidWlsdF9pbnRlcm5hbC5tawpAQCAtMjUsNyArMjUsNyBAQAogCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCiAKLWlmbmVxICgkKGZpbHRlciBpbml0JXJjLCQobm90ZGlyICQoTE9DQUxfSU5TVEFMTEVEX01PRFVMRSkpKSQoZmlsdGVyICUvZXRjL2luaXQsJChkaXIgJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKSkpLCkKK2lmbmVxICgkKGZpbHRlciBpbml0JXJjLCQobm90ZGlyICQoTE9DQUxfSU5TVEFMTEVEX01PRFVMRSkpKSQoZmlsdGVyICUvZXRjL2luaXQvLCQoZGlyICQoTE9DQUxfSU5TVEFMTEVEX01PRFVMRSkpKSwpCiAgICQoZXZhbCAkKGNhbGwgY29weS1pbml0LXNjcmlwdC1maWxlLWNoZWNrZWQsJChteV9wcmVidWlsdF9zcmNfZmlsZSksJChMT0NBTF9CVUlMVF9NT0RVTEUpKSkKIGVsc2UKICQoTE9DQUxfQlVJTFRfTU9EVUxFKSA6ICQobXlfcHJlYnVpbHRfc3JjX2ZpbGUpCmRpZmYgLS1naXQgYS9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rIGIvY29yZS9wcm9kdWN0X2NvbmZpZy5tawppbmRleCBmOTNiNjNjLi5kMTg3NzBiIDEwMDY0NAotLS0gYS9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rCisrKyBiL2NvcmUvcHJvZHVjdF9jb25maWcubWsKQEAgLTQ4NSw5ICs0ODUsNyBAQAogCiAjIFNob3cgYSB3YXJuaW5nIHdhbGwgb2YgdGV4dCBpZiBub24tY29tcGxpYW5jZS1HU0kgcHJvZHVjdHMgc2V0IHRoaXMgb3B0aW9uLgogaWZkZWYgUFJPRFVDVF9JTlNUQUxMX0RFQlVHX1BPTElDWV9UT19TWVNURU1fRVhUCi0gIGlmZXEgKCwkKGZpbHRlciBnc2lfYXJtIGdzaV9hcm02NCBnc2lfYXJtNjRfc29vbmdfc3lzdGVtIGdzaV94ODYgZ3NpX3g4Nl82NCBcCi0gICAgICAgICAgICAgICAgICBnc2lfeDg2XzY0X3Nvb25nX3N5c3RlbSBnc2lfY2FyX2FybTY0IGdzaV9jYXJfeDg2XzY0IFwKLSAgICAgICAgICAgICAgICAgIGdzaV90dl9hcm0gZ3NpX3R2X2FybTY0LCQoUFJPRFVDVF9OQU1FKSkpCisgIGlmZXEgKCwkKGZpbHRlciBnc2lfYXJtIGdzaV9hcm02NCBnc2lfeDg2IGdzaV94ODZfNjQgZ3NpX2Nhcl9hcm02NCBnc2lfY2FyX3g4Nl82NCBnc2lfdHZfYXJtIGdzaV90dl9hcm02NCwkKFBST0RVQ1RfTkFNRSkpKQogICAgICQod2FybmluZyBQUk9EVUNUX0lOU1RBTExfREVCVUdfUE9MSUNZX1RPX1NZU1RFTV9FWFQgaXMgc2V0IGJ1dCBcCiAgICAgICBQUk9EVUNUX05BTUUgKCQoUFJPRFVDVF9OQU1FKSkgZG9lc24ndCBsb29rIGxpa2UgYSBHU0kgZm9yIGNvbXBsaWFuY2UgXAogICAgICAgdGVzdGluZy4gVGhpcyBpcyBhIHNwZWNpYWwgY29uZmlndXJhdGlvbiBmb3IgY29tcGxpYW5jZSBHU0ksIHNvIGRvIG1ha2UgXApkaWZmIC0tZ2l0IGEvY29yZS9wcm9ndWFyZC5mbGFncyBiL2NvcmUvcHJvZ3VhcmQuZmxhZ3MKaW5kZXggNTE0OGU1Ni4uZGMzMmUxNSAxMDA2NDQKLS0tIGEvY29yZS9wcm9ndWFyZC5mbGFncworKysgYi9jb3JlL3Byb2d1YXJkLmZsYWdzCkBAIC0xLDE0ICsxLDMgQEAKLSMgV2UgaGF2ZSBtb3ZlZCAtZG9udG9iZnVzY2F0ZSBhbmQgLWRvbnRvcHRpbWl6ZSB0byB0aGUgbWFrZWZpbGVzLgotIyBkZXggZG9lcyBub3QgbGlrZSBjb2RlIHJ1biB0aHJvdWdoIHByb2d1YXJkIG9wdGltaXplIGFuZCBwcmV2ZXJpZnkgc3RlcHMuCi0jIC1kb250b3B0aW1pemUKLS1kb250cHJldmVyaWZ5Ci0KLSMgRG9uJ3Qgb2JmdXNjYXRlLiBXZSBvbmx5IG5lZWQgZGVhZCBjb2RlIHN0cmlwaW5nLgotIyAtZG9udG9iZnVzY2F0ZQotCi0jIEFkZCB0aGlzIGZsYWcgaW4geW91ciBwYWNrYWdlJ3Mgb3duIGNvbmZpZ3VyYXRpb24gaWYgaXQncyBuZWVkZWQuCi0jLWZsYXR0ZW5wYWNrYWdlaGllcmFyY2h5Ci0KICMgS2VlcCBjbGFzc2VzIGFuZCBtZW1iZXJzIHdpdGggdGhlIHBsYXRmb3JtLWRlZmluZWQgQFZpc2libGVGb3JUZXN0aW5nIGFubm90YXRpb24uCiAta2VlcCBAY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuVmlzaWJsZUZvclRlc3RpbmcgY2xhc3MgKgogLWtlZXBjbGFzc21lbWJlcnMgY2xhc3MgKiB7CmRpZmYgLS1naXQgYS9jb3JlL3Byb2d1YXJkX2Jhc2ljX2tlZXBzLmZsYWdzIGIvY29yZS9wcm9ndWFyZF9iYXNpY19rZWVwcy5mbGFncwppbmRleCBmNmIzNGI4Li5hOTQxNmQ1IDEwMDY0NAotLS0gYS9jb3JlL3Byb2d1YXJkX2Jhc2ljX2tlZXBzLmZsYWdzCisrKyBiL2NvcmUvcHJvZ3VhcmRfYmFzaWNfa2VlcHMuZmxhZ3MKQEAgLTEsNyArMSwzIEBACi0jIFNvbWUgY2xhc3NlcyBpbiB0aGUgbGlicmFyaWVzIGV4dGVuZCBwYWNrYWdlIHByaXZhdGUgY2xhc3NlcyB0byBjaGFyZSBjb21tb24gZnVuY3Rpb25hbGl0eQotIyB0aGF0IGlzbid0IGV4cGxpY2l0bHkgcGFydCBvZiB0aGUgQVBJCi0tZG9udHNraXBub25wdWJsaWNsaWJyYXJ5Y2xhc3NlcyAtZG9udHNraXBub25wdWJsaWNsaWJyYXJ5Y2xhc3NtZW1iZXJzCi0KICMgUHJlc2VydmUgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZyBzdGFjayB0cmFjZXMuCiAta2VlcGF0dHJpYnV0ZXMgU291cmNlRmlsZSxMaW5lTnVtYmVyVGFibGUKIApkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19jb25maWcubWsgYi9jb3JlL3Nvb25nX2NvbmZpZy5tawppbmRleCA3Mzk5MDVkLi5hZGZkYjljIDEwMDY0NAotLS0gYS9jb3JlL3Nvb25nX2NvbmZpZy5taworKysgYi9jb3JlL3Nvb25nX2NvbmZpZy5tawpAQCAtNDQxLDYgKzQ0MSw3IEBACiAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkUHJlYnVpbHRCb290aW1hZ2UsICQoQk9BUkRfUFJFQlVJTFRfQk9PVF9JTUFHRSkpCiAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkUHJlYnVpbHRJbml0Qm9vdGltYWdlLCAkKEJPQVJEX1BSRUJVSUxUX0lOSVRfQk9PVF9JTUFHRSkpCiAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQm9vdGltYWdlUGFydGl0aW9uU2l6ZSwgJChCT0FSRF9CT09USU1BR0VfUEFSVElUSU9OX1NJWkUpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZFZlbmRvckJvb3RpbWFnZVBhcnRpdGlvblNpemUsICQoQk9BUkRfVkVORE9SX0JPT1RJTUFHRV9QQVJUSVRJT05fU0laRSkpCiAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkSW5pdEJvb3RpbWFnZVBhcnRpdGlvblNpemUsICQoQk9BUkRfSU5JVF9CT09UX0lNQUdFX1BBUlRJVElPTl9TSVpFKSkKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRCb290SGVhZGVyVmVyc2lvbiwgJChCT0FSRF9CT09UX0hFQURFUl9WRVJTSU9OKSkKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgVGFyZ2V0S2VybmVsUGF0aCwgJChUQVJHRVRfS0VSTkVMX1BBVEgpKQpAQCAtNTQ2LDYgKzU0Nyw4IEBACiAgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgYnJpZ2h0bmVzc19kaW1tZWRfcGVyY2VudCwgJChUQVJHRVRfUkVDT1ZFUllfVUlfQlJJR0hUTkVTU19ESU1NRUQpKQogICAkKGNhbGwgZW5kX2pzb25fbWFwKQogCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByZWJ1aWx0Qm9vdGxvYWRlciwgJChCT0FSRF9QUkVCVUlMVF9CT09UTE9BREVSKSkKKwogJChjYWxsIGVuZF9qc29uX21hcCkKIAogIyBGb3IgY29udmVydGluZyB2aW50Zl9kYXRhCmRpZmYgLS1naXQgYS9jb3JlL3N5c3Byb3AubWsgYi9jb3JlL3N5c3Byb3AubWsKaW5kZXggZTRmOTk0Zi4uOWE5ZjUwOSAxMDA2NDQKLS0tIGEvY29yZS9zeXNwcm9wLm1rCisrKyBiL2NvcmUvc3lzcHJvcC5tawpAQCAtMTIzLDcgKzEyMyw3IEBACiAJJChoaWRlKSAkJChjYWxsIGdlbmVyYXRlLWNvbW1vbi1idWlsZC1wcm9wcywkKGNhbGwgdG8tbG93ZXIsJChzdHJpcCAkKDEpKSksJCRAKQogZW5kaWYKICAgICAgICAgIyBNYWtlIGFuZCBTb29uZyB1c2UgZGlmZmVyZW50IGludGVybWVkaWF0ZSBmaWxlcyB0byBidWlsZCB2ZW5kb3IvYnVpbGQucHJvcC4KLSAgICAgICAgIyBBbHRob3VnaCB0aGUgc3lzcHJvcCBjb250ZW50cyBhcmUgc2FtZSwgdGhlIGFic29sdXRlIHBhdGhzIG9mIGFuZHJvaWRfaW5mby5wcm9wIGFyZSBkaWZmZXJlbnQuCisgICAgICAgICMgQWx0aG91Z2ggdGhlIHN5c3Byb3AgY29udGVudHMgYXJlIHNhbWUsIHRoZSBhYnNvbHV0ZSBwYXRocyBvZiBhbmRyb2lkLWluZm8ucHJvcCBhcmUgZGlmZmVyZW50LgogICAgICAgICAjIFByaW50IHRoZSBmaWxlbmFtZSBmb3IgdGhlIGludGVybWVkaWF0ZSBmaWxlcyAoZmlsZXMgaW4gT1VUX0RJUikuCiAgICAgICAgICMgVGhpcyBoZWxwcyB3aXRoIHZhbGlkYXRpbmcgbWstPnNvb25nIG1pZ3JhdGlvbiBvZiBhbmRyb2lkIHBhcnRpdGlvbnMuCiAJJChoaWRlKSAkKGZvcmVhY2ggZmlsZSwkKHN0cmlwICQoMykpLFwKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICQoVEFSR0VUX1ZFTkRPUl9QUk9QKSxcCiAgICAgJCh3aWxkY2FyZCAkKFRBUkdFVF9ERVZJQ0VfRElSKS92ZW5kb3IucHJvcCkpCiAKLWFuZHJvaWRfaW5mb19wcm9wIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsRVRDLGFuZHJvaWRfaW5mb19wcm9wKS9hbmRyb2lkX2luZm8ucHJvcAorYW5kcm9pZF9pbmZvX3Byb3AgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixFVEMsYW5kcm9pZF9pbmZvX3Byb3ApL2FuZHJvaWQtaW5mby5wcm9wCiAkKGFuZHJvaWRfaW5mb19wcm9wKTogJChJTlNUQUxMRURfQU5EUk9JRF9JTkZPX1RYVF9UQVJHRVQpCiAJY2F0ICQ8IHwgZ3JlcCAncmVxdWlyZSB2ZXJzaW9uLScgfCBzZWQgLWUgJ3MvcmVxdWlyZSB2ZXJzaW9uLS9yby5idWlsZC5leHBlY3QuL2cnID4gJEAKIApkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLm1rIGIvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDA1MTQwLi4wMDAwMDAwCi0tLSBhL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGlicy5taworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS5QSE9OWTogZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGlicwotCi1pbnRlcm1lZGlhdGVzX2RpciA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxnZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzKQotCi1nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCA6PSAkKFBST0RVQ1RfT1VUKS9nZW5lcmFsLXRlc3RzX2hvc3Qtc2hhcmVkLWxpYnMuemlwCi0KLSMgRmlsdGVyIHNoYXJlZCBlbnRyaWVzIGJldHdlZW4gZ2VuZXJhbC10ZXN0cyBhbmQgZGV2aWNlLXRlc3RzJ3MgSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUywKLSMgdG8gYXZvaWQgd2FybmluZyBhYm91dCBvdmVycmlkaW5nIGNvbW1hbmRzLgotbXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9IFwKLSAgJChmb3JlYWNoIG0sJChmaWx0ZXIgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCi0JICAgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpLCQoY2FsbCB3b3JkLWNvbG9uLDIsJChtKSkpCi1teV9nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJfZmlsZXMgOj0gXAotICAkKGZpbHRlci1vdXQgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCi0JICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpKQotCi1teV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgKz0gJChjYWxsIGNvcHktbWFueS1maWxlcywkKG15X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcykpCi0KLSQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApIDogUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUiA6PSAkKGludGVybWVkaWF0ZXNfZGlyKQotJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkgOiBQUklWQVRFX0hPU1RfU0hBUkVEX0xJQlMgOj0gJChteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMpCi0kKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSA6IFBSSVZBVEVfZ2VuZXJhbF9ob3N0X3NoYXJlZF9saWJzX3ppcCA6PSAkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKQotJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkgOiAkKG15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cykgJChTT09OR19aSVApCi0Jcm0gLXJmICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikKLQlta2RpciAtcCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdG9vbHMKLQkkKGhpZGUpIGZvciBzaGFyZWRfbGliIGluICQoUFJJVkFURV9IT1NUX1NIQVJFRF9MSUJTKTsgZG8gXAotCSAgZWNobyAkJHNoYXJlZF9saWIgPj4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9zaGFyZWQtbGlicy5saXN0OyBcCi0JZG9uZQotCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvc2hhcmVkLWxpYnMubGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC1zaGFyZWQtbGlicy5saXN0IHx8IHRydWUKLQkkKFNPT05HX1pJUCkgLWQgLW8gJChQUklWQVRFX2dlbmVyYWxfaG9zdF9zaGFyZWRfbGlic196aXApIFwKLQkgIC1QIGhvc3QgLUMgJChIT1NUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXNoYXJlZC1saWJzLmxpc3QKLQotZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGliczogJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkKLSQoY2FsbCBkaXN0LWZvci1nb2FscywgZ2VuZXJhbC10ZXN0cy1zaGFyZWQtbGlicywgJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkpCi0KLSQoY2FsbCBkZWNsYXJlLTFwLWNvbnRhaW5lciwkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSwpCi0kKGNhbGwgZGVjbGFyZS1jb250YWluZXItbGljZW5zZS1kZXBzLCQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApLCQobXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzKSwkKFBST0RVQ1RfT1VUKS86LykKLQotaW50ZXJtZWRpYXRlc19kaXIgOj0KLWdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwIDo9CmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsgYi9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsKaW5kZXggMTkwMWVkNS4uZGNmY2ZhZCAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rCisrKyBiL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tawpAQCAtMjcsMTkgKzI3LDYxIEBACiAjIENyZWF0ZSBhbiBhcnRpZmFjdCB0byBpbmNsdWRlIGFsbCB0ZXN0IGNvbmZpZyBmaWxlcyBpbiBnZW5lcmFsLXRlc3RzLgogZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCA6PSAkKFBST0RVQ1RfT1VUKS9nZW5lcmFsLXRlc3RzX2NvbmZpZ3MuemlwCiAKLWdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfaG9zdC1zaGFyZWQtbGlicy56aXAKKyMgRmlsdGVyIHNoYXJlZCBlbnRyaWVzIGJldHdlZW4gZ2VuZXJhbC10ZXN0cyBhbmQgZGV2aWNlLXRlc3RzJ3MgSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUywKKyMgdG8gYXZvaWQgd2FybmluZyBhYm91dCBvdmVycmlkaW5nIGNvbW1hbmRzLgorbXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9IFwKKyAgJChmb3JlYWNoIG0sJChmaWx0ZXIgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCisJICAgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpLCQoY2FsbCB3b3JkLWNvbG9uLDIsJChtKSkpCitteV9nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJfZmlsZXMgOj0gXAorICAkKGZpbHRlci1vdXQgJChDT01QQVRJQklMSVRZLmRldmljZS10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSxcCisJICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpKQogCi0kKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApCitteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgKz0gJChjYWxsIGNvcHktbWFueS1maWxlcywkKG15X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcykpCisKK215X2hvc3Rfc2hhcmVkX2xpYl9zeW1saW5rcyA6PSBcCisgICAgJChmaWx0ZXIgJChDT01QQVRJQklMSVRZLmhvc3QtdW5pdC10ZXN0cy5TWU1MSU5LUyksXAorCSQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLlNZTUxJTktTKSkKKworbXlfZ2VuZXJhbF90ZXN0c19zeW1saW5rcyA6PSBcCisgICAgJChmaWx0ZXItb3V0ICQoQ09NUEFUSUJJTElUWS5jYW1lcmEtaGFsLXRlc3RzLlNZTUxJTktTKSxcCisgICAgJChmaWx0ZXItb3V0ICQoQ09NUEFUSUJJTElUWS5ob3N0LXVuaXQtdGVzdHMuU1lNTElOS1MpLFwKKwkgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuU1lNTElOS1MpKSkKKworbXlfc3ltbGlua3NfZm9yX2dlbmVyYWxfdGVzdHMgOj0gJChmb3JlYWNoIGYsJChteV9nZW5lcmFsX3Rlc3RzX3N5bWxpbmtzKSxcCisJJChzdHJpcCAkKGV2YWwgX2NtZl90dXBsZSA6PSAkKHN1YnN0IDosICwkKGYpKSkgXAorCSQoZXZhbCBfY21mX2RlcCA6PSAkKHdvcmQgMSwkKF9jbWZfdHVwbGUpKSkgXAorCSQoZXZhbCBfY21mX3NyYyA6PSAkKHdvcmQgMiwkKF9jbWZfdHVwbGUpKSkgXAorCSQoZXZhbCBfY21mX2Rlc3QgOj0gJCh3b3JkIDMsJChfY21mX3R1cGxlKSkpIFwKKwkkKGNhbGwgc3ltbGluay1maWxlLCQoX2NtZl9kZXApLCQoX2NtZl9zcmMpLCQoX2NtZl9kZXN0KSkgXAorCSQoX2NtZl9kZXN0KSkpCisKKyMgSW4gdGhpcyBvbmUgZGlyZWN0bHkgdGFrZSB0aGUgb3ZlcmxhcCBpbnRvIHRoZSB6aXAgc2luY2Ugd2UgY2FuJ3QgcmV3cml0ZSBydWxlcworbXlfc3ltbGlua3NfZm9yX2dlbmVyYWxfdGVzdHMgKz0gJChmb3JlYWNoIGYsJChteV9ob3N0X3NoYXJlZF9saWJfc3ltbGlua3MpLFwKKyAgICAgICAgJChzdHJpcCAkKGV2YWwgX2NtZl90dXBsZSA6PSAkKHN1YnN0IDosICwkKGYpKSkgXAorICAgICAgICAkKGV2YWwgX2NtZl9kZXAgOj0gJCh3b3JkIDEsJChfY21mX3R1cGxlKSkpIFwKKyAgICAgICAgJChldmFsIF9jbWZfc3JjIDo9ICQod29yZCAyLCQoX2NtZl90dXBsZSkpKSBcCisgICAgICAgICQoZXZhbCBfY21mX2Rlc3QgOj0gJCh3b3JkIDMsJChfY21mX3R1cGxlKSkpIFwKKyAgICAgICAgJChfY21mX2Rlc3QpKSkKKwogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX2dlbmVyYWxfdGVzdHNfbGlzdF96aXAgOj0gJChnZW5lcmFsX3Rlc3RzX2xpc3RfemlwKQogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiAuS0FUSV9JTVBMSUNJVF9PVVRQVVRTIDo9ICQoZ2VuZXJhbF90ZXN0c19saXN0X3ppcCkgJChnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwKQogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX1RPT0xTIDo9ICQoZ2VuZXJhbF90ZXN0c190b29scykKICQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUiA6PSAkKGludGVybWVkaWF0ZXNfZGlyKQorJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX0hPU1RfU0hBUkVEX0xJQlMgOj0gJChteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMpCiskKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfU1lNTElOS1MgOj0gJChteV9zeW1saW5rc19mb3JfZ2VuZXJhbF90ZXN0cykKICQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9ICQoZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCkKLSQoZ2VuZXJhbF90ZXN0c196aXApIDogJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuRklMRVMpICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLlNPT05HX0lOU1RBTExFRF9DT01QQVRJQklMSVRZX1NVUFBPUlRfRklMRVMpICQoZ2VuZXJhbF90ZXN0c190b29scykgJChTT09OR19aSVApCiskKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkZJTEVTKSAkKG15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cykgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuU09PTkdfSU5TVEFMTEVEX0NPTVBBVElCSUxJVFlfU1VQUE9SVF9GSUxFUykgJChnZW5lcmFsX3Rlc3RzX3Rvb2xzKSAkKG15X3N5bWxpbmtzX2Zvcl9nZW5lcmFsX3Rlc3RzKSAkKFNPT05HX1pJUCkKIAlybSAtcmYgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKQogCXJtIC1mICRAICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3RfemlwKQogCW1rZGlyIC1wICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90b29scwogCWVjaG8gJChzb3J0ICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkZJTEVTKSAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TT09OR19JTlNUQUxMRURfQ09NUEFUSUJJTElUWV9TVVBQT1JUX0ZJTEVTKSkgfCB0ciAiICIgIlxuIiA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdAorCWZvciBzeW1saW5rIGluICQoUFJJVkFURV9TWU1MSU5LUyk7IGRvIFwKKwkgIGVjaG8gJCRzeW1saW5rID4+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdDsgXAorCWRvbmUKKwkkKGhpZGUpIGZvciBzaGFyZWRfbGliIGluICQoUFJJVkFURV9IT1NUX1NIQVJFRF9MSUJTKTsgZG8gXAorCSAgZWNobyAkJHNoYXJlZF9saWIgPj4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9zaGFyZWQtbGlicy5saXN0OyBcCisJZG9uZQorCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvc2hhcmVkLWxpYnMubGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC1zaGFyZWQtbGlicy5saXN0IHx8IHRydWUKIAlncmVwICQoSE9TVF9PVVRfVEVTVENBU0VTKSAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2xpc3QgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QubGlzdCB8fCB0cnVlCiAJZ3JlcCAkKFRBUkdFVF9PVVRfVEVTVENBU0VTKSAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2xpc3QgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3RhcmdldC5saXN0IHx8IHRydWUKIAlncmVwIC1lIC4qXFwuY29uZmlnJCQgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0Lmxpc3QgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QtdGVzdC1jb25maWdzLmxpc3QgfHwgdHJ1ZQpAQCAtNDksNiArOTEsNyBAQAogCSAgLVAgaG9zdCAtQyAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpIC1EICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdG9vbHMgXAogCSAgLVAgaG9zdCAtQyAkKEhPU1RfT1VUKSAtbCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QubGlzdCBcCiAJICAtUCB0YXJnZXQgLUMgJChQUk9EVUNUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90YXJnZXQubGlzdCBcCisJICAtUCBob3N0IC1DICQoSE9TVF9PVVQpIC1sICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC1zaGFyZWQtbGlicy5saXN0IFwKIAkgIC1zaGEyNTYKIAkkKFNPT05HX1pJUCkgLWQgLW8gJChQUklWQVRFX2dlbmVyYWxfdGVzdHNfY29uZmlnc196aXApIFwKIAkgIC1QIGhvc3QgLUMgJChIT1NUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXRlc3QtY29uZmlncy5saXN0IFwKQEAgLTY5LDMgKzExMiw4IEBACiBnZW5lcmFsX3Rlc3RzX2xpc3RfemlwIDo9CiBnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9CiBnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCA6PQorbXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9CitteV9zeW1saW5rc19mb3JfZ2VuZXJhbF90ZXN0cyA6PQorbXlfZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGliX2ZpbGVzIDo9CitteV9nZW5lcmFsX3Rlc3RzX3N5bWxpbmtzIDo9CitteV9ob3N0X3NoYXJlZF9saWJfc3ltbGlua3MgOj0KZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsgYi9jb3JlL3Rhc2tzL21vZHVsZS1pbmZvLm1rCmluZGV4IDBjYTI3ZDguLmRkMDFmOTYgMTAwNjQ0Ci0tLSBhL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsKKysrIGIvY29yZS90YXNrcy9tb2R1bGUtaW5mby5tawpAQCAtNTAsNiArNTAsOCBAQAogCQkJJChjYWxsIHdyaXRlLW9wdGlvbmFsLWpzb24tbGlzdCwgImhvc3RfZGVwZW5kZW5jaWVzIiwgJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5IT1NUX1JFUVVJUkVEX0ZST01fVEFSR0VUKSkpIFwKIAkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWxpc3QsICJ0YXJnZXRfZGVwZW5kZW5jaWVzIiwgJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5UQVJHRVRfUkVRVUlSRURfRlJPTV9IT1NUKSkpIFwKIAkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJ0ZXN0X21vZHVsZV9jb25maWdfYmFzZSIsICQoQUxMX01PRFVMRVMuJChtKS5URVNUX01PRFVMRV9DT05GSUdfQkFTRSkpIFwKKwkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJtYWtlIiwgJChpZiAkKEFMTF9NT0RVTEVTLiQobSkuSVNfU09PTkdfTU9EVUxFKSwsdHJ1ZSkpIFwKKwkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJtYWtlX2dlbmVyYXRlZF9tb2R1bGVfaW5mbyIsIHRydWUpIFwKIAkJJ30nKSdcbn1cbicgPj4gJEAudG1wCiAJJChQUklWQVRFX01FUkdFX0pTT05fT0JKRUNUUykgLW8gJEAgJChQUklWQVRFX1NPT05HX01PRFVMRV9JTkZPKSAkQC50bXAKIAlybSAkQC50bXAKZGlmZiAtLWdpdCBhL3BhY2thZ2luZy9kaXN0ZGlyLm1rIGIvcGFja2FnaW5nL2Rpc3RkaXIubWsKaW5kZXggMTUzZWNmNi4uOTdlZDk1YSAxMDA2NDQKLS0tIGEvcGFja2FnaW5nL2Rpc3RkaXIubWsKKysrIGIvcGFja2FnaW5nL2Rpc3RkaXIubWsKQEAgLTQ1LDUgKzQ1LDMgQEAKIGVuZGlmCiAKIGNvcHktb25lLWRpc3QtZmlsZSA6PQotRElTVF9HT0FMX09VVFBVVF9QQUlSUyA6PQotRElTVF9TUkNfRFNUX1BBSVJTIDo9CmRpZmYgLS1naXQgYS9wYWNrYWdpbmcvbWFpbl9zb29uZ19vbmx5Lm1rIGIvcGFja2FnaW5nL21haW5fc29vbmdfb25seS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjllNWY2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnaW5nL21haW5fc29vbmdfb25seS5tawpAQCAtMCwwICsxLDYwIEBACisjIENvcHlyaWdodCAoQykgMjAyNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpZm5kZWYgS0FUSQorJChlcnJvciBPbmx5IEthdGkgaXMgc3VwcG9ydGVkLikKK2VuZGlmCisKKyQoaW5mbyBbMS80XSBpbml0aWFsaXppbmcgcGFja2FnaW5nIHN5c3RlbSAuLi4pCisKKy5LQVRJX1JFQURPTkxZIDo9IEtBVElfUEFDS0FHRV9NS19ESVIKKworaW5jbHVkZSBidWlsZC9tYWtlL2NvbW1vbi9jb3JlLm1rCitpbmNsdWRlIGJ1aWxkL21ha2UvY29tbW9uL3N0cmluZ3MubWsKKworIyBEZWZpbmUgd2VsbC1rbm93biBnb2FscyBhbmQgdGhlaXIgZGVwZW5kZW5jeSBncmFwaCB0aGF0IHRoZXkndmUKKyMgdHJhZGl0aW9uYWxseSBoYWQgaW4gbWFrZSBidWlsZHMuIEFsc28gaXQncyBpbXBvcnRhbnQgdG8gZGVmaW5lCisjIGRyb2lkIGZpcnN0IHNvIHRoYXQgaXQncyBidWlsdCBieSBkZWZhdWx0LgorCisuUEhPTlk6IGRyb2lkCitkcm9pZDogZHJvaWRfdGFyZ2V0cworCisuUEhPTlk6IGRyb2lkX3RhcmdldHMKK2Ryb2lkX3RhcmdldHM6IGRyb2lkY29yZSBkaXN0X2ZpbGVzCisKKy5QSE9OWTogZGlzdF9maWxlcworZGlzdF9maWxlczoKKworLlBIT05ZOiBkcm9pZGNvcmUKK2Ryb2lkY29yZTogZHJvaWRjb3JlLXVuYnVuZGxlZAorCisuUEhPTlk6IGRyb2lkY29yZS11bmJ1bmRsZWQKK2Ryb2lkY29yZS11bmJ1bmRsZWQ6CisKKyQoaW5mbyBbMi80XSBpbmNsdWRpbmcgZGlzdGRpci5tayAuLi4pCisKK2luY2x1ZGUgYnVpbGQvbWFrZS9wYWNrYWdpbmcvZGlzdGRpci5taworCiskKGluZm8gWzMvNF0gZGVmaW5pbmcgcGhvbnkgbW9kdWxlcyAuLi4pCisKK2luY2x1ZGUgJChPVVRfRElSKS9zb29uZy9zb29uZ19waG9ueV90YXJnZXRzLm1rCisKK2dvYWxzIDo9ICQoc29ydCAkKGZvcmVhY2ggcGFpciwkKERJU1RfR09BTF9PVVRQVVRfUEFJUlMpLCQoY2FsbCB3b3JkLWNvbG9uLDEsJChwYWlyKSkpKQorJChmb3JlYWNoIGdvYWwsJChnb2FscyksIFwKKyAgJChldmFsIC5QSE9OWTogJCQoZ29hbCkpIFwKKyAgJChldmFsICQkKGdvYWwpOikgXAorICAkKGlmICQoY2FsbCBzdHJlcSwkKERJU1QpLHRydWUpLFwKKyAgICAkKGV2YWwgJCQoZ29hbCk6IF9kaXN0XyQkKGdvYWwpKSkpCisKKyQoaW5mbyBbNC80XSB3cml0aW5nIHBhY2thZ2luZyBydWxlcyAuLi4pCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tayBiL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rCmluZGV4IGIzYjU4ZDMuLjkwZDQ1YTggMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rCkBAIC01Miw3ICs1Miw3IEBACiAgICAgY29tLmFuZHJvaWQuYWRiZCBcCiAgICAgY29tLmFuZHJvaWQuYWRzZXJ2aWNlcyBcCiAgICAgY29tLmFuZHJvaWQuYXBwc2VhcmNoIFwKLSAgICBjb20uYW5kcm9pZC5idHNlcnZpY2VzIFwKKyAgICBjb20uYW5kcm9pZC5idCBcCiAgICAgY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUgXAogICAgIGNvbS5hbmRyb2lkLmNvbnNjcnlwdCBcCiAgICAgY29tLmFuZHJvaWQuZGV2aWNlbG9jayBcCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsgYi90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsKaW5kZXggZDg1N2UwNC4uZTU0M2NjZiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZGVmYXVsdF9hcnRfY29uZmlnLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5tawpAQCAtNjUsNyArNjUsNyBAQAogICAgIGNvbS5hbmRyb2lkLmFkc2VydmljZXM6ZnJhbWV3b3JrLWFkc2VydmljZXMgXAogICAgIGNvbS5hbmRyb2lkLmFkc2VydmljZXM6ZnJhbWV3b3JrLXNka3NhbmRib3ggXAogICAgIGNvbS5hbmRyb2lkLmFwcHNlYXJjaDpmcmFtZXdvcmstYXBwc2VhcmNoIFwKLSAgICBjb20uYW5kcm9pZC5idHNlcnZpY2VzOmZyYW1ld29yay1ibHVldG9vdGggXAorICAgIGNvbS5hbmRyb2lkLmJ0OmZyYW1ld29yay1ibHVldG9vdGggXAogICAgIGNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlOmZyYW1ld29yay1jb25maWdpbmZyYXN0cnVjdHVyZSBcCiAgICAgY29tLmFuZHJvaWQuY29uc2NyeXB0OmNvbnNjcnlwdCBcCiAgICAgY29tLmFuZHJvaWQuZGV2aWNlbG9jazpmcmFtZXdvcmstZGV2aWNlbG9jayBcCkBAIC0xNzEsNyArMTcxLDcgQEAKICMgS2VlcCB0aGUgbGlzdCBzb3J0ZWQgYnkgbW9kdWxlIG5hbWVzIGFuZCB0aGVuIGxpYnJhcnkgbmFtZXMuCiAjIE5vdGU6IEZvciBtb2R1bGVzIGF2YWlsYWJsZSBpbiBRLCBETyBOT1QgYWRkIG5ldyBlbnRyaWVzIGhlcmUuCiBQUk9EVUNUX0FQRVhfU1RBTkRBTE9ORV9TWVNURU1fU0VSVkVSX0pBUlMgOj0gXAotICAgIGNvbS5hbmRyb2lkLmJ0c2VydmljZXM6c2VydmljZS1ibHVldG9vdGggXAorICAgIGNvbS5hbmRyb2lkLmJ0OnNlcnZpY2UtYmx1ZXRvb3RoIFwKICAgICBjb20uYW5kcm9pZC5kZXZpY2Vsb2NrOnNlcnZpY2UtZGV2aWNlbG9jayBcCiAgICAgY29tLmFuZHJvaWQub3Muc3RhdHNkOnNlcnZpY2Utc3RhdHNkIFwKICAgICBjb20uYW5kcm9pZC5zY2hlZHVsaW5nOnNlcnZpY2Utc2NoZWR1bGluZyBcCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljL0FuZHJvaWQuYnAgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljL0FuZHJvaWQuYnAKaW5kZXggNzQwN2Q3Zi4uMzE0ODE2ZCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwCisrKyBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icApAQCAtNjQyLDYgKzY0Miw3IEBACiAgICAgICAgIGRlZmF1bHQ6IFtdLAogICAgIH0pICsgc2VsZWN0KHByb2R1Y3RfdmFyaWFibGUoImRlYnVnZ2FibGUiKSwgewogICAgICAgICB0cnVlOiBbCisgICAgICAgICAgICAiYWxsb2N0b3AiLAogICAgICAgICAgICAgImFkZXZpY2VfZmluZ2VycHJpbnQiLAogICAgICAgICAgICAgImFycGluZyIsCiAgICAgICAgICAgICAiYXZiY3RsIiwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaV9yZWxlYXNlLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKaW5kZXggMTE1YjM1NS4uYzI4OGFkMCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKQEAgLTI3LDYgKzI3LDcgQEAKICMKIAogQlVJTERJTkdfR1NJIDo9IHRydWUKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ3NpLGJ1aWxkaW5nX2dzaSx0cnVlKQogCiBQUk9EVUNUX0FSVElGQUNUX1BBVEhfUkVRVUlSRU1FTlRfQUxMT1dFRF9MSVNUICs9IFwKICAgICBzeXN0ZW0vZXRjL2luaXQvY29uZmlnIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvVEVTVF9NQVBQSU5HIGIvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcKaW5kZXggYTdmMGE0Zi4uNmU1MzAxOCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcKKysrIGIvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcKQEAgLTEwNiwxMCArMTA2LDYgQEAKICAgICB7CiAgICAgICAvLyBhY29uZmlnX3N0b3JhZ2UgcmVhZCBmdW5jdGlvbmFsIHRlc3QKICAgICAgICJuYW1lIjogImFjb25maWdfc3RvcmFnZV9yZWFkX2Z1bmN0aW9uYWwiCi0gICAgfSwKLSAgICB7Ci0gICAgICAvLyBhY29uZmlnX3N0b3JhZ2UgcmVhZCB1bml0IHRlc3QKLSAgICAgICJuYW1lIjogImFjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQiCiAgICAgfQogICBdCiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwCmluZGV4IDVlM2ViMTIuLmNjZTBjYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwCkBAIC0yNDMsNiArMjQzLDExIEBACiAgICAgY3JhdGVfbmFtZTogImFjb25maWdfdGVzdF9ydXN0X2xpYnJhcnkiLAogICAgIGFjb25maWdfZGVjbGFyYXRpb25zOiAiYWNvbmZpZy50ZXN0LmZsYWdzIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgICAgICJjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZSIsCisgICAgXSwKKyAgICBtaW5fc2RrX3ZlcnNpb246ICIzNCIsCiB9CiAKIHJ1c3RfdGVzdCB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vamF2YS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCmluZGV4IDgxMzQwZjIuLmY0MWE2Y2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzCkBAIC01NDcsNyArNTQ3LDcgQEAKICAgICAgICAgaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAgICAgICAgIC8qKiBAaGlkZSAqLwogICAgICAgICBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyB7Ci0gICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5GZWF0dXJlRmxhZ3NJbXBsIjsKKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmVhdHVyZUZsYWdzSW1wbCI7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGlzQ2FjaGVkID0gZmFsc2U7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpc2FibGVkUncgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkID0gZmFsc2U7CkBAIC01NTUsMTQgKzU1NSwxNCBAQAogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlbmFibGVkUncgPSB0cnVlOwogICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJzeXN0ZW0iLCAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IiwgMHg1MDgxQ0U3MjIxQzc3MDY0TCk7CisgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IiwgMHg1MDgxQ0U3MjIxQzc3MDY0TCk7CiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUncgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgwKTsKICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMSk7CiAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDcpOwogICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDIpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChOb0NsYXNzRGVmRm91bmRFcnJvciBlKSB7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoTGlua2FnZUVycm9yIGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG1haW5saW5lIG1vZHVsZSBydW5uaW5nIG9uIG9sZGVyIGRldmljZXMuCiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VzIHRvIHZlcnNpb24gY2hlY2ssIGFmdGVyIHRoZSB2ZXJzaW9uIGJ1bXAuCiAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKQEAgLTkyOSw3ICs5MjksNyBAQAogICAgICAgICBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKICAgICAgICAgLyoqIEBoaWRlICovCiAgICAgICAgIHB1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIHsKLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LkZlYXR1cmVGbGFnc0ltcGxfZXhwb3J0ZWQiOworICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJGZWF0dXJlRmxhZ3NJbXBsRXhwb3J0IjsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gaXNDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkID0gZmFsc2U7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQgPSBmYWxzZTsKQEAgLTk0Myw3ICs5NDMsNyBAQAogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHBhc3MKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vQ2xhc3NEZWZGb3VuZEVycm9yIGUpIHsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChMaW5rYWdlRXJyb3IgZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbWFpbmxpbmUgbW9kdWxlIHJ1bm5pbmcgb24gb2xkZXIgZGV2aWNlcy4KICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZXMgdG8gdmVyc2lvbiBjaGVjaywgYWZ0ZXIgdGhlIHZlcnNpb24gYnVtcC4KICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3NJbXBsLmphdmEudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQppbmRleCA4YjNkM2UxLi43NTBhNmJlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQpAQCAtMTYsNyArMTYsNyBAQAogLyoqIEBoaWRlICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewoge3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJ7cGFja2FnZV9uYW1lfS5GZWF0dXJlRmxhZ3NJbXBsIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkZlYXR1cmVGbGFnc0ltcGwiOwogICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gaXNDYWNoZWQgPSBmYWxzZTsKIHt7IGZvciBmbGFnIGluIGZsYWdfZWxlbWVudHMgfX0KIHt7IC1pZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KQEAgLTI3LDkgKzI3LDkgQEAKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIFx7CiAgICAgICAgIHRyeSBcewoge3sgaWYgaXNfcGxhdGZvcm1fY29udGFpbmVyIH19Ci0gICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcmVhZGVyID0gUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoIntjb250YWluZXJ9IiwgIntwYWNrYWdlX25hbWV9Iiwge3BhY2thZ2VfZmluZ2VycHJpbnR9KTsKKyAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgie3BhY2thZ2VfbmFtZX0iLCB7cGFja2FnZV9maW5nZXJwcmludH0pOwoge3sgLWVsc2UgfX0KLSAgICAgICAgICAgIEFjb25maWdQYWNrYWdlSW50ZXJuYWwgcmVhZGVyID0gQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJ7Y29udGFpbmVyfSIsICJ7cGFja2FnZV9uYW1lfSIsIHtwYWNrYWdlX2ZpbmdlcnByaW50fSk7CisgICAgICAgICAgICBBY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IEFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgie3BhY2thZ2VfbmFtZX0iLCB7cGFja2FnZV9maW5nZXJwcmludH0pOwoge3sgLWVuZGlmIH19CiAgICAgICAgIHt7IC1mb3IgbmFtZXNwYWNlX3dpdGhfZmxhZ3MgaW4gbmFtZXNwYWNlX2ZsYWdzIH19CiAgICAgICAgIHt7IC1mb3IgZmxhZyBpbiBuYW1lc3BhY2Vfd2l0aF9mbGFncy5mbGFncyB9fQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICB7eyAtZW5kZm9yIH19CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSBcewogICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwotICAgICAgICB9IGNhdGNoIChOb0NsYXNzRGVmRm91bmRFcnJvciBlKSBceworICAgICAgICB9IGNhdGNoIChMaW5rYWdlRXJyb3IgZSkgXHsKICAgICAgICAgICAgIC8vIGZvciBtYWlubGluZSBtb2R1bGUgcnVubmluZyBvbiBvbGRlciBkZXZpY2VzLgogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZXMgdG8gdmVyc2lvbiBjaGVjaywgYWZ0ZXIgdGhlIHZlcnNpb24gYnVtcC4KICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKQEAgLTcwLDEwICs3MCwxMCBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAvKiogQGhpZGUgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIFx7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJ7cGFja2FnZV9uYW1lfS5GZWF0dXJlRmxhZ3NJbXBsX2V4cG9ydGVkIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkZlYXR1cmVGbGFnc0ltcGxFeHBvcnQiOwogICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gaXNDYWNoZWQgPSBmYWxzZTsKIHt7IGZvciBmbGFnIGluIGZsYWdfZWxlbWVudHMgfX0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSA9IHtmbGFnLmRlZmF1bHRfdmFsdWV9OworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9ID0gZmFsc2U7CiB7eyAtZW5kZm9yIH19CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSBcewogICAgICAgICB0cnkgXHsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIFx7CiAgICAgICAgICAgICAvLyBwYXNzCiAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0gY2F0Y2ggKE5vQ2xhc3NEZWZGb3VuZEVycm9yIGUpIFx7CisgICAgICAgIH0gY2F0Y2ggKExpbmthZ2VFcnJvciBlKSBcewogICAgICAgICAgICAgLy8gZm9yIG1haW5saW5lIG1vZHVsZSBydW5uaW5nIG9uIG9sZGVyIGRldmljZXMuCiAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSByZXBsYWNlcyB0byB2ZXJzaW9uIGNoZWNrLCBhZnRlciB0aGUgdmVyc2lvbiBidW1wLgogICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZQppbmRleCAzMjVkYmRjLi5kYzRlNDM1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZQpAQCAtMzAsMTUgKzMwLDE4IEBACiAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gb3ZlcnJpZGVzXzsKIAogICAgIHt7IGlmIGFsbG93X2luc3RydW1lbnRhdGlvbi0gfX0KKyAgICB7eyBpZiByZWFkd3JpdGUtIH19CiAgICAgICAgIHVpbnQzMl90IGJvb2xlYW5fc3RhcnRfaW5kZXhfOwogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxhY29uZmlnX3N0b3JhZ2U6Ok1hcHBlZFN0b3JhZ2VGaWxlPiBmbGFnX3ZhbHVlX2ZpbGVfOwogCiAgICAgICAgIGJvb2wgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV87CiAgICAge3sgLWVuZGlmIH19CisgICAge3sgLWVuZGlmIH19CiAKICAgICBwdWJsaWM6CiAgICAge3sgaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uLSB9fQorICAgIHt7IGlmIHJlYWR3cml0ZS0gfX0KICAgICAgICAgZmxhZ19wcm92aWRlcigpCiAgICAgICAgICAgICA6IG92ZXJyaWRlc18oKQogICAgICAgICAgICAgLCBib29sZWFuX3N0YXJ0X2luZGV4XygpCkBAIC05NCw4ICs5NywxMyBAQAogICAgICAgICAgICAgOiBvdmVycmlkZXNfKCkKICAgICAgICAgXHt9CiAgICAge3sgLWVuZGlmIH19CisgICAge3sgLWVsc2UgfX0KKyAgICAgICAgZmxhZ19wcm92aWRlcigpCisgICAgICAgICAgICA6IG92ZXJyaWRlc18oKQorICAgICAgICBce30KKyAgICB7eyAtZW5kaWYgfX0KIAote3sgZm9yIGl0ZW0gaW4gY2xhc3NfZWxlbWVudHMgfX0KKyAgICB7eyBmb3IgaXRlbSBpbiBjbGFzc19lbGVtZW50cyB9fQogICAgICAgICB2aXJ0dWFsIGJvb2wge2l0ZW0uZmxhZ19uYW1lfSgpIG92ZXJyaWRlIFx7CiAgICAgICAgICAgICBhdXRvIGl0ID0gb3ZlcnJpZGVzXy5maW5kKCJ7aXRlbS5mbGFnX25hbWV9Iik7CiAgICAgICAgICAgICBpZiAoaXQgIT0gb3ZlcnJpZGVzXy5lbmQoKSkgXHsKQEAgLTEzMiw3ICsxNDAsNyBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQge2l0ZW0uZmxhZ19uYW1lfShib29sIHZhbCkgb3ZlcnJpZGUgXHsKICAgICAgICAgICAgIG92ZXJyaWRlc19bIntpdGVtLmZsYWdfbmFtZX0iXSA9IHZhbDsKICAgICAgICAgfQote3sgZW5kZm9yIH19CisgICAge3sgZW5kZm9yIH19CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0X2ZsYWdzKCkgb3ZlcnJpZGUgXHsKICAgICAgICAgICAgIG92ZXJyaWRlc18uY2xlYXIoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvQW5kcm9pZC5icAppbmRleCBiZGY5NmVkLi4zNTMxNDUwIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9BbmRyb2lkLmJwCkBAIC0yNiw3ICsyNiw2IEBACiAgICAgICAgICJsaWJhY29uZmlnX3Byb3RvcyIsCiAgICAgICAgICJsaWJhbnlob3ciLAogICAgICAgICAibGlicHJvdG9idWYiLAotICAgICAgICAibGlicmVnZXgiLAogICAgIF0sCiB9CiAKQEAgLTM1LDYgKzM0LDExIEBACiAgICAgY3JhdGVfbmFtZTogImFjb25maWdfZGV2aWNlX3BhdGhzIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKICAgICBkZWZhdWx0czogWyJsaWJhY29uZmlnX2RldmljZV9wYXRocy5kZWZhdWx0cyJdLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogZ2VucnVsZSB7CkBAIC01NCw3ICs1OCw5IEBACiAgICAgc2RrX3ZlcnNpb246ICJjb3JlX3BsYXRmb3JtIiwKICAgICBhcGV4X2F2YWlsYWJsZTogWwogICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgICAgICJjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZSIsCiAgICAgXSwKKyAgICBtaW5fc2RrX3ZlcnNpb246ICIzNCIsCiB9CiAKIGdlbnJ1bGUgewpAQCAtNzMsMyArNzksMjMgQEAKICAgICBuYW1lOiAiYWNvbmZpZ19ob3N0X2RldmljZV9wYXRoc19qYXZhIiwKICAgICBzcmNzOiBbIjpsaWJhY29uZmlnX2phdmFfaG9zdF9kZXZpY2VfcGF0aHNfc3JjIl0sCiB9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJqYXZhX2RldmljZV9wYXRoc190ZXN0X3V0aWxfc3JjIiwKKyAgICBzcmNzOiBbInNyYy9EZXZpY2VQcm90b3NUZXN0VXRpbFRlbXBsYXRlLmphdmEiXSwKKyAgICBvdXQ6IFsiRGV2aWNlUHJvdG9zVGVzdFV0aWwuamF2YSJdLAorICAgIHRvb2xfZmlsZXM6IFsicGFydGl0aW9uX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0Il0sCisgICAgY21kOiAic2VkIC1lICcvVEVNUExBVEUve3IkKGxvY2F0aW9uIHBhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCknIC1lICdkfScgJChpbikgPiAkKG91dCkiLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJhY29uZmlnX2RldmljZV9wYXRoc19qYXZhX3V0aWwiLAorICAgIHNyY3M6IFsiOmphdmFfZGV2aWNlX3BhdGhzX3Rlc3RfdXRpbF9zcmMiXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAibGliYWNvbmZpZ19qYXZhX3Byb3RvX25hbm8iLAorICAgIF0sCisgICAgc2RrX3ZlcnNpb246ICJjb3JlX3BsYXRmb3JtIiwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvbWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL21haW5saW5lX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0CmluZGV4IGFmNzNhODQuLmFhZDJiMjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvbWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9tYWlubGluZV9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dApAQCAtMSw3ICsxLDcgQEAKICIvYXBleC9jb20uYW5kcm9pZC5hZHNlcnZpY2VzL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKICIvYXBleC9jb20uYW5kcm9pZC5hcHBzZWFyY2gvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAogIi9hcGV4L2NvbS5hbmRyb2lkLmFydC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCi0iL2FwZXgvY29tLmFuZHJvaWQuYnRzZXJ2aWNlcy9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuYnQvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAogIi9hcGV4L2NvbS5hbmRyb2lkLmNlbGxicm9hZGNhc3QvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAogIi9hcGV4L2NvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKICIvYXBleC9jb20uYW5kcm9pZC5jb25zY3J5cHQvZXRjL2Fjb25maWdfZmxhZ3MucGIiLApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvRGV2aWNlUHJvdG9zVGVzdFV0aWxUZW1wbGF0ZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvRGV2aWNlUHJvdG9zVGVzdFV0aWxUZW1wbGF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDY3NjYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9EZXZpY2VQcm90b3NUZXN0VXRpbFRlbXBsYXRlLmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZzsKKworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWcucGFyc2VkX2ZsYWc7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZ3M7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKiBAaGlkZSAqLworcHVibGljIGNsYXNzIERldmljZVByb3Rvc1Rlc3RVdGlsIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFBBVEhTID0geworICAgICAgICBURU1QTEFURQorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBFWF9ESVIgPSAiL2FwZXgvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBFWF9BQ09ORklHX1BBVEhfU1VGRklYID0gIi9ldGMvYWNvbmZpZ19mbGFncy5wYiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNZU1RFTV9BUEVYX0RJUiA9ICIvc3lzdGVtL2FwZXgiOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIG9uLWRldmljZSBhY29uZmlnIHByb3Rvcy4KKyAgICAgKgorICAgICAqIDxwPk1heSB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3RvcyBjYW4ndCBiZSByZWFkIGF0IHRoZSBjYWxsIHNpdGUuIEZvciBleGFtcGxlLCBzb21lIG9mCisgICAgICogdGhlIHByb3RvcyBhcmUgaW4gdGhlIGFwZXgvIHBhcnRpdGlvbiwgd2hpY2ggaXMgbW91bnRlZCBzb21ld2hhdCBsYXRlIGluIHRoZSBib290IHByb2Nlc3MuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIHdlIGNhbid0IHJlYWQgb25lIG9mIHRoZSBwcm90b3MgeWV0CisgICAgICogQHJldHVybiBhIGxpc3Qgb2YgYWxsIG9uLWRldmljZSBhY29uZmlnIHByb3RvcworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxwYXJzZWRfZmxhZz4gbG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEFycmF5TGlzdDxwYXJzZWRfZmxhZz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOworCisgICAgICAgIGZvciAoU3RyaW5nIHBhdGggOiBwYXJzZWRGbGFnc1Byb3RvUGF0aHMoKSkgeworICAgICAgICAgICAgdHJ5IChGaWxlSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHBhdGgpKSB7CisgICAgICAgICAgICAgICAgcGFyc2VkX2ZsYWdzIHBhcnNlZEZsYWdzID0gcGFyc2VkX2ZsYWdzLnBhcnNlRnJvbShpbnB1dFN0cmVhbS5yZWFkQWxsQnl0ZXMoKSk7CisgICAgICAgICAgICAgICAgZm9yIChwYXJzZWRfZmxhZyBmbGFnIDogcGFyc2VkRmxhZ3MucGFyc2VkRmxhZykgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGZsYWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGwgb24tZGV2aWNlIGFjb25maWcgcHJvdG9zIHBhdGhzLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBwYXJzZWRGbGFnc1Byb3RvUGF0aHMoKSB7CisgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IHBhdGhzID0gbmV3IEFycmF5TGlzdChBcnJheXMuYXNMaXN0KFBBVEhTKSk7CisKKyAgICAgICAgRmlsZSBhcGV4RGlyZWN0b3J5ID0gbmV3IEZpbGUoU1lTVEVNX0FQRVhfRElSKTsKKyAgICAgICAgaWYgKCFhcGV4RGlyZWN0b3J5LmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgfQorCisgICAgICAgIEZpbGVbXSBzdWJkaXJzID0gYXBleERpcmVjdG9yeS5saXN0RmlsZXMoKTsKKyAgICAgICAgaWYgKHN1YmRpcnMgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChGaWxlIHByZWZpeCA6IHN1YmRpcnMpIHsKKyAgICAgICAgICAgIFN0cmluZyBhcGV4TmFtZSA9IHByZWZpeC5nZXROYW1lKCkucmVwbGFjZSgiY29tLmdvb2dsZSIsICJjb20iKTsKKyAgICAgICAgICAgIGFwZXhOYW1lID0gYXBleE5hbWUuc3Vic3RyaW5nKDAsIGFwZXhOYW1lLmxhc3RJbmRleE9mKCcuJykpOworCisgICAgICAgICAgICBGaWxlIHByb3RvUGF0aCA9IG5ldyBGaWxlKEFQRVhfRElSICsgYXBleE5hbWUgKyBBUEVYX0FDT05GSUdfUEFUSF9TVUZGSVgpOworICAgICAgICAgICAgaWYgKCFwcm90b1BhdGguZXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGF0aHMuYWRkKHByb3RvUGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhdGhzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNTYxZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMzUgQEAKKy8vIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X3RlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAorICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJBbmRyb2lkLUFwYWNoZS0yLjAiXSwKK30KKworYW5kcm9pZF90ZXN0IHsKKyAgICBuYW1lOiAiYWNvbmZpZ19kZXZpY2VfcGF0aHNfamF2YV90ZXN0IiwKKyAgICBzcmNzOiBbCisgICAgICAgICJzcmMvKiovKi5qYXZhIiwKKyAgICBdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJhbmRyb2lkeC50ZXN0LnJ1bm5lciIsCisgICAgICAgICJqdW5pdCIsCisgICAgICAgICJhY29uZmlnX2RldmljZV9wYXRoc19qYXZhX3V0aWwiLAorICAgIF0sCisgICAgdGVzdF9zdWl0ZXM6IFsKKyAgICAgICAgImdlbmVyYWwtdGVzdHMiLAorICAgIF0sCisgICAgcGxhdGZvcm1fYXBpczogdHJ1ZSwKKyAgICBjZXJ0aWZpY2F0ZTogInBsYXRmb3JtIiwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwMTg3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgIH4gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAgfgorICB+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorCis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHBhY2thZ2U9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiPgorICAgIDxhcHBsaWNhdGlvbj4KKyAgICAgICAgPHVzZXMtbGlicmFyeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQudGVzdC5ydW5uZXIiIC8+CisgICAgPC9hcHBsaWNhdGlvbj4KKworICAgIDxpbnN0cnVtZW50YXRpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiCisgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRhcmdldFBhY2thZ2U9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CisKKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3Qvc3JjL0RldmljZVByb3Rvc1Rlc3RVdGlsVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L3NyYy9EZXZpY2VQcm90b3NUZXN0VXRpbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQwZmQwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L3NyYy9EZXZpY2VQcm90b3NUZXN0VXRpbFRlc3QuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFjb25maWcudGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuRGV2aWNlUHJvdG9zVGVzdFV0aWw7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVycy5KVW5pdDQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitAUnVuV2l0aChKVW5pdDQuY2xhc3MpCitwdWJsaWMgY2xhc3MgRGV2aWNlUHJvdG9zVGVzdFV0aWxUZXN0IHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IFBMQVRGT1JNX0NPTlRBSU5FUlMgPSBTZXQub2YoInN5c3RlbSIsICJ2ZW5kb3IiLCAicHJvZHVjdCIpOworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGV2aWNlUHJvdG9zX2xvYWRBbmRQYXJzZUZsYWdQcm90b3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3NUZXN0VXRpbC5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CisgICAgICAgIGludCBwbGF0Zm9ybUZsYWdzID0gMDsKKyAgICAgICAgaW50IG1haW5saW5lRmxhZ3MgPSAwOworICAgICAgICBmb3IgKHBhcnNlZF9mbGFnIHBmIDogZmxhZ3MpIHsKKyAgICAgICAgICAgIGlmIChQTEFURk9STV9DT05UQUlORVJTLmNvbnRhaW5zKHBmLmNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybUZsYWdzKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1haW5saW5lRmxhZ3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydFRydWUocGxhdGZvcm1GbGFncyA+IDMpOworICAgICAgICBhc3NlcnRUcnVlKG1haW5saW5lRmxhZ3MgPiAzKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9BbmRyb2lkLmJwCmluZGV4IDRjMWZkNGUuLjFiNGUxNDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9BbmRyb2lkLmJwCkBAIC0yNCw2ICsyNCwxMSBAQAogICAgICAgICAibGliYWNvbmZpZ19mbGFnc19ydXN0IiwKICAgICBdLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogYWNvbmZpZ19kZWNsYXJhdGlvbnMgewpAQCAtMzgsNiArNDMsMTEgQEAKICAgICBjcmF0ZV9uYW1lOiAiYWNvbmZpZ19mbGFnc19ydXN0IiwKICAgICBhY29uZmlnX2RlY2xhcmF0aW9uczogImFjb25maWdfZmxhZ3MiLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogY2NfYWNvbmZpZ19saWJyYXJ5IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcKaW5kZXggOTZiYjgxYS4uMjQ4OGI1YyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcKQEAgLTMwLDQgKzMwLDE0IEBACiAgIG1ldGFkYXRhIHsKICAgICBwdXJwb3NlOiBQVVJQT1NFX0JVR0ZJWAogICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQorCitmbGFnIHsKKyAgbmFtZTogImludm9rZV91cGRhdGFibGVfYWZsYWdzIgorICBuYW1lc3BhY2U6ICJjb3JlX2V4cGVyaW1lbnRzX3RlYW1faW50ZXJuYWwiCisgIGJ1ZzogIjM4NTM4Mzg5OSIKKyAgZGVzY3JpcHRpb246ICJXaGVuIGVuYWJsZWQsIHRoZSBzeXN0ZW0gYWZsYWdzIGJpbmFyeSBpbnZva2VzIHRoZSB1cGRhdGFibGUgYWZsYWdzLiIKKyAgbWV0YWRhdGEgeworICAgIHB1cnBvc2U6IFBVUlBPU0VfQlVHRklYCisgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9zcmMvbGliLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL3NyYy9saWIucnMKaW5kZXggMmU4OTEyNy4uZGM1MDdhZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL3NyYy9saWIucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL3NyYy9saWIucnMKQEAgLTM5LDYgKzM5LDExIEBACiAgICAgcHViIGZuIGVuYWJsZV9hY29uZmlnZF9mcm9tX21haW5saW5lKCkgLT4gYm9vbCB7CiAgICAgICAgIGFjb25maWdfZmxhZ3NfcnVzdDo6ZW5hYmxlX29ubHlfbmV3X3N0b3JhZ2UoKQogICAgIH0KKworICAgIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGludm9rZV91cGRhdGFibGVfYWZsYWdzIGZsYWcuCisgICAgcHViIGZuIGludm9rZV91cGRhdGFibGVfYWZsYWdzKCkgLT4gYm9vbCB7CisgICAgICAgIGFjb25maWdfZmxhZ3NfcnVzdDo6aW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MoKQorICAgIH0KIH0KIAogLy8vIE1vZHVsZSB1c2VkIHdoZW4gYnVpbGRpbmcgd2l0aCBjYXJnbwpAQCAtNTUsNCArNjAsMTAgQEAKICAgICAgICAgLy8gVXNlZCBvbmx5IHRvIGVuYWJsZSB0eXBlY2hlY2tpbmcgYW5kIHRlc3Rpbmcgd2l0aCBjYXJnbwogICAgICAgICB0cnVlCiAgICAgfQorCisgICAgLy8vIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MgZmxhZy4KKyAgICBwdWIgZm4gaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MoKSAtPiBib29sIHsKKyAgICAgICAgLy8gVXNlZCBvbmx5IHRvIGVuYWJsZSB0eXBlY2hlY2tpbmcgYW5kIHRlc3Rpbmcgd2l0aCBjYXJnbworICAgICAgICB0cnVlCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3Byb3Rvcy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3Byb3Rvcy9BbmRyb2lkLmJwCmluZGV4IGQyNDE5OTQuLjYyYTJiNjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19wcm90b3MvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfcHJvdG9zL0FuZHJvaWQuYnAKQEAgLTU4LDYgKzU4LDExIEBACiAgICAgY3JhdGVfbmFtZTogImFjb25maWdfcnVzdF9wcm90byIsCiAgICAgc291cmNlX3N0ZW06ICJhY29uZmlnX3J1c3RfcHJvdG8iLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogcnVzdF9kZWZhdWx0cyB7CkBAIC04MSw2ICs4NiwxMSBAQAogICAgIGNyYXRlX25hbWU6ICJhY29uZmlnX3Byb3RvcyIsCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCiAgICAgZGVmYXVsdHM6IFsiYWNvbmZpZ19wcm90b3MuZGVmYXVsdHMiXSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgICAgICJjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZSIsCisgICAgXSwKKyAgICBtaW5fc2RrX3ZlcnNpb246ICIzNCIsCiB9CiAKIHJ1c3RfdGVzdF9ob3N0IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9UYWJsZVV0aWxzLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvVGFibGVVdGlscy5qYXZhCmluZGV4IDgxMTY4ZjUuLmQ0MjY5ZGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9UYWJsZVV0aWxzLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1RhYmxlVXRpbHMuamF2YQpAQCAtNjMsNCArNjMsMTYgQEAKICAgICAgICAgbG9uZyBoYXNoVmFsID0gU2lwSGFzaGVyMTMuaGFzaCh2YWwpOwogICAgICAgICByZXR1cm4gKGludCkgTG9uZy5yZW1haW5kZXJVbnNpZ25lZChoYXNoVmFsLCBudW1CdWNrZXRzKTsKICAgICB9CisKKyAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdG9yYWdlRmlsZXNCdW5kbGUgeworICAgICAgICBwdWJsaWMgZmluYWwgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZTsKKyAgICAgICAgcHVibGljIGZpbmFsIEZsYWdUYWJsZSBmbGFnVGFibGU7CisgICAgICAgIHB1YmxpYyBmaW5hbCBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3Q7CisKKyAgICAgICAgcHVibGljIFN0b3JhZ2VGaWxlc0J1bmRsZSAoUGFja2FnZVRhYmxlIHBUYWJsZSwgRmxhZ1RhYmxlIGZUYWJsZSwgRmxhZ1ZhbHVlTGlzdCBmVmFsdWVMaXN0KSB7CisgICAgICAgICAgICB0aGlzLnBhY2thZ2VUYWJsZSA9IHBUYWJsZTsKKyAgICAgICAgICAgIHRoaXMuZmxhZ1RhYmxlID0gZlRhYmxlOworICAgICAgICAgICAgdGhpcy5mbGFnVmFsdWVMaXN0ID0gZlZhbHVlTGlzdDsKKyAgICAgICAgfQorICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2UuamF2YQppbmRleCA1ZmJlNTY3Li5kZGFkMjQ5IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZS5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlLmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLm9zLmZsYWdnaW5nOwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlRhYmxlVXRpbHMuU3RvcmFnZUZpbGVzQnVuZGxlOworCiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3Q7CkBAIC00OSw4ICs1MSw2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUF9QQVRIID0gIi9tZXRhZGF0YS9hY29uZmlnL21hcHMvIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9PVF9QQVRIID0gIi9tZXRhZGF0YS9hY29uZmlnL2Jvb3QvIjsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIFBhY2thZ2VUYWJsZT4gc1BhY2thZ2VUYWJsZUNhY2hlID0gbmV3IEhhc2hNYXA8PigpOwotCiAgICAgcHJpdmF0ZSBGbGFnVGFibGUgbUZsYWdUYWJsZTsKICAgICBwcml2YXRlIEZsYWdWYWx1ZUxpc3QgbUZsYWdWYWx1ZUxpc3Q7CiAKQEAgLTYwLDYgKzYwLDkgQEAKICAgICBwcml2YXRlIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2UoKSB7fQogCiAgICAgLyoqIEBoaWRlICovCisgICAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIFN0b3JhZ2VGaWxlc0J1bmRsZT4gc1N0b3JhZ2VGaWxlc0NhY2hlID0gbmV3IEhhc2hNYXA8PigpOworCisgICAgLyoqIEBoaWRlICovCiAgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IFBMQVRGT1JNX1BBQ0tBR0VfTUFQX0ZJTEVTID0KICAgICAgICAgICAgIFNldC5vZigic3lzdGVtLnBhY2thZ2UubWFwIiwgInZlbmRvci5wYWNrYWdlLm1hcCIsICJwcm9kdWN0LnBhY2thZ2UubWFwIik7CkBAIC02OCw4ICs3MSwxNCBAQAogICAgICAgICBmb3IgKFN0cmluZyBwZiA6IFBMQVRGT1JNX1BBQ0tBR0VfTUFQX0ZJTEVTKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZSBwVGFibGUgPSBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKG1hcFN0b3JhZ2VGaWxlKE1BUF9QQVRIICsgcGYpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyID0gcFRhYmxlLmdldEhlYWRlcigpLmdldENvbnRhaW5lcigpOworICAgICAgICAgICAgICAgIEZsYWdUYWJsZSBmVGFibGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ1RhYmxlLmZyb21CeXRlcyhtYXBTdG9yYWdlRmlsZShNQVBfUEFUSCArIGNvbnRhaW5lciArICIuZmxhZy5tYXAiKSk7CisgICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmVmFsdWVMaXN0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKG1hcFN0b3JhZ2VGaWxlKEJPT1RfUEFUSCArIGNvbnRhaW5lciArICIudmFsIikpOworICAgICAgICAgICAgICAgIFN0b3JhZ2VGaWxlc0J1bmRsZSBmaWxlcyA9IG5ldyBTdG9yYWdlRmlsZXNCdW5kbGUocFRhYmxlLCBmVGFibGUsIGZWYWx1ZUxpc3QpOwogICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBhY2thZ2VOYW1lIDogcFRhYmxlLmdldFBhY2thZ2VMaXN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc1BhY2thZ2VUYWJsZUNhY2hlLnB1dChwYWNrYWdlTmFtZSwgcFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgc1N0b3JhZ2VGaWxlc0NhY2hlLnB1dChwYWNrYWdlTmFtZSwgZmlsZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgLy8gcGFzcwpAQCAtOTUsMTYgKzEwNCwxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZSBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZSBhY29uZmlnUGFja2FnZSA9IG5ldyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlKCk7Ci0gICAgICAgICAgICBQYWNrYWdlVGFibGUgcFRhYmxlID0gc1BhY2thZ2VUYWJsZUNhY2hlLmdldChwYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICBpZiAocFRhYmxlID09IG51bGwpIHsKKyAgICAgICAgICAgIFN0b3JhZ2VGaWxlc0J1bmRsZSBmaWxlcyA9IHNTdG9yYWdlRmlsZXNDYWNoZS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgaWYgKGZpbGVzID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gcFRhYmxlLmdldChwYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyID0gcFRhYmxlLmdldEhlYWRlcigpLmdldENvbnRhaW5lcigpOwotICAgICAgICAgICAgYWNvbmZpZ1BhY2thZ2UubUZsYWdUYWJsZSA9Ci0gICAgICAgICAgICAgICAgICAgIEZsYWdUYWJsZS5mcm9tQnl0ZXMobWFwU3RvcmFnZUZpbGUoTUFQX1BBVEggKyBjb250YWluZXIgKyAiLmZsYWcubWFwIikpOwotICAgICAgICAgICAgYWNvbmZpZ1BhY2thZ2UubUZsYWdWYWx1ZUxpc3QgPQotICAgICAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhtYXBTdG9yYWdlRmlsZShCT09UX1BBVEggKyBjb250YWluZXIgKyAiLnZhbCIpKTsKKyAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gZmlsZXMucGFja2FnZVRhYmxlLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBhY29uZmlnUGFja2FnZS5tRmxhZ1RhYmxlID0gZmlsZXMuZmxhZ1RhYmxlOworICAgICAgICAgICAgYWNvbmZpZ1BhY2thZ2UubUZsYWdWYWx1ZUxpc3QgPSBmaWxlcy5mbGFnVmFsdWVMaXN0OwogICAgICAgICAgICAgYWNvbmZpZ1BhY2thZ2UubVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQgPSBwTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpOwogICAgICAgICAgICAgYWNvbmZpZ1BhY2thZ2UubVBhY2thZ2VJZCA9IHBOb2RlLmdldFBhY2thZ2VJZCgpOwogICAgICAgICAgICAgcmV0dXJuIGFjb25maWdQYWNrYWdlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCmluZGV4IDg1NGU2OGIuLmRhMThmYjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKQEAgLTE2LDEyICsxNiwxMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuVGFibGVVdGlscy5TdG9yYWdlRmlsZXNCdW5kbGU7CisKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0OwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKLWltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyOwogaW1wb3J0IGFuZHJvaWQuY29tcGF0LmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKLWltcG9ydCBhbmRyb2lkLm9zLlN0cmljdE1vZGU7CiAKIC8qKgogICogQW4ge0Bjb2RlIGFjb25maWd9IHBhY2thZ2UgY29udGFpbmluZyB0aGUgZW5hYmxlZCBzdGF0ZSBvZiBpdHMgZmxhZ3MuCkBAIC01NSw3ICs1NSw2IEBACiAgICAgICogPHA+VGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtYXkgYmUgY2hhbmdlZCBvciByZW1vdmVkIHdpdGhvdXQKICAgICAgKiBub3RpY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gY29udGFpbmVyIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIuCiAgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBBY29uZmlnIHBhY2thZ2UuCiAgICAgICogQHBhcmFtIHBhY2thZ2VGaW5nZXJwcmludCBUaGUgZXhwZWN0ZWQgZmluZ2VycHJpbnQgb2YgdGhlIHBhY2thZ2UuCiAgICAgICogQHJldHVybiBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsfSByZXByZXNlbnRpbmcgdGhlIGxvYWRlZApAQCAtNjMsNTEgKzYyLDIwIEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQotICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoCi0gICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7Ci0gICAgICAgIHJldHVybiBsb2FkKAotICAgICAgICAgICAgICAgIGNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICBwYWNrYWdlRmluZ2VycHJpbnQsCi0gICAgICAgICAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlci5nZXREZWZhdWx0UHJvdmlkZXIoKSk7Ci0gICAgfQotCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZCgKLSAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIsCi0gICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUsCi0gICAgICAgICAgICBsb25nIHBhY2thZ2VGaW5nZXJwcmludCwKLSAgICAgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZmlsZVByb3ZpZGVyKSB7Ci0gICAgICAgIFN0cmljdE1vZGUuVGhyZWFkUG9saWN5IG9sZFBvbGljeSA9IFN0cmljdE1vZGUuYWxsb3dUaHJlYWREaXNrUmVhZHMoKTsKLSAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBudWxsOwotICAgICAgICBGbGFnVmFsdWVMaXN0IHZMaXN0ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHBOb2RlID0gZmlsZVByb3ZpZGVyLmdldFBhY2thZ2VUYWJsZShjb250YWluZXIpLmdldChwYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICB2TGlzdCA9IGZpbGVQcm92aWRlci5nZXRGbGFnVmFsdWVMaXN0KGNvbnRhaW5lcik7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBTdHJpY3RNb2RlLnNldFRocmVhZFBvbGljeShvbGRQb2xpY3kpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBOb2RlID09IG51bGwgfHwgdkxpc3QgPT0gbnVsbCkgeworICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBsb25nIHBhY2thZ2VGaW5nZXJwcmludCkgeworICAgICAgICBTdG9yYWdlRmlsZXNCdW5kbGUgZmlsZXMgPSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlLnNTdG9yYWdlRmlsZXNDYWNoZS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICBpZiAoZmlsZXMgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9QQUNLQUdFX05PVF9GT1VORCwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBhY2thZ2VOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaW4gY29udGFpbmVyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBkZXZpY2UiKSk7CisgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICIgKyBwYWNrYWdlTmFtZSArICIgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBkZXZpY2UiKTsKICAgICAgICAgfQorICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IGZpbGVzLnBhY2thZ2VUYWJsZS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICBGbGFnVmFsdWVMaXN0IHZMaXN0ID0gZmlsZXMuZmxhZ1ZhbHVlTGlzdDsKIAogICAgICAgICBpZiAocE5vZGUuaGFzUGFja2FnZUZpbmdlcnByaW50KCkgJiYgcGFja2FnZUZpbmdlcnByaW50ICE9IHBOb2RlLmdldFBhY2thZ2VGaW5nZXJwcmludCgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0gsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwYWNrYWdlTmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluIGNvbnRhaW5lciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRhaW5lcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlIikpOworICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiZmluZ2VycHJpbnQgZG9lc24ndCBtYXRjaCB0aGUgb25lIG9uIGRldmljZSIpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwodkxpc3QsIHBOb2RlLmdldEJvb2xlYW5TdGFydEluZGV4KCkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQWNvbmZpZ1N0b3JhZ2VSZWFkVW5pdFRlc3QueG1sIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQWNvbmZpZ1N0b3JhZ2VSZWFkVW5pdFRlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI4ZGQ1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZFVuaXRUZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0gIH4gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAgfgotICB+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgfgotICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gIH4KLSAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gIC0tPgotPGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb249IlRlc3QgYWNvbmZpZyBzdG9yYWdlIGphdmEgdGVzdHMiPgotICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRhcmdldHByZXAuc3VpdGUuU3VpdGVBcGtJbnN0YWxsZXIiPgotICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAtYXBrcyIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0idGVzdC1maWxlLW5hbWUiIHZhbHVlPSJhY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0LmFwayIgLz4KLSAgICA8L3RhcmdldF9wcmVwYXJlcj4KLSAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC5jb21wYXRpYmlsaXR5LmNvbW1vbi50cmFkZWZlZC50YXJnZXRwcmVwLkZpbGVQdXNoZXIiPgotICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAiIHZhbHVlPSJ0cnVlIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJwYWNrYWdlX3YyLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvbW9ja3VwLnBhY2thZ2UubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvbW9ja3VwLmZsYWcubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLnZhbC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvbW9ja3VwLnZhbCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi5pbmZvLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS9tb2NrdXAuaW5mbyIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwb3N0LXB1c2giIHZhbHVlPSJjaG1vZCArciAvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS8iIC8+Ci0gICAgPC90YXJnZXRfcHJlcGFyZXI+Ci0gICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLkFuZHJvaWRKVW5pdFRlc3QiID4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwYWNrYWdlIiB2YWx1ZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJydW50aW1lLWhpbnQiIHZhbHVlPSIxbSIgLz4KLSAgICA8L3Rlc3Q+Ci08L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icAppbmRleCA3MDIzMjVkLi5jMDcxZjdjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgImZ1bmN0aW9uYWwvc3Jjcy8qKi8qLmphdmEiLAogICAgIF0sCiAgICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgImFjb25maWdfZGV2aWNlX3BhdGhzX2phdmEiLAorICAgICAgICAiYWNvbmZpZ19kZXZpY2VfcGF0aHNfamF2YV91dGlsIiwKICAgICAgICAgImFjb25maWdfc3RvcmFnZV9maWxlX2phdmEiLAogICAgICAgICAiYW5kcm9pZHgudGVzdC5ydWxlcyIsCiAgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfamF2YSIsCkBAIC03NSwyNSArNzUsMyBAQAogICAgIHRlc3RfY29uZmlnOiAiQWNvbmZpZ1N0b3JhZ2VSZWFkRnVuY3Rpb25hbFRlc3QueG1sIiwKICAgICB0ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9jb3JlX2V4cGVyaW1lbnRzIiwKIH0KLQotYW5kcm9pZF90ZXN0IHsKLSAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdCIsCi0gICAgdGVhbTogInRyZW5keV90ZWFtX2FuZHJvaWRfY29yZV9leHBlcmltZW50cyIsCi0gICAgc3JjczogWwotICAgICAgICAidW5pdC9zcmNzLyoqLyouamF2YSIsCi0gICAgXSwKLSAgICBzdGF0aWNfbGliczogWwotICAgICAgICAiYW5kcm9pZHgudGVzdC5ydW5uZXIiLAotICAgICAgICAianVuaXQiLAotICAgICAgICAiYWNvbmZpZ19zdG9yYWdlX3JlYWRlcl9qYXZhIiwKLSAgICBdLAotICAgIHNka192ZXJzaW9uOiAidGVzdF9jdXJyZW50IiwKLSAgICBkYXRhOiBbCi0gICAgICAgICI6cmVhZF9hcGlfdGVzdF9zdG9yYWdlX2ZpbGVzIiwKLSAgICBdLAotICAgIHRlc3Rfc3VpdGVzOiBbCi0gICAgICAgICJnZW5lcmFsLXRlc3RzIiwKLSAgICBdLAotICAgIHRlc3RfY29uZmlnOiAiQWNvbmZpZ1N0b3JhZ2VSZWFkVW5pdFRlc3QueG1sIiwKLSAgICBqYXJqYXJfcnVsZXM6ICJqYXJqYXIudHh0IiwKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9BY29uZmlnU3RvcmFnZVJlYWRBUElUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCmluZGV4IDI1NTcwNDguLjA1ODdlOWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9BY29uZmlnU3RvcmFnZVJlYWRBUElUZXN0LmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL0Fjb25maWdTdG9yYWdlUmVhZEFQSVRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCi1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3RvczsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuRGV2aWNlUHJvdG9zVGVzdFV0aWw7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZVJlYWRBUEk7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1JlYWRDb250ZXh0OwpAQCAtMjEwLDcgKzIxMCw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RSdXN0SmF2YUVxdWFsSGFzaCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3NUZXN0VXRpbC5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CiAgICAgICAgIGZvciAocGFyc2VkX2ZsYWcgZmxhZyA6IGZsYWdzKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBmbGFnLnBhY2thZ2VfOwogICAgICAgICAgICAgU3RyaW5nIGZsYWdOYW1lID0gZmxhZy5uYW1lOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEKaW5kZXggZTUzMmZmNi4uOTg5NmJhZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKIAotaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5EZXZpY2VQcm90b3M7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3Rvc1Rlc3RVdGlsOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWc7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGU7CkBAIC00Niw3ICs0Niw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxfbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3NUZXN0VXRpbC5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CiAgICAgICAgIE1hcDxTdHJpbmcsIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbD4gcmVhZGVyTWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIGZwID0gU3RvcmFnZUZpbGVQcm92aWRlci5nZXREZWZhdWx0UHJvdmlkZXIoKTsKIApAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcmVhZGVyID0gcmVhZGVyTWFwLmdldChwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICBpZiAocmVhZGVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZWFkZXIgPSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZChjb250YWluZXIsIHBhY2thZ2VOYW1lLCBmaW5nZXJwcmludCk7CisgICAgICAgICAgICAgICAgcmVhZGVyID0gUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQocGFja2FnZU5hbWUsIGZpbmdlcnByaW50KTsKICAgICAgICAgICAgICAgICByZWFkZXJNYXAucHV0KHBhY2thZ2VOYW1lLCByZWFkZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbGVhbiBqVmFsID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoZk5vZGUuZ2V0RmxhZ0luZGV4KCkpOwpAQCAtODMsMjQgKzgzLDE1IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQbGF0Zm9ybUFjb25maWdQYWNrYWdlX2xvYWRfd2l0aEVycm9yKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gY29udGFpbmVyIG5vdCBmb3VuZCBmYWtlX2NvbnRhaW5lcgorICAgICAgICAvLyBwYWNrYWdlIG5vdCBmb3VuZAogICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBlID0KICAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWtlX2NvbnRhaW5lciIsICJmYWtlX3BhY2thZ2UiLCAwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsIGUuZ2V0RXJyb3JDb2RlKCkpOwotCi0gICAgICAgIC8vIHBhY2thZ2Ugbm90IGZvdW5kCi0gICAgICAgIGUgPQotICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4gUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoInN5c3RlbSIsICJmYWtlX2NvbnRhaW5lciIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJmYWtlX3BhY2thZ2UiLCAwKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9QQUNLQUdFX05PVF9GT1VORCwgZS5nZXRFcnJvckNvZGUoKSk7CiAKICAgICAgICAgLy8gZmluZ2VycHJpbnQgZG9lc24ndCBtYXRjaAotICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvcy5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CisgICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zVGVzdFV0aWwubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOwogICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIGZwID0gU3RvcmFnZUZpbGVQcm92aWRlci5nZXREZWZhdWx0UHJvdmlkZXIoKTsKIAogICAgICAgICBwYXJzZWRfZmxhZyBmbGFnID0gZmxhZ3MuZ2V0KDApOwpAQCAtMTE5LDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsIHBhY2thZ2VOYW1lLCBmaW5nZXJwcmludCArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsIGZpbmdlcnByaW50ICsgMSkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0gsIGUuZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZVRlc3QuamF2YQppbmRleCBmYWJjMmM5Li4xYzZjMjM4IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZVRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZVRlc3QuamF2YQpAQCAtMTcsOSArMTcsMTAgQEAKIHBhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdDsKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CiAKLWltcG9ydCBhbmRyb2lkLmFjb25maWcuRGV2aWNlUHJvdG9zOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5EZXZpY2VQcm90b3NUZXN0VXRpbDsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcubmFuby5BY29uZmlnOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWcucGFyc2VkX2ZsYWc7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlOwpAQCAtNDQsOCArNDUsMjIgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBQTEFURk9STV9DT05UQUlORVJTID0gU2V0Lm9mKCJzeXN0ZW0iLCAidmVuZG9yIiwgInByb2R1Y3QiKTsKIAogICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VfU3RvcmFnZUZpbGVzQ2FjaGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvc1Rlc3RVdGlsLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgZm9yIChwYXJzZWRfZmxhZyBmbGFnIDogZmxhZ3MpIHsKKyAgICAgICAgICAgIGlmIChmbGFnLnBlcm1pc3Npb24gPT0gQWNvbmZpZy5SRUFEX09OTFkgJiYgZmxhZy5zdGF0ZSA9PSBBY29uZmlnLkRJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyID0gZmxhZy5jb250YWluZXI7CisgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBmbGFnLnBhY2thZ2VfOworICAgICAgICAgICAgaWYgKCFQTEFURk9STV9DT05UQUlORVJTLmNvbnRhaW5zKGNvbnRhaW5lcikpIGNvbnRpbnVlOworICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChQbGF0Zm9ybUFjb25maWdQYWNrYWdlLmxvYWQocGFja2FnZU5hbWUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VfbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3NUZXN0VXRpbC5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CiAgICAgICAgIE1hcDxTdHJpbmcsIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2U+IHJlYWRlck1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBmcCA9IFN0b3JhZ2VGaWxlUHJvdmlkZXIuZ2V0RGVmYXVsdFByb3ZpZGVyKCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phcmphci50eHQgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXJqYXIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTI1MGQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phcmphci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdTdG9yYWdlRXhjZXB0aW9uIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24KLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1RhYmxlCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlBhY2thZ2VUYWJsZQotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5CeXRlQnVmZmVyUmVhZGVyIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuQnl0ZUJ1ZmZlclJlYWRlcgotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVHlwZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdUeXBlCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlNpcEhhc2hlcjEzIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuU2lwSGFzaGVyMTMKLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmlsZVR5cGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GaWxlVHlwZQotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1ZhbHVlTGlzdAotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5UYWJsZVV0aWxzIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuVGFibGVVdGlscwotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnUGFja2FnZUltcGwgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5BY29uZmlnUGFja2FnZUltcGwKLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlciBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlN0b3JhZ2VGaWxlUHJvdmlkZXIKLQotCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZSQqIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1RhYmxlJEAxCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZSQqIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuUGFja2FnZVRhYmxlJEAxCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3QkKiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdWYWx1ZUxpc3RAMQotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TaXBIYXNoZXIxMyQqIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuU2lwSGFzaGVyMTNAMQotCi1ydWxlIGFuZHJvaWQub3MuZmxhZ2dpbmcuUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy91bml0L3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvdW5pdC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FjM2RlMi4uMDAwMDAwMAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy91bml0L3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhyb3dzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLWltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKLQotQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQotcHVibGljIGNsYXNzIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QgewotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVERBVEFfUEFUSCA9Ci0gICAgICAgICAgICAiL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvIjsKLQotICAgIHByaXZhdGUgU3RvcmFnZUZpbGVQcm92aWRlciBwcjsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKLSAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihURVNUREFUQV9QQVRILCBURVNUREFUQV9QQVRIKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkX2NvbnRhaW5lcl9wYWNrYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPSBwci5nZXRQYWNrYWdlVGFibGUoIm1vY2t1cCIpOwotCi0gICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwotCi0gICAgICAgIGxvbmcgZmluZ2VycHJpbnQgPSBub2RlMS5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKTsKLSAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHAgPQotICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAotICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgZmluZ2VycHJpbnQsIHByKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkX2NvbnRhaW5lcl9wYWNrYWdlX2Vycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPSBwci5nZXRQYWNrYWdlVGFibGUoIm1vY2t1cCIpOwotICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKLSAgICAgICAgbG9uZyBmaW5nZXJwcmludCA9IG5vZGUxLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOwotICAgICAgICAvLyBjYW5ub3QgZmluZCBwYWNrYWdlCi0gICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uIGUgPQotICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsIGUuZ2V0RXJyb3JDb2RlKCkpOwotCi0gICAgICAgIC8vIGNhbm5vdCBmaW5kIGNvbnRhaW5lcgotICAgICAgICBlID0KLSAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsIGUuZ2V0RXJyb3JDb2RlKCkpOwotCi0gICAgICAgIGUgPQotICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKLQotICAgICAgICAvLyBmaW5nZXJwcmludCBkb2Vzbid0IG1hdGNoCi0gICAgICAgIGUgPQotICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50ICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoCi0gICAgICAgICAgICAgICAgLy8gQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfRklMRV9GSU5HRVJQUklOVF9NSVNNQVRDSCwKLSAgICAgICAgICAgICAgICA1LCBlLmdldEVycm9yQ29kZSgpKTsKLQotICAgICAgICAvLyBuZXcgc3RvcmFnZSBkb2Vzbid0IGV4aXN0Ci0gICAgICAgIHByID0gbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoImZha2UvcGF0aC8iLCAiZmFrZS9wYXRoLyIpOwotICAgICAgICBlID0KLSAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrdXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKLQotICAgICAgICAvLyBmaWxlIHJlYWQgaXNzdWUKLSAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihURVNUREFUQV9QQVRILCAiZmFrZS9wYXRoLyIpOwotICAgICAgICBlID0KLSAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrdXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRCb29sZWFuRmxhZ1ZhbHVlX2luZGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFBhY2thZ2VUYWJsZSBwYWNrYWdlVGFibGUgPSBwci5nZXRQYWNrYWdlVGFibGUoIm1vY2t1cCIpOwotICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKLSAgICAgICAgbG9uZyBmaW5nZXJwcmludCA9IG5vZGUxLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOwotICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcCA9Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBmaW5nZXJwcmludCwgcHIpOwotICAgICAgICBhc3NlcnRGYWxzZShwLmdldEJvb2xlYW5GbGFnVmFsdWUoMCkpOwotICAgICAgICBhc3NlcnRUcnVlKHAuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgxKSk7Ci0gICAgICAgIGFzc2VydFRydWUocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKDIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3MvQW5kcm9pZC5icAppbmRleCBhN2FjZWVlLi4zNDE5NzVkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0FuZHJvaWQuYnAKQEAgLTMxLDYgKzMxLDkgQEAKICAgICBuYW1lOiAiYWZsYWdzIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKICAgICBkZWZhdWx0czogWyJhZmxhZ3MuZGVmYXVsdHMiXSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgXSwKIH0KIAogcnVzdF90ZXN0X2hvc3QgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycwppbmRleCA4MTczYmMyLi5lNGFmMmE3IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycworKysgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycwpAQCAtMTYsNiArMTYsOSBAQAogCiAvLyEgYGFmbGFnc2AgaXMgYSBkZXZpY2UgYmluYXJ5IHRvIHJlYWQgYW5kIHdyaXRlIGFjb25maWcgZmxhZ3MuCiAKK3VzZSBzdGQ6OmVudjsKK3VzZSBzdGQ6OnByb2Nlc3M6OntDb21tYW5kIGFzIE9zQ29tbWFuZCwgU3RkaW99OworCiB1c2UgYW55aG93Ojp7YW55aG93LCBlbnN1cmUsIFJlc3VsdH07CiB1c2UgY2xhcDo6UGFyc2VyOwogCkBAIC0yOTgsNyArMzAxLDM0IEBACiAgICAgfQogfQogCitmbiBpbnZva2VfdXBkYXRhYmxlX2FmbGFncygpIHsKKyAgICBsZXQgdXBkYXRhYmxlX2NvbW1hbmQgPSAiL2FwZXgvY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUvYmluL2FmbGFnc191cGRhdGFibGUiOworCisgICAgbGV0IGFyZ3M6IFZlYzxTdHJpbmc+ID0gZW52OjphcmdzKCkuY29sbGVjdCgpOworICAgIGxldCBjb21tYW5kX2FyZ3MgPSBpZiBhcmdzLmxlbigpID49IDIgeyAmYXJnc1sxLi5dIH0gZWxzZSB7ICZbIi0taGVscCIudG9fc3RyaW5nKCldIH07CisKKyAgICBsZXQgbXV0IGNoaWxkID0gT3NDb21tYW5kOjpuZXcodXBkYXRhYmxlX2NvbW1hbmQpOworICAgIGZvciBhcmcgaW4gY29tbWFuZF9hcmdzIHsKKyAgICAgICAgY2hpbGQuYXJnKGFyZyk7CisgICAgfQorCisgICAgbGV0IG91dHB1dCA9IGNoaWxkCisgICAgICAgIC5zdGRpbihTdGRpbzo6cGlwZWQoKSkKKyAgICAgICAgLnN0ZG91dChTdGRpbzo6cGlwZWQoKSkKKyAgICAgICAgLnNwYXduKCkKKyAgICAgICAgLmV4cGVjdCgiZmFpbGVkIHRvIGV4ZWN1dGUgY2hpbGQiKQorICAgICAgICAud2FpdF93aXRoX291dHB1dCgpCisgICAgICAgIC5leHBlY3QoImZhaWxlZCB0byBleGVjdXRlIGNvbW1hbmQiKTsKKworICAgIHByaW50bG4hKCJ7fSIsIFN0cmluZzo6ZnJvbV91dGY4X2xvc3N5KCZvdXRwdXQuc3Rkb3V0KS50cmltKCkpOworfQorCiBmbiBtYWluKCkgLT4gUmVzdWx0PCgpPiB7CisgICAgaWYgYWNvbmZpZ19mbGFnczo6YXV0b19nZW5lcmF0ZWQ6Omludm9rZV91cGRhdGFibGVfYWZsYWdzKCkgeworICAgICAgICBpbnZva2VfdXBkYXRhYmxlX2FmbGFncygpOworICAgICAgICByZXR1cm4gT2soKCkpOworICAgIH0KKwogICAgIGVuc3VyZSEobml4Ojp1bmlzdGQ6OlVpZDo6Y3VycmVudCgpLmlzX3Jvb3QoKSwgIm11c3QgYmUgcm9vdCIpOwogCiAgICAgbGV0IGNsaSA9IENsaTo6cGFyc2UoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQppbmRleCBkMDg0MDQ4Li40NjA1OGI2IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCkBAIC0yMSw4ICsyMSw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBBY29uZmlnUGFja2FnZUludGVybmFsIHsKIAotICAgIHB1YmxpYyBzdGF0aWMgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBsb2FkKAotICAgICAgICAgICAgU3RyaW5nIGNvbnRhaW5lciwgU3RyaW5nIHBhY2thZ2VOYW1lLCBsb25nIHBhY2thZ2VGaW5nZXJwcmludCkgeworICAgIHB1YmxpYyBzdGF0aWMgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSwgbG9uZyBwYWNrYWdlRmluZ2VycHJpbnQpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQppbmRleCAyODNiMjUxLi4zNzhjOTYzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpAQCAtMjEsOCArMjEsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHsKIAotICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoCi0gICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CisgICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZChTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvcHJpbnRmbGFncy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9wcmludGZsYWdzL0FuZHJvaWQuYnAKaW5kZXggZDUwYTc3ZC4uNmY3YmNhMyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9wcmludGZsYWdzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9wcmludGZsYWdzL0FuZHJvaWQuYnAKQEAgLTE5LDYgKzE5LDkgQEAKIHJ1c3RfYmluYXJ5IHsKICAgICBuYW1lOiAicHJpbnRmbGFncyIsCiAgICAgZGVmYXVsdHM6IFsicHJpbnRmbGFncy5kZWZhdWx0cyJdLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICBdLAogfQogCiBydXN0X3Rlc3RfaG9zdCB7CmRpZmYgLS1naXQgYS90b29scy9maW5hbGl6YXRpb24vY29tbWFuZC1saW5lLW9wdGlvbnMuc2ggYi90b29scy9maW5hbGl6YXRpb24vY29tbWFuZC1saW5lLW9wdGlvbnMuc2gKaW5kZXggZDkzOTdjMi4uM2ExZTA0OSAxMDA2NDQKLS0tIGEvdG9vbHMvZmluYWxpemF0aW9uL2NvbW1hbmQtbGluZS1vcHRpb25zLnNoCisrKyBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9jb21tYW5kLWxpbmUtb3B0aW9ucy5zaApAQCAtMyw2ICszLDcgQEAKIHdoaWxlIHRydWU7IGRvCiAgICAgY2FzZSAiJDEiIGluCiAgICAgICAgIC0tZHJ5LXJ1bikgcmVwb191cGxvYWRfZHJ5X3J1bl9hcmc9Ii0tZHJ5LXJ1biI7IHJlcG9fYnJhbmNoPSJmaW5hbGl6YXRpb24tZHJ5LXJ1biI7IHNoaWZ0IDs7CisgICAgICAgIC0tKSBzaGlmdDsgYnJlYWs7OwogICAgICAgICAqKSBicmVhawogICAgIGVzYWMKIGRvbmUKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmFsaXphdGlvbi9lbnZpcm9ubWVudC5zaCBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9lbnZpcm9ubWVudC5zaAppbmRleCBjZjNlNjFiLi4wZDNhOWUxIDEwMDc1NQotLS0gYS90b29scy9maW5hbGl6YXRpb24vZW52aXJvbm1lbnQuc2gKKysrIGIvdG9vbHMvZmluYWxpemF0aW9uL2Vudmlyb25tZW50LnNoCkBAIC0zMCw3ICszMCw3IEBACiAjIFRPRE8oYi8zMjM5ODUyOTcpOiBUaGUgdmVyc2lvbiBtdXN0IG1hdGNoIHdpdGggdGhhdCBmcm9tIHRoZSByZWxlYXNlIGNvbmZpZ3VyYXRpb24uCiAjIEluc3RlYWQgb2YgaGFyZGNvZGluZyB0aGUgdmVyc2lvbiBoZXJlLCByZWFkIGl0IGZyb20gYSByZWxlYXNlIGNvbmZpZ3VyYXRpb24uCiBleHBvcnQgRklOQUxfQk9BUkRfQVBJX0xFVkVMPScyMDI1MDQnCi1leHBvcnQgRklOQUxfQ09SUkVTUE9ORElOR19WRVJTSU9OX0xFVFRFUj0nVycKK2V4cG9ydCBGSU5BTF9DT1JSRVNQT05ESU5HX1ZFUlNJT05fTEVUVEVSPSdCJwogZXhwb3J0IEZJTkFMX0NPUlJFU1BPTkRJTkdfUExBVEZPUk1fVkVSU0lPTj0nMTYnCiBleHBvcnQgRklOQUxfTkVYVF9CT0FSRF9BUElfTEVWRUw9JzIwMjYwNCcKLWV4cG9ydCBGSU5BTF9ORVhUX0NPUlJFU1BPTkRJTkdfVkVSU0lPTl9MRVRURVI9J1gnCitleHBvcnQgRklOQUxfTkVYVF9DT1JSRVNQT05ESU5HX1ZFUlNJT05fTEVUVEVSPSdDJwpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9BbmRyb2lkLmJwIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDAwYjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgeworICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJBbmRyb2lkLUFwYWNoZS0yLjAiXSwKK30KKworamF2YV9saWJyYXJ5IHsKKyAgICBuYW1lOiAiaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9qdm0iLAorICAgIHNyY3M6IFsKKyAgICAgICAgIkZvby5qYXZhIiwKKyAgICAgICAgIkJhci5qYXZhIiwKKyAgICAgICAgIm90aGVyL090aGVyLmphdmEiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Jhci5qYXZhIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9CYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDUxNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9CYXIuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGp2bTsKKworLyoqIEJhciBjbGFzcy4gVGhlIGNsYXNzIGZvciB0ZXN0aW5nIGNvZGUgYXNzaXN0IHdpdGhpbiB0aGUgc2FtZSBidWlsZCBtb2R1bGUuICovCitjbGFzcyBCYXI8SyBleHRlbmRzIE51bWJlciwgViBleHRlbmRzIE51bWJlcj4geworICBCYXIoKSB7CisgICAgZm9vKG5ldyBGb28oKSk7CisgIH0KKworICB2b2lkIGZvbyhGb28gZikge30KKworICB2b2lkIGZvbyhPYmplY3Qgbykge30KKworICB2b2lkIGJhcihGb28gZikge30KKworICB2b2lkIGJheihPYmplY3Qgbykge30KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YQppbmRleCBhMDQzZjcyLi45Mzk3YmM0IDEwMDY0NAotLS0gYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmEKQEAgLTE2LDIyICsxNiwxMDkgQEAKIAogcGFja2FnZSBqdm07CiAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGp2bS5vdGhlci5PdGhlcjsKIAogLyoqIEZvbyBjbGFzcy4gKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBGb28geworLy8gICAgICAgICAgICAgICB8ICB8IGZvb19kZWYKKworICB2b2lkIHRlc3RQYXJhbWV0ZXJJbmZvKCkgeworICAgIC8vIFRlc3Qgc2lnbmF0dXJlIGhlbHAgZm9yIHR5cGUgcGFyYW1ldGVycy4KKworICAgIEJhcjxJbnRlZ2VyLCBEb3VibGU+IGIgPSBuZXcgQmFyPD4oKTsKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIGN0b3IKKyAgICAvLyAgICAgXiBkZWNsXzEKKyAgICAvLyAgICAgICAgICAgICAgXiBkZWNsXzIKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYik7CisKKyAgICAvLyBzdGVwIGF0IGN0b3IKKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyBwYXJhbWluZm8udHJpZ2dlcigpCisgICAgLy8gYXNzZXJ0IHBhcmFtaW5mby5pdGVtcy5maWx0ZXIoCisgICAgLy8gIGxhYmVsPSJLIGV4dGVuZHMgTnVtYmVyLCBWIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyAgc2VsZWN0aW9uPSJLIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyApCisKKyAgICAvLyBzdGVwIGF0IGRlY2xfMQorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHBhcmFtaW5mby50cmlnZ2VyKCkKKyAgICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zLmZpbHRlcigKKyAgICAvLyAgbGFiZWw9IksgZXh0ZW5kcyBOdW1iZXIsIFYgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICBzZWxlY3Rpb249IksgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICkKKworICAgIC8vIHN0ZXAgYXQgZGVjbF8yCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZmlsdGVyKAorICAgIC8vICBsYWJlbD0iSyBleHRlbmRzIE51bWJlciwgViBleHRlbmRzIE51bWJlciIsCisgICAgLy8gIHNlbGVjdGlvbj0iViBleHRlbmRzIE51bWJlciIsCisgICAgLy8gKQorCisgICAgLy8gVGVzdCBzaWduYXR1cmUgaGVscCBmb3IgY29uc3RydWN0b3IgcGFyYW1ldGVycy4KKworICAgIE90aGVyIG90aGVyID0gbmV3IE90aGVyKDEyMywgImZvbyIpOworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBeIHBhcmFtXzEKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiBwYXJhbV8yCisgICAgU3lzdGVtLm91dC5wcmludGxuKG90aGVyKTsKKworICAgIC8vIHN0ZXAgYXQgcGFyYW1fMQorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHBhcmFtaW5mby50cmlnZ2VyKCkKKyAgICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zLmZpbHRlcigKKyAgICAvLyAgbGFiZWw9IlxcKGludCBmaXJzdCwgU3RyaW5nIHNlY29uZFxcKSIsCisgICAgLy8gIHNlbGVjdGlvbj0iaW50IGZpcnN0IiwKKyAgICAvLyApCisKKyAgICAvLyBzdGVwIGF0IHBhcmFtXzIKKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyBwYXJhbWluZm8udHJpZ2dlcigpCisgICAgLy8gYXNzZXJ0IHBhcmFtaW5mby5pdGVtcy5lbXB0eSgpCisgIH0KIAogICB2b2lkIHRlc3RDb21wbGV0aW9uKCkgewotICAgIEFycmF5TGlzdDxJbnRlZ2VyPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKGxpc3QpOworICAgIEJhcjxJbnRlZ2VyLCBEb3VibGU+IGIgPSBuZXcgQmFyPD4oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYik7CiAKICAgICAvLyBeCiAKICAgICAvLyBzdGVwCi0gICAgLy8gOyBUZXN0IGNvbXBsZXRpb24gb24gdGhlIHN0YW5kYXJkIHR5cGVzLgotICAgIC8vIHR5cGUoImxpc3QuIikKKyAgICAvLyA7IFRlc3QgY29tcGxldGlvbiBvbiB0eXBlcyBmcm9tIHRoZSBzYW1lIHBhY2thZ2UuCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gdHlwZSgiYi4iKQogICAgIC8vIGNvbXBsZXRpb24udHJpZ2dlcigpCi0gICAgLy8gYXNzZXJ0IGNvbXBsZXRpb24uaXRlbXMuZmlsdGVyKGxhYmVsPSJhZGQuKiIpCisgICAgLy8gYXNzZXJ0IGNvbXBsZXRpb24uaXRlbXMuZmlsdGVyKGxhYmVsPSJmb28uKiIpCisgICAgLy8gZGVsbGluZSgpCisKKyAgICBPdGhlciBvdGhlciA9IG5ldyBPdGhlcigxLCAiZm9vIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKG90aGVyKTsKKworICAgIC8vIF4KKworICAgIC8vIHN0ZXAKKyAgICAvLyA7IFRlc3QgY29tcGxldGlvbiBvbiB0eXBlcyBmcm9tIGEgZGlmZmVyZW50IHBhY2thZ2UuCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gdHlwZSgib3RoZXIuIikKKyAgICAvLyBjb21wbGV0aW9uLnRyaWdnZXIoKQorICAgIC8vIGFwcGx5KGNvbXBsZXRpb24uaXRlbXMuZmlsdGVyKGxhYmVsPSJvdGhlci4qIikuZmlyc3QoKSkKKyAgICAvLyB0eXBlKCIuIikKKyAgICAvLyBjb21wbGV0aW9uLnRyaWdnZXIoKQorICAgIC8vIGFwcGx5KGNvbXBsZXRpb24uaXRlbXMuZmlsdGVyKGxhYmVsPSJvdGhlci4qIikuZmlyc3QoKSkKKyAgICAvLyBkZWxsaW5lKCkKKyAgfQorCisgIHZvaWQgdGVzdERpYWdub3N0aWNzKCkgeworCisgICAgLy8gXgorCisgICAgLy8gc3RlcAorICAgIC8vIDsgVGVzdCBkaWFnbm9zdGljcyBhYm91dCB3cm9uZyB0eXBlIGFyZ3VtZW50IGJvdW5kcy4KKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyB0eXBlKCJCYXI8U3RyaW5nLCBEb3VibGU+IGI7IikKKyAgICAvLyBhc3NlcnQgZGlhZ25vc3RpY3MuaXRlbXMuZmlsdGVyKAorICAgIC8vICBtZXNzYWdlPSJ0eXBlIGFyZ3VtZW50IC4qIGlzIG5vdCB3aXRoaW4gYm91bmRzIC4qIiwKKyAgICAvLyAgY29kZT0iY29tcGlsZXIuZXJyLm5vdC53aXRoaW4uYm91bmRzIiwKKyAgICAvLyApCisgICAgLy8gZGVsbGluZSgpCiAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vaWRlX3F1ZXJ5Lm91dCBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vaWRlX3F1ZXJ5Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjlmYjg2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9pZGVfcXVlcnkub3V0CkBAIC0wLDAgKzEsNCBAQAorCisDb3V0MlgKKzZidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmESAggBGhppZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2p2bTrOAQorGmlkZV9xdWVyeV9wcm9iZXJzY3JpcHRfanZtEAEaNmJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YRo2YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Jhci5qYXZhGj5idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vb3RoZXIvT3RoZXIuamF2YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vb3RoZXIvT3RoZXIuamF2YSBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vb3RoZXIvT3RoZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjI2NjJhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9vdGhlci9PdGhlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UganZtLm90aGVyOworCisvKiogT3RoZXIgY2xhc3MgKi8KK3B1YmxpYyBjbGFzcyBPdGhlciB7CisgIHB1YmxpYyBPdGhlcihpbnQgZmlyc3QsIFN0cmluZyBzZWNvbmQpIHt9CisKKyAgcHVibGljIE90aGVyIG90aGVyKCkgeworICAgIHJldHVybiBuZXcgT3RoZXIoMCwgIiIpOworICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9taXNzaW5nX3Nvb25nX21vZHVsZV9pbmZvLnB5IGIvdG9vbHMvbWlzc2luZ19zb29uZ19tb2R1bGVfaW5mby5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZmE3ZjJiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbWlzc2luZ19zb29uZ19tb2R1bGVfaW5mby5weQpAQCAtMCwwICsxLDUzIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2RlZiBtYWluKCk6CisgICAgdHJ5OgorICAgICAgICBwcm9kdWN0X291dCA9IG9zLmVudmlyb25bIkFORFJPSURfUFJPRFVDVF9PVVQiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3QgZ2V0IEFORFJPSURfUFJPRFVDVF9PVVQuIFJ1biBsdW5jaCBmaXJzdC5cbiIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwcm9kdWN0X291dCwgIm1vZHVsZS1pbmZvLmpzb24iKQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmOgorICAgICAgICAgICAgbW9kdWxlcyA9IGpzb24ubG9hZChmKQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZShmIkZpbGUgbm90IGZvdW5kOiB7ZmlsZW5hbWV9XG4iKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGV4Y2VwdCBqc29uLkpTT05EZWNvZGVFcnJvcjoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZShmIkludmFsaWQganNvbjoge2ZpbGVuYW1lfVxuIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGNsYXNzZXMgPSB7fQorCisgICAgZm9yIG5hbWUsIGluZm8gaW4gbW9kdWxlcy5pdGVtcygpOgorICAgICAgICBtYWtlID0gaW5mby5nZXQoIm1ha2UiKQorICAgICAgICBtYWtlX2dlbiA9IGluZm8uZ2V0KCJtYWtlX2dlbmVyYXRlZF9tb2R1bGVfaW5mbyIpCisgICAgICAgIGlmIG5vdCBtYWtlIGFuZCBtYWtlX2dlbjoKKyAgICAgICAgICAgIGNsYXNzZXMuc2V0ZGVmYXVsdChmcm96ZW5zZXQoaW5mby5nZXQoImNsYXNzIikpLCBbXSkuYXBwZW5kKG5hbWUpCisKKyAgICBmb3IgY2wsIG5hbWVzIGluIGNsYXNzZXMuaXRlbXMoKToKKyAgICAgICAgcHJpbnQoIiAiLmpvaW4oY2wpKQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIHByaW50KCIgIiwgbmFtZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2htYXJrcyBiL3Rvb2xzL3BlcmYvYmVuY2htYXJrcwppbmRleCA2OTk4ZWNkLi40ZmRiOGMyIDEwMDc1NQotLS0gYS90b29scy9wZXJmL2JlbmNobWFya3MKKysrIGIvdG9vbHMvcGVyZi9iZW5jaG1hcmtzCkBAIC03ODYsNiArNzg2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgcHJlcm9sbD0xLAogICAgICAgICAgICAgICAgICAgICAgIHBvc3Ryb2xsPTIsCiAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEJlbmNobWFyayhpZD0iYWRkX3N5c3RlbXVpX2ZpZWxkX3dpdGhfdGVzdHMiLAorICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJBZGQgU3lzdGVtVUkgZmllbGQgd2l0aCB0ZXN0cyIsCisgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlPUFkZEphdmFGaWVsZCgiZnJhbWV3b3Jrcy9iYXNlL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS93bXNoZWxsL1dNU2hlbGwuamF2YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHVibGljIiksCisgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcz1bIlN5c3RlbVVpUmF2ZW5UZXN0cyJdLAorICAgICAgICAgICAgICAgICAgICAgIHByZXJvbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICBwb3N0cm9sbD0yLAorICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgIF0KIAogICAgIGRlZiBfZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkgYi90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkKaW5kZXggMjViY2I1Mi4uYjZjOTZjNCAxMDA3NTUKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9idWlsZF9pbWFnZS5weQpAQCAtOTc3LDggKzk3Nyw2IEBACiAgICAgIndpbGwgaW5zdGFsbCBpbiBieSBkZWZhdWx0LCBzbyB0aGVyZSBjb3VsZCBiZSBmaWxlcyBpbiB0aGUgaW5wdXRfZGlyZWN0b3J5IHRoYXQgYXJlIG5vdCAiCiAgICAgImFjdHVhbGx5IHN1cHBvc2VkIHRvIGJlIHBhcnQgb2YgdGhlIHBhcnRpdGlvbi4gVGhlIHBhdGhzIGluIHRoaXMgZmlsZSBtdXN0IGJlIHJlbGF0aXZlIHRvICIKICAgICAiaW5wdXRfZGlyZWN0b3J5LiIpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tYnVpbGRfZGF0ZXRpbWVfZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIGlkIHRpbWVzdGFtcCIpCiAgIHBhcnNlci5hZGRfYXJndW1lbnQoImlucHV0X2RpcmVjdG9yeSIsCiAgICAgaGVscD0idGhlIHN0YWdpbmcgZGlyZWN0b3J5IHRvIGJlIGNvbnZlcnRlZCB0byBhbiBpbWFnZSBmaWxlIikKICAgcGFyc2VyLmFkZF9hcmd1bWVudCgicHJvcGVydGllc19maWxlIiwKQEAgLTk5OCwxMSArOTk2LDYgQEAKICAgY29tbW9uLkluaXRMb2dnaW5nKCkKIAogICBnbG9iX2RpY3QgPSBMb2FkR2xvYmFsRGljdChhcmdzLnByb3BlcnRpZXNfZmlsZSkKLSAgaWYgYXJncy5idWlsZF9kYXRldGltZV9maWxlOgotICAgICMgUGFyc2UgdGhlIHRpbWVzdGFtcCBmcm9tIGJ1aWxkX2RhdGV0aW1lX2ZpbGUuCi0gICAgd2l0aCBvcGVuKGFyZ3MuYnVpbGRfZGF0ZXRpbWVfZmlsZSwgInIiKSBhcyBmOgotICAgICAgZ2xvYl9kaWN0WyJ0aW1lc3RhbXAiXSA9IGludChmLnJlYWQoKSkKLQogICBpZiAibW91bnRfcG9pbnQiIGluIGdsb2JfZGljdDoKICAgICAjIFRoZSBjYWxsZXIga25vd3MgdGhlIG1vdW50IHBvaW50IGFuZCBwcm92aWRlcyBhIGRpY3Rpb25hcnkgbmVlZGVkIGJ5CiAgICAgIyBCdWlsZEltYWdlKCkuCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy9zaWduX3RhcmdldF9maWxlc19hcGtzLnB5CmluZGV4IDRhZDk3ZTAuLjIzNzg1MzkgMTAwNzU1Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9zaWduX3RhcmdldF9maWxlc19hcGtzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9zaWduX3RhcmdldF9maWxlc19hcGtzLnB5CkBAIC04NjIsMjEgKzg2MiwzMiBAQAogCiAgICAgIyBVcGRhdGVzIHB2bWZ3IGVtYmVkZGVkIHB1YmxpYyBrZXkgd2l0aCB0aGUgdmlydCBBUEVYIHBheWxvYWQga2V5LgogICAgIGVsaWYgZmlsZW5hbWUgPT0gIlBSRUJVSUxUX0lNQUdFUy9wdm1mdy5pbWciOgotICAgICAgIyBGaW5kIHRoZSBuYW1lIG9mIHRoZSB2aXJ0IEFQRVggaW4gdGhlIHRhcmdldCBmaWxlcy4KKyAgICAgICMgRmluZCB0aGUgcGF0aCBvZiB0aGUgdmlydCBBUEVYIGluIHRoZSB0YXJnZXQgZmlsZXMuCiAgICAgICBuYW1lbGlzdCA9IGlucHV0X3RmX3ppcC5uYW1lbGlzdCgpCi0gICAgICBhcGV4X2dlbiA9IChHZXRBcGV4RmlsZW5hbWUoZikgZm9yIGYgaW4gbmFtZWxpc3QgaWYgSXNBcGV4RmlsZShmKSkKLSAgICAgIHZpcnRfYXBleF9yZSA9IHJlLmNvbXBpbGUoIl5jb21cLihbXlwuXStcLik/YW5kcm9pZFwudmlydFwuYXBleCQiKQotICAgICAgdmlydF9hcGV4ID0gbmV4dCgoYSBmb3IgYSBpbiBhcGV4X2dlbiBpZiB2aXJ0X2FwZXhfcmUubWF0Y2goYSkpLCBOb25lKQotICAgICAgaWYgbm90IHZpcnRfYXBleDoKKyAgICAgIGFwZXhfZ2VuID0gKGYgZm9yIGYgaW4gbmFtZWxpc3QgaWYgSXNBcGV4RmlsZShmKSkKKyAgICAgIHZpcnRfYXBleF9yZSA9IHJlLmNvbXBpbGUoIl4uKmNvbVwuKFteXC5dK1wuKT9hbmRyb2lkXC52aXJ0XC5hcGV4JCIpCisgICAgICB2aXJ0X2FwZXhfcGF0aCA9IG5leHQoCisgICAgICAgIChhIGZvciBhIGluIGFwZXhfZ2VuIGlmIHZpcnRfYXBleF9yZS5tYXRjaChhKSksIE5vbmUpCisgICAgICBpZiBub3QgdmlydF9hcGV4X3BhdGg6CiAgICAgICAgIHByaW50KCJSZW1vdmluZyAlcyBmcm9tIHJhbWRpc2s6IHZpcnQgQVBFWCBub3QgZm91bmQiICUgZmlsZW5hbWUpCiAgICAgICBlbHNlOgotICAgICAgICBwcmludCgiUmVwbGFjaW5nICVzIGVtYmVkZGVkIGtleSB3aXRoICVzIGtleSIgJSAoZmlsZW5hbWUsIHZpcnRfYXBleCkpCisgICAgICAgIHByaW50KCJSZXBsYWNpbmcgJXMgZW1iZWRkZWQga2V5IHdpdGggJXMga2V5IiAlIChmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnRfYXBleF9wYXRoKSkKICAgICAgICAgIyBHZXQgdGhlIGN1cnJlbnQgYW5kIG5ldyBlbWJlZGRlZCBrZXlzLgorICAgICAgICB2aXJ0X2FwZXggPSBHZXRBcGV4RmlsZW5hbWUodmlydF9hcGV4X3BhdGgpCiAgICAgICAgIHBheWxvYWRfa2V5LCBjb250YWluZXJfa2V5LCBzaWduX3Rvb2wgPSBhcGV4X2tleXNbdmlydF9hcGV4XQotICAgICAgICBuZXdfcHVia2V5X3BhdGggPSBjb21tb24uRXh0cmFjdEF2YlB1YmxpY0tleSgKLSAgICAgICAgICAgIG1pc2NfaW5mb1snYXZiX2F2YnRvb2wnXSwgcGF5bG9hZF9rZXkpCi0gICAgICAgIHdpdGggb3BlbihuZXdfcHVia2V5X3BhdGgsICdyYicpIGFzIGY6Ci0gICAgICAgICAgbmV3X3B1YmtleSA9IGYucmVhZCgpCisKKyAgICAgICAgIyBiLzM4NDgxMzE5OTogaGFuZGxlcyB0aGUgcHJlLXNpZ25lZCBjb20uYW5kcm9pZC52aXJ0LmFwZXggaW4gR1NJLgorICAgICAgICBpZiBwYXlsb2FkX2tleSA9PSAnUFJFU0lHTkVEJzoKKyAgICAgICAgICB3aXRoIGlucHV0X3RmX3ppcC5vcGVuKHZpcnRfYXBleF9wYXRoKSBhcyBhcGV4X2ZwOgorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoYXBleF9mcCkgYXMgYXBleF96aXA6CisgICAgICAgICAgICAgIG5ld19wdWJrZXkgPSBhcGV4X3ppcC5yZWFkKCdhcGV4X3B1YmtleScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgbmV3X3B1YmtleV9wYXRoID0gY29tbW9uLkV4dHJhY3RBdmJQdWJsaWNLZXkoCisgICAgICAgICAgICAgIG1pc2NfaW5mb1snYXZiX2F2YnRvb2wnXSwgcGF5bG9hZF9rZXkpCisgICAgICAgICAgd2l0aCBvcGVuKG5ld19wdWJrZXlfcGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIG5ld19wdWJrZXkgPSBmLnJlYWQoKQorCiAgICAgICAgIHB1YmtleV9pbmZvID0gY29weS5jb3B5KAogICAgICAgICAgICAgaW5wdXRfdGZfemlwLmdldGluZm8oIlBSRUJVSUxUX0lNQUdFUy9wdm1md19lbWJlZGRlZC5hdmJwdWJrZXkiKSkKICAgICAgICAgb2xkX3B1YmtleSA9IGlucHV0X3RmX3ppcC5yZWFkKHB1YmtleV9pbmZvLmZpbGVuYW1lKQo=