ZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icCBiL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icAppbmRleCAyNDNlNzdlLi4wY2FlYTU2IDEwMDY0NAotLS0gYS9iYWNrcG9ydGVkX2ZpeGVzL0FuZHJvaWQuYnAKKysrIGIvYmFja3BvcnRlZF9maXhlcy9BbmRyb2lkLmJwCkBAIC0zOCw2ICszOCw3IEBACiAgICAgbmFtZTogImJhY2twb3J0ZWRfZml4ZXNfcHJvdG8iLAogICAgIHNyY3M6IFsiYmFja3BvcnRlZF9maXhlcy5wcm90byJdLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIHNka192ZXJzaW9uOiAiY3VycmVudCIsCiB9CiAKIGphdmFfbGlicmFyeSB7CmRpZmYgLS1naXQgYS9jb3JlL01ha2VmaWxlIGIvY29yZS9NYWtlZmlsZQppbmRleCBhOTUxNzE1Li44MGFkMzNjIDEwMDY0NAotLS0gYS9jb3JlL01ha2VmaWxlCisrKyBiL2NvcmUvTWFrZWZpbGUKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgICAgICAgICAgJChldmFsICQoY2FsbCBjb3B5LXhtbC1maWxlLWNoZWNrZWQsJChfc3JjKSwkKF9mdWxsZGVzdCkpKSxcCiAgICAgICAgICAgICAkKGlmICQoYW5kICQoZmlsdGVyICUuamFyLCQoX2Rlc3QpKSwkKGZpbHRlciAkKGJhc2VuYW1lICQobm90ZGlyICQoX2Rlc3QpKSksJChQUk9EVUNUX0xPQURFRF9CWV9QUklWSUxFR0VEX01PRFVMRVMpKSksXAogICAgICAgICAgICAgICAgICQoZXZhbCAkKGNhbGwgY29weS1hbmQtdW5jb21wcmVzcy1kZXhzLCQoX3NyYyksJChfZnVsbGRlc3QpKSksIFwKLSAgICAgICAgICAgICAgICAkKGlmICQoZmlsdGVyIGluaXQlcmMsJChub3RkaXIgJChfZGVzdCkpKSQoZmlsdGVyICUvZXRjL2luaXQsJChkaXIgJChfZGVzdCkpKSxcCisgICAgICAgICAgICAgICAgJChpZiAkKGZpbHRlciBpbml0JXJjLCQobm90ZGlyICQoX2Rlc3QpKSkkKGZpbHRlciAlL2V0Yy9pbml0LywkKGRpciAkKF9kZXN0KSkpLFwKICAgICAgICAgICAgICAgICAgICAgJChldmFsICQoY2FsbCBjb3B5LWluaXQtc2NyaXB0LWZpbGUtY2hlY2tlZCwkKF9zcmMpLCQoX2Z1bGxkZXN0KSkpLFwKICAgICAgICAgICAgICAgICAgICAgJChpZiAkKGFuZCAkKGZpbHRlciB0cnVlLCQoY2hlY2tfZWxmX3ByZWJ1aWx0X3Byb2R1Y3RfY29weV9maWxlcykpLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXIgYmluIGxpYiBsaWI2NCwkKHN1YnN0IC8sJChzcGFjZSksJChfZGVzdCkpKSksIFwKQEAgLTIzOTgsNyArMjM5OCw3IEBACiAkKGhpZGUpIGVjaG8gInJvb3RfZGlyPSQoVEFSR0VUX1JPT1RfT1VUKSIgPj4gJCgxKQogJChpZiAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9VU0VfRFlOQU1JQ19QQVJUSVRJT05fU0laRSkpLFwKICAgICAkKGhpZGUpIGVjaG8gInVzZV9keW5hbWljX3BhcnRpdGlvbl9zaXplPXRydWUiID4+ICQoMSkpCi0kKGlmICQoQ09QWV9JTUFHRVNfRk9SX1RBUkdFVF9GSUxFU19aSVApLFwKKyQoaWYgJChVU0VfRklYRURfVElNRVNUQU1QX0lNR19GSUxFUykkKENPUFlfSU1BR0VTX0ZPUl9UQVJHRVRfRklMRVNfWklQKSxcCiAgICAgJChoaWRlKSBlY2hvICJ1c2VfZml4ZWRfdGltZXN0YW1wPXRydWUiID4+ICQoMSkpCiAkKGlmICQoMyksJChoaWRlKSAkKGZvcmVhY2gga3YsJCgzKSxlY2hvICIkKGt2KSIgPj4gJCgxKTspKQogJChoaWRlKSBzb3J0IC1vICQoMSkgJCgxKQpAQCAtMzU1Myw3ICszNTUzLDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQpIFwKLSAgICAgICAgICAkKFRBUkdFVF9PVVQpICQoc3lzdGVtaW1hZ2VfaW50ZXJtZWRpYXRlcykvc3lzdGVtX2ltYWdlX2luZm8udHh0ICQoMSkgJChUQVJHRVRfT1VUKSAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUKSAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9pbWFnZV9pbmZvLnR4dCAkKDEpICQoVEFSR0VUX09VVCkgXAogICAgICAgICAgIHx8ICggbWtkaXIgLXAgJCR7RElTVF9ESVJ9OyBcCiAgICAgICAgICAgICAgICBjcCAkKElOU1RBTExFRF9GSUxFU19GSUxFKSAkJHtESVNUX0RJUn0vaW5zdGFsbGVkLWZpbGVzLXJlc2N1ZWQudHh0OyBcCiAgICAgICAgICAgICAgICBleGl0IDEgKQpAQCAtMzcwNCw3ICszNzA0LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHVzZXJkYXRhaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9EQVRBKSAkKHVzZXJkYXRhaW1hZ2VfaW50ZXJtZWRpYXRlcykvdXNlcmRhdGFfaW1hZ2VfaW5mby50eHQgLS1idWlsZF9kYXRldGltZV9maWxlICQoQlVJTERfREFURVRJTUVfRklMRSkgXAorICAgICAgICAgICQoVEFSR0VUX09VVF9EQVRBKSAkKHVzZXJkYXRhaW1hZ2VfaW50ZXJtZWRpYXRlcykvdXNlcmRhdGFfaW1hZ2VfaW5mby50eHQgXAogICAgICAgICAgICQoSU5TVEFMTEVEX1VTRVJEQVRBSU1BR0VfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCiAgICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJChJTlNUQUxMRURfVVNFUkRBVEFJTUFHRV9UQVJHRVQpLCQoQk9BUkRfVVNFUkRBVEFJTUFHRV9QQVJUSVRJT05fU0laRSkpCiBlbmRlZgpAQCAtMzc2Niw3ICszNzY2LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKGNhY2hlaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9DQUNIRSkgJChjYWNoZWltYWdlX2ludGVybWVkaWF0ZXMpL2NhY2hlX2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKFRBUkdFVF9PVVRfQ0FDSEUpICQoY2FjaGVpbWFnZV9pbnRlcm1lZGlhdGVzKS9jYWNoZV9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfQ0FDSEVJTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9DQUNIRUlNQUdFX1RBUkdFVCksJChCT0FSRF9DQUNIRUlNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC0zODUzLDcgKzM4NTMsNyBAQAogICBQQVRIPSQoSU5URVJOQUxfVVNFUklNQUdFU19CSU5BUllfUEFUSFMpOiQkUEFUSCBcCiAgICAgICAkKEJVSUxEX0lNQUdFKSBcCiAgICAgICAgICAgJChpZiAkKEJVSUxEX0JST0tFTl9JTkNPUlJFQ1RfUEFSVElUSU9OX0lNQUdFUyksLC0taW5wdXQtZGlyZWN0b3J5LWZpbHRlci1maWxlICQoc3lzdGVtb3RoZXJpbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCi0gICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9PVEhFUikgJChzeXN0ZW1vdGhlcmltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9vdGhlcl9pbWFnZV9pbmZvLnR4dCAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9PVEhFUikgJChzeXN0ZW1vdGhlcmltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9vdGhlcl9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfU1lTVEVNT1RIRVJJTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9TWVNURU1PVEhFUklNQUdFX1RBUkdFVCksJChCT0FSRF9TWVNURU1JTUFHRV9QQVJUSVRJT05fU0laRSkpCiBlbmRlZgpAQCAtMzk1OSw3ICszOTU5LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHZlbmRvcmltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQpIFwKLSAgICAgICAgICAkKFRBUkdFVF9PVVRfVkVORE9SKSAkKHZlbmRvcmltYWdlX2ludGVybWVkaWF0ZXMpL3ZlbmRvcl9pbWFnZV9pbmZvLnR4dCAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUX1ZFTkRPUikgJCh2ZW5kb3JpbWFnZV9pbnRlcm1lZGlhdGVzKS92ZW5kb3JfaW1hZ2VfaW5mby50eHQgXAogICAgICAgICAgICQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1ZFTkRPUklNQUdFX1RBUkdFVCkgJChSRUNPVkVSWV9GUk9NX0JPT1RfUEFUQ0gpLCQoQk9BUkRfVkVORE9SSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogZW5kZWYKQEAgLTQwNDcsNyArNDA0Nyw3IEBACiAgIFBBVEg9JChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyk6JCRQQVRIIFwKICAgICAgICQoQlVJTERfSU1BR0UpIFwKICAgICAgICAgICAkKGlmICQoQlVJTERfQlJPS0VOX0lOQ09SUkVDVF9QQVJUSVRJT05fSU1BR0VTKSwsLS1pbnB1dC1kaXJlY3RvcnktZmlsdGVyLWZpbGUgJChwcm9kdWN0aW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9QUk9EVUNUKSAkKHByb2R1Y3RpbWFnZV9pbnRlcm1lZGlhdGVzKS9wcm9kdWN0X2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKFRBUkdFVF9PVVRfUFJPRFVDVCkgJChwcm9kdWN0aW1hZ2VfaW50ZXJtZWRpYXRlcykvcHJvZHVjdF9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfUFJPRFVDVElNQUdFX1RBUkdFVCkgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1BST0RVQ1RJTUFHRV9UQVJHRVQpLCQoQk9BUkRfUFJPRFVDVElNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC00MTE2LDcgKzQxMTYsNyBAQAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKHN5c3RlbV9leHRpbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCiAgICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9FWFQpIFwKLSAgICAgICAgICAkKHN5c3RlbV9leHRpbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1fZXh0X2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKHN5c3RlbV9leHRpbWFnZV9pbnRlcm1lZGlhdGVzKS9zeXN0ZW1fZXh0X2ltYWdlX2luZm8udHh0IFwKICAgICAgICAgICAkKElOU1RBTExFRF9TWVNURU1fRVhUSU1BR0VfVEFSR0VUKSBcCiAgICAgICAgICAgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1BST0RVQ1RfU0VSVklDRVNJTUFHRV9UQVJHRVQpLCQoQk9BUkRfUFJPRFVDVF9TRVJWSUNFU0lNQUdFX1BBUlRJVElPTl9TSVpFKSkKQEAgLTQyMDYsNyArNDIwNiw3IEBACiAgIFBBVEg9JChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyk6JCRQQVRIIFwKICAgICAgICQoQlVJTERfSU1BR0UpIFwKICAgICAgICAgICAkKGlmICQoQlVJTERfQlJPS0VOX0lOQ09SUkVDVF9QQVJUSVRJT05fSU1BR0VTKSwsLS1pbnB1dC1kaXJlY3RvcnktZmlsdGVyLWZpbGUgJChvZG1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCi0gICAgICAgICAgJChUQVJHRVRfT1VUX09ETSkgJChvZG1pbWFnZV9pbnRlcm1lZGlhdGVzKS9vZG1faW1hZ2VfaW5mby50eHQgLS1idWlsZF9kYXRldGltZV9maWxlICQoQlVJTERfREFURVRJTUVfRklMRSkgXAorICAgICAgICAgICQoVEFSR0VUX09VVF9PRE0pICQob2RtaW1hZ2VfaW50ZXJtZWRpYXRlcykvb2RtX2ltYWdlX2luZm8udHh0IFwKICAgICAgICAgICAkKElOU1RBTExFRF9PRE1JTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9PRE1JTUFHRV9UQVJHRVQpLCQoQk9BUkRfT0RNSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogZW5kZWYKQEAgLTQyNzUsNyArNDI3NSw3IEBACiAgIFBBVEg9JChJTlRFUk5BTF9VU0VSSU1BR0VTX0JJTkFSWV9QQVRIUyk6JCRQQVRIIFwKICAgICAgICQoQlVJTERfSU1BR0UpIFwKICAgICAgICAgICAkKGlmICQoQlVJTERfQlJPS0VOX0lOQ09SUkVDVF9QQVJUSVRJT05fSU1BR0VTKSwsLS1pbnB1dC1kaXJlY3RvcnktZmlsdGVyLWZpbGUgJCh2ZW5kb3JfZGxrbWltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQpIFwKLSAgICAgICAgICAkKFRBUkdFVF9PVVRfVkVORE9SX0RMS00pICQodmVuZG9yX2Rsa21pbWFnZV9pbnRlcm1lZGlhdGVzKS92ZW5kb3JfZGxrbV9pbWFnZV9pbmZvLnR4dCAtLWJ1aWxkX2RhdGV0aW1lX2ZpbGUgJChCVUlMRF9EQVRFVElNRV9GSUxFKSBcCisgICAgICAgICAgJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKSAkKHZlbmRvcl9kbGttaW1hZ2VfaW50ZXJtZWRpYXRlcykvdmVuZG9yX2Rsa21faW1hZ2VfaW5mby50eHQgXAogICAgICAgICAgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNSU1BR0VfVEFSR0VUKSAkKFRBUkdFVF9PVVQpCiAgICQoY2FsbCBhc3NlcnQtbWF4LWltYWdlLXNpemUsJChJTlNUQUxMRURfVkVORE9SX0RMS01JTUFHRV9UQVJHRVQpLCQoQk9BUkRfVkVORE9SX0RMS01JTUFHRV9QQVJUSVRJT05fU0laRSkpCiBlbmRlZgpAQCAtNDM0NCw3ICs0MzQ0LDcgQEAKICAgUEFUSD0kKElOVEVSTkFMX1VTRVJJTUFHRVNfQklOQVJZX1BBVEhTKTokJFBBVEggXAogICAgICAgJChCVUlMRF9JTUFHRSkgXAogICAgICAgICAgICQoaWYgJChCVUlMRF9CUk9LRU5fSU5DT1JSRUNUX1BBUlRJVElPTl9JTUFHRVMpLCwtLWlucHV0LWRpcmVjdG9yeS1maWx0ZXItZmlsZSAkKG9kbV9kbGttaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCkgXAotICAgICAgICAgICQoVEFSR0VUX09VVF9PRE1fRExLTSkgJChvZG1fZGxrbWltYWdlX2ludGVybWVkaWF0ZXMpL29kbV9kbGttX2ltYWdlX2luZm8udHh0IC0tYnVpbGRfZGF0ZXRpbWVfZmlsZSAkKEJVSUxEX0RBVEVUSU1FX0ZJTEUpIFwKKyAgICAgICAgICAkKFRBUkdFVF9PVVRfT0RNX0RMS00pICQob2RtX2Rsa21pbWFnZV9pbnRlcm1lZGlhdGVzKS9vZG1fZGxrbV9pbWFnZV9pbmZvLnR4dCBcCiAgICAgICAgICAgJChJTlNUQUxMRURfT0RNX0RMS01JTUFHRV9UQVJHRVQpICQoVEFSR0VUX09VVCkKICAgJChjYWxsIGFzc2VydC1tYXgtaW1hZ2Utc2l6ZSwkKElOU1RBTExFRF9PRE1fRExLTUlNQUdFX1RBUkdFVCksJChCT0FSRF9PRE1fRExLTUlNQUdFX1BBUlRJVElPTl9TSVpFKSkKIGVuZGVmCkBAIC00NDE1LDcgKzQ0MTUsNyBAQAogICBQQVRIPSQoSU5URVJOQUxfVVNFUklNQUdFU19CSU5BUllfUEFUSFMpOiQkUEFUSCBcCiAgICAgICAkKEJVSUxEX0lNQUdFKSBcCiAgICAgICAgICAgJChpZiAkKEJVSUxEX0JST0tFTl9JTkNPUlJFQ1RfUEFSVElUSU9OX0lNQUdFUyksLC0taW5wdXQtZGlyZWN0b3J5LWZpbHRlci1maWxlICQoc3lzdGVtX2Rsa21pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0KSBcCi0gICAgICAgICAgJChUQVJHRVRfT1VUX1NZU1RFTV9ETEtNKSAkKHN5c3RlbV9kbGttaW1hZ2VfaW50ZXJtZWRpYXRlcykvc3lzdGVtX2Rsa21faW1hZ2VfaW5mby50eHQgLS1idWlsZF9kYXRldGltZV9maWxlICQoQlVJTERfREFURVRJTUVfRklMRSkgXAorICAgICAgICAgICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkgJChzeXN0ZW1fZGxrbWltYWdlX2ludGVybWVkaWF0ZXMpL3N5c3RlbV9kbGttX2ltYWdlX2luZm8udHh0IFwKICAgICAgICAgICAkKElOU1RBTExFRF9TWVNURU1fRExLTUlNQUdFX1RBUkdFVCkgJChUQVJHRVRfT1VUKQogICAkKGNhbGwgYXNzZXJ0LW1heC1pbWFnZS1zaXplLCQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNSU1BR0VfVEFSR0VUKSwkKEJPQVJEX1NZU1RFTV9ETEtNSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogZW5kZWYKQEAgLTYxODEsMTEgKzYxODEsMTQgQEAKIAogYnVpbHRfb3RhX3Rvb2xzIDo9CiAKKwogIyBXZSBjYW4ndCBidWlsZCBzdGF0aWMgZXhlY3V0YWJsZXMgd2hlbiBTQU5JVElaRV9UQVJHRVQ9YWRkcmVzcwogaWZlcSAoLCQoZmlsdGVyIGFkZHJlc3MsICQoU0FOSVRJWkVfVEFSR0VUKSkpCitpZmVxIChmYWxzZSwkKEFCX09UQV9VUERBVEVSKSkKIGJ1aWx0X290YV90b29scyArPSBcCiAgICAgJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixFWEVDVVRBQkxFUyx1cGRhdGVyKS91cGRhdGVyCiBlbmRpZgorZW5kaWYKIAogJChCVUlMVF9UQVJHRVRfRklMRVNfRElSKTogUFJJVkFURV9PVEFfVE9PTFMgOj0gJChidWlsdF9vdGFfdG9vbHMpCiAKZGlmZiAtLWdpdCBhL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tayBiL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tawppbmRleCA5NWMwNzM2Li4zZGE3NWQzIDEwMDY0NAotLS0gYS9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsKKysrIGIvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rCkBAIC0zOSw2ICszOSw3IEBACiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRFlOQU1JQ182NF8zMl9EUk1TRVJWRVIpCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRU5BQkxFX01FRElBRFJNXzY0KQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsVEFSR0VUX0RZTkFNSUNfNjRfMzJfTUVESUFTRVJWRVIpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsVEFSR0VUX1NVUFBPUlRTXzMyX0JJVF9BUFBTLCQoaWYgJChUQVJHRVRfU1VQUE9SVFNfMzJfQklUX0FQUFMpLHRydWUsZmFsc2UpKQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04pCiAKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELEFERElUSU9OQUxfTTRERUZTLCQoaWYgJChCT0FSRF9TRVBPTElDWV9NNERFRlMpLCQoYWRkcHJlZml4IC1ELCQoQk9BUkRfU0VQT0xJQ1lfTTRERUZTKSkpKQpAQCAtMTI4LDYgKzEyOSw4IEBACiAKIGlmZGVmIFBST0RVQ1RfQ0dST1VQX1YyX1NZU19BUFBfSVNPTEFUSU9OX0VOQUJMRUQKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3Zhcl92YWx1ZSxBTkRST0lELGNncm91cF92Ml9zeXNfYXBwX2lzb2xhdGlvbiwkKFBST0RVQ1RfQ0dST1VQX1YyX1NZU19BUFBfSVNPTEFUSU9OX0VOQUJMRUQpKQorZWxzZQorJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsY2dyb3VwX3YyX3N5c19hcHBfaXNvbGF0aW9uLHRydWUpCiBlbmRpZgogCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXJfdmFsdWUsQU5EUk9JRCxyZWxlYXNlX2F2Zl9hbGxvd19wcmVpbnN0YWxsZWRfYXBwcywkKFJFTEVBU0VfQVZGX0FMTE9XX1BSRUlOU1RBTExFRF9BUFBTKSkKZGlmZiAtLWdpdCBhL2NvcmUvbWFpbi5tayBiL2NvcmUvbWFpbi5tawppbmRleCA2MjRkZjQ5Li5kYTVkNDljIDEwMDY0NAotLS0gYS9jb3JlL21haW4ubWsKKysrIGIvY29yZS9tYWluLm1rCkBAIC0xNzU5LDEwICsxNzU5LDYgQEAKIAlAZWNobyAkKHNvcnQgJChwYXRzdWJzdCAkKFBST0RVQ1RfT1VUKS8lLCUsJChmaWx0ZXIgJChQUk9EVUNUX09VVCkvJSwkKG1vZHVsZXNfdG9faW5zdGFsbCkpKSkgfCB0ciAtcyAnICcgJ1xuJwogCUBlY2hvIFN1Y2Nlc3NmdWxseSBkdW1wZWQgcHJvZHVjdCB0YXJnZXQgZmlsZSBsaXN0LgogCi0uUEhPTlk6IG5vdGhpbmcKLW5vdGhpbmc6Ci0JQGVjaG8gU3VjY2Vzc2Z1bGx5IHJlYWQgdGhlIG1ha2VmaWxlcy4KLQogLlBIT05ZOiB0aWR5X29ubHkKIHRpZHlfb25seToKIAlAZWNobyBTdWNjZXNzZnVsbHkgbWFrZSB0aWR5X29ubHkuCkBAIC0xOTI3LDcgKzE5MjMsOCBAQAogCSAgJChldmFsIF9pc19wbGF0Zm9ybV9nZW5lcmF0ZWQgOj0gJChfaXNfYnVpbGRfcHJvcCkkKF9pc19ub3RpY2VfZmlsZSkkKF9pc19wcm9kdWN0X3N5c3RlbV9vdGhlcl9hdmJrZXkpJChfaXNfZXZlbnRfbG9nX3RhZ3NfZmlsZSkkKF9pc19zeXN0ZW1fb3RoZXJfb2RleF9tYXJrZXIpJChfaXNfa2VybmVsX21vZHVsZXNfYmxvY2tsaXN0KSQoX2lzX2ZzdmVyaXR5X2J1aWxkX21hbmlmZXN0X2FwaykkKF9pc19saW5rZXJfY29uZmlnKSQoX2lzX3BhcnRpdGlvbl9jb21wYXRfc3ltbGluaykkKF9pc19mbGFnc19maWxlKSQoX2lzX3Jvb3RkaXJfc3ltbGluaykpIFwKIAkgICQoZXZhbCBfc3RhdGljX2xpYnMgOj0gJChpZiAkKF9pc19zb29uZ19tb2R1bGUpLCwkKEFMTF9JTlNUQUxMRURfRklMRVMuJGYuU1RBVElDX0xJQlJBUklFUykpKSBcCiAJICAkKGV2YWwgX3dob2xlX3N0YXRpY19saWJzIDo9ICQoaWYgJChfaXNfc29vbmdfbW9kdWxlKSwsJChBTExfSU5TVEFMTEVEX0ZJTEVTLiRmLldIT0xFX1NUQVRJQ19MSUJSQVJJRVMpKSkgXAotCSAgJChldmFsIF9saWNlbnNlX3RleHQgOj0gJChpZiAkKGZpbHRlciAkKF9idWlsZF9vdXRwdXRfcGF0aCksJChBTExfTk9OX01PRFVMRVMpKSwkKEFMTF9OT05fTU9EVUxFUy4kKF9idWlsZF9vdXRwdXRfcGF0aCkuTk9USUNFUykpKSBcCisJICAkKGV2YWwgX2xpY2Vuc2VfdGV4dCA6PSAkKGlmICQoZmlsdGVyICQoX2J1aWxkX291dHB1dF9wYXRoKSwkKEFMTF9OT05fTU9EVUxFUykpLCQoQUxMX05PTl9NT0RVTEVTLiQoX2J1aWxkX291dHB1dF9wYXRoKS5OT1RJQ0VTKSxcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlmICQoX2lzX3BhcnRpdGlvbl9jb21wYXRfc3ltbGluayksYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRSkpKSBcCiAJICBlY2hvICckKF9idWlsZF9vdXRwdXRfcGF0aCksJChfbW9kdWxlX3BhdGgpLCQoX2lzX3Nvb25nX21vZHVsZSksJChfaXNfcHJlYnVpbHRfbWFrZV9tb2R1bGUpLCQoX3Byb2R1Y3RfY29weV9maWxlcyksJChfa2VybmVsX21vZHVsZV9jb3B5X2ZpbGVzKSwkKF9pc19wbGF0Zm9ybV9nZW5lcmF0ZWQpLCQoX3N0YXRpY19saWJzKSwkKF93aG9sZV9zdGF0aWNfbGlicyksJChfbGljZW5zZV90ZXh0KScgPj4gJEA7IFwKIAkpCiAKZGlmZiAtLWdpdCBhL2NvcmUvbWlzY19wcmVidWlsdF9pbnRlcm5hbC5tayBiL2NvcmUvbWlzY19wcmVidWlsdF9pbnRlcm5hbC5tawppbmRleCBhNTYyMjA3Li5iMTRiOWNlIDEwMDY0NAotLS0gYS9jb3JlL21pc2NfcHJlYnVpbHRfaW50ZXJuYWwubWsKKysrIGIvY29yZS9taXNjX3ByZWJ1aWx0X2ludGVybmFsLm1rCkBAIC0yNSw3ICsyNSw3IEBACiAKIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKIAotaWZuZXEgKCQoZmlsdGVyIGluaXQlcmMsJChub3RkaXIgJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKSkpJChmaWx0ZXIgJS9ldGMvaW5pdCwkKGRpciAkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKSksKQoraWZuZXEgKCQoZmlsdGVyIGluaXQlcmMsJChub3RkaXIgJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKSkpJChmaWx0ZXIgJS9ldGMvaW5pdC8sJChkaXIgJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKSkpLCkKICAgJChldmFsICQoY2FsbCBjb3B5LWluaXQtc2NyaXB0LWZpbGUtY2hlY2tlZCwkKG15X3ByZWJ1aWx0X3NyY19maWxlKSwkKExPQ0FMX0JVSUxUX01PRFVMRSkpKQogZWxzZQogJChMT0NBTF9CVUlMVF9NT0RVTEUpIDogJChteV9wcmVidWlsdF9zcmNfZmlsZSkKZGlmZiAtLWdpdCBhL2NvcmUvcHJvZHVjdF9jb25maWcubWsgYi9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rCmluZGV4IGY5M2I2M2MuLmQxODc3MGIgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvZHVjdF9jb25maWcubWsKKysrIGIvY29yZS9wcm9kdWN0X2NvbmZpZy5tawpAQCAtNDg1LDkgKzQ4NSw3IEBACiAKICMgU2hvdyBhIHdhcm5pbmcgd2FsbCBvZiB0ZXh0IGlmIG5vbi1jb21wbGlhbmNlLUdTSSBwcm9kdWN0cyBzZXQgdGhpcyBvcHRpb24uCiBpZmRlZiBQUk9EVUNUX0lOU1RBTExfREVCVUdfUE9MSUNZX1RPX1NZU1RFTV9FWFQKLSAgaWZlcSAoLCQoZmlsdGVyIGdzaV9hcm0gZ3NpX2FybTY0IGdzaV9hcm02NF9zb29uZ19zeXN0ZW0gZ3NpX3g4NiBnc2lfeDg2XzY0IFwKLSAgICAgICAgICAgICAgICAgIGdzaV94ODZfNjRfc29vbmdfc3lzdGVtIGdzaV9jYXJfYXJtNjQgZ3NpX2Nhcl94ODZfNjQgXAotICAgICAgICAgICAgICAgICAgZ3NpX3R2X2FybSBnc2lfdHZfYXJtNjQsJChQUk9EVUNUX05BTUUpKSkKKyAgaWZlcSAoLCQoZmlsdGVyIGdzaV9hcm0gZ3NpX2FybTY0IGdzaV94ODYgZ3NpX3g4Nl82NCBnc2lfY2FyX2FybTY0IGdzaV9jYXJfeDg2XzY0IGdzaV90dl9hcm0gZ3NpX3R2X2FybTY0LCQoUFJPRFVDVF9OQU1FKSkpCiAgICAgJCh3YXJuaW5nIFBST0RVQ1RfSU5TVEFMTF9ERUJVR19QT0xJQ1lfVE9fU1lTVEVNX0VYVCBpcyBzZXQgYnV0IFwKICAgICAgIFBST0RVQ1RfTkFNRSAoJChQUk9EVUNUX05BTUUpKSBkb2Vzbid0IGxvb2sgbGlrZSBhIEdTSSBmb3IgY29tcGxpYW5jZSBcCiAgICAgICB0ZXN0aW5nLiBUaGlzIGlzIGEgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBjb21wbGlhbmNlIEdTSSwgc28gZG8gbWFrZSBcCmRpZmYgLS1naXQgYS9jb3JlL3Byb2d1YXJkLmZsYWdzIGIvY29yZS9wcm9ndWFyZC5mbGFncwppbmRleCA1MTQ4ZTU2Li5kYzMyZTE1IDEwMDY0NAotLS0gYS9jb3JlL3Byb2d1YXJkLmZsYWdzCisrKyBiL2NvcmUvcHJvZ3VhcmQuZmxhZ3MKQEAgLTEsMTQgKzEsMyBAQAotIyBXZSBoYXZlIG1vdmVkIC1kb250b2JmdXNjYXRlIGFuZCAtZG9udG9wdGltaXplIHRvIHRoZSBtYWtlZmlsZXMuCi0jIGRleCBkb2VzIG5vdCBsaWtlIGNvZGUgcnVuIHRocm91Z2ggcHJvZ3VhcmQgb3B0aW1pemUgYW5kIHByZXZlcmlmeSBzdGVwcy4KLSMgLWRvbnRvcHRpbWl6ZQotLWRvbnRwcmV2ZXJpZnkKLQotIyBEb24ndCBvYmZ1c2NhdGUuIFdlIG9ubHkgbmVlZCBkZWFkIGNvZGUgc3RyaXBpbmcuCi0jIC1kb250b2JmdXNjYXRlCi0KLSMgQWRkIHRoaXMgZmxhZyBpbiB5b3VyIHBhY2thZ2UncyBvd24gY29uZmlndXJhdGlvbiBpZiBpdCdzIG5lZWRlZC4KLSMtZmxhdHRlbnBhY2thZ2VoaWVyYXJjaHkKLQogIyBLZWVwIGNsYXNzZXMgYW5kIG1lbWJlcnMgd2l0aCB0aGUgcGxhdGZvcm0tZGVmaW5lZCBAVmlzaWJsZUZvclRlc3RpbmcgYW5ub3RhdGlvbi4KIC1rZWVwIEBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZyBjbGFzcyAqCiAta2VlcGNsYXNzbWVtYmVycyBjbGFzcyAqIHsKZGlmZiAtLWdpdCBhL2NvcmUvcHJvZ3VhcmRfYmFzaWNfa2VlcHMuZmxhZ3MgYi9jb3JlL3Byb2d1YXJkX2Jhc2ljX2tlZXBzLmZsYWdzCmluZGV4IGY2YjM0YjguLmE5NDE2ZDUgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvZ3VhcmRfYmFzaWNfa2VlcHMuZmxhZ3MKKysrIGIvY29yZS9wcm9ndWFyZF9iYXNpY19rZWVwcy5mbGFncwpAQCAtMSw3ICsxLDMgQEAKLSMgU29tZSBjbGFzc2VzIGluIHRoZSBsaWJyYXJpZXMgZXh0ZW5kIHBhY2thZ2UgcHJpdmF0ZSBjbGFzc2VzIHRvIGNoYXJlIGNvbW1vbiBmdW5jdGlvbmFsaXR5Ci0jIHRoYXQgaXNuJ3QgZXhwbGljaXRseSBwYXJ0IG9mIHRoZSBBUEkKLS1kb250c2tpcG5vbnB1YmxpY2xpYnJhcnljbGFzc2VzIC1kb250c2tpcG5vbnB1YmxpY2xpYnJhcnljbGFzc21lbWJlcnMKLQogIyBQcmVzZXJ2ZSBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nIHN0YWNrIHRyYWNlcy4KIC1rZWVwYXR0cmlidXRlcyBTb3VyY2VGaWxlLExpbmVOdW1iZXJUYWJsZQogCmRpZmYgLS1naXQgYS9jb3JlL3Nvb25nX2NvbmZpZy5tayBiL2NvcmUvc29vbmdfY29uZmlnLm1rCmluZGV4IDczOTkwNWQuLmFkZmRiOWMgMTAwNjQ0Ci0tLSBhL2NvcmUvc29vbmdfY29uZmlnLm1rCisrKyBiL2NvcmUvc29vbmdfY29uZmlnLm1rCkBAIC00NDEsNiArNDQxLDcgQEAKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRQcmVidWlsdEJvb3RpbWFnZSwgJChCT0FSRF9QUkVCVUlMVF9CT09UX0lNQUdFKSkKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRQcmVidWlsdEluaXRCb290aW1hZ2UsICQoQk9BUkRfUFJFQlVJTFRfSU5JVF9CT09UX0lNQUdFKSkKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRCb290aW1hZ2VQYXJ0aXRpb25TaXplLCAkKEJPQVJEX0JPT1RJTUFHRV9QQVJUSVRJT05fU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkVmVuZG9yQm9vdGltYWdlUGFydGl0aW9uU2l6ZSwgJChCT0FSRF9WRU5ET1JfQk9PVElNQUdFX1BBUlRJVElPTl9TSVpFKSkKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRJbml0Qm9vdGltYWdlUGFydGl0aW9uU2l6ZSwgJChCT0FSRF9JTklUX0JPT1RfSU1BR0VfUEFSVElUSU9OX1NJWkUpKQogICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEJvb3RIZWFkZXJWZXJzaW9uLCAkKEJPQVJEX0JPT1RfSEVBREVSX1ZFUlNJT04pKQogICAkKGNhbGwgYWRkX2pzb25fc3RyLCBUYXJnZXRLZXJuZWxQYXRoLCAkKFRBUkdFVF9LRVJORUxfUEFUSCkpCkBAIC01NDYsNiArNTQ3LDggQEAKICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBicmlnaHRuZXNzX2RpbW1lZF9wZXJjZW50LCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9CUklHSFRORVNTX0RJTU1FRCkpCiAgICQoY2FsbCBlbmRfanNvbl9tYXApCiAKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgUHJlYnVpbHRCb290bG9hZGVyLCAkKEJPQVJEX1BSRUJVSUxUX0JPT1RMT0FERVIpKQorCiAkKGNhbGwgZW5kX2pzb25fbWFwKQogCiAjIEZvciBjb252ZXJ0aW5nIHZpbnRmX2RhdGEKZGlmZiAtLWdpdCBhL2NvcmUvc3lzcHJvcC5tayBiL2NvcmUvc3lzcHJvcC5tawppbmRleCBlNGY5OTRmLi45YTlmNTA5IDEwMDY0NAotLS0gYS9jb3JlL3N5c3Byb3AubWsKKysrIGIvY29yZS9zeXNwcm9wLm1rCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkkKGhpZGUpICQkKGNhbGwgZ2VuZXJhdGUtY29tbW9uLWJ1aWxkLXByb3BzLCQoY2FsbCB0by1sb3dlciwkKHN0cmlwICQoMSkpKSwkJEApCiBlbmRpZgogICAgICAgICAjIE1ha2UgYW5kIFNvb25nIHVzZSBkaWZmZXJlbnQgaW50ZXJtZWRpYXRlIGZpbGVzIHRvIGJ1aWxkIHZlbmRvci9idWlsZC5wcm9wLgotICAgICAgICAjIEFsdGhvdWdoIHRoZSBzeXNwcm9wIGNvbnRlbnRzIGFyZSBzYW1lLCB0aGUgYWJzb2x1dGUgcGF0aHMgb2YgYW5kcm9pZF9pbmZvLnByb3AgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgIyBBbHRob3VnaCB0aGUgc3lzcHJvcCBjb250ZW50cyBhcmUgc2FtZSwgdGhlIGFic29sdXRlIHBhdGhzIG9mIGFuZHJvaWQtaW5mby5wcm9wIGFyZSBkaWZmZXJlbnQuCiAgICAgICAgICMgUHJpbnQgdGhlIGZpbGVuYW1lIGZvciB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzIChmaWxlcyBpbiBPVVRfRElSKS4KICAgICAgICAgIyBUaGlzIGhlbHBzIHdpdGggdmFsaWRhdGluZyBtay0+c29vbmcgbWlncmF0aW9uIG9mIGFuZHJvaWQgcGFydGl0aW9ucy4KIAkkKGhpZGUpICQoZm9yZWFjaCBmaWxlLCQoc3RyaXAgJCgzKSksXApAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgJChUQVJHRVRfVkVORE9SX1BST1ApLFwKICAgICAkKHdpbGRjYXJkICQoVEFSR0VUX0RFVklDRV9ESVIpL3ZlbmRvci5wcm9wKSkKIAotYW5kcm9pZF9pbmZvX3Byb3AgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixFVEMsYW5kcm9pZF9pbmZvX3Byb3ApL2FuZHJvaWRfaW5mby5wcm9wCithbmRyb2lkX2luZm9fcHJvcCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEVUQyxhbmRyb2lkX2luZm9fcHJvcCkvYW5kcm9pZC1pbmZvLnByb3AKICQoYW5kcm9pZF9pbmZvX3Byb3ApOiAkKElOU1RBTExFRF9BTkRST0lEX0lORk9fVFhUX1RBUkdFVCkKIAljYXQgJDwgfCBncmVwICdyZXF1aXJlIHZlcnNpb24tJyB8IHNlZCAtZSAncy9yZXF1aXJlIHZlcnNpb24tL3JvLmJ1aWxkLmV4cGVjdC4vZycgPiAkQAogCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMtc2hhcmVkLWxpYnMubWsgYi9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMtc2hhcmVkLWxpYnMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MDUxNDAuLjAwMDAwMDAKLS0tIGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLlBIT05ZOiBnZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzCi0KLWludGVybWVkaWF0ZXNfZGlyIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLGdlbmVyYWwtdGVzdHMtc2hhcmVkLWxpYnMpCi0KLWdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfaG9zdC1zaGFyZWQtbGlicy56aXAKLQotIyBGaWx0ZXIgc2hhcmVkIGVudHJpZXMgYmV0d2VlbiBnZW5lcmFsLXRlc3RzIGFuZCBkZXZpY2UtdGVzdHMncyBIT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTLAotIyB0byBhdm9pZCB3YXJuaW5nIGFib3V0IG92ZXJyaWRpbmcgY29tbWFuZHMuCi1teV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgOj0gXAotICAkKGZvcmVhY2ggbSwkKGZpbHRlciAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKLQkgICAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSksJChjYWxsIHdvcmQtY29sb24sMiwkKG0pKSkKLW15X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcyA6PSBcCi0gICQoZmlsdGVyLW91dCAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKLQkgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpCi0KLW15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cyArPSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobXlfZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGliX2ZpbGVzKSkKLQotJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkgOiBQUklWQVRFX0lOVEVSTUVESUFURVNfRElSIDo9ICQoaW50ZXJtZWRpYXRlc19kaXIpCi0kKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSA6IFBSSVZBVEVfSE9TVF9TSEFSRURfTElCUyA6PSAkKG15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cykKLSQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApIDogUFJJVkFURV9nZW5lcmFsX2hvc3Rfc2hhcmVkX2xpYnNfemlwIDo9ICQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApCi0kKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSA6ICQobXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzKSAkKFNPT05HX1pJUCkKLQlybSAtcmYgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKQotCW1rZGlyIC1wICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90b29scwotCSQoaGlkZSkgZm9yIHNoYXJlZF9saWIgaW4gJChQUklWQVRFX0hPU1RfU0hBUkVEX0xJQlMpOyBkbyBcCi0JICBlY2hvICQkc2hhcmVkX2xpYiA+PiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3NoYXJlZC1saWJzLmxpc3Q7IFwKLQlkb25lCi0JZ3JlcCAkKEhPU1RfT1VUX1RFU1RDQVNFUykgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9zaGFyZWQtbGlicy5saXN0ID4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXNoYXJlZC1saWJzLmxpc3QgfHwgdHJ1ZQotCSQoU09PTkdfWklQKSAtZCAtbyAkKFBSSVZBVEVfZ2VuZXJhbF9ob3N0X3NoYXJlZF9saWJzX3ppcCkgXAotCSAgLVAgaG9zdCAtQyAkKEhPU1RfT1VUKSAtbCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3Qtc2hhcmVkLWxpYnMubGlzdAotCi1nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzOiAkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKQotJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBnZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLCAkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSkKLQotJChjYWxsIGRlY2xhcmUtMXAtY29udGFpbmVyLCQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApLCkKLSQoY2FsbCBkZWNsYXJlLWNvbnRhaW5lci1saWNlbnNlLWRlcHMsJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCksJChteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMpLCQoUFJPRFVDVF9PVVQpLzovKQotCi1pbnRlcm1lZGlhdGVzX2RpciA6PQotZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXAgOj0KZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tayBiL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tawppbmRleCAxOTAxZWQ1Li5kY2ZjZmFkIDEwMDY0NAotLS0gYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsKKysrIGIvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rCkBAIC0yNywxOSArMjcsNjEgQEAKICMgQ3JlYXRlIGFuIGFydGlmYWN0IHRvIGluY2x1ZGUgYWxsIHRlc3QgY29uZmlnIGZpbGVzIGluIGdlbmVyYWwtdGVzdHMuCiBnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfY29uZmlncy56aXAKIAotZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXAgOj0gJChQUk9EVUNUX09VVCkvZ2VuZXJhbC10ZXN0c19ob3N0LXNoYXJlZC1saWJzLnppcAorIyBGaWx0ZXIgc2hhcmVkIGVudHJpZXMgYmV0d2VlbiBnZW5lcmFsLXRlc3RzIGFuZCBkZXZpY2UtdGVzdHMncyBIT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTLAorIyB0byBhdm9pZCB3YXJuaW5nIGFib3V0IG92ZXJyaWRpbmcgY29tbWFuZHMuCitteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgOj0gXAorICAkKGZvcmVhY2ggbSwkKGZpbHRlciAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKKwkgICAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSksJChjYWxsIHdvcmQtY29sb24sMiwkKG0pKSkKK215X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcyA6PSBcCisgICQoZmlsdGVyLW91dCAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKKwkgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpCiAKLSQoZ2VuZXJhbF90ZXN0c196aXApIDogJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkKK215X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cyArPSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobXlfZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGliX2ZpbGVzKSkKKworbXlfaG9zdF9zaGFyZWRfbGliX3N5bWxpbmtzIDo9IFwKKyAgICAkKGZpbHRlciAkKENPTVBBVElCSUxJVFkuaG9zdC11bml0LXRlc3RzLlNZTUxJTktTKSxcCisJJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuU1lNTElOS1MpKQorCitteV9nZW5lcmFsX3Rlc3RzX3N5bWxpbmtzIDo9IFwKKyAgICAkKGZpbHRlci1vdXQgJChDT01QQVRJQklMSVRZLmNhbWVyYS1oYWwtdGVzdHMuU1lNTElOS1MpLFwKKyAgICAkKGZpbHRlci1vdXQgJChDT01QQVRJQklMSVRZLmhvc3QtdW5pdC10ZXN0cy5TWU1MSU5LUyksXAorCSAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TWU1MSU5LUykpKQorCitteV9zeW1saW5rc19mb3JfZ2VuZXJhbF90ZXN0cyA6PSAkKGZvcmVhY2ggZiwkKG15X2dlbmVyYWxfdGVzdHNfc3ltbGlua3MpLFwKKwkkKHN0cmlwICQoZXZhbCBfY21mX3R1cGxlIDo9ICQoc3Vic3QgOiwgLCQoZikpKSBcCisJJChldmFsIF9jbWZfZGVwIDo9ICQod29yZCAxLCQoX2NtZl90dXBsZSkpKSBcCisJJChldmFsIF9jbWZfc3JjIDo9ICQod29yZCAyLCQoX2NtZl90dXBsZSkpKSBcCisJJChldmFsIF9jbWZfZGVzdCA6PSAkKHdvcmQgMywkKF9jbWZfdHVwbGUpKSkgXAorCSQoY2FsbCBzeW1saW5rLWZpbGUsJChfY21mX2RlcCksJChfY21mX3NyYyksJChfY21mX2Rlc3QpKSBcCisJJChfY21mX2Rlc3QpKSkKKworIyBJbiB0aGlzIG9uZSBkaXJlY3RseSB0YWtlIHRoZSBvdmVybGFwIGludG8gdGhlIHppcCBzaW5jZSB3ZSBjYW4ndCByZXdyaXRlIHJ1bGVzCitteV9zeW1saW5rc19mb3JfZ2VuZXJhbF90ZXN0cyArPSAkKGZvcmVhY2ggZiwkKG15X2hvc3Rfc2hhcmVkX2xpYl9zeW1saW5rcyksXAorICAgICAgICAkKHN0cmlwICQoZXZhbCBfY21mX3R1cGxlIDo9ICQoc3Vic3QgOiwgLCQoZikpKSBcCisgICAgICAgICQoZXZhbCBfY21mX2RlcCA6PSAkKHdvcmQgMSwkKF9jbWZfdHVwbGUpKSkgXAorICAgICAgICAkKGV2YWwgX2NtZl9zcmMgOj0gJCh3b3JkIDIsJChfY21mX3R1cGxlKSkpIFwKKyAgICAgICAgJChldmFsIF9jbWZfZGVzdCA6PSAkKHdvcmQgMywkKF9jbWZfdHVwbGUpKSkgXAorICAgICAgICAkKF9jbWZfZGVzdCkpKQorCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfZ2VuZXJhbF90ZXN0c19saXN0X3ppcCA6PSAkKGdlbmVyYWxfdGVzdHNfbGlzdF96aXApCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IC5LQVRJX0lNUExJQ0lUX09VVFBVVFMgOj0gJChnZW5lcmFsX3Rlc3RzX2xpc3RfemlwKSAkKGdlbmVyYWxfdGVzdHNfY29uZmlnc196aXApCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfVE9PTFMgOj0gJChnZW5lcmFsX3Rlc3RzX3Rvb2xzKQogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX0lOVEVSTUVESUFURVNfRElSIDo9ICQoaW50ZXJtZWRpYXRlc19kaXIpCiskKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfSE9TVF9TSEFSRURfTElCUyA6PSAkKG15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cykKKyQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9TWU1MSU5LUyA6PSAkKG15X3N5bWxpbmtzX2Zvcl9nZW5lcmFsX3Rlc3RzKQogJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX2dlbmVyYWxfdGVzdHNfY29uZmlnc196aXAgOj0gJChnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwKQotJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5GSUxFUykgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuU09PTkdfSU5TVEFMTEVEX0NPTVBBVElCSUxJVFlfU1VQUE9SVF9GSUxFUykgJChnZW5lcmFsX3Rlc3RzX3Rvb2xzKSAkKFNPT05HX1pJUCkKKyQoZ2VuZXJhbF90ZXN0c196aXApIDogJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuRklMRVMpICQobXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzKSAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TT09OR19JTlNUQUxMRURfQ09NUEFUSUJJTElUWV9TVVBQT1JUX0ZJTEVTKSAkKGdlbmVyYWxfdGVzdHNfdG9vbHMpICQobXlfc3ltbGlua3NfZm9yX2dlbmVyYWxfdGVzdHMpICQoU09PTkdfWklQKQogCXJtIC1yZiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpCiAJcm0gLWYgJEAgJChQUklWQVRFX2dlbmVyYWxfdGVzdHNfbGlzdF96aXApCiAJbWtkaXIgLXAgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKSAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3Rvb2xzCiAJZWNobyAkKHNvcnQgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuRklMRVMpICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLlNPT05HX0lOU1RBTExFRF9DT01QQVRJQklMSVRZX1NVUFBPUlRfRklMRVMpKSB8IHRyICIgIiAiXG4iID4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9saXN0CisJZm9yIHN5bWxpbmsgaW4gJChQUklWQVRFX1NZTUxJTktTKTsgZG8gXAorCSAgZWNobyAkJHN5bWxpbmsgPj4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9saXN0OyBcCisJZG9uZQorCSQoaGlkZSkgZm9yIHNoYXJlZF9saWIgaW4gJChQUklWQVRFX0hPU1RfU0hBUkVEX0xJQlMpOyBkbyBcCisJICBlY2hvICQkc2hhcmVkX2xpYiA+PiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3NoYXJlZC1saWJzLmxpc3Q7IFwKKwlkb25lCisJZ3JlcCAkKEhPU1RfT1VUX1RFU1RDQVNFUykgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9zaGFyZWQtbGlicy5saXN0ID4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXNoYXJlZC1saWJzLmxpc3QgfHwgdHJ1ZQogCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC5saXN0IHx8IHRydWUKIAlncmVwICQoVEFSR0VUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdGFyZ2V0Lmxpc3QgfHwgdHJ1ZQogCWdyZXAgLWUgLipcXC5jb25maWckJCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QubGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC10ZXN0LWNvbmZpZ3MubGlzdCB8fCB0cnVlCkBAIC00OSw2ICs5MSw3IEBACiAJICAtUCBob3N0IC1DICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikgLUQgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90b29scyBcCiAJICAtUCBob3N0IC1DICQoSE9TVF9PVVQpIC1sICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC5saXN0IFwKIAkgIC1QIHRhcmdldCAtQyAkKFBST0RVQ1RfT1VUKSAtbCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3RhcmdldC5saXN0IFwKKwkgIC1QIGhvc3QgLUMgJChIT1NUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXNoYXJlZC1saWJzLmxpc3QgXAogCSAgLXNoYTI1NgogCSQoU09PTkdfWklQKSAtZCAtbyAkKFBSSVZBVEVfZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCkgXAogCSAgLVAgaG9zdCAtQyAkKEhPU1RfT1VUKSAtbCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QtdGVzdC1jb25maWdzLmxpc3QgXApAQCAtNjksMyArMTEyLDggQEAKIGdlbmVyYWxfdGVzdHNfbGlzdF96aXAgOj0KIGdlbmVyYWxfdGVzdHNfY29uZmlnc196aXAgOj0KIGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwIDo9CitteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgOj0KK215X3N5bWxpbmtzX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9CitteV9nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJfZmlsZXMgOj0KK215X2dlbmVyYWxfdGVzdHNfc3ltbGlua3MgOj0KK215X2hvc3Rfc2hhcmVkX2xpYl9zeW1saW5rcyA6PQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9tb2R1bGUtaW5mby5tayBiL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsKaW5kZXggMGNhMjdkOC4uZGQwMWY5NiAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9tb2R1bGUtaW5mby5taworKysgYi9jb3JlL3Rhc2tzL21vZHVsZS1pbmZvLm1rCkBAIC01MCw2ICs1MCw4IEBACiAJCQkkKGNhbGwgd3JpdGUtb3B0aW9uYWwtanNvbi1saXN0LCAiaG9zdF9kZXBlbmRlbmNpZXMiLCAkKHNvcnQgJChBTExfTU9EVUxFUy4kKG0pLkhPU1RfUkVRVUlSRURfRlJPTV9UQVJHRVQpKSkgXAogCQkJJChjYWxsIHdyaXRlLW9wdGlvbmFsLWpzb24tbGlzdCwgInRhcmdldF9kZXBlbmRlbmNpZXMiLCAkKHNvcnQgJChBTExfTU9EVUxFUy4kKG0pLlRBUkdFVF9SRVFVSVJFRF9GUk9NX0hPU1QpKSkgXAogCQkJJChjYWxsIHdyaXRlLW9wdGlvbmFsLWpzb24tYm9vbCwgInRlc3RfbW9kdWxlX2NvbmZpZ19iYXNlIiwgJChBTExfTU9EVUxFUy4kKG0pLlRFU1RfTU9EVUxFX0NPTkZJR19CQVNFKSkgXAorCQkJJChjYWxsIHdyaXRlLW9wdGlvbmFsLWpzb24tYm9vbCwgIm1ha2UiLCAkKGlmICQoQUxMX01PRFVMRVMuJChtKS5JU19TT09OR19NT0RVTEUpLCx0cnVlKSkgXAorCQkJJChjYWxsIHdyaXRlLW9wdGlvbmFsLWpzb24tYm9vbCwgIm1ha2VfZ2VuZXJhdGVkX21vZHVsZV9pbmZvIiwgdHJ1ZSkgXAogCQknfScpJ1xufVxuJyA+PiAkQC50bXAKIAkkKFBSSVZBVEVfTUVSR0VfSlNPTl9PQkpFQ1RTKSAtbyAkQCAkKFBSSVZBVEVfU09PTkdfTU9EVUxFX0lORk8pICRALnRtcAogCXJtICRALnRtcApkaWZmIC0tZ2l0IGEvcGFja2FnaW5nL2Rpc3RkaXIubWsgYi9wYWNrYWdpbmcvZGlzdGRpci5tawppbmRleCAxNTNlY2Y2Li45N2VkOTVhIDEwMDY0NAotLS0gYS9wYWNrYWdpbmcvZGlzdGRpci5taworKysgYi9wYWNrYWdpbmcvZGlzdGRpci5tawpAQCAtNDUsNSArNDUsMyBAQAogZW5kaWYKIAogY29weS1vbmUtZGlzdC1maWxlIDo9Ci1ESVNUX0dPQUxfT1VUUFVUX1BBSVJTIDo9Ci1ESVNUX1NSQ19EU1RfUEFJUlMgOj0KZGlmZiAtLWdpdCBhL3BhY2thZ2luZy9tYWluX3Nvb25nX29ubHkubWsgYi9wYWNrYWdpbmcvbWFpbl9zb29uZ19vbmx5Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWU1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdpbmcvbWFpbl9zb29uZ19vbmx5Lm1rCkBAIC0wLDAgKzEsNjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDI1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2lmbmRlZiBLQVRJCiskKGVycm9yIE9ubHkgS2F0aSBpcyBzdXBwb3J0ZWQuKQorZW5kaWYKKworJChpbmZvIFsxLzRdIGluaXRpYWxpemluZyBwYWNrYWdpbmcgc3lzdGVtIC4uLikKKworLktBVElfUkVBRE9OTFkgOj0gS0FUSV9QQUNLQUdFX01LX0RJUgorCitpbmNsdWRlIGJ1aWxkL21ha2UvY29tbW9uL2NvcmUubWsKK2luY2x1ZGUgYnVpbGQvbWFrZS9jb21tb24vc3RyaW5ncy5taworCisjIERlZmluZSB3ZWxsLWtub3duIGdvYWxzIGFuZCB0aGVpciBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgdGhleSd2ZQorIyB0cmFkaXRpb25hbGx5IGhhZCBpbiBtYWtlIGJ1aWxkcy4gQWxzbyBpdCdzIGltcG9ydGFudCB0byBkZWZpbmUKKyMgZHJvaWQgZmlyc3Qgc28gdGhhdCBpdCdzIGJ1aWx0IGJ5IGRlZmF1bHQuCisKKy5QSE9OWTogZHJvaWQKK2Ryb2lkOiBkcm9pZF90YXJnZXRzCisKKy5QSE9OWTogZHJvaWRfdGFyZ2V0cworZHJvaWRfdGFyZ2V0czogZHJvaWRjb3JlIGRpc3RfZmlsZXMKKworLlBIT05ZOiBkaXN0X2ZpbGVzCitkaXN0X2ZpbGVzOgorCisuUEhPTlk6IGRyb2lkY29yZQorZHJvaWRjb3JlOiBkcm9pZGNvcmUtdW5idW5kbGVkCisKKy5QSE9OWTogZHJvaWRjb3JlLXVuYnVuZGxlZAorZHJvaWRjb3JlLXVuYnVuZGxlZDoKKworJChpbmZvIFsyLzRdIGluY2x1ZGluZyBkaXN0ZGlyLm1rIC4uLikKKworaW5jbHVkZSBidWlsZC9tYWtlL3BhY2thZ2luZy9kaXN0ZGlyLm1rCisKKyQoaW5mbyBbMy80XSBkZWZpbmluZyBwaG9ueSBtb2R1bGVzIC4uLikKKworaW5jbHVkZSAkKE9VVF9ESVIpL3Nvb25nL3Nvb25nX3Bob255X3RhcmdldHMubWsKKworZ29hbHMgOj0gJChzb3J0ICQoZm9yZWFjaCBwYWlyLCQoRElTVF9HT0FMX09VVFBVVF9QQUlSUyksJChjYWxsIHdvcmQtY29sb24sMSwkKHBhaXIpKSkpCiskKGZvcmVhY2ggZ29hbCwkKGdvYWxzKSwgXAorICAkKGV2YWwgLlBIT05ZOiAkJChnb2FsKSkgXAorICAkKGV2YWwgJCQoZ29hbCk6KSBcCisgICQoaWYgJChjYWxsIHN0cmVxLCQoRElTVCksdHJ1ZSksXAorICAgICQoZXZhbCAkJChnb2FsKTogX2Rpc3RfJCQoZ29hbCkpKSkKKworJChpbmZvIFs0LzRdIHdyaXRpbmcgcGFja2FnaW5nIHJ1bGVzIC4uLikKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKaW5kZXggYjNiNThkMy4uOTBkNDVhOCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBjb20uYW5kcm9pZC5hZGJkIFwKICAgICBjb20uYW5kcm9pZC5hZHNlcnZpY2VzIFwKICAgICBjb20uYW5kcm9pZC5hcHBzZWFyY2ggXAotICAgIGNvbS5hbmRyb2lkLmJ0c2VydmljZXMgXAorICAgIGNvbS5hbmRyb2lkLmJ0IFwKICAgICBjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZSBcCiAgICAgY29tLmFuZHJvaWQuY29uc2NyeXB0IFwKICAgICBjb20uYW5kcm9pZC5kZXZpY2Vsb2NrIFwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5tayBiL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5tawppbmRleCBkODU3ZTA0Li5lNTQzY2NmIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZGVmYXVsdF9hcnRfY29uZmlnLm1rCkBAIC02NSw3ICs2NSw3IEBACiAgICAgY29tLmFuZHJvaWQuYWRzZXJ2aWNlczpmcmFtZXdvcmstYWRzZXJ2aWNlcyBcCiAgICAgY29tLmFuZHJvaWQuYWRzZXJ2aWNlczpmcmFtZXdvcmstc2Rrc2FuZGJveCBcCiAgICAgY29tLmFuZHJvaWQuYXBwc2VhcmNoOmZyYW1ld29yay1hcHBzZWFyY2ggXAotICAgIGNvbS5hbmRyb2lkLmJ0c2VydmljZXM6ZnJhbWV3b3JrLWJsdWV0b290aCBcCisgICAgY29tLmFuZHJvaWQuYnQ6ZnJhbWV3b3JrLWJsdWV0b290aCBcCiAgICAgY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmU6ZnJhbWV3b3JrLWNvbmZpZ2luZnJhc3RydWN0dXJlIFwKICAgICBjb20uYW5kcm9pZC5jb25zY3J5cHQ6Y29uc2NyeXB0IFwKICAgICBjb20uYW5kcm9pZC5kZXZpY2Vsb2NrOmZyYW1ld29yay1kZXZpY2Vsb2NrIFwKQEAgLTE3MSw3ICsxNzEsNyBAQAogIyBLZWVwIHRoZSBsaXN0IHNvcnRlZCBieSBtb2R1bGUgbmFtZXMgYW5kIHRoZW4gbGlicmFyeSBuYW1lcy4KICMgTm90ZTogRm9yIG1vZHVsZXMgYXZhaWxhYmxlIGluIFEsIERPIE5PVCBhZGQgbmV3IGVudHJpZXMgaGVyZS4KIFBST0RVQ1RfQVBFWF9TVEFOREFMT05FX1NZU1RFTV9TRVJWRVJfSkFSUyA6PSBcCi0gICAgY29tLmFuZHJvaWQuYnRzZXJ2aWNlczpzZXJ2aWNlLWJsdWV0b290aCBcCisgICAgY29tLmFuZHJvaWQuYnQ6c2VydmljZS1ibHVldG9vdGggXAogICAgIGNvbS5hbmRyb2lkLmRldmljZWxvY2s6c2VydmljZS1kZXZpY2Vsb2NrIFwKICAgICBjb20uYW5kcm9pZC5vcy5zdGF0c2Q6c2VydmljZS1zdGF0c2QgXAogICAgIGNvbS5hbmRyb2lkLnNjaGVkdWxpbmc6c2VydmljZS1zY2hlZHVsaW5nIFwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icCBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icAppbmRleCA3NDA3ZDdmLi4zMTQ4MTZkIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljL0FuZHJvaWQuYnAKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwCkBAIC02NDIsNiArNjQyLDcgQEAKICAgICAgICAgZGVmYXVsdDogW10sCiAgICAgfSkgKyBzZWxlY3QocHJvZHVjdF92YXJpYWJsZSgiZGVidWdnYWJsZSIpLCB7CiAgICAgICAgIHRydWU6IFsKKyAgICAgICAgICAgICJhbGxvY3RvcCIsCiAgICAgICAgICAgICAiYWRldmljZV9maW5nZXJwcmludCIsCiAgICAgICAgICAgICAiYXJwaW5nIiwKICAgICAgICAgICAgICJhdmJjdGwiLApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcgYi90b29scy9hY29uZmlnL1RFU1RfTUFQUElORwppbmRleCBhN2YwYTRmLi42ZTUzMDE4IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL1RFU1RfTUFQUElORworKysgYi90b29scy9hY29uZmlnL1RFU1RfTUFQUElORwpAQCAtMTA2LDEwICsxMDYsNiBAQAogICAgIHsKICAgICAgIC8vIGFjb25maWdfc3RvcmFnZSByZWFkIGZ1bmN0aW9uYWwgdGVzdAogICAgICAgIm5hbWUiOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRfZnVuY3Rpb25hbCIKLSAgICB9LAotICAgIHsKLSAgICAgIC8vIGFjb25maWdfc3RvcmFnZSByZWFkIHVuaXQgdGVzdAotICAgICAgIm5hbWUiOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdCIKICAgICB9CiAgIF0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKaW5kZXggNWUzZWIxMi4uY2NlMGNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKQEAgLTI0Myw2ICsyNDMsMTEgQEAKICAgICBjcmF0ZV9uYW1lOiAiYWNvbmZpZ190ZXN0X3J1c3RfbGlicmFyeSIsCiAgICAgYWNvbmZpZ19kZWNsYXJhdGlvbnM6ICJhY29uZmlnLnRlc3QuZmxhZ3MiLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogcnVzdF90ZXN0IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKaW5kZXggODEzNDBmMi4uZjQxYTZjYSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogICAgICAgICBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKICAgICAgICAgLyoqIEBoaWRlICovCiAgICAgICAgIHB1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIHsKLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LkZlYXR1cmVGbGFnc0ltcGwiOworICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJGZWF0dXJlRmxhZ3NJbXBsIjsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gaXNDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSdyA9IGZhbHNlOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSBmYWxzZTsKQEAgLTU1NSwxNCArNTU1LDE0IEBACiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVuYWJsZWRSdyA9IHRydWU7CiAgICAgICAgICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcmVhZGVyID0gUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoInN5c3RlbSIsICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiLCAweDUwODFDRTcyMjFDNzcwNjRMKTsKKyAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiLCAweDUwODFDRTcyMjFDNzcwNjRMKTsKICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSdyA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDApOwogICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgxKTsKICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZFJ3ID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoNyk7CiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMik7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vQ2xhc3NEZWZGb3VuZEVycm9yIGUpIHsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChMaW5rYWdlRXJyb3IgZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbWFpbmxpbmUgbW9kdWxlIHJ1bm5pbmcgb24gb2xkZXIgZGV2aWNlcy4KICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZXMgdG8gdmVyc2lvbiBjaGVjaywgYWZ0ZXIgdGhlIHZlcnNpb24gYnVtcC4KICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwpAQCAtOTI5LDcgKzkyOSw3IEBACiAgICAgICAgIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogICAgICAgICAvKiogQGhpZGUgKi8KICAgICAgICAgcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVGbGFnc0ltcGwgaW1wbGVtZW50cyBGZWF0dXJlRmxhZ3MgewotICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuRmVhdHVyZUZsYWdzSW1wbF9leHBvcnRlZCI7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkZlYXR1cmVGbGFnc0ltcGxFeHBvcnQiOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBpc0NhY2hlZCA9IGZhbHNlOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZW5hYmxlZEZpeGVkUm9FeHBvcnRlZCA9IGZhbHNlOwpAQCAtOTQzLDcgKzk0Myw3IEBACiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gcGFzcwogICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoTm9DbGFzc0RlZkZvdW5kRXJyb3IgZSkgeworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKExpbmthZ2VFcnJvciBlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBtYWlubGluZSBtb2R1bGUgcnVubmluZyBvbiBvbGRlciBkZXZpY2VzLgogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSByZXBsYWNlcyB0byB2ZXJzaW9uIGNoZWNrLCBhZnRlciB0aGUgdmVyc2lvbiBidW1wLgogICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzSW1wbC5qYXZhLnRlbXBsYXRlCmluZGV4IDhiM2QzZTEuLjc1MGE2YmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzSW1wbC5qYXZhLnRlbXBsYXRlCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzSW1wbC5qYXZhLnRlbXBsYXRlCkBAIC0xNiw3ICsxNiw3IEBACiAvKiogQGhpZGUgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIFx7CiB7eyAtaWYgcnVudGltZV9sb29rdXBfcmVxdWlyZWQgfX0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIntwYWNrYWdlX25hbWV9LkZlYXR1cmVGbGFnc0ltcGwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmVhdHVyZUZsYWdzSW1wbCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBpc0NhY2hlZCA9IGZhbHNlOwoge3sgZm9yIGZsYWcgaW4gZmxhZ19lbGVtZW50cyB9fQoge3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQpAQCAtMjcsOSArMjcsOSBAQAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgXHsKICAgICAgICAgdHJ5IFx7CiB7eyBpZiBpc19wbGF0Zm9ybV9jb250YWluZXIgfX0KLSAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgie2NvbnRhaW5lcn0iLCAie3BhY2thZ2VfbmFtZX0iLCB7cGFja2FnZV9maW5nZXJwcmludH0pOworICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJ7cGFja2FnZV9uYW1lfSIsIHtwYWNrYWdlX2ZpbmdlcnByaW50fSk7CiB7eyAtZWxzZSB9fQotICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSBBY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoIntjb250YWluZXJ9IiwgIntwYWNrYWdlX25hbWV9Iiwge3BhY2thZ2VfZmluZ2VycHJpbnR9KTsKKyAgICAgICAgICAgIEFjb25maWdQYWNrYWdlSW50ZXJuYWwgcmVhZGVyID0gQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJ7cGFja2FnZV9uYW1lfSIsIHtwYWNrYWdlX2ZpbmdlcnByaW50fSk7CiB7eyAtZW5kaWYgfX0KICAgICAgICAge3sgLWZvciBuYW1lc3BhY2Vfd2l0aF9mbGFncyBpbiBuYW1lc3BhY2VfZmxhZ3MgfX0KICAgICAgICAge3sgLWZvciBmbGFnIGluIG5hbWVzcGFjZV93aXRoX2ZsYWdzLmZsYWdzIH19CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHt7IC1lbmRmb3IgfX0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIFx7CiAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0gY2F0Y2ggKE5vQ2xhc3NEZWZGb3VuZEVycm9yIGUpIFx7CisgICAgICAgIH0gY2F0Y2ggKExpbmthZ2VFcnJvciBlKSBcewogICAgICAgICAgICAgLy8gZm9yIG1haW5saW5lIG1vZHVsZSBydW5uaW5nIG9uIG9sZGVyIGRldmljZXMuCiAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSByZXBsYWNlcyB0byB2ZXJzaW9uIGNoZWNrLCBhZnRlciB0aGUgdmVyc2lvbiBidW1wLgogICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwpAQCAtNzAsMTAgKzcwLDEwIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIC8qKiBAaGlkZSAqLwogcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVGbGFnc0ltcGwgaW1wbGVtZW50cyBGZWF0dXJlRmxhZ3MgXHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIntwYWNrYWdlX25hbWV9LkZlYXR1cmVGbGFnc0ltcGxfZXhwb3J0ZWQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmVhdHVyZUZsYWdzSW1wbEV4cG9ydCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBpc0NhY2hlZCA9IGZhbHNlOwoge3sgZm9yIGZsYWcgaW4gZmxhZ19lbGVtZW50cyB9fQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9ID0ge2ZsYWcuZGVmYXVsdF92YWx1ZX07CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSBmYWxzZTsKIHt7IC1lbmRmb3IgfX0KICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIFx7CiAgICAgICAgIHRyeSBcewpAQCAtODYsNyArODYsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKICAgICAgICAgICAgIC8vIHBhc3MKICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKLSAgICAgICAgfSBjYXRjaCAoTm9DbGFzc0RlZkZvdW5kRXJyb3IgZSkgXHsKKyAgICAgICAgfSBjYXRjaCAoTGlua2FnZUVycm9yIGUpIFx7CiAgICAgICAgICAgICAvLyBmb3IgbWFpbmxpbmUgbW9kdWxlIHJ1bm5pbmcgb24gb2xkZXIgZGV2aWNlcy4KICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VzIHRvIHZlcnNpb24gY2hlY2ssIGFmdGVyIHRoZSB2ZXJzaW9uIGJ1bXAuCiAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlCmluZGV4IDMyNWRiZGMuLmRjNGU0MzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlCkBAIC0zMCwxNSArMzAsMTggQEAKICAgICAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBvdmVycmlkZXNfOwogCiAgICAge3sgaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uLSB9fQorICAgIHt7IGlmIHJlYWR3cml0ZS0gfX0KICAgICAgICAgdWludDMyX3QgYm9vbGVhbl9zdGFydF9pbmRleF87CiAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGFjb25maWdfc3RvcmFnZTo6TWFwcGVkU3RvcmFnZUZpbGU+IGZsYWdfdmFsdWVfZmlsZV87CiAKICAgICAgICAgYm9vbCBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXzsKICAgICB7eyAtZW5kaWYgfX0KKyAgICB7eyAtZW5kaWYgfX0KIAogICAgIHB1YmxpYzoKICAgICB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24tIH19CisgICAge3sgaWYgcmVhZHdyaXRlLSB9fQogICAgICAgICBmbGFnX3Byb3ZpZGVyKCkKICAgICAgICAgICAgIDogb3ZlcnJpZGVzXygpCiAgICAgICAgICAgICAsIGJvb2xlYW5fc3RhcnRfaW5kZXhfKCkKQEAgLTk0LDggKzk3LDEzIEBACiAgICAgICAgICAgICA6IG92ZXJyaWRlc18oKQogICAgICAgICBce30KICAgICB7eyAtZW5kaWYgfX0KKyAgICB7eyAtZWxzZSB9fQorICAgICAgICBmbGFnX3Byb3ZpZGVyKCkKKyAgICAgICAgICAgIDogb3ZlcnJpZGVzXygpCisgICAgICAgIFx7fQorICAgIHt7IC1lbmRpZiB9fQogCi17eyBmb3IgaXRlbSBpbiBjbGFzc19lbGVtZW50cyB9fQorICAgIHt7IGZvciBpdGVtIGluIGNsYXNzX2VsZW1lbnRzIH19CiAgICAgICAgIHZpcnR1YWwgYm9vbCB7aXRlbS5mbGFnX25hbWV9KCkgb3ZlcnJpZGUgXHsKICAgICAgICAgICAgIGF1dG8gaXQgPSBvdmVycmlkZXNfLmZpbmQoIntpdGVtLmZsYWdfbmFtZX0iKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBvdmVycmlkZXNfLmVuZCgpKSBcewpAQCAtMTMyLDcgKzE0MCw3IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCB7aXRlbS5mbGFnX25hbWV9KGJvb2wgdmFsKSBvdmVycmlkZSBcewogICAgICAgICAgICAgb3ZlcnJpZGVzX1sie2l0ZW0uZmxhZ19uYW1lfSJdID0gdmFsOwogICAgICAgICB9Ci17eyBlbmRmb3IgfX0KKyAgICB7eyBlbmRmb3IgfX0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRfZmxhZ3MoKSBvdmVycmlkZSBcewogICAgICAgICAgICAgb3ZlcnJpZGVzXy5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9BbmRyb2lkLmJwCmluZGV4IGJkZjk2ZWQuLjM1MzE0NTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL0FuZHJvaWQuYnAKQEAgLTI2LDcgKzI2LDYgQEAKICAgICAgICAgImxpYmFjb25maWdfcHJvdG9zIiwKICAgICAgICAgImxpYmFueWhvdyIsCiAgICAgICAgICJsaWJwcm90b2J1ZiIsCi0gICAgICAgICJsaWJyZWdleCIsCiAgICAgXSwKIH0KIApAQCAtMzUsNiArMzQsMTEgQEAKICAgICBjcmF0ZV9uYW1lOiAiYWNvbmZpZ19kZXZpY2VfcGF0aHMiLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAogICAgIGRlZmF1bHRzOiBbImxpYmFjb25maWdfZGV2aWNlX3BhdGhzLmRlZmF1bHRzIl0sCisgICAgYXBleF9hdmFpbGFibGU6IFsKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgICAgICAiY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUiLAorICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAogfQogCiBnZW5ydWxlIHsKQEAgLTU0LDcgKzU4LDkgQEAKICAgICBzZGtfdmVyc2lvbjogImNvcmVfcGxhdGZvcm0iLAogICAgIGFwZXhfYXZhaWxhYmxlOiBbCiAgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKICAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogZ2VucnVsZSB7CkBAIC03MywzICs3OSwyMyBAQAogICAgIG5hbWU6ICJhY29uZmlnX2hvc3RfZGV2aWNlX3BhdGhzX2phdmEiLAogICAgIHNyY3M6IFsiOmxpYmFjb25maWdfamF2YV9ob3N0X2RldmljZV9wYXRoc19zcmMiXSwKIH0KKworZ2VucnVsZSB7CisgICAgbmFtZTogImphdmFfZGV2aWNlX3BhdGhzX3Rlc3RfdXRpbF9zcmMiLAorICAgIHNyY3M6IFsic3JjL0RldmljZVByb3Rvc1Rlc3RVdGlsVGVtcGxhdGUuamF2YSJdLAorICAgIG91dDogWyJEZXZpY2VQcm90b3NUZXN0VXRpbC5qYXZhIl0sCisgICAgdG9vbF9maWxlczogWyJwYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQiXSwKKyAgICBjbWQ6ICJzZWQgLWUgJy9URU1QTEFURS97ciQobG9jYXRpb24gcGFydGl0aW9uX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0KScgLWUgJ2R9JyAkKGluKSA+ICQob3V0KSIsCit9CisKK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImFjb25maWdfZGV2aWNlX3BhdGhzX2phdmFfdXRpbCIsCisgICAgc3JjczogWyI6amF2YV9kZXZpY2VfcGF0aHNfdGVzdF91dGlsX3NyYyJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJsaWJhY29uZmlnX2phdmFfcHJvdG9fbmFubyIsCisgICAgXSwKKyAgICBzZGtfdmVyc2lvbjogImNvcmVfcGxhdGZvcm0iLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9tYWlubGluZV9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvbWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQKaW5kZXggYWY3M2E4NC4uYWFkMmIyMyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9tYWlubGluZV9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL21haW5saW5lX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0CkBAIC0xLDcgKzEsNyBAQAogIi9hcGV4L2NvbS5hbmRyb2lkLmFkc2VydmljZXMvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAogIi9hcGV4L2NvbS5hbmRyb2lkLmFwcHNlYXJjaC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCiAiL2FwZXgvY29tLmFuZHJvaWQuYXJ0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKLSIvYXBleC9jb20uYW5kcm9pZC5idHNlcnZpY2VzL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5idC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCiAiL2FwZXgvY29tLmFuZHJvaWQuY2VsbGJyb2FkY2FzdC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCiAiL2FwZXgvY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAogIi9hcGV4L2NvbS5hbmRyb2lkLmNvbnNjcnlwdC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9EZXZpY2VQcm90b3NUZXN0VXRpbFRlbXBsYXRlLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9EZXZpY2VQcm90b3NUZXN0VXRpbFRlbXBsYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkNjc2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvc3JjL0RldmljZVByb3Rvc1Rlc3RVdGlsVGVtcGxhdGUuamF2YQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgYW5kcm9pZC5hY29uZmlnOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcubmFuby5BY29uZmlnLnBhcnNlZF9mbGFnczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqIEBoaWRlICovCitwdWJsaWMgY2xhc3MgRGV2aWNlUHJvdG9zVGVzdFV0aWwgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gUEFUSFMgPSB7CisgICAgICAgIFRFTVBMQVRFCisgICAgfTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBUEVYX0RJUiA9ICIvYXBleC8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBUEVYX0FDT05GSUdfUEFUSF9TVUZGSVggPSAiL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTVEVNX0FQRVhfRElSID0gIi9zeXN0ZW0vYXBleCI7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgb24tZGV2aWNlIGFjb25maWcgcHJvdG9zLgorICAgICAqCisgICAgICogPHA+TWF5IHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJvdG9zIGNhbid0IGJlIHJlYWQgYXQgdGhlIGNhbGwgc2l0ZS4gRm9yIGV4YW1wbGUsIHNvbWUgb2YKKyAgICAgKiB0aGUgcHJvdG9zIGFyZSBpbiB0aGUgYXBleC8gcGFydGl0aW9uLCB3aGljaCBpcyBtb3VudGVkIHNvbWV3aGF0IGxhdGUgaW4gdGhlIGJvb3QgcHJvY2Vzcy4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgd2UgY2FuJ3QgcmVhZCBvbmUgb2YgdGhlIHByb3RvcyB5ZXQKKyAgICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBhbGwgb24tZGV2aWNlIGFjb25maWcgcHJvdG9zCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBMaXN0PHBhcnNlZF9mbGFnPiBsb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgQXJyYXlMaXN0PHBhcnNlZF9mbGFnPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7CisKKyAgICAgICAgZm9yIChTdHJpbmcgcGF0aCA6IHBhcnNlZEZsYWdzUHJvdG9QYXRocygpKSB7CisgICAgICAgICAgICB0cnkgKEZpbGVJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0ocGF0aCkpIHsKKyAgICAgICAgICAgICAgICBwYXJzZWRfZmxhZ3MgcGFyc2VkRmxhZ3MgPSBwYXJzZWRfZmxhZ3MucGFyc2VGcm9tKGlucHV0U3RyZWFtLnJlYWRBbGxCeXRlcygpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHBhcnNlZF9mbGFnIGZsYWcgOiBwYXJzZWRGbGFncy5wYXJzZWRGbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoZmxhZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBvbi1kZXZpY2UgYWNvbmZpZyBwcm90b3MgcGF0aHMuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxTdHJpbmc+IHBhcnNlZEZsYWdzUHJvdG9QYXRocygpIHsKKyAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gcGF0aHMgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoUEFUSFMpKTsKKworICAgICAgICBGaWxlIGFwZXhEaXJlY3RvcnkgPSBuZXcgRmlsZShTWVNURU1fQVBFWF9ESVIpOworICAgICAgICBpZiAoIWFwZXhEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICB9CisKKyAgICAgICAgRmlsZVtdIHN1YmRpcnMgPSBhcGV4RGlyZWN0b3J5Lmxpc3RGaWxlcygpOworICAgICAgICBpZiAoc3ViZGlycyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEZpbGUgcHJlZml4IDogc3ViZGlycykgeworICAgICAgICAgICAgU3RyaW5nIGFwZXhOYW1lID0gcHJlZml4LmdldE5hbWUoKS5yZXBsYWNlKCJjb20uZ29vZ2xlIiwgImNvbSIpOworICAgICAgICAgICAgYXBleE5hbWUgPSBhcGV4TmFtZS5zdWJzdHJpbmcoMCwgYXBleE5hbWUubGFzdEluZGV4T2YoJy4nKSk7CisKKyAgICAgICAgICAgIEZpbGUgcHJvdG9QYXRoID0gbmV3IEZpbGUoQVBFWF9ESVIgKyBhcGV4TmFtZSArIEFQRVhfQUNPTkZJR19QQVRIX1NVRkZJWCk7CisgICAgICAgICAgICBpZiAoIXByb3RvUGF0aC5leGlzdHMoKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXRocy5hZGQocHJvdG9QYXRoLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3QvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y1NjFmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L0FuZHJvaWQuYnAKQEAgLTAsMCArMSwzNSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3BhY2thZ2UgeworICAgIGRlZmF1bHRfdGVhbTogInRyZW5keV90ZWFtX2FuZHJvaWRfY29yZV9leHBlcmltZW50cyIsCisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCithbmRyb2lkX3Rlc3QgeworICAgIG5hbWU6ICJhY29uZmlnX2RldmljZV9wYXRoc19qYXZhX3Rlc3QiLAorICAgIHNyY3M6IFsKKyAgICAgICAgInNyYy8qKi8qLmphdmEiLAorICAgIF0sCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImFuZHJvaWR4LnRlc3QucnVubmVyIiwKKyAgICAgICAgImp1bml0IiwKKyAgICAgICAgImFjb25maWdfZGV2aWNlX3BhdGhzX2phdmFfdXRpbCIsCisgICAgXSwKKyAgICB0ZXN0X3N1aXRlczogWworICAgICAgICAiZ2VuZXJhbC10ZXN0cyIsCisgICAgXSwKKyAgICBwbGF0Zm9ybV9hcGlzOiB0cnVlLAorICAgIGNlcnRpZmljYXRlOiAicGxhdGZvcm0iLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTAxODc5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgfiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICB+CisgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgLS0+CisKKzxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgcGFja2FnZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCI+CisgICAgPGFwcGxpY2F0aW9uPgorICAgICAgICA8dXNlcy1saWJyYXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0LnJ1bm5lciIgLz4KKyAgICA8L2FwcGxpY2F0aW9uPgorCisgICAgPGluc3RydW1lbnRhdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lciIKKyAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KKworPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9zcmMvRGV2aWNlUHJvdG9zVGVzdFV0aWxUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3Qvc3JjL0RldmljZVByb3Rvc1Rlc3RVdGlsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDBmZDAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3Qvc3JjL0RldmljZVByb3Rvc1Rlc3RVdGlsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy50ZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5EZXZpY2VQcm90b3NUZXN0VXRpbDsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcubmFuby5BY29uZmlnLnBhcnNlZF9mbGFnOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK0BSdW5XaXRoKEpVbml0NC5jbGFzcykKK3B1YmxpYyBjbGFzcyBEZXZpY2VQcm90b3NUZXN0VXRpbFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gUExBVEZPUk1fQ09OVEFJTkVSUyA9IFNldC5vZigic3lzdGVtIiwgInZlbmRvciIsICJwcm9kdWN0Iik7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3REZXZpY2VQcm90b3NfbG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvc1Rlc3RVdGlsLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgaW50IHBsYXRmb3JtRmxhZ3MgPSAwOworICAgICAgICBpbnQgbWFpbmxpbmVGbGFncyA9IDA7CisgICAgICAgIGZvciAocGFyc2VkX2ZsYWcgcGYgOiBmbGFncykgeworICAgICAgICAgICAgaWYgKFBMQVRGT1JNX0NPTlRBSU5FUlMuY29udGFpbnMocGYuY29udGFpbmVyKSkgeworICAgICAgICAgICAgICAgIHBsYXRmb3JtRmxhZ3MrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWFpbmxpbmVGbGFncysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0VHJ1ZShwbGF0Zm9ybUZsYWdzID4gMyk7CisgICAgICAgIGFzc2VydFRydWUobWFpbmxpbmVGbGFncyA+IDMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAKaW5kZXggNGMxZmQ0ZS4uMWI0ZTE0OCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAKQEAgLTI0LDYgKzI0LDExIEBACiAgICAgICAgICJsaWJhY29uZmlnX2ZsYWdzX3J1c3QiLAogICAgIF0sCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgYXBleF9hdmFpbGFibGU6IFsKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgICAgICAiY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUiLAorICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAogfQogCiBhY29uZmlnX2RlY2xhcmF0aW9ucyB7CkBAIC0zOCw2ICs0MywxMSBAQAogICAgIGNyYXRlX25hbWU6ICJhY29uZmlnX2ZsYWdzX3J1c3QiLAogICAgIGFjb25maWdfZGVjbGFyYXRpb25zOiAiYWNvbmZpZ19mbGFncyIsCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgYXBleF9hdmFpbGFibGU6IFsKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgICAgICAiY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUiLAorICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAogfQogCiBjY19hY29uZmlnX2xpYnJhcnkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZwppbmRleCA5NmJiODFhLi4yNDg4YjVjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZwpAQCAtMzAsNCArMzAsMTQgQEAKICAgbWV0YWRhdGEgewogICAgIHB1cnBvc2U6IFBVUlBPU0VfQlVHRklYCiAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CisKK2ZsYWcgeworICBuYW1lOiAiaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MiCisgIG5hbWVzcGFjZTogImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIKKyAgYnVnOiAiMzg1MzgzODk5IgorICBkZXNjcmlwdGlvbjogIldoZW4gZW5hYmxlZCwgdGhlIHN5c3RlbSBhZmxhZ3MgYmluYXJ5IGludm9rZXMgdGhlIHVwZGF0YWJsZSBhZmxhZ3MuIgorICBtZXRhZGF0YSB7CisgICAgcHVycG9zZTogUFVSUE9TRV9CVUdGSVgKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwppbmRleCAyZTg5MTI3Li5kYzUwN2FlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwpAQCAtMzksNiArMzksMTEgQEAKICAgICBwdWIgZm4gZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUoKSAtPiBib29sIHsKICAgICAgICAgYWNvbmZpZ19mbGFnc19ydXN0OjplbmFibGVfb25seV9uZXdfc3RvcmFnZSgpCiAgICAgfQorCisgICAgLy8vIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MgZmxhZy4KKyAgICBwdWIgZm4gaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MoKSAtPiBib29sIHsKKyAgICAgICAgYWNvbmZpZ19mbGFnc19ydXN0OjppbnZva2VfdXBkYXRhYmxlX2FmbGFncygpCisgICAgfQogfQogCiAvLy8gTW9kdWxlIHVzZWQgd2hlbiBidWlsZGluZyB3aXRoIGNhcmdvCkBAIC01NSw0ICs2MCwxMCBAQAogICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCiAgICAgICAgIHRydWUKICAgICB9CisKKyAgICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBpbnZva2VfdXBkYXRhYmxlX2FmbGFncyBmbGFnLgorICAgIHB1YiBmbiBpbnZva2VfdXBkYXRhYmxlX2FmbGFncygpIC0+IGJvb2wgeworICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCisgICAgICAgIHRydWUKKyAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfcHJvdG9zL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfcHJvdG9zL0FuZHJvaWQuYnAKaW5kZXggZDI0MTk5NC4uNjJhMmI2NCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3Byb3Rvcy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19wcm90b3MvQW5kcm9pZC5icApAQCAtNTgsNiArNTgsMTEgQEAKICAgICBjcmF0ZV9uYW1lOiAiYWNvbmZpZ19ydXN0X3Byb3RvIiwKICAgICBzb3VyY2Vfc3RlbTogImFjb25maWdfcnVzdF9wcm90byIsCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgYXBleF9hdmFpbGFibGU6IFsKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgICAgICAiY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUiLAorICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAogfQogCiBydXN0X2RlZmF1bHRzIHsKQEAgLTgxLDYgKzg2LDExIEBACiAgICAgY3JhdGVfbmFtZTogImFjb25maWdfcHJvdG9zIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKICAgICBkZWZhdWx0czogWyJhY29uZmlnX3Byb3Rvcy5kZWZhdWx0cyJdLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogcnVzdF90ZXN0X2hvc3QgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1RhYmxlVXRpbHMuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9UYWJsZVV0aWxzLmphdmEKaW5kZXggODExNjhmNS4uZDQyNjlkYSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1RhYmxlVXRpbHMuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvVGFibGVVdGlscy5qYXZhCkBAIC02Myw0ICs2MywxNiBAQAogICAgICAgICBsb25nIGhhc2hWYWwgPSBTaXBIYXNoZXIxMy5oYXNoKHZhbCk7CiAgICAgICAgIHJldHVybiAoaW50KSBMb25nLnJlbWFpbmRlclVuc2lnbmVkKGhhc2hWYWwsIG51bUJ1Y2tldHMpOwogICAgIH0KKworICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0b3JhZ2VGaWxlc0J1bmRsZSB7CisgICAgICAgIHB1YmxpYyBmaW5hbCBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlOworICAgICAgICBwdWJsaWMgZmluYWwgRmxhZ1RhYmxlIGZsYWdUYWJsZTsKKyAgICAgICAgcHVibGljIGZpbmFsIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdDsKKworICAgICAgICBwdWJsaWMgU3RvcmFnZUZpbGVzQnVuZGxlIChQYWNrYWdlVGFibGUgcFRhYmxlLCBGbGFnVGFibGUgZlRhYmxlLCBGbGFnVmFsdWVMaXN0IGZWYWx1ZUxpc3QpIHsKKyAgICAgICAgICAgIHRoaXMucGFja2FnZVRhYmxlID0gcFRhYmxlOworICAgICAgICAgICAgdGhpcy5mbGFnVGFibGUgPSBmVGFibGU7CisgICAgICAgICAgICB0aGlzLmZsYWdWYWx1ZUxpc3QgPSBmVmFsdWVMaXN0OworICAgICAgICB9CisgICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZS5qYXZhCmluZGV4IDVmYmU1NjcuLmRkYWQyNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2UuamF2YQpAQCAtMTYsNiArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuVGFibGVVdGlscy5TdG9yYWdlRmlsZXNCdW5kbGU7CisKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdDsKQEAgLTQ5LDggKzUxLDYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQX1BBVEggPSAiL21ldGFkYXRhL2Fjb25maWcvbWFwcy8iOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCT09UX1BBVEggPSAiL21ldGFkYXRhL2Fjb25maWcvYm9vdC8iOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgUGFja2FnZVRhYmxlPiBzUGFja2FnZVRhYmxlQ2FjaGUgPSBuZXcgSGFzaE1hcDw+KCk7Ci0KICAgICBwcml2YXRlIEZsYWdUYWJsZSBtRmxhZ1RhYmxlOwogICAgIHByaXZhdGUgRmxhZ1ZhbHVlTGlzdCBtRmxhZ1ZhbHVlTGlzdDsKIApAQCAtNjAsNiArNjAsOSBAQAogICAgIHByaXZhdGUgUGxhdGZvcm1BY29uZmlnUGFja2FnZSgpIHt9CiAKICAgICAvKiogQGhpZGUgKi8KKyAgICBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgU3RvcmFnZUZpbGVzQnVuZGxlPiBzU3RvcmFnZUZpbGVzQ2FjaGUgPSBuZXcgSGFzaE1hcDw+KCk7CisKKyAgICAvKiogQGhpZGUgKi8KICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gUExBVEZPUk1fUEFDS0FHRV9NQVBfRklMRVMgPQogICAgICAgICAgICAgU2V0Lm9mKCJzeXN0ZW0ucGFja2FnZS5tYXAiLCAidmVuZG9yLnBhY2thZ2UubWFwIiwgInByb2R1Y3QucGFja2FnZS5tYXAiKTsKQEAgLTY4LDggKzcxLDE0IEBACiAgICAgICAgIGZvciAoU3RyaW5nIHBmIDogUExBVEZPUk1fUEFDS0FHRV9NQVBfRklMRVMpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlIHBUYWJsZSA9IFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMobWFwU3RvcmFnZUZpbGUoTUFQX1BBVEggKyBwZikpOworICAgICAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIgPSBwVGFibGUuZ2V0SGVhZGVyKCkuZ2V0Q29udGFpbmVyKCk7CisgICAgICAgICAgICAgICAgRmxhZ1RhYmxlIGZUYWJsZSA9CisgICAgICAgICAgICAgICAgICAgICAgICBGbGFnVGFibGUuZnJvbUJ5dGVzKG1hcFN0b3JhZ2VGaWxlKE1BUF9QQVRIICsgY29udGFpbmVyICsgIi5mbGFnLm1hcCIpKTsKKyAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0IGZWYWx1ZUxpc3QgPQorICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMobWFwU3RvcmFnZUZpbGUoQk9PVF9QQVRIICsgY29udGFpbmVyICsgIi52YWwiKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZUZpbGVzQnVuZGxlIGZpbGVzID0gbmV3IFN0b3JhZ2VGaWxlc0J1bmRsZShwVGFibGUsIGZUYWJsZSwgZlZhbHVlTGlzdCk7CiAgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgcGFja2FnZU5hbWUgOiBwVGFibGUuZ2V0UGFja2FnZUxpc3QoKSkgewotICAgICAgICAgICAgICAgICAgICBzUGFja2FnZVRhYmxlQ2FjaGUucHV0KHBhY2thZ2VOYW1lLCBwVGFibGUpOworICAgICAgICAgICAgICAgICAgICBzU3RvcmFnZUZpbGVzQ2FjaGUucHV0KHBhY2thZ2VOYW1lLCBmaWxlcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAvLyBwYXNzCkBAIC05NSwxNiArMTA0LDEzIEBACiAgICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlIGxvYWQoU3RyaW5nIHBhY2thZ2VOYW1lKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlIGFjb25maWdQYWNrYWdlID0gbmV3IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2UoKTsKLSAgICAgICAgICAgIFBhY2thZ2VUYWJsZSBwVGFibGUgPSBzUGFja2FnZVRhYmxlQ2FjaGUuZ2V0KHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgIGlmIChwVGFibGUgPT0gbnVsbCkgeworICAgICAgICAgICAgU3RvcmFnZUZpbGVzQnVuZGxlIGZpbGVzID0gc1N0b3JhZ2VGaWxlc0NhY2hlLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBpZiAoZmlsZXMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBwVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIgPSBwVGFibGUuZ2V0SGVhZGVyKCkuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgICAgICBhY29uZmlnUGFja2FnZS5tRmxhZ1RhYmxlID0KLSAgICAgICAgICAgICAgICAgICAgRmxhZ1RhYmxlLmZyb21CeXRlcyhtYXBTdG9yYWdlRmlsZShNQVBfUEFUSCArIGNvbnRhaW5lciArICIuZmxhZy5tYXAiKSk7Ci0gICAgICAgICAgICBhY29uZmlnUGFja2FnZS5tRmxhZ1ZhbHVlTGlzdCA9Ci0gICAgICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKG1hcFN0b3JhZ2VGaWxlKEJPT1RfUEFUSCArIGNvbnRhaW5lciArICIudmFsIikpOworICAgICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBmaWxlcy5wYWNrYWdlVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIGFjb25maWdQYWNrYWdlLm1GbGFnVGFibGUgPSBmaWxlcy5mbGFnVGFibGU7CisgICAgICAgICAgICBhY29uZmlnUGFja2FnZS5tRmxhZ1ZhbHVlTGlzdCA9IGZpbGVzLmZsYWdWYWx1ZUxpc3Q7CiAgICAgICAgICAgICBhY29uZmlnUGFja2FnZS5tUGFja2FnZUJvb2xlYW5TdGFydE9mZnNldCA9IHBOb2RlLmdldEJvb2xlYW5TdGFydEluZGV4KCk7CiAgICAgICAgICAgICBhY29uZmlnUGFja2FnZS5tUGFja2FnZUlkID0gcE5vZGUuZ2V0UGFja2FnZUlkKCk7CiAgICAgICAgICAgICByZXR1cm4gYWNvbmZpZ1BhY2thZ2U7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKaW5kZXggODU0ZTY4Yi4uZGExOGZiOSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpAQCAtMTYsMTIgKzE2LDEyIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5vcy5mbGFnZ2luZzsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5UYWJsZVV0aWxzLlN0b3JhZ2VGaWxlc0J1bmRsZTsKKwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdTdG9yYWdlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3Q7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlOwotaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlN0b3JhZ2VGaWxlUHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5jb21wYXQuYW5ub3RhdGlvbi5VbnN1cHBvcnRlZEFwcFVzYWdlOwotaW1wb3J0IGFuZHJvaWQub3MuU3RyaWN0TW9kZTsKIAogLyoqCiAgKiBBbiB7QGNvZGUgYWNvbmZpZ30gcGFja2FnZSBjb250YWluaW5nIHRoZSBlbmFibGVkIHN0YXRlIG9mIGl0cyBmbGFncy4KQEAgLTU1LDcgKzU1LDYgQEAKICAgICAgKiA8cD5UaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIG1heSBiZSBjaGFuZ2VkIG9yIHJlbW92ZWQgd2l0aG91dAogICAgICAqIG5vdGljZS4KICAgICAgKgotICAgICAqIEBwYXJhbSBjb250YWluZXIgVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lci4KICAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIG5hbWUgb2YgdGhlIEFjb25maWcgcGFja2FnZS4KICAgICAgKiBAcGFyYW0gcGFja2FnZUZpbmdlcnByaW50IFRoZSBleHBlY3RlZCBmaW5nZXJwcmludCBvZiB0aGUgcGFja2FnZS4KICAgICAgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIHtAbGluayBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWx9IHJlcHJlc2VudGluZyB0aGUgbG9hZGVkCkBAIC02Myw1MSArNjIsMjAgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCi0gICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZCgKLSAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIsIFN0cmluZyBwYWNrYWdlTmFtZSwgbG9uZyBwYWNrYWdlRmluZ2VycHJpbnQpIHsKLSAgICAgICAgcmV0dXJuIGxvYWQoCi0gICAgICAgICAgICAgICAgY29udGFpbmVyLAotICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgIHBhY2thZ2VGaW5nZXJwcmludCwKLSAgICAgICAgICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyLmdldERlZmF1bHRQcm92aWRlcigpKTsKLSAgICB9Ci0KLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBsb2FkKAotICAgICAgICAgICAgU3RyaW5nIGNvbnRhaW5lciwKLSAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSwKLSAgICAgICAgICAgIGxvbmcgcGFja2FnZUZpbmdlcnByaW50LAotICAgICAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBmaWxlUHJvdmlkZXIpIHsKLSAgICAgICAgU3RyaWN0TW9kZS5UaHJlYWRQb2xpY3kgb2xkUG9saWN5ID0gU3RyaWN0TW9kZS5hbGxvd1RocmVhZERpc2tSZWFkcygpOwotICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IG51bGw7Ci0gICAgICAgIEZsYWdWYWx1ZUxpc3Qgdkxpc3QgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgcE5vZGUgPSBmaWxlUHJvdmlkZXIuZ2V0UGFja2FnZVRhYmxlKGNvbnRhaW5lcikuZ2V0KHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgIHZMaXN0ID0gZmlsZVByb3ZpZGVyLmdldEZsYWdWYWx1ZUxpc3QoY29udGFpbmVyKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIFN0cmljdE1vZGUuc2V0VGhyZWFkUG9saWN5KG9sZFBvbGljeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocE5vZGUgPT0gbnVsbCB8fCB2TGlzdCA9PSBudWxsKSB7CisgICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZChTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CisgICAgICAgIFN0b3JhZ2VGaWxlc0J1bmRsZSBmaWxlcyA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2Uuc1N0b3JhZ2VGaWxlc0NhY2hlLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgIGlmIChmaWxlcyA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5ELAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGFja2FnZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBpbiBjb250YWluZXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250YWluZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgIiArIHBhY2thZ2VOYW1lICsgIiBjYW5ub3QgYmUgZm91bmQgb24gdGhlIGRldmljZSIpOwogICAgICAgICB9CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gZmlsZXMucGFja2FnZVRhYmxlLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgIEZsYWdWYWx1ZUxpc3Qgdkxpc3QgPSBmaWxlcy5mbGFnVmFsdWVMaXN0OwogCiAgICAgICAgIGlmIChwTm9kZS5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSAmJiBwYWNrYWdlRmluZ2VycHJpbnQgIT0gcE5vZGUuZ2V0UGFja2FnZUZpbmdlcnByaW50KCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfRklMRV9GSU5HRVJQUklOVF9NSVNNQVRDSCwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBhY2thZ2VOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaW4gY29udGFpbmVyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBkZXZpY2UiKSk7CisgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICIgKyBwYWNrYWdlTmFtZSArICJmaW5nZXJwcmludCBkb2Vzbid0IG1hdGNoIHRoZSBvbmUgb24gZGV2aWNlIik7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbmV3IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCh2TGlzdCwgcE5vZGUuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BY29uZmlnU3RvcmFnZVJlYWRVbml0VGVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BY29uZmlnU3RvcmFnZVJlYWRVbml0VGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjhkZDUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQWNvbmZpZ1N0b3JhZ2VSZWFkVW5pdFRlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0KLSAgfiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICB+Ci0gIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICB+Ci0gIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgfgotICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAgLS0+Ci08Y29uZmlndXJhdGlvbiBkZXNjcmlwdGlvbj0iVGVzdCBhY29uZmlnIHN0b3JhZ2UgamF2YSB0ZXN0cyI+Ci0gICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGFyZ2V0cHJlcC5zdWl0ZS5TdWl0ZUFwa0luc3RhbGxlciI+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iY2xlYW51cC1hcGtzIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJ0ZXN0LWZpbGUtbmFtZSIgdmFsdWU9ImFjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQuYXBrIiAvPgotICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgotICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLmNvbXBhdGliaWxpdHkuY29tbW9uLnRyYWRlZmVkLnRhcmdldHByZXAuRmlsZVB1c2hlciI+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0iY2xlYW51cCIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2VfdjIubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS9tb2NrdXAucGFja2FnZS5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS9tb2NrdXAuZmxhZy5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIudmFsLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS9tb2NrdXAudmFsIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLmluZm8tPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0L3Rlc3RkYXRhL21vY2t1cC5pbmZvIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InBvc3QtcHVzaCIgdmFsdWU9ImNobW9kICtyIC9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0L3Rlc3RkYXRhLyIgLz4KLSAgICA8L3RhcmdldF9wcmVwYXJlcj4KLSAgICA8dGVzdCBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGVzdHR5cGUuQW5kcm9pZEpVbml0VGVzdCIgPgotICAgICAgICA8b3B0aW9uIG5hbWU9InBhY2thZ2UiIHZhbHVlPSJhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0IiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InJ1bnRpbWUtaGludCIgdmFsdWU9IjFtIiAvPgotICAgIDwvdGVzdD4KLTwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IDcwMjMyNWQuLmMwNzFmN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icApAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAiZnVuY3Rpb25hbC9zcmNzLyoqLyouamF2YSIsCiAgICAgXSwKICAgICBzdGF0aWNfbGliczogWwotICAgICAgICAiYWNvbmZpZ19kZXZpY2VfcGF0aHNfamF2YSIsCisgICAgICAgICJhY29uZmlnX2RldmljZV9wYXRoc19qYXZhX3V0aWwiLAogICAgICAgICAiYWNvbmZpZ19zdG9yYWdlX2ZpbGVfamF2YSIsCiAgICAgICAgICJhbmRyb2lkeC50ZXN0LnJ1bGVzIiwKICAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9yZWFkX2FwaV9qYXZhIiwKQEAgLTc1LDI1ICs3NSwzIEBACiAgICAgdGVzdF9jb25maWc6ICJBY29uZmlnU3RvcmFnZVJlYWRGdW5jdGlvbmFsVGVzdC54bWwiLAogICAgIHRlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAogfQotCi1hbmRyb2lkX3Rlc3QgewotICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0IiwKLSAgICB0ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9jb3JlX2V4cGVyaW1lbnRzIiwKLSAgICBzcmNzOiBbCi0gICAgICAgICJ1bml0L3NyY3MvKiovKi5qYXZhIiwKLSAgICBdLAotICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJhbmRyb2lkeC50ZXN0LnJ1bm5lciIsCi0gICAgICAgICJqdW5pdCIsCi0gICAgICAgICJhY29uZmlnX3N0b3JhZ2VfcmVhZGVyX2phdmEiLAotICAgIF0sCi0gICAgc2RrX3ZlcnNpb246ICJ0ZXN0X2N1cnJlbnQiLAotICAgIGRhdGE6IFsKLSAgICAgICAgIjpyZWFkX2FwaV90ZXN0X3N0b3JhZ2VfZmlsZXMiLAotICAgIF0sCi0gICAgdGVzdF9zdWl0ZXM6IFsKLSAgICAgICAgImdlbmVyYWwtdGVzdHMiLAotICAgIF0sCi0gICAgdGVzdF9jb25maWc6ICJBY29uZmlnU3RvcmFnZVJlYWRVbml0VGVzdC54bWwiLAotICAgIGphcmphcl9ydWxlczogImphcmphci50eHQiLAotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL0Fjb25maWdTdG9yYWdlUmVhZEFQSVRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9BY29uZmlnU3RvcmFnZVJlYWRBUElUZXN0LmphdmEKaW5kZXggMjU1NzA0OC4uMDU4N2U5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL0Fjb25maWdTdG9yYWdlUmVhZEFQSVRlc3QuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKLWltcG9ydCBhbmRyb2lkLmFjb25maWcuRGV2aWNlUHJvdG9zOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5EZXZpY2VQcm90b3NUZXN0VXRpbDsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcubmFuby5BY29uZmlnLnBhcnNlZF9mbGFnOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdTdG9yYWdlUmVhZEFQSTsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnUmVhZENvbnRleHQ7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFJ1c3RKYXZhRXF1YWxIYXNoKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3MubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvc1Rlc3RVdGlsLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKICAgICAgICAgZm9yIChwYXJzZWRfZmxhZyBmbGFnIDogZmxhZ3MpIHsKICAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGZsYWcucGFja2FnZV87CiAgICAgICAgICAgICBTdHJpbmcgZmxhZ05hbWUgPSBmbGFnLm5hbWU7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YQppbmRleCBlNTMyZmY2Li45ODk2YmFmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhyb3dzOwogCi1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3RvczsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuRGV2aWNlUHJvdG9zVGVzdFV0aWw7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZzsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcubmFuby5BY29uZmlnLnBhcnNlZF9mbGFnOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZTsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbF9sb2FkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3MubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvc1Rlc3RVdGlsLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKICAgICAgICAgTWFwPFN0cmluZywgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsPiByZWFkZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZnAgPSBTdG9yYWdlRmlsZVByb3ZpZGVyLmdldERlZmF1bHRQcm92aWRlcigpOwogCkBAIC03Miw3ICs3Miw3IEBACiAKICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSByZWFkZXJNYXAuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChyZWFkZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKGNvbnRhaW5lciwgcGFja2FnZU5hbWUsIGZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICByZWFkZXIgPSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZChwYWNrYWdlTmFtZSwgZmluZ2VycHJpbnQpOwogICAgICAgICAgICAgICAgIHJlYWRlck1hcC5wdXQocGFja2FnZU5hbWUsIHJlYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sZWFuIGpWYWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZShmTm9kZS5nZXRGbGFnSW5kZXgoKSk7CkBAIC04MywyNCArODMsMTUgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VfbG9hZF93aXRoRXJyb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAvLyBjb250YWluZXIgbm90IGZvdW5kIGZha2VfY29udGFpbmVyCisgICAgICAgIC8vIHBhY2thZ2Ugbm90IGZvdW5kCiAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uIGUgPQogICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKICAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZha2VfY29udGFpbmVyIiwgImZha2VfcGFja2FnZSIsIDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7Ci0KLSAgICAgICAgLy8gcGFja2FnZSBub3QgZm91bmQKLSAgICAgICAgZSA9Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAotICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAoKSAtPiBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgic3lzdGVtIiwgImZha2VfY29udGFpbmVyIiwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4gUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoImZha2VfcGFja2FnZSIsIDApKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5ELCBlLmdldEVycm9yQ29kZSgpKTsKIAogICAgICAgICAvLyBmaW5nZXJwcmludCBkb2Vzbid0IG1hdGNoCi0gICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3NUZXN0VXRpbC5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CiAgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZnAgPSBTdG9yYWdlRmlsZVByb3ZpZGVyLmdldERlZmF1bHRQcm92aWRlcigpOwogCiAgICAgICAgIHBhcnNlZF9mbGFnIGZsYWcgPSBmbGFncy5nZXQoMCk7CkBAIC0xMTksNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciwgcGFja2FnZU5hbWUsIGZpbmdlcnByaW50ICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgZmluZ2VycHJpbnQgKyAxKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uRVJST1JfRklMRV9GSU5HRVJQUklOVF9NSVNNQVRDSCwgZS5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZVRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlVGVzdC5qYXZhCmluZGV4IGZhYmMyYzkuLjFjNmMyMzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlVGVzdC5qYXZhCkBAIC0xNyw5ICsxNywxMCBAQAogcGFja2FnZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0OwogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKIAotaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5EZXZpY2VQcm90b3M7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3Rvc1Rlc3RVdGlsOwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWc7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGU7CkBAIC00NCw4ICs0NSwyMiBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IFBMQVRGT1JNX0NPTlRBSU5FUlMgPSBTZXQub2YoInN5c3RlbSIsICJ2ZW5kb3IiLCAicHJvZHVjdCIpOwogCiAgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UGxhdGZvcm1BY29uZmlnUGFja2FnZV9TdG9yYWdlRmlsZXNDYWNoZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zVGVzdFV0aWwubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBmb3IgKHBhcnNlZF9mbGFnIGZsYWcgOiBmbGFncykgeworICAgICAgICAgICAgaWYgKGZsYWcucGVybWlzc2lvbiA9PSBBY29uZmlnLlJFQURfT05MWSAmJiBmbGFnLnN0YXRlID09IEFjb25maWcuRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIgPSBmbGFnLmNvbnRhaW5lcjsKKyAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGZsYWcucGFja2FnZV87CisgICAgICAgICAgICBpZiAoIVBMQVRGT1JNX0NPTlRBSU5FUlMuY29udGFpbnMoY29udGFpbmVyKSkgY29udGludWU7CisgICAgICAgICAgICBhc3NlcnROb3ROdWxsKFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2UubG9hZChwYWNrYWdlTmFtZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGxhdGZvcm1BY29uZmlnUGFja2FnZV9sb2FkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3MubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvc1Rlc3RVdGlsLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKICAgICAgICAgTWFwPFN0cmluZywgUGxhdGZvcm1BY29uZmlnUGFja2FnZT4gcmVhZGVyTWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIGZwID0gU3RvcmFnZUZpbGVQcm92aWRlci5nZXREZWZhdWx0UHJvdmlkZXIoKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamFyamFyLnR4dCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phcmphci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MjUwZDQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamFyamFyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24gYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbgotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVGFibGUKLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuUGFja2FnZVRhYmxlCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkJ5dGVCdWZmZXJSZWFkZXIgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5CeXRlQnVmZmVyUmVhZGVyCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUeXBlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1R5cGUKLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU2lwSGFzaGVyMTMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5TaXBIYXNoZXIxMwotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GaWxlVHlwZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZpbGVUeXBlCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3QgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVmFsdWVMaXN0Ci1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlRhYmxlVXRpbHMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5UYWJsZVV0aWxzCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdQYWNrYWdlSW1wbCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkFjb25maWdQYWNrYWdlSW1wbAotcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuU3RvcmFnZUZpbGVQcm92aWRlcgotCi0KLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVGFibGUkQDEKLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5QYWNrYWdlVGFibGUkQDEKLXJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdCQqIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmxhZ1ZhbHVlTGlzdEAxCi1ydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlNpcEhhc2hlcjEzJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5TaXBIYXNoZXIxM0AxCi0KLXJ1bGUgYW5kcm9pZC5vcy5mbGFnZ2luZy5QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3VuaXQvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy91bml0L3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWMzZGUyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3VuaXQvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdTdG9yYWdlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKLWltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuZmxhZ2dpbmcuUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsOwotCi1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuSlVuaXQ0OwotCi1AUnVuV2l0aChKVW5pdDQuY2xhc3MpCi1wdWJsaWMgY2xhc3MgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdCB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUREFUQV9QQVRIID0KLSAgICAgICAgICAgICIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS8iOwotCi0gICAgcHJpdmF0ZSBTdG9yYWdlRmlsZVByb3ZpZGVyIHByOwotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgewotICAgICAgICBwciA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKFRFU1REQVRBX1BBVEgsIFRFU1REQVRBX1BBVEgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdExvYWRfY29udGFpbmVyX3BhY2thZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9IHByLmdldFBhY2thZ2VUYWJsZSgibW9ja3VwIik7Ci0KLSAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTEgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7Ci0KLSAgICAgICAgbG9uZyBmaW5nZXJwcmludCA9IG5vZGUxLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOwotICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcCA9Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBmaW5nZXJwcmludCwgcHIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdExvYWRfY29udGFpbmVyX3BhY2thZ2VfZXJyb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9IHByLmdldFBhY2thZ2VUYWJsZSgibW9ja3VwIik7Ci0gICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwotICAgICAgICBsb25nIGZpbmdlcnByaW50ID0gbm9kZTEuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7Ci0gICAgICAgIC8vIGNhbm5vdCBmaW5kIHBhY2thZ2UKLSAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24gZSA9Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAotICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMTAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9QQUNLQUdFX05PVF9GT1VORCwgZS5nZXRFcnJvckNvZGUoKSk7Ci0KLSAgICAgICAgLy8gY2Fubm90IGZpbmQgY29udGFpbmVyCi0gICAgICAgIGUgPQotICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwgZS5nZXRFcnJvckNvZGUoKSk7Ci0KLSAgICAgICAgZSA9Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAotICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsIGUuZ2V0RXJyb3JDb2RlKCkpOwotCi0gICAgICAgIC8vIGZpbmdlcnByaW50IGRvZXNuJ3QgbWF0Y2gKLSAgICAgICAgZSA9Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAotICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgICAgICAgICAvLyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENILAotICAgICAgICAgICAgICAgIDUsIGUuZ2V0RXJyb3JDb2RlKCkpOwotCi0gICAgICAgIC8vIG5ldyBzdG9yYWdlIGRvZXNuJ3QgZXhpc3QKLSAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcigiZmFrZS9wYXRoLyIsICJmYWtlL3BhdGgvIik7Ci0gICAgICAgIGUgPQotICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsIGUuZ2V0RXJyb3JDb2RlKCkpOwotCi0gICAgICAgIC8vIGZpbGUgcmVhZCBpc3N1ZQotICAgICAgICBwciA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKFRFU1REQVRBX1BBVEgsICJmYWtlL3BhdGgvIik7Ci0gICAgICAgIGUgPQotICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsIGUuZ2V0RXJyb3JDb2RlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEdldEJvb2xlYW5GbGFnVmFsdWVfaW5kZXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9IHByLmdldFBhY2thZ2VUYWJsZSgibW9ja3VwIik7Ci0gICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwotICAgICAgICBsb25nIGZpbmdlcnByaW50ID0gbm9kZTEuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7Ci0gICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBwID0KLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrdXAiLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIGZpbmdlcnByaW50LCBwcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHAuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgwKSk7Ci0gICAgICAgIGFzc2VydFRydWUocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKDEpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShwLmdldEJvb2xlYW5GbGFnVmFsdWUoMikpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwCmluZGV4IGE3YWNlZWUuLjM0MTk3NWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3MvQW5kcm9pZC5icApAQCAtMzEsNiArMzEsOSBAQAogICAgIG5hbWU6ICJhZmxhZ3MiLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAogICAgIGRlZmF1bHRzOiBbImFmbGFncy5kZWZhdWx0cyJdLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICBdLAogfQogCiBydXN0X3Rlc3RfaG9zdCB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzCmluZGV4IDgxNzNiYzIuLmU0YWYyYTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzCkBAIC0xNiw2ICsxNiw5IEBACiAKIC8vISBgYWZsYWdzYCBpcyBhIGRldmljZSBiaW5hcnkgdG8gcmVhZCBhbmQgd3JpdGUgYWNvbmZpZyBmbGFncy4KIAordXNlIHN0ZDo6ZW52OwordXNlIHN0ZDo6cHJvY2Vzczo6e0NvbW1hbmQgYXMgT3NDb21tYW5kLCBTdGRpb307CisKIHVzZSBhbnlob3c6Onthbnlob3csIGVuc3VyZSwgUmVzdWx0fTsKIHVzZSBjbGFwOjpQYXJzZXI7CiAKQEAgLTI5OCw3ICszMDEsMzQgQEAKICAgICB9CiB9CiAKK2ZuIGludm9rZV91cGRhdGFibGVfYWZsYWdzKCkgeworICAgIGxldCB1cGRhdGFibGVfY29tbWFuZCA9ICIvYXBleC9jb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZS9iaW4vYWZsYWdzX3VwZGF0YWJsZSI7CisKKyAgICBsZXQgYXJnczogVmVjPFN0cmluZz4gPSBlbnY6OmFyZ3MoKS5jb2xsZWN0KCk7CisgICAgbGV0IGNvbW1hbmRfYXJncyA9IGlmIGFyZ3MubGVuKCkgPj0gMiB7ICZhcmdzWzEuLl0gfSBlbHNlIHsgJlsiLS1oZWxwIi50b19zdHJpbmcoKV0gfTsKKworICAgIGxldCBtdXQgY2hpbGQgPSBPc0NvbW1hbmQ6Om5ldyh1cGRhdGFibGVfY29tbWFuZCk7CisgICAgZm9yIGFyZyBpbiBjb21tYW5kX2FyZ3MgeworICAgICAgICBjaGlsZC5hcmcoYXJnKTsKKyAgICB9CisKKyAgICBsZXQgb3V0cHV0ID0gY2hpbGQKKyAgICAgICAgLnN0ZGluKFN0ZGlvOjpwaXBlZCgpKQorICAgICAgICAuc3Rkb3V0KFN0ZGlvOjpwaXBlZCgpKQorICAgICAgICAuc3Bhd24oKQorICAgICAgICAuZXhwZWN0KCJmYWlsZWQgdG8gZXhlY3V0ZSBjaGlsZCIpCisgICAgICAgIC53YWl0X3dpdGhfb3V0cHV0KCkKKyAgICAgICAgLmV4cGVjdCgiZmFpbGVkIHRvIGV4ZWN1dGUgY29tbWFuZCIpOworCisgICAgcHJpbnRsbiEoInt9IiwgU3RyaW5nOjpmcm9tX3V0ZjhfbG9zc3koJm91dHB1dC5zdGRvdXQpLnRyaW0oKSk7Cit9CisKIGZuIG1haW4oKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICBpZiBhY29uZmlnX2ZsYWdzOjphdXRvX2dlbmVyYXRlZDo6aW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MoKSB7CisgICAgICAgIGludm9rZV91cGRhdGFibGVfYWZsYWdzKCk7CisgICAgICAgIHJldHVybiBPaygoKSk7CisgICAgfQorCiAgICAgZW5zdXJlIShuaXg6OnVuaXN0ZDo6VWlkOjpjdXJyZW50KCkuaXNfcm9vdCgpLCAibXVzdCBiZSByb290Iik7CiAKICAgICBsZXQgY2xpID0gQ2xpOjpwYXJzZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCmluZGV4IGQwODQwNDguLjQ2MDU4YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKQEAgLTIxLDggKzIxLDcgQEAKICAqLwogcHVibGljIGNsYXNzIEFjb25maWdQYWNrYWdlSW50ZXJuYWwgewogCi0gICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoCi0gICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CisgICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBsb25nIHBhY2thZ2VGaW5nZXJwcmludCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCmluZGV4IDI4M2IyNTEuLjM3OGM5NjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCkBAIC0yMSw4ICsyMSw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgewogCi0gICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZCgKLSAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIsIFN0cmluZyBwYWNrYWdlTmFtZSwgbG9uZyBwYWNrYWdlRmluZ2VycHJpbnQpIHsKKyAgICBwdWJsaWMgc3RhdGljIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSwgbG9uZyBwYWNrYWdlRmluZ2VycHJpbnQpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9wcmludGZsYWdzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL3ByaW50ZmxhZ3MvQW5kcm9pZC5icAppbmRleCBkNTBhNzdkLi42ZjdiY2EzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL3ByaW50ZmxhZ3MvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL3ByaW50ZmxhZ3MvQW5kcm9pZC5icApAQCAtMTksNiArMTksOSBAQAogcnVzdF9iaW5hcnkgewogICAgIG5hbWU6ICJwcmludGZsYWdzIiwKICAgICBkZWZhdWx0czogWyJwcmludGZsYWdzLmRlZmF1bHRzIl0sCisgICAgYXBleF9hdmFpbGFibGU6IFsKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgIF0sCiB9CiAKIHJ1c3RfdGVzdF9ob3N0IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmFsaXphdGlvbi9jb21tYW5kLWxpbmUtb3B0aW9ucy5zaCBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9jb21tYW5kLWxpbmUtb3B0aW9ucy5zaAppbmRleCBkOTM5N2MyLi4zYTFlMDQ5IDEwMDY0NAotLS0gYS90b29scy9maW5hbGl6YXRpb24vY29tbWFuZC1saW5lLW9wdGlvbnMuc2gKKysrIGIvdG9vbHMvZmluYWxpemF0aW9uL2NvbW1hbmQtbGluZS1vcHRpb25zLnNoCkBAIC0zLDYgKzMsNyBAQAogd2hpbGUgdHJ1ZTsgZG8KICAgICBjYXNlICIkMSIgaW4KICAgICAgICAgLS1kcnktcnVuKSByZXBvX3VwbG9hZF9kcnlfcnVuX2FyZz0iLS1kcnktcnVuIjsgcmVwb19icmFuY2g9ImZpbmFsaXphdGlvbi1kcnktcnVuIjsgc2hpZnQgOzsKKyAgICAgICAgLS0pIHNoaWZ0OyBicmVhazs7CiAgICAgICAgICopIGJyZWFrCiAgICAgZXNhYwogZG9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvZmluYWxpemF0aW9uL2Vudmlyb25tZW50LnNoIGIvdG9vbHMvZmluYWxpemF0aW9uL2Vudmlyb25tZW50LnNoCmluZGV4IGNmM2U2MWIuLjBkM2E5ZTEgMTAwNzU1Ci0tLSBhL3Rvb2xzL2ZpbmFsaXphdGlvbi9lbnZpcm9ubWVudC5zaAorKysgYi90b29scy9maW5hbGl6YXRpb24vZW52aXJvbm1lbnQuc2gKQEAgLTMwLDcgKzMwLDcgQEAKICMgVE9ETyhiLzMyMzk4NTI5Nyk6IFRoZSB2ZXJzaW9uIG11c3QgbWF0Y2ggd2l0aCB0aGF0IGZyb20gdGhlIHJlbGVhc2UgY29uZmlndXJhdGlvbi4KICMgSW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZSB2ZXJzaW9uIGhlcmUsIHJlYWQgaXQgZnJvbSBhIHJlbGVhc2UgY29uZmlndXJhdGlvbi4KIGV4cG9ydCBGSU5BTF9CT0FSRF9BUElfTEVWRUw9JzIwMjUwNCcKLWV4cG9ydCBGSU5BTF9DT1JSRVNQT05ESU5HX1ZFUlNJT05fTEVUVEVSPSdXJworZXhwb3J0IEZJTkFMX0NPUlJFU1BPTkRJTkdfVkVSU0lPTl9MRVRURVI9J0InCiBleHBvcnQgRklOQUxfQ09SUkVTUE9ORElOR19QTEFURk9STV9WRVJTSU9OPScxNicKIGV4cG9ydCBGSU5BTF9ORVhUX0JPQVJEX0FQSV9MRVZFTD0nMjAyNjA0JwotZXhwb3J0IEZJTkFMX05FWFRfQ09SUkVTUE9ORElOR19WRVJTSU9OX0xFVFRFUj0nWCcKK2V4cG9ydCBGSU5BTF9ORVhUX0NPUlJFU1BPTkRJTkdfVkVSU0lPTl9MRVRURVI9J0MnCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0FuZHJvaWQuYnAgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkMDBiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQW5kcm9pZC5icApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSB7CisgICAgZGVmYXVsdF9hcHBsaWNhYmxlX2xpY2Vuc2VzOiBbIkFuZHJvaWQtQXBhY2hlLTIuMCJdLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJpZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2p2bSIsCisgICAgc3JjczogWworICAgICAgICAiRm9vLmphdmEiLAorICAgICAgICAiQmFyLmphdmEiLAorICAgICAgICAib3RoZXIvT3RoZXIuamF2YSIsCisgICAgXSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQmFyLmphdmEgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTE1NzYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Jhci5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UganZtOworCisvKiogQmFyIGNsYXNzLiBUaGUgY2xhc3MgZm9yIHRlc3RpbmcgY29kZSBhc3Npc3Qgd2l0aGluIHRoZSBzYW1lIGJ1aWxkIG1vZHVsZS4gKi8KK2NsYXNzIEJhcjxLIGV4dGVuZHMgTnVtYmVyLCBWIGV4dGVuZHMgTnVtYmVyPiB7CisgIEJhcigpIHsKKyAgICBmb28obmV3IEZvbygpKTsKKyAgfQorCisgIHZvaWQgZm9vKEZvbyBmKSB7fQorCisgIHZvaWQgZm9vKE9iamVjdCBvKSB7fQorCisgIHZvaWQgYmFyKEZvbyBmKSB7fQorCisgIHZvaWQgYmF6KE9iamVjdCBvKSB7fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmEgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhCmluZGV4IGEwNDNmNzIuLjkzOTdiYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmEKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YQpAQCAtMTYsMjIgKzE2LDEwOSBAQAogCiBwYWNrYWdlIGp2bTsKIAotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQganZtLm90aGVyLk90aGVyOwogCiAvKiogRm9vIGNsYXNzLiAqLwogcHVibGljIGZpbmFsIGNsYXNzIEZvbyB7CisvLyAgICAgICAgICAgICAgIHwgIHwgZm9vX2RlZgorCisgIHZvaWQgdGVzdFBhcmFtZXRlckluZm8oKSB7CisgICAgLy8gVGVzdCBzaWduYXR1cmUgaGVscCBmb3IgdHlwZSBwYXJhbWV0ZXJzLgorCisgICAgQmFyPEludGVnZXIsIERvdWJsZT4gYiA9IG5ldyBCYXI8PigpOworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gY3RvcgorICAgIC8vICAgICBeIGRlY2xfMQorICAgIC8vICAgICAgICAgICAgICBeIGRlY2xfMgorICAgIFN5c3RlbS5vdXQucHJpbnRsbihiKTsKKworICAgIC8vIHN0ZXAgYXQgY3RvcgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHBhcmFtaW5mby50cmlnZ2VyKCkKKyAgICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zLmZpbHRlcigKKyAgICAvLyAgbGFiZWw9IksgZXh0ZW5kcyBOdW1iZXIsIFYgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICBzZWxlY3Rpb249IksgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICkKKworICAgIC8vIHN0ZXAgYXQgZGVjbF8xCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZmlsdGVyKAorICAgIC8vICBsYWJlbD0iSyBleHRlbmRzIE51bWJlciwgViBleHRlbmRzIE51bWJlciIsCisgICAgLy8gIHNlbGVjdGlvbj0iSyBleHRlbmRzIE51bWJlciIsCisgICAgLy8gKQorCisgICAgLy8gc3RlcCBhdCBkZWNsXzIKKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyBwYXJhbWluZm8udHJpZ2dlcigpCisgICAgLy8gYXNzZXJ0IHBhcmFtaW5mby5pdGVtcy5maWx0ZXIoCisgICAgLy8gIGxhYmVsPSJLIGV4dGVuZHMgTnVtYmVyLCBWIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyAgc2VsZWN0aW9uPSJWIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyApCisKKyAgICAvLyBUZXN0IHNpZ25hdHVyZSBoZWxwIGZvciBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLgorCisgICAgT3RoZXIgb3RoZXIgPSBuZXcgT3RoZXIoMTIzLCAiZm9vIik7CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIF4gcGFyYW1fMQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIHBhcmFtXzIKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ob3RoZXIpOworCisgICAgLy8gc3RlcCBhdCBwYXJhbV8xCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZmlsdGVyKAorICAgIC8vICBsYWJlbD0iXFwoaW50IGZpcnN0LCBTdHJpbmcgc2Vjb25kXFwpIiwKKyAgICAvLyAgc2VsZWN0aW9uPSJpbnQgZmlyc3QiLAorICAgIC8vICkKKworICAgIC8vIHN0ZXAgYXQgcGFyYW1fMgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHBhcmFtaW5mby50cmlnZ2VyKCkKKyAgICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zLmVtcHR5KCkKKyAgfQogCiAgIHZvaWQgdGVzdENvbXBsZXRpb24oKSB7Ci0gICAgQXJyYXlMaXN0PEludGVnZXI+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdCk7CisgICAgQmFyPEludGVnZXIsIERvdWJsZT4gYiA9IG5ldyBCYXI8PigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihiKTsKIAogICAgIC8vIF4KIAogICAgIC8vIHN0ZXAKLSAgICAvLyA7IFRlc3QgY29tcGxldGlvbiBvbiB0aGUgc3RhbmRhcmQgdHlwZXMuCi0gICAgLy8gdHlwZSgibGlzdC4iKQorICAgIC8vIDsgVGVzdCBjb21wbGV0aW9uIG9uIHR5cGVzIGZyb20gdGhlIHNhbWUgcGFja2FnZS4KKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyB0eXBlKCJiLiIpCiAgICAgLy8gY29tcGxldGlvbi50cmlnZ2VyKCkKLSAgICAvLyBhc3NlcnQgY29tcGxldGlvbi5pdGVtcy5maWx0ZXIobGFiZWw9ImFkZC4qIikKKyAgICAvLyBhc3NlcnQgY29tcGxldGlvbi5pdGVtcy5maWx0ZXIobGFiZWw9ImZvby4qIikKKyAgICAvLyBkZWxsaW5lKCkKKworICAgIE90aGVyIG90aGVyID0gbmV3IE90aGVyKDEsICJmb28iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4ob3RoZXIpOworCisgICAgLy8gXgorCisgICAgLy8gc3RlcAorICAgIC8vIDsgVGVzdCBjb21wbGV0aW9uIG9uIHR5cGVzIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZS4KKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyB0eXBlKCJvdGhlci4iKQorICAgIC8vIGNvbXBsZXRpb24udHJpZ2dlcigpCisgICAgLy8gYXBwbHkoY29tcGxldGlvbi5pdGVtcy5maWx0ZXIobGFiZWw9Im90aGVyLioiKS5maXJzdCgpKQorICAgIC8vIHR5cGUoIi4iKQorICAgIC8vIGNvbXBsZXRpb24udHJpZ2dlcigpCisgICAgLy8gYXBwbHkoY29tcGxldGlvbi5pdGVtcy5maWx0ZXIobGFiZWw9Im90aGVyLioiKS5maXJzdCgpKQorICAgIC8vIGRlbGxpbmUoKQorICB9CisKKyAgdm9pZCB0ZXN0RGlhZ25vc3RpY3MoKSB7CisKKyAgICAvLyBeCisKKyAgICAvLyBzdGVwCisgICAgLy8gOyBUZXN0IGRpYWdub3N0aWNzIGFib3V0IHdyb25nIHR5cGUgYXJndW1lbnQgYm91bmRzLgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHR5cGUoIkJhcjxTdHJpbmcsIERvdWJsZT4gYjsiKQorICAgIC8vIGFzc2VydCBkaWFnbm9zdGljcy5pdGVtcy5maWx0ZXIoCisgICAgLy8gIG1lc3NhZ2U9InR5cGUgYXJndW1lbnQgLiogaXMgbm90IHdpdGhpbiBib3VuZHMgLioiLAorICAgIC8vICBjb2RlPSJjb21waWxlci5lcnIubm90LndpdGhpbi5ib3VuZHMiLAorICAgIC8vICkKKyAgICAvLyBkZWxsaW5lKCkKICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9pZGVfcXVlcnkub3V0IGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9pZGVfcXVlcnkub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOWZiODYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL2lkZV9xdWVyeS5vdXQKQEAgLTAsMCArMSw0IEBACisKKwNvdXQyWAorNmJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YRICCAEaGmlkZV9xdWVyeV9wcm9iZXJzY3JpcHRfanZtOs4BCisaaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9qdm0QARo2YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhGjZidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQmFyLmphdmEaPmJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9vdGhlci9PdGhlci5qYXZhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9vdGhlci9PdGhlci5qYXZhIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9vdGhlci9PdGhlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjY2MmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL290aGVyL090aGVyLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBqdm0ub3RoZXI7CisKKy8qKiBPdGhlciBjbGFzcyAqLworcHVibGljIGNsYXNzIE90aGVyIHsKKyAgcHVibGljIE90aGVyKGludCBmaXJzdCwgU3RyaW5nIHNlY29uZCkge30KKworICBwdWJsaWMgT3RoZXIgb3RoZXIoKSB7CisgICAgcmV0dXJuIG5ldyBPdGhlcigwLCAiIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL21pc3Npbmdfc29vbmdfbW9kdWxlX2luZm8ucHkgYi90b29scy9taXNzaW5nX3Nvb25nX21vZHVsZV9pbmZvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmYTdmMmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9taXNzaW5nX3Nvb25nX21vZHVsZV9pbmZvLnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZGVmIG1haW4oKToKKyAgICB0cnk6CisgICAgICAgIHByb2R1Y3Rfb3V0ID0gb3MuZW52aXJvblsiQU5EUk9JRF9QUk9EVUNUX09VVCJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBnZXQgQU5EUk9JRF9QUk9EVUNUX09VVC4gUnVuIGx1bmNoIGZpcnN0LlxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHByb2R1Y3Rfb3V0LCAibW9kdWxlLWluZm8uanNvbiIpCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGY6CisgICAgICAgICAgICBtb2R1bGVzID0ganNvbi5sb2FkKGYpCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGYiRmlsZSBub3QgZm91bmQ6IHtmaWxlbmFtZX1cbiIpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgZXhjZXB0IGpzb24uSlNPTkRlY29kZUVycm9yOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGYiSW52YWxpZCBqc29uOiB7ZmlsZW5hbWV9XG4iKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgY2xhc3NlcyA9IHt9CisKKyAgICBmb3IgbmFtZSwgaW5mbyBpbiBtb2R1bGVzLml0ZW1zKCk6CisgICAgICAgIG1ha2UgPSBpbmZvLmdldCgibWFrZSIpCisgICAgICAgIG1ha2VfZ2VuID0gaW5mby5nZXQoIm1ha2VfZ2VuZXJhdGVkX21vZHVsZV9pbmZvIikKKyAgICAgICAgaWYgbm90IG1ha2UgYW5kIG1ha2VfZ2VuOgorICAgICAgICAgICAgY2xhc3Nlcy5zZXRkZWZhdWx0KGZyb3plbnNldChpbmZvLmdldCgiY2xhc3MiKSksIFtdKS5hcHBlbmQobmFtZSkKKworICAgIGZvciBjbCwgbmFtZXMgaW4gY2xhc3Nlcy5pdGVtcygpOgorICAgICAgICBwcmludCgiICIuam9pbihjbCkpCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgcHJpbnQoIiAiLCBuYW1lKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9iZW5jaG1hcmtzIGIvdG9vbHMvcGVyZi9iZW5jaG1hcmtzCmluZGV4IDY5OThlY2QuLjRmZGI4YzIgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvYmVuY2htYXJrcworKysgYi90b29scy9wZXJmL2JlbmNobWFya3MKQEAgLTc4Niw2ICs3ODYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICBwcmVyb2xsPTEsCiAgICAgICAgICAgICAgICAgICAgICAgcG9zdHJvbGw9MiwKICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgQmVuY2htYXJrKGlkPSJhZGRfc3lzdGVtdWlfZmllbGRfd2l0aF90ZXN0cyIsCisgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkFkZCBTeXN0ZW1VSSBmaWVsZCB3aXRoIHRlc3RzIiwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U9QWRkSmF2YUZpZWxkKCJmcmFtZXdvcmtzL2Jhc2UvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3dtc2hlbGwvV01TaGVsbC5qYXZhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdWJsaWMiKSwKKyAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzPVsiU3lzdGVtVWlSYXZlblRlc3RzIl0sCisgICAgICAgICAgICAgICAgICAgICAgcHJlcm9sbD0xLAorICAgICAgICAgICAgICAgICAgICAgIHBvc3Ryb2xsPTIsCisgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgXQogCiAgICAgZGVmIF9lcnJvcihzZWxmLCBtZXNzYWdlKToKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9idWlsZF9pbWFnZS5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy9idWlsZF9pbWFnZS5weQppbmRleCAyNWJjYjUyLi5iNmM5NmM0IDEwMDc1NQotLS0gYS90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5CkBAIC05NzcsOCArOTc3LDYgQEAKICAgICAid2lsbCBpbnN0YWxsIGluIGJ5IGRlZmF1bHQsIHNvIHRoZXJlIGNvdWxkIGJlIGZpbGVzIGluIHRoZSBpbnB1dF9kaXJlY3RvcnkgdGhhdCBhcmUgbm90ICIKICAgICAiYWN0dWFsbHkgc3VwcG9zZWQgdG8gYmUgcGFydCBvZiB0aGUgcGFydGl0aW9uLiBUaGUgcGF0aHMgaW4gdGhpcyBmaWxlIG11c3QgYmUgcmVsYXRpdmUgdG8gIgogICAgICJpbnB1dF9kaXJlY3RvcnkuIikKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1idWlsZF9kYXRldGltZV9maWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJhIGZpbGUgY29udGFpbmluZyB0aGUgYnVpbGQgaWQgdGltZXN0YW1wIikKICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiaW5wdXRfZGlyZWN0b3J5IiwKICAgICBoZWxwPSJ0aGUgc3RhZ2luZyBkaXJlY3RvcnkgdG8gYmUgY29udmVydGVkIHRvIGFuIGltYWdlIGZpbGUiKQogICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJwcm9wZXJ0aWVzX2ZpbGUiLApAQCAtOTk4LDExICs5OTYsNiBAQAogICBjb21tb24uSW5pdExvZ2dpbmcoKQogCiAgIGdsb2JfZGljdCA9IExvYWRHbG9iYWxEaWN0KGFyZ3MucHJvcGVydGllc19maWxlKQotICBpZiBhcmdzLmJ1aWxkX2RhdGV0aW1lX2ZpbGU6Ci0gICAgIyBQYXJzZSB0aGUgdGltZXN0YW1wIGZyb20gYnVpbGRfZGF0ZXRpbWVfZmlsZS4KLSAgICB3aXRoIG9wZW4oYXJncy5idWlsZF9kYXRldGltZV9maWxlLCAiciIpIGFzIGY6Ci0gICAgICBnbG9iX2RpY3RbInRpbWVzdGFtcCJdID0gaW50KGYucmVhZCgpKQotCiAgIGlmICJtb3VudF9wb2ludCIgaW4gZ2xvYl9kaWN0OgogICAgICMgVGhlIGNhbGxlciBrbm93cyB0aGUgbW91bnQgcG9pbnQgYW5kIHByb3ZpZGVzIGEgZGljdGlvbmFyeSBuZWVkZWQgYnkKICAgICAjIEJ1aWxkSW1hZ2UoKS4KZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9zaWduX3RhcmdldF9maWxlc19hcGtzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3NpZ25fdGFyZ2V0X2ZpbGVzX2Fwa3MucHkKaW5kZXggNGFkOTdlMC4uMjM3ODUzOSAxMDA3NTUKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL3NpZ25fdGFyZ2V0X2ZpbGVzX2Fwa3MucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3NpZ25fdGFyZ2V0X2ZpbGVzX2Fwa3MucHkKQEAgLTg2MiwyMSArODYyLDMyIEBACiAKICAgICAjIFVwZGF0ZXMgcHZtZncgZW1iZWRkZWQgcHVibGljIGtleSB3aXRoIHRoZSB2aXJ0IEFQRVggcGF5bG9hZCBrZXkuCiAgICAgZWxpZiBmaWxlbmFtZSA9PSAiUFJFQlVJTFRfSU1BR0VTL3B2bWZ3LmltZyI6Ci0gICAgICAjIEZpbmQgdGhlIG5hbWUgb2YgdGhlIHZpcnQgQVBFWCBpbiB0aGUgdGFyZ2V0IGZpbGVzLgorICAgICAgIyBGaW5kIHRoZSBwYXRoIG9mIHRoZSB2aXJ0IEFQRVggaW4gdGhlIHRhcmdldCBmaWxlcy4KICAgICAgIG5hbWVsaXN0ID0gaW5wdXRfdGZfemlwLm5hbWVsaXN0KCkKLSAgICAgIGFwZXhfZ2VuID0gKEdldEFwZXhGaWxlbmFtZShmKSBmb3IgZiBpbiBuYW1lbGlzdCBpZiBJc0FwZXhGaWxlKGYpKQotICAgICAgdmlydF9hcGV4X3JlID0gcmUuY29tcGlsZSgiXmNvbVwuKFteXC5dK1wuKT9hbmRyb2lkXC52aXJ0XC5hcGV4JCIpCi0gICAgICB2aXJ0X2FwZXggPSBuZXh0KChhIGZvciBhIGluIGFwZXhfZ2VuIGlmIHZpcnRfYXBleF9yZS5tYXRjaChhKSksIE5vbmUpCi0gICAgICBpZiBub3QgdmlydF9hcGV4OgorICAgICAgYXBleF9nZW4gPSAoZiBmb3IgZiBpbiBuYW1lbGlzdCBpZiBJc0FwZXhGaWxlKGYpKQorICAgICAgdmlydF9hcGV4X3JlID0gcmUuY29tcGlsZSgiXi4qY29tXC4oW15cLl0rXC4pP2FuZHJvaWRcLnZpcnRcLmFwZXgkIikKKyAgICAgIHZpcnRfYXBleF9wYXRoID0gbmV4dCgKKyAgICAgICAgKGEgZm9yIGEgaW4gYXBleF9nZW4gaWYgdmlydF9hcGV4X3JlLm1hdGNoKGEpKSwgTm9uZSkKKyAgICAgIGlmIG5vdCB2aXJ0X2FwZXhfcGF0aDoKICAgICAgICAgcHJpbnQoIlJlbW92aW5nICVzIGZyb20gcmFtZGlzazogdmlydCBBUEVYIG5vdCBmb3VuZCIgJSBmaWxlbmFtZSkKICAgICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJSZXBsYWNpbmcgJXMgZW1iZWRkZWQga2V5IHdpdGggJXMga2V5IiAlIChmaWxlbmFtZSwgdmlydF9hcGV4KSkKKyAgICAgICAgcHJpbnQoIlJlcGxhY2luZyAlcyBlbWJlZGRlZCBrZXkgd2l0aCAlcyBrZXkiICUgKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydF9hcGV4X3BhdGgpKQogICAgICAgICAjIEdldCB0aGUgY3VycmVudCBhbmQgbmV3IGVtYmVkZGVkIGtleXMuCisgICAgICAgIHZpcnRfYXBleCA9IEdldEFwZXhGaWxlbmFtZSh2aXJ0X2FwZXhfcGF0aCkKICAgICAgICAgcGF5bG9hZF9rZXksIGNvbnRhaW5lcl9rZXksIHNpZ25fdG9vbCA9IGFwZXhfa2V5c1t2aXJ0X2FwZXhdCi0gICAgICAgIG5ld19wdWJrZXlfcGF0aCA9IGNvbW1vbi5FeHRyYWN0QXZiUHVibGljS2V5KAotICAgICAgICAgICAgbWlzY19pbmZvWydhdmJfYXZidG9vbCddLCBwYXlsb2FkX2tleSkKLSAgICAgICAgd2l0aCBvcGVuKG5ld19wdWJrZXlfcGF0aCwgJ3JiJykgYXMgZjoKLSAgICAgICAgICBuZXdfcHVia2V5ID0gZi5yZWFkKCkKKworICAgICAgICAjIGIvMzg0ODEzMTk5OiBoYW5kbGVzIHRoZSBwcmUtc2lnbmVkIGNvbS5hbmRyb2lkLnZpcnQuYXBleCBpbiBHU0kuCisgICAgICAgIGlmIHBheWxvYWRfa2V5ID09ICdQUkVTSUdORUQnOgorICAgICAgICAgIHdpdGggaW5wdXRfdGZfemlwLm9wZW4odmlydF9hcGV4X3BhdGgpIGFzIGFwZXhfZnA6CisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShhcGV4X2ZwKSBhcyBhcGV4X3ppcDoKKyAgICAgICAgICAgICAgbmV3X3B1YmtleSA9IGFwZXhfemlwLnJlYWQoJ2FwZXhfcHVia2V5JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBuZXdfcHVia2V5X3BhdGggPSBjb21tb24uRXh0cmFjdEF2YlB1YmxpY0tleSgKKyAgICAgICAgICAgICAgbWlzY19pbmZvWydhdmJfYXZidG9vbCddLCBwYXlsb2FkX2tleSkKKyAgICAgICAgICB3aXRoIG9wZW4obmV3X3B1YmtleV9wYXRoLCAncmInKSBhcyBmOgorICAgICAgICAgICAgbmV3X3B1YmtleSA9IGYucmVhZCgpCisKICAgICAgICAgcHVia2V5X2luZm8gPSBjb3B5LmNvcHkoCiAgICAgICAgICAgICBpbnB1dF90Zl96aXAuZ2V0aW5mbygiUFJFQlVJTFRfSU1BR0VTL3B2bWZ3X2VtYmVkZGVkLmF2YnB1YmtleSIpKQogICAgICAgICBvbGRfcHVia2V5ID0gaW5wdXRfdGZfemlwLnJlYWQocHVia2V5X2luZm8uZmlsZW5hbWUpCg==