ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMjdmNmNlYS4uZGYzOTg3NCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTc0LDYgKzc0LDggQEAKICQoRFZfUEFUVEVSTlMpOiB2ZXJpZnktJSA6IC4vdmVyaWxvZy9kdi8lIGNoZWNrLWNvcmVtYXJrX3JlcG8gY2hlY2stcmlzY3ZfY29tcF9yZXBvIGNoZWNrLXJpc2N2X3Rlc3RfcmVwbwogCWRvY2tlciBydW4gLXYgJHtUQVJHRVRfUEFUSH06JHtUQVJHRVRfUEFUSH0gXAogICAgICAgICAgICAgICAgIC1lIFRBUkdFVF9QQVRIPSR7VEFSR0VUX1BBVEh9ICBcCisJCS12ICR7Q0FSQVZFTF9ST09UfToke0NBUkFWRUxfUk9PVH0gXAorCQktZSBDQVJBVkVMX1JPT1Q9JHtDQVJBVkVMX1JPT1R9IFwKICAgICAgICAgICAgICAgICAtdSAkKGlkIC11ICQkVVNFUik6JChpZCAtZyAkJFVTRVIpIHJpc2NkdWluby9kdl9zZXR1cDptcHc1IFwKICAgICAgICAgICAgICAgICBzaCAtYyAkKFZFUklGWV9DT01NQU5EKQogCQkJCQpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9waW5tdXgvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi9waW5tdXgvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CmluZGV4IGUyYmFlZWMuLjI2YWYyOGMgMTAwNjQ0Ci0tLSBhL3NpZ25vZmYvcGlubXV4L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgorKysgYi9zaWdub2ZmL3Bpbm11eC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTEsMiArMSwyIEBACiAsZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCi0wLC9wcm9qZWN0L29wZW5sYW5lL3Bpbm11eCxwaW5tdXgscGlubXV4LGZsb3cgY29tcGxldGVkLDBoMTFtMjVzMG1zLDBoN202czBtcyw0MzgwNi4wNjA2MDYwNjA2MSwwLjI0NzUsMjE5MDMuMDMwMzAzMDMwMzA0LDI2LjEsODkyLjI1LDU0MjEsMCwwLDAsMCwwLDAsMCwtMSwwLC0xLC0xLDQzNjM2MCw1NTMzNSwwLjAsMC4wLC0xLDAuMCwwLjAsMC4wLDAuMCwtMSwwLjAsMC4wLDM0MDMzMzAyNS4wLDAuMCw1Ny45OSw0Mi4xNiwzMS43NywxOS41MSwtMSwzNDgwLDg1MTksNTYyLDU2MDEsMCwwLDAsNDA2MywxMjMsMTA3LDQwLDc3LDkzMywxMDksMTQsMjg1LDEwODYsMTAzNCwxMSwzMTQsMzI1OSwwLDM1NzMsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC4zLDAuMyxza3kxMzBfZmRfc2NfaGQsNCw0CiswLC9wcm9qZWN0L29wZW5sYW5lL3Bpbm11eCxwaW5tdXgscGlubXV4LGZsb3cgY29tcGxldGVkLDBoMTBtNDhzMG1zLDBoN20yNnMwbXMsNDM4MDYuMDYwNjA2MDYwNjEsMC4yNDc1LDIxOTAzLjAzMDMwMzAzMDMwNCwyNi4xLDkwNS41NSw1NDIxLDAsMCwwLDAsMCwwLDAsLTEsMCwtMSwtMSw0MzQ3NjcsNTUyODUsMC4wLDAuMCwtMSwwLjAsMC4wLDAuMCwwLjAsLTEsMC4wLDAuMCwzNDA1NjY0MTQuMCwwLjAsNTcuOTcsNDIuNDQsMzEuMDcsMTkuMDksLTEsMzQ4MCw4NTE5LDU2Miw1NjAxLDAsMCwwLDQwNjMsMTIzLDEwNyw0MCw3Nyw5MzMsMTA5LDE0LDI4NSwxMDg2LDEwMzQsMTEsMzE0LDMyNTksMCwzNTczLDEwMC4wLDEwLjAsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuMywwLjMsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi9xc3BpbV90b3AvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi9xc3BpbV90b3AvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CmluZGV4IDFiZjI2MDcuLjQ5OGUxYmUgMTAwNjQ0Ci0tLSBhL3NpZ25vZmYvcXNwaW1fdG9wL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgorKysgYi9zaWdub2ZmL3FzcGltX3RvcC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTEsMiArMSwyIEBACiAsZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCi0wLC9wcm9qZWN0L29wZW5sYW5lL3FzcGltX3RvcCxxc3BpbV90b3AscXNwaW1fdG9wLGZsb3cgY29tcGxldGVkLDBoMTVtMTVzMG1zLDBoMTFtMTNzMG1zLDY1Njk2Ljk2OTY5Njk2OTcsMC4yNDc1LDMyODQ4LjQ4NDg0ODQ4NDg1LDM3LjkyLDEwODIuMzEsODEzMCwwLDAsMCwwLDAsMCwwLC0xLDAsLTEsLTEsNDE5NTkwLDcxNzQ3LC0wLjU1LC01LjA0LC0xLDAuMCwwLjAsLTIxLjQ1LC0xOTQzLjc4LC0xLDAuMCwwLjAsMjU2NDYwNzIwLjAsMC4wLDUwLjQ3LDQ5LjA1LDIzLjA1LDIyLjM2LC0xLDczNzQsMTEwMzgsODAzLDQ0NjYsMCwwLDAsODM0OCwyNjMsOTYsMTk1LDExNCwxNDIwLDIxNCwzNCwxNDYwLDE1NTMsMTUxNywxNywzODgsMzIzNCwwLDM2MjIsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC40MiwwLjMsc2t5MTMwX2ZkX3NjX2hkLDQsNAorMCwvcHJvamVjdC9vcGVubGFuZS9xc3BpbV90b3AscXNwaW1fdG9wLHFzcGltX3RvcCxmbG93IGNvbXBsZXRlZCwwaDE0bTU2czBtcywwaDExbTQyczBtcyw2NTY5Ni45Njk2OTY5Njk3LDAuMjQ3NSwzMjg0OC40ODQ4NDg0ODQ4NSwzNy45MiwxMDI0LjYyLDgxMzAsMCwwLDAsMCwwLDAsMCwtMSwwLC0xLC0xLDQxOTU5MCw3MTc0NywtMC41NSwtNS4wNCwtMSwwLjAsMC4wLC0yMS40NSwtMTk0My43OCwtMSwwLjAsMC4wLDI1NjQ2MDcyMC4wLDAuMCw1MC40Nyw0OS4wNSwyMy4wNSwyMi4zNiwtMSw3Mzc0LDExMDM4LDgwMyw0NDY2LDAsMCwwLDgzNDgsMjYzLDk2LDE5NSwxMTQsMTQyMCwyMTQsMzQsMTQ2MCwxNTUzLDE1MTcsMTcsMzg4LDMyMzQsMCwzNjIyLDEwMC4wLDEwLjAsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuNDIsMC4zLHNreTEzMF9mZF9zY19oZCw0LDQKZGlmZiAtLWdpdCBhL3NpZ25vZmYvdWFydF9pMmNtX3VzYl9zcGlfdG9wL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvdWFydF9pMmNtX3VzYl9zcGlfdG9wL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgppbmRleCAxYWU4ZTRmLi4xM2MzZDQ1IDEwMDY0NAotLS0gYS9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpX3RvcC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKKysrIGIvc2lnbm9mZi91YXJ0X2kyY21fdXNiX3NwaV90b3AvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0xLDIgKzEsMiBAQAogLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQotMCwvcHJvamVjdC9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaV90b3AsdWFydF9pMmNfdXNiX3NwaV90b3AsdWFydF9pMmNtX3VzYl9zcGlfdG9wLGZsb3cgY29tcGxldGVkLDBoMTltMjdzMG1zLDBoMTRtMjVzMG1zLDY5NDAwLjAsMC4zNSwzNDcwMC4wLDM5LjI3LDE1NDAuMSwxMjE0NSwwLDAsMCwwLDAsMCwwLC0xLDAsLTEsLTEsNjMwOTk2LDEwNTc5MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzczNTI4NjU1LjAsMC4wLDUzLjQ4LDUyLjc4LDIzLjcsMjUuOTIsLTEsODY5OCwxMzA2MywxNTUyLDU4NTMsMCwwLDAsOTgyMCwzNzgsMTg5LDI1OSwyNzYsMjE5NCwzNTYsODYsODA3LDI0MDksMjM0OCwxOSw0OTgsNDY0MywwLDUxNDEsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC40NSwwLjMsc2t5MTMwX2ZkX3NjX2hkLDQsNAorMCwvcHJvamVjdC9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaV90b3AsdWFydF9pMmNfdXNiX3NwaV90b3AsdWFydF9pMmNtX3VzYl9zcGlfdG9wLGZsb3cgY29tcGxldGVkLDBoMTdtMTZzMG1zLDBoMTJtNDNzMG1zLDY5Mjg1LjcxNDI4NTcxNDI5LDAuMzUsMzQ2NDIuODU3MTQyODU3MTQ1LDM5LjIxLDE0NDEuMCwxMjEyNSwwLDAsMCwwLDAsMCwwLC0xLDAsLTEsLTEsNTk0NDM5LDEwMzg5NiwwLjAsMC4wLDAuMCwwLjAsLTAuMDIsMC4wLDAuMCwwLjAsMC4wLC0wLjAyLDM2OTkxNzE3Ny4wLDAuMCw1MS4xMSw1MS40NywxOS4yNiwyMi45OCwtMSw4NzAyLDEzMDY3LDE1NTIsNTg1MywwLDAsMCw5ODI0LDM5MiwxODksMjU2LDI3MiwyMjAwLDM1NCw4OCw4MDcsMjQwOSwyMzQ4LDE4LDQ5OCw0NjQzLDAsNTE0MSw5OS44MDAzOTkyMDE1OTY4LDEwLjAyLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjQ1LDAuMyxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvdXNlcl9wcm9qZWN0X3dyYXBwZXIvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CmluZGV4IDUzODZjOTQuLjk4OWI1ZDkgMTAwNjQ0Ci0tLSBhL3NpZ25vZmYvdXNlcl9wcm9qZWN0X3dyYXBwZXIvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CisrKyBiL3NpZ25vZmYvdXNlcl9wcm9qZWN0X3dyYXBwZXIvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0xLDIgKzEsMiBAQAogLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQotMCwvcHJvamVjdC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlcix1c2VyX3Byb2plY3Rfd3JhcHBlcix1c2VyX3Byb2plY3Rfd3JhcHBlcixmbG93IGNvbXBsZXRlZCwwaDQ3bTUwczBtcywwaDVtMjVzMG1zLC0yLjAsLTEsLTEsLTEsNjA3LjY1LDExLDAsMCwwLDAsMCwwLC0xLDAsMCwtMSwtMSwyNDg0MzI3LDE5OTExLDAuMCwtMSwtMSwwLjAsMC4wLDAuMCwtMSwtMSwwLjAsMC4wLC0xLDAuMCw4LjQ5LDEyLjI2LDMuMjcsMi45LDAuMCwzMTgsMzM2NCwzMTgsMzM2NCwwLDAsMCwxMSwwLDAsMCwwLDAsMCwwLDAsLTEsLTEsLTEsMCwwLDAsMCwxMDAuMCwxMC4wLDEwLEFSRUEgMCw1LDUwLDEsODAsMTAwLDAuNTUsMC4zLHNreTEzMF9mZF9zY19oZCw0LDAKKzAsL3Byb2plY3Qvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIsdXNlcl9wcm9qZWN0X3dyYXBwZXIsdXNlcl9wcm9qZWN0X3dyYXBwZXIsZmxvdyBjb21wbGV0ZWQsMGg0NW01M3MwbXMsMGg1bTdzMG1zLC0yLjAsLTEsLTEsLTEsNjA0LjIyLDExLDAsMCwwLDAsMCwwLC0xLDAsMCwtMSwtMSwyNDI4MjE2LDE5MTU2LDAuMCwtMSwtMSwwLjAsMC4wLDAuMCwtMSwtMSwwLjAsMC4wLC0xLDAuMCw4LjM5LDExLjg5LDMuMTQsMi43NSwwLjAsMzE4LDMzNjQsMzE4LDMzNjQsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLC0xLC0xLC0xLDAsMCwwLDAsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNSw1MCwxLDgwLDEwMCwwLjU1LDAuMyxza3kxMzBfZmRfc2NfaGQsNCwwCmRpZmYgLS1naXQgYS9zaWdub2ZmL3diX2hvc3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi93Yl9ob3N0L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgppbmRleCA1Njk4NTAzLi41NGFjNzliIDEwMDY0NAotLS0gYS9zaWdub2ZmL3diX2hvc3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CisrKyBiL3NpZ25vZmYvd2JfaG9zdC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTEsMiArMSwyIEBACiAsZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCi0wLC9wcm9qZWN0L29wZW5sYW5lL3diX2hvc3Qsd2JfaG9zdCx3Yl9ob3N0LGZsb3cgY29tcGxldGVkLDBoNW0zN3MwbXMsMGgzbTM3czBtcyw2MDUxNy42NDcwNTg4MjM1MywwLjE0ODc1LDMwMjU4LjgyMzUyOTQxMTc2NiwzNi42Nyw3NTkuNDEsNDUwMSwwLDAsMCwwLDAsMCwwLDksMCwwLC0xLDIwNjM1MSwzNjUyOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTU2MTgxOTI0LjAsMC4wLDQ1LjgzLDQ4LjAsNC4xNiwxMi42OSwtMSwzNDYxLDYxMzQsMTAwOSwzNTM4LDAsMCwwLDM3NzMsMzcyLDUyLDc0LDE4NCw2NTIsMTMwLDIzLDQ1OCwxMDE0LDk4OSwxMSwyOTYsMTk1MCwwLDIyNDYsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC4zOCwwLjMsc2t5MTMwX2ZkX3NjX2hkLDQsNAorMCwvcHJvamVjdC9vcGVubGFuZS93Yl9ob3N0LHdiX2hvc3Qsd2JfaG9zdCxmbG93IGNvbXBsZXRlZCwwaDdtMjRzMG1zLDBoNW0xczBtcyw2MTI5Ny40Nzg5OTE1OTY2NCwwLjE0ODc1LDMwNjQ4LjczOTQ5NTc5ODMyLDM3LjE1LDc2OS45Myw0NTU5LDAsMCwwLDAsMCwwLDAsMTIsMCwwLC0xLDIwOTI0NCwzNzAyNywwLjAsLTAuMjEsMC4wLDAuMCwwLjAsMC4wLC0xNy43MywwLjAsMC4wLDAuMCwxNTg2MTk5MTMuMCwwLjAsNDYuMDYsNDguODcsNC4wNSwxMi4yOSwtMSwzNTEzLDYyMDYsMTAwOSwzNTU4LDAsMCwwLDM4MzMsMzgwLDUyLDc1LDE4Niw2NTAsMTQ2LDIzLDQ2NiwxMDIyLDk5NywxMSwyOTYsMTk1MCwwLDIyNDYsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC4zOCwwLjMsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvTWFrZWZpbGUKaW5kZXggODM2ZDBjZC4uZGRiZjdkMCAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi9NYWtlZmlsZQorKysgYi92ZXJpbG9nL2R2L01ha2VmaWxlCkBAIC0xOSw3ICsxOSw3IEBACiAuU1VGRklYRVM6CiAuU0lMRU5UOiBjbGVhbiBhbGwKIAotUEFUVEVSTlMgPSB3Yl9wb3J0IHJpc2NfYm9vdCB1c2VyX3Jpc2NfYm9vdCB1c2VyX3VhcnQgdXNlcl9xc3BpIHVzZXJfaTJjbSByaXNjdl9yZWdyZXNzIHVzZXJfYmFzaWMgdXNlcl91YXJ0X21hc3RlciB1YXJ0X21hc3RlcgorUEFUVEVSTlMgPSB3Yl9wb3J0IHJpc2NfYm9vdCB1c2VyX3Jpc2NfYm9vdCB1c2VyX3VhcnQgdXNlcl9xc3BpIHVzZXJfaTJjbSByaXNjdl9yZWdyZXNzIHVzZXJfYmFzaWMgdXNlcl91c2IgdXNlcl91YXJ0X21hc3RlciB1YXJ0X21hc3RlcgogCiBhbGw6ICAke1BBVFRFUk5TfQogCWZvciBpIGluICR7UEFUVEVSTlN9OyBkbyBcCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2FnZW50cy90ZXN0X2NvbnRyb2wudiBiL3Zlcmlsb2cvZHYvYWdlbnRzL3Rlc3RfY29udHJvbC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlYjA2NmEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2FnZW50cy90ZXN0X2NvbnRyb2wudgpAQCAtMCwwICsxLDgyIEBACisKK21vZHVsZSB0ZXN0X2NvbnRyb2woKTsKKyAgCisgIGV2ZW50ICAgICAgICBlcnJvcl9kZXRlY3RlZDsKKyAgaW50ZWdlciAgICAgIGVycm9yX2NvdW50OworICByZWcgICAgICAgICAgdmVyYm9zZV9tc2c7CisgIAorICAvLyBpbml0aWFsaXplIGRlYnVnIHZhcmlhYmxlcyAKKyAgaW5pdGlhbAorICAgIGJlZ2luCisgICAgICBlcnJvcl9jb3VudCA9IDA7CisgICAgICB2ZXJib3NlX21zZyA9IDA7CisgICAgZW5kCisKKworICAvLyBjb3VudCB0aGUgbnVtYmVyIGVycm9yIAorICBhbHdheXMgQChlcnJvcl9kZXRlY3RlZCkKKyAgICBiZWdpbgorICAgICAgZXJyb3JfY291bnQgPSBlcnJvcl9jb3VudCArIDE7CisgICAgZW5kCisgIAorICAKKyAgLy8gZW5hYmxpbmcvZGlzYWJsaW5nICBtZXNzYWdlCisgIHRhc2sgbXNnX2VuYWJsZTsKKyAgICBpbnB1dCBbMjAqODoxXSBtc2dfc3JjOworICAgIGlucHV0IG1zZ19lbmFibGU7CisgICAgYmVnaW4KKyAgICAgIHZlcmJvc2VfbXNnID0gbXNnX2VuYWJsZTsKKyAgICAgIGlmIChtc2dfZW5hYmxlKQorICAgICAgICAkZGlzcGxheSgiICAgICAgICAgQXQgdGltZSAldCAqKiAlczogZW5hYmxpbmcgbWVzc2FnZXMiLCR0aW1lLCBtc2dfc3JjKTsKKyAgICAgIGVsc2UKKyAgICAgICAgJGRpc3BsYXkoIiAgICAgICAgIEF0IHRpbWUgJXQgKiogJXM6IGRpc2FibGluZyBtZXNzYWdlcyIsJHRpbWUsIG1zZ19zcmMpOworICAgIGVuZAorICBlbmR0YXNrIC8vIG1zZworCisgIC8vIGdlbmVyYXRpbmcgbWVzc2FnZQorICB0YXNrIG1zZzsKKyAgICBpbnB1dCBbMjAqODoxXSBtc2dfc3JjOworICAgIGlucHV0IFs0MCo4OjFdIG1zZ190ZXh0OworICAgIGJlZ2luCisgICAgICBpZiAodmVyYm9zZV9tc2cpCisgICAgICAgICRkaXNwbGF5KCIgICAgICAgICBBdCB0aW1lICV0ICoqICVzOiBNc2c6ICVzIiwkdGltZSwgbXNnX3NyYywgbXNnX3RleHQpOworICAgIGVuZAorICBlbmR0YXNrIC8vIG1zZworCisgIC8vIGdlbmVyYXRpbmcgbG9uZyBtZXNzYWdlCisgIHRhc2sgbXNnbDsKKyAgICBpbnB1dCBbNDAqODoxXSBtc2dfc3JjOworICAgIGlucHV0IFs4MCo4OjFdIG1zZ190ZXh0OworICAgIGJlZ2luCisgICAgICBpZiAodmVyYm9zZV9tc2cpCisgICAgICAgICRkaXNwbGF5KCIgICAgICAgICBBdCB0aW1lICV0ICoqICVzOiBNc2c6ICVzIiwkdGltZSwgbXNnX3NyYywgbXNnX3RleHQpOworICAgIGVuZAorICBlbmR0YXNrIC8vIG1zZworCisgIC8vIGdlbmVyYXRpbmcgdGhlIGVycm9yIG1lc3NhZ2UKKyAgdGFzayBlcnI7CisgICAgaW5wdXQgWzIwKjg6MV0gZXJyX3NyYzsKKyAgICBpbnB1dCBbNDAqODoxXSBlcnJfdGV4dDsKKyAgICBiZWdpbgorICAgICAgLT4gZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAkZGlzcGxheSgiVGltZSAlMGQsICVzIEVycm9yOiAlcyIsJHRpbWUsIGVycl9zcmMsIGVycl90ZXh0KTsKKyAgICBlbmQKKyAgZW5kdGFzayAvLyBlcnIKKworCit0YXNrIGZpbmlzaF90ZXN0OworYmVnaW4KKworICAgJGRpc3BsYXkoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgIGlmICggZXJyb3JfY291bnQgPT0gMCApCisgICAgICAkZGlzcGxheSgiKiBURVNUOiBQQVNTRUQiKTsKKyAgIGVsc2UKKyAgICAgICRkaXNwbGF5KCIqIFRFU1Q6IEZBSUxFRFxuKlx0RXJyb3IocykgPSAlZCIsIGVycm9yX2NvdW50KTsKKworICAgJGRpc3BsYXkoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKK2VuZAorZW5kdGFzaworCisKK2VuZG1vZHVsZSAvLyBkZWJ1Z19wcm9jCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3VzYl9hZ2VudHMudiBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VzYl9hZ2VudHMudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjY2NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9hZ2VudHMvdXNiX2FnZW50cy52CkBAIC0wLDAgKzEsMTAxMCBAQAorCitgZGVmaW5lIFRPUCB1c2VyX3VzYl90YgorCittb2R1bGUgdXNiX2FnZW50OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWZpbmVzOgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZXNwb25zZSB2YWx1ZXMKK2BkZWZpbmUgVVNCX1JFU19PSyAgICAgIDgnaDAKK2BkZWZpbmUgVVNCX1JFU19OQUsgICAgIDgnaEZGCitgZGVmaW5lIFVTQl9SRVNfU1RBTEwgICA4J2hGRQorYGRlZmluZSBVU0JfUkVTX1RJTUVPVVQgOCdoRkQKKworCisvLyBVU0IgUElEIHZhbHVlcworYGRlZmluZSBQSURfT1VUICAgICAgICA4J2hFMQorYGRlZmluZSBQSURfSU4gICAgICAgICA4J2g2OQorYGRlZmluZSBQSURfU09GICAgICAgICA4J2hBNQorYGRlZmluZSBQSURfU0VUVVAgICAgICA4J2gyRAorCitgZGVmaW5lIFBJRF9EQVRBMCAgICAgIDgnaEMzCitgZGVmaW5lIFBJRF9EQVRBMSAgICAgIDgnaDRCCisKK2BkZWZpbmUgUElEX0FDSyAgICAgICAgOCdoRDIKK2BkZWZpbmUgUElEX05BSyAgICAgICAgOCdoNUEKK2BkZWZpbmUgUElEX1NUQUxMICAgICAgOCdoMUUKKworLy8gU3RhbmRhcmQgcmVxdWVzdHMgKHZpYSBTRVRVUCBwYWNrZXRzKQorYGRlZmluZSBSRVFfR0VUX1NUQVRVUyAgICAgICAgOCdoMDAKK2BkZWZpbmUgUkVRX0NMRUFSX0ZFQVRVUkUgICAgIDgnaDAxCitgZGVmaW5lIFJFUV9TRVRfRkVBVFVSRSAgICAgICA4J2gwMworYGRlZmluZSBSRVFfU0VUX0FERFJFU1MgICAgICAgOCdoMDUKK2BkZWZpbmUgUkVRX0dFVF9ERVNDUklQVE9SICAgIDgnaDA2CitgZGVmaW5lIFJFUV9TRVRfREVTQ1JJUFRPUiAgICA4J2gwNworYGRlZmluZSBSRVFfR0VUX0NPTkZJR1VSQVRJT04gOCdoMDgKK2BkZWZpbmUgUkVRX1NFVF9DT05GSUdVUkFUSU9OIDgnaDA5CitgZGVmaW5lIFJFUV9HRVRfSU5URVJGQUNFICAgICA4J2gwQQorYGRlZmluZSBSRVFfU0VUX0lOVEVSRkFDRSAgICAgOCdoMEIKK2BkZWZpbmUgUkVRX1NZTkNfRlJBTUUgICAgICAgIDgnaDBDCisKKy8vIERlc2NyaXB0b3IgdHlwZXMKK2BkZWZpbmUgREVTQ19ERVZJQ0UgICAgICAgICAgIDgnaDAxCitgZGVmaW5lIERFU0NfQ09ORklHVVJBVElPTiAgICA4J2gwMgorYGRlZmluZSBERVNDX1NUUklORyAgICAgICAgICAgOCdoMDMKK2BkZWZpbmUgREVTQ19JTlRFUkZBQ0UgICAgICAgIDgnaDA0CitgZGVmaW5lIERFU0NfRU5EUE9JTlQgICAgICAgICA4J2gwNQorYGRlZmluZSBERVNDX0RFVl9RVUFMSUZJRVIgICAgOCdoMDYKK2BkZWZpbmUgREVTQ19PVEhFUl9TUEVFRF9DT05GIDgnaDA3CitgZGVmaW5lIERFU0NfSUZfUE9XRVIgICAgICAgICA4J2gwOAorCisvLyBEZXZpY2UgY2xhc3MKK2BkZWZpbmUgREVWX0NMQVNTX1JFU0VSVkVEICAgICAgOCdoMDAKK2BkZWZpbmUgREVWX0NMQVNTX0FVRElPICAgICAgICAgOCdoMDEKK2BkZWZpbmUgREVWX0NMQVNTX0NPTU1TICAgICAgICAgOCdoMDIKK2BkZWZpbmUgREVWX0NMQVNTX0hJRCAgICAgICAgICAgOCdoMDMKK2BkZWZpbmUgREVWX0NMQVNTX01PTklUT1IgICAgICAgOCdoMDQKK2BkZWZpbmUgREVWX0NMQVNTX1BIWV9JRiAgICAgICAgOCdoMDUKK2BkZWZpbmUgREVWX0NMQVNTX1BPV0VSICAgICAgICAgOCdoMDYKK2BkZWZpbmUgREVWX0NMQVNTX1BSSU5URVIgICAgICAgOCdoMDcKK2BkZWZpbmUgREVWX0NMQVNTX1NUT1JBR0UgICAgICAgOCdoMDgKK2BkZWZpbmUgREVWX0NMQVNTX0hVQiAgICAgICAgICAgOCdoMDkKK2BkZWZpbmUgREVWX0NMQVNTX1RNQyAgICAgICAgICAgOCdoRkUKK2BkZWZpbmUgREVWX0NMQVNTX1ZFTkRPUl9DVVNUT00gOCdoRkYKKworLy8gRGV2aWNlIFJlcXVlc3RzIChibVJlcXVlc3RUeXBlKQorYGRlZmluZSBSRVFESVJfSE9TVFRPREVWSUNFICAgICAgICAoMCA8PCA3KQorYGRlZmluZSBSRVFESVJfREVWSUNFVE9IT1NUICAgICAgICAoMSA8PCA3KQorYGRlZmluZSBSRVFUWVBFX1NUQU5EQVJEICAgICAgICAgICAoMCA8PCA1KQorYGRlZmluZSBSRVFUWVBFX0NMQVNTICAgICAgICAgICAgICAoMSA8PCA1KQorYGRlZmluZSBSRVFUWVBFX1ZFTkRPUiAgICAgICAgICAgICAoMiA8PCA1KQorYGRlZmluZSBSRVFSRUNfREVWSUNFICAgICAgICAgICAgICAoMCA8PCAwKQorYGRlZmluZSBSRVFSRUNfSU5URVJGQUNFICAgICAgICAgICAoMSA8PCAwKQorYGRlZmluZSBSRVFSRUNfRU5EUE9JTlQgICAgICAgICAgICAoMiA8PCAwKQorYGRlZmluZSBSRVFSRUNfT1RIRVIgICAgICAgICAgICAgICAoMyA8PCAwKQorCisvLyBFbmRwb2ludHMKK2BkZWZpbmUgRU5EUE9JTlRfRElSX01BU0sgICAgICAgICAgKDEgPDwgNykKK2BkZWZpbmUgRU5EUE9JTlRfRElSX0lOICAgICAgICAgICAgKDEgPDwgNykKK2BkZWZpbmUgRU5EUE9JTlRfRElSX09VVCAgICAgICAgICAgKDAgPDwgNykKK2BkZWZpbmUgRU5EUE9JTlRfQUREUl9NQVNLICAgICAgICAgKDgnaDdGKQorYGRlZmluZSBFTkRQT0lOVF9UWVBFX01BU0sgICAgICAgICAoOCdoMykKK2BkZWZpbmUgRU5EUE9JTlRfVFlQRV9DT05UUk9MICAgICAgKDApCitgZGVmaW5lIEVORFBPSU5UX1RZUEVfSVNPICAgICAgICAgICgxKQorYGRlZmluZSBFTkRQT0lOVF9UWVBFX0JVTEsgICAgICAgICAoMikKK2BkZWZpbmUgRU5EUE9JTlRfVFlQRV9JTlRFUlJVUFQgICAgKDMpCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmaW5lczoKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BkZWZpbmUgVVNCX0NUUkwgICAgICAgICAgOCdoMAorICAgIGBkZWZpbmUgVVNCX0NUUkxfVFhfRkxVU0ggICAgICAgICAgICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1RYX0ZMVVNIX1NISUZUICAgICAgICAgICAgICA4CisgICAgYGRlZmluZSBVU0JfQ1RSTF9UWF9GTFVTSF9NQVNLICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTiAgICAgICAgICAgICAgNworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fU0hJRlQgICAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX01BU0sgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9EUFBVTExET1dOICAgICAgICAgICAgICA2CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9TSElGVCAgICAgICAgNgorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fTUFTSyAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1QgICAgICAgICAgICAgIDUKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUX1NISUZUICAgICAgICA1CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9NQVNLICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9TSElGVCAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1hDVlJTRUxFQ1RfTUFTSyAgICAgICAgIDgnaDMKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX09QTU9ERV9TSElGVCAgICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9PUE1PREVfTUFTSyAgICAgICAgICAgICA4J2gzCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX0VOQUJMRV9TT0YgICAgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9FTkFCTEVfU09GX1NISUZUICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0NUUkxfRU5BQkxFX1NPRl9NQVNLICAgICAgICAgICAgIDgnaDEKKworYGRlZmluZSBVU0JfU1RBVFVTICAgICAgICA4J2g0CisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1NPRl9USU1FX1NISUZUICAgICAgICAgICAgMTYKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfU09GX1RJTUVfTUFTSyAgICAgICAgICAgICAxNidoZmZmZgorCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1JYX0VSUk9SICAgICAgICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19SWF9FUlJPUl9TSElGVCAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfUlhfRVJST1JfTUFTSyAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfTElORVNUQVRFX0JJVFNfU0hJRlQgICAgICAwCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX01BU0sgICAgICAgOCdoMworCitgZGVmaW5lIFVTQl9JUlFfQUNLICAgICAgIDgnaDgKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1QgICAgICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ERVZJQ0VfREVURUNUX1NISUZUICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9NQVNLICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRVJSICAgICAgICAgICAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9TSElGVCAgICAgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19FUlJfTUFTSyAgICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ET05FICAgICAgICAgICAgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRE9ORV9TSElGVCAgICAgICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RPTkVfTUFTSyAgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX1NPRiAgICAgICAgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19TT0ZfU0hJRlQgICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX01BU0sgICAgICAgICAgICAgICAgIDgnaDEKKworYGRlZmluZSBVU0JfSVJRX1NUUyAgICAgICA4J2hjCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ERVZJQ0VfREVURUNUICAgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9TSElGVCAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RFVklDRV9ERVRFQ1RfTUFTSyAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0VSUiAgICAgICAgICAgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19FUlJfU0hJRlQgICAgICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX01BU0sgICAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRE9ORSAgICAgICAgICAgICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RPTkVfU0hJRlQgICAgICAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ET05FX01BU0sgICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0YgICAgICAgICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfU09GX1NISUZUICAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX1NPRl9NQVNLICAgICAgICAgICAgICAgICA4J2gxCisKK2BkZWZpbmUgVVNCX0lSUV9NQVNLICAgICAgOCdoMTAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUICAgICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9TSElGVCAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RFVklDRV9ERVRFQ1RfTUFTSyAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0VSUiAgICAgICAgICAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19FUlJfU0hJRlQgICAgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRVJSX01BU0sgICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRE9ORSAgICAgICAgICAgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RPTkVfU0hJRlQgICAgICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ET05FX01BU0sgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19TT0YgICAgICAgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfU09GX1NISUZUICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX1NPRl9NQVNLICAgICAgICAgICAgICAgIDgnaDEKKworYGRlZmluZSBVU0JfWEZFUl9EQVRBICAgICA4J2gxNAorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fU0hJRlQgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX0RBVEFfVFhfTEVOX01BU0sgICAgICAgICAgICAxNidoZmZmZgorCitgZGVmaW5lIFVTQl9YRkVSX1RPS0VOICAgIDgnaDE4CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVCAgICAgICAgICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1NUQVJUX1NISUZUICAgICAgICAgICAzMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fU1RBUlRfTUFTSyAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fSU4gICAgICAgICAgICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9TSElGVCAgICAgICAgICAgICAgMzAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0lOX01BU0sgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0FDSyAgICAgICAgICAgICAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLX1NISUZUICAgICAgICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9BQ0tfTUFTSyAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfREFUQVggICAgICAgICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9TSElGVCAgICAgICAyOAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX01BU0sgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfU0hJRlQgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19NQVNLICAgICAgICAgOCdoZmYKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfU0hJRlQgICAgICAgIDkKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX01BU0sgICAgICAgICA4J2g3ZgorCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX1NISUZUICAgICAgICAgNQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9NQVNLICAgICAgICAgIDgnaGYKKworYGRlZmluZSBVU0JfUlhfU1RBVCAgICAgICA4J2gxYworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfU1RBUlRfUEVORCAgICAgICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX1NISUZUICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfTUFTSyAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NSQ19FUlIgICAgICAgICAgICAgICAgICAzMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ1JDX0VSUl9TSElGVCAgICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX01BU0sgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX1RJTUVPVVQgICAgICAgICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9TSElGVCAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX01BU0sgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfSURMRSAgICAgICAgICAgICAgICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX1NISUZUICAgICAgICAgICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0lETEVfTUFTSyAgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfQklUU19TSElGVCAgICAgICAgICAxNgorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX01BU0sgICAgICAgICAgIDgnaGZmCisKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NPVU5UX0JJVFNfU0hJRlQgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX01BU0sgICAgICAgICAgMTYnaGZmZmYKKworYGRlZmluZSBVU0JfV1JfREFUQSAgICAgICA4J2gyMAorICAgIGBkZWZpbmUgVVNCX1dSX0RBVEFfREFUQV9TSElGVCAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9XUl9EQVRBX0RBVEFfTUFTSyAgICAgICAgICAgICAgICA4J2hmZgorCitgZGVmaW5lIFVTQl9SRF9EQVRBICAgICAgIDgnaDIwCisgICAgYGRlZmluZSBVU0JfUkRfREFUQV9EQVRBX1NISUZUICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1JEX0RBVEFfREFUQV9NQVNLICAgICAgICAgICAgICAgIDgnaGZmCisKKwordGFzayB1c2Jod19yZWdfd3JpdGU7CitpbnB1dCBbNzowXSBhZGRyOworaW5wdXQgWzMxOjBdIHdkYXRhOworYmVnaW4KKyAgICBgVE9QLndiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9VU0IrYWRkcix3ZGF0YSk7CitlbmQKK2VuZHRhc2sKKwordGFzayB1c2Jod19yZWdfcmVhZDsKK2lucHV0IFs3OjBdIGFkZHI7CitvdXRwdXQgWzMxOjBdIHJkYXRhOworYmVnaW4KKyAgICBgVE9QLndiX3VzZXJfY29yZV9yZWFkKGBBRERSX1NQQUNFX1VTQithZGRyLHJkYXRhKTsKK2VuZAorZW5kdGFzaworCitwYXJhbWV0ZXIgICBYTUlUX0JVRl9TSVpFICAgICAgID0gNjQ7ICAgIC8vIFhtaXRidWZmZXIgc2l6ZQorcGFyYW1ldGVyICAgUkVDVl9CVUZfU0laRSAgICAgICA9IDY0OyAgICAvLyBSZWN2YnVmZmVyIHNpemUKKworCityZWcgWzc6MF0gICBYbWl0QnVmZmVyICAgICAgICBbMCA6IFhNSVRfQlVGX1NJWkVdOyAvLyBYbWl0IGJ1ZmZlcgorcmVnIFs3OjBdICAgUmVjdkJ1ZmZlciAgICAgICAgWzAgOiBSRUNWX0JVRl9TSVpFXTsgLy8gUmVjdiBidWZmZXIKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiX3NldHVwX3BhY2tldDogQ3JlYXRlICYgc2VuZCBTRVRVUCBwYWNrZXQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgdXNiX3NldHVwX3BhY2tldDsKK2lucHV0IFs3OjBdICBkZXZpY2VfYWRkcmVzczsgCitpbnB1dCBbNzowXSAgcmVxdWVzdF90eXBlOworaW5wdXQgWzc6MF0gIHJlcXVlc3Q7IAoraW5wdXQgWzE1OjBdIHZhbHVlOyAKK2lucHV0IFsxNTowXSBpbmRleDsgCitpbnB1dCBbMTU6MF0gbGVuZ3RoOworb3V0cHV0ICAgICAgIHN0YXR1czsKK3JlZyAgIFs3OjBdICBzdGF0dXM7CitpbnRlZ2VyIGlkeDsKK2JlZ2luCisKKyAgICAvLyBibVJlcXVlc3RUeXBlOgorICAgIC8vICBENyBEYXRhIFBoYXNlIFRyYW5zZmVyIERpcmVjdGlvbgorICAgIC8vICAwID0gSG9zdCB0byBEZXZpY2UKKyAgICAvLyAgMSA9IERldmljZSB0byBIb3N0CisgICAgLy8gIEQ2Li41IFR5cGUKKyAgICAvLyAgMCA9IFN0YW5kYXJkCisgICAgLy8gIDEgPSBDbGFzcworICAgIC8vICAyID0gVmVuZG9yCisgICAgLy8gIDMgPSBSZXNlcnZlZAorICAgIC8vICBENC4uMCBSZWNpcGllbnQKKyAgICAvLyAgMCA9IERldmljZQorICAgIC8vICAxID0gSW50ZXJmYWNlCisgICAgLy8gIDIgPSBFbmRwb2ludAorICAgIC8vICAzID0gT3RoZXIKKyAgICAvLyAKKyAgICBpZHggPSAwOworICAgIFhtaXRCdWZmZXJbaWR4XSA9IHJlcXVlc3RfdHlwZTsgICAgICAgICAgIGlkeCA9IGlkeCsxOworICAgIFhtaXRCdWZmZXJbaWR4XSA9IHJlcXVlc3Q7ICAgICAgICAgICAgICAgIGlkeCA9IGlkeCsxOworICAgIFhtaXRCdWZmZXJbaWR4XSA9ICh2YWx1ZSA+PiAwKSAgJiA4J2hGRjsgIGlkeCA9IGlkeCsxOworICAgIFhtaXRCdWZmZXJbaWR4XSA9ICh2YWx1ZSA+PiA4KSAgJiA4J2hGRjsgIGlkeCA9IGlkeCsxOworICAgIFhtaXRCdWZmZXJbaWR4XSA9IChpbmRleCA+PiAwKSAgJiA4J2hGRjsgIGlkeCA9IGlkeCsxOworICAgIFhtaXRCdWZmZXJbaWR4XSA9IChpbmRleCA+PiA4KSAgJiA4J2hGRjsgIGlkeCA9IGlkeCsxOworICAgIFhtaXRCdWZmZXJbaWR4XSA9IChsZW5ndGggPj4gMCkgJiA4J2hGRjsgIGlkeCA9IGlkeCsxOworICAgIFhtaXRCdWZmZXJbaWR4XSA9IChsZW5ndGggPj4gOCkgJiA4J2hGRjsgIGlkeCA9IGlkeCsxOworCisgICAgLy8gU2VuZCBTRVRVUCB0b2tlbiArIERBVEEwIChhbHdheXMgREFUQTApCisgICAgdXNiaHdfdHJhbnNmZXJfb3V0KGBQSURfU0VUVVAsIGRldmljZV9hZGRyZXNzLCAwLCAxLCBgUElEX0RBVEEwLCBpZHgsc3RhdHVzKTsKKworZW5kCitlbmR0YXNrCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNldEFkZHJlc3M6IFNldCBkZXZpY2UgYWRkcmVzcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayBzZXR1cDsKK2lucHV0IFs3OjBdIGRldmljZV9hZGRyZXNzOworaW5wdXQgIFszOjBdIGVuZHBvaW50Oworb3V0cHV0IFs3OjBdc3RhdHVzOworYmVnaW4KKyAgICAvLyRkaXNwbGF5KCJVU0I6IFNldCBkZXZpY2UgYWRkcmVzcyAlZFxuIiwgZGV2aWNlX2FkZHJlc3MpOworICAgIC8vIFNlbmQgU0VUVVAgdG9rZW4gKyBEQVRBMCAoYWx3YXlzIERBVEEwKQorICAgIHVzYmh3X3RyYW5zZmVyX291dChgUElEX1NFVFVQLCBkZXZpY2VfYWRkcmVzcywgZW5kcG9pbnQsIDEsIGBQSURfREFUQTAsIDgsc3RhdHVzKTsKKyAgICAvLyBEZXZpY2UgaGFzIDUwbVMgdG8gYXBwbHkgdGhlIGFkZHJlc3MKKyAgICB1c2Jod190aW1lcl9zbGVlcCg1MCk7CitlbmQKK2VuZHRhc2sKKwordGFzayBwcmludHN0YXR1czsKKyAgIGlucHV0IFszOjBdIFJlY3ZkU3RhdHVzOworICAgaW5wdXQgWzM6MF0gRXhwU3RhdHVzOworYmVnaW4KKyAgJGRpc3BsYXkoIiIpOworICAkZGlzcGxheSgiICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgaWYoUmVjdmRTdGF0dXMgIT09IEV4cFN0YXR1cyApIGJlZ2luCisgICAgIC0+IGBUT1AudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOworICAgICAkZGlzcGxheSgiICAgIEVSUk9SOiBFeHBlY3RlZCBTdGF0dXMgYW5kIE9ic2VydmVkIFN0YXR1cyBkaWRuJ3QgbWF0Y2ggYXQgJTBkIiwgJHRpbWUpOworICAgICBpZihFeHBTdGF0dXM9PTQnYjAwMDApCisgICAgICAgICRkaXNwbGF5KCIgICAgRXhwZWN0ZWQgU3RhdHVzIGlzIEFDSyBhdCAlMGQiLCAkdGltZSk7CisgICAgIGVsc2UgaWYoRXhwU3RhdHVzPT00J2IwMDAxKQorICAgICAgICAkZGlzcGxheSgiICAgIEV4cGVjdGVkIFN0YXR1cyBpcyBOQUNLIGF0ICUwZCIsICR0aW1lKTsKKyAgICAgZWxzZSBpZihFeHBTdGF0dXM9PTQnYjAwMTApCisgICAgICAgICRkaXNwbGF5KCIgICAgRXhwZWN0ZWQgU3RhdHVzIGlzIFNUQUxMIGF0ICUwZCIsICR0aW1lKTsKKyAgICAgZWxzZSBpZihFeHBTdGF0dXM9PTQnYjAwMTEpCisgICAgICAgICRkaXNwbGF5KCIgICAgRXhwZWN0ZWQgU3RhdHVzIGlzIFRJTUVPVVQgYXQgJTBkIiwgJHRpbWUpOworICAgICBlbHNlIGlmKEV4cFN0YXR1cz09NCdiMDEwMCkKKyAgICAgICAgJGRpc3BsYXkoIiAgICBFeHBlY3RlZCBTdGF0dXMgaXMgSU5WQUxJRCBSRVNQT05TRSBhdCAlMGQiLCAkdGltZSk7CisgICAgIGVsc2UgaWYoRXhwU3RhdHVzPT00J2IwMTAxKQorICAgICAgICAkZGlzcGxheSgiICAgIEV4cGVjdGVkIFN0YXR1cyBpcyBDUkMgRVJST1IgYXQgJTBkIiwgJHRpbWUpOworICBlbmQKKworICBpZihSZWN2ZFN0YXR1cz09NCdiMDAwMCkKKyAgICAgJGRpc3BsYXkoIiAgICBSZWNlaXZlZCBTdGF0dXMgaXMgQUNLIGF0ICUwZCIsICR0aW1lKTsKKyAgZWxzZSBpZihSZWN2ZFN0YXR1cz09NCdiMDAwMSkKKyAgICAgJGRpc3BsYXkoIiAgICBSZWNlaXZlZCBTdGF0dXMgaXMgTkFDSyBhdCAlMGQiLCAkdGltZSk7CisgIGVsc2UgaWYoUmVjdmRTdGF0dXM9PTQnYjAwMTApCisgICAgICRkaXNwbGF5KCIgICAgUmVjZWl2ZWQgU3RhdHVzIGlzIFNUQUxMIGF0ICUwZCIsICR0aW1lKTsKKyAgZWxzZSBpZihSZWN2ZFN0YXR1cz09NCdiMDExKQorICAgICAkZGlzcGxheSgiICAgIFJlY2VpdmVkIFN0YXR1cyBpcyBUSU1FT1VUIGF0ICUwZCIsICR0aW1lKTsKKyAgZWxzZSBpZihSZWN2ZFN0YXR1cz09NCdiMDEwMCkKKyAgICAgJGRpc3BsYXkoIiAgICBSZWNlaXZlZCBTdGF0dXMgaXMgSU5WQUxJRCBSRVNQT05TRSBhdCAlMGQiLCAkdGltZSk7CisgIGVsc2UgaWYoUmVjdmRTdGF0dXM9PTQnYjAxMDEpCisgICAgICRkaXNwbGF5KCIgICAgUmVjZWl2ZWQgU3RhdHVzIGlzIENSQyBFUlJPUiBhdCAlMGQiLCAkdGltZSk7CisgICRkaXNwbGF5KCIgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAkZGlzcGxheSgiIik7CitlbmQKK2VuZHRhc2sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYmh3X3Jlc2V0OiBQZXJmb3JtIFVTQiByZXNldAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayB1c2Jod19yZXNldDsKK3JlZyAgYmZsYWc7CitiZWdpbgorICAgICRkaXNwbGF5KCJIVzogQXBwbHlpbmcgVVNCIFJlc2V0IFxuIik7CisgICAgLy8gQXNzZXJ0IFNFMCAvIHJlc2V0CisgICAgdXNiaHdfaHViX3Jlc2V0OworCisgICAgJGRpc3BsYXkoIkhXOiBSZXNldCBXYWl0IHRpbWUgU3RhcnRlZCBcbiIpOworICAgIC8vIFdhaXQgZm9yIHNvbWUgdGltZQorICAgIHVzYmh3X3RpbWVyX3NsZWVwKDExKTsKKworICAgICRkaXNwbGF5KCJIVzogUmVzZXQgV2FpdCB0aW1lIE92ZXIgXG4iKTsKKworICAgIC8vIFN0b3AgYXNzZXJ0aW5nIFNFMCwgc2V0IGRhdGEgbGluZXMgdG8gSGktWgorICAgIHVzYmh3X2h1Yl9lbmFibGUoMCk7CisgICAgdXNiaHdfdGltZXJfc2xlZXAoMyk7CisKKyAgICAkZGlzcGxheSgiSFc6IFdhaXRpbmcgZm9yIGRldmljZSBpbnNlcnRpb25cbiIpOworCisgICAgLy8gV2FpdCBmb3IgZGV2aWNlIGRldGVjdAorICAgIHVzYmh3X2h1Yl9kZXZpY2VfZGV0ZWN0ZWQoYmZsYWcpOworICAgIHdoaWxlICghYmZsYWcpYmVnaW4KKyAgICAgICB1c2Jod19odWJfZGV2aWNlX2RldGVjdGVkKGJmbGFnKTsKKyAgICBlbmQKKworICAgICRkaXNwbGF5KCJIVzogRGV2aWNlIGRldGVjdGVkXG4iKTsKKworICAgIC8vIEVuYWJsZSBTT0YKKyAgICB1c2Jod19odWJfZW5hYmxlKDEpOworZW5kCitlbmR0YXNrCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jod19odWJfcmVzZXQ6IFB1dCBidXMgaW50byBTRTAgc3RhdGUgKHJlc2V0KQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vICBTZW5kUmVzZXQgOiBhc3NlcnRzIGEgU0UwIG9uIHRoZSBVU0IgZm9yIHRoZSBudW1iZXIgb2YgYml0IHRpbWVzIHNwZWNpZmllZAorLy8gICAgICAgICAgICAgIGJ5IFJlc2V0VGltZS4KKy8vICBJbnB1dCAgICAgOiBSZXNldFRpbWUsIG51bWJlciBvZiBiaXQgdGltZXMgZm9yIHdoaWNoIHRvIGRyaXZlIGEgcmVzZXQgb24KKy8vICAgICAgICAgICAgICB0aGUgVVNCCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordGFzayB1c2Jod19odWJfcmVzZXQ7CityZWcgWzc6MF0gdmFsOworYmVnaW4KKyAgICAkZGlzcGxheSgiSFc6IEVudGVyIFVTQiBidXMgcmVzZXRcbiIpOworCisgICAgLy8gUG93ZXItdXAgLyBTRTAKKyAgICB2YWwgPSAwOworICAgIHZhbCA9IHZhbCB8ICgwIDw8IGBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDAgPDwgYFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMiA8PCBgVVNCX0NUUkxfUEhZX09QTU9ERV9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fU0hJRlQpOworICAgIHVzYmh3X3JlZ193cml0ZShgVVNCX0NUUkwsIHZhbCk7CisKK2VuZAorZW5kdGFzaworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYmh3X3RpbWVyX3NsZWVwOiBQZXJmb3JtIFNsZWVwCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Rhc2sgdXNiaHdfdGltZXJfc2xlZXA7CitpbnB1dCBbNzowXSBSZXNldFRpbWU7CityZWcgWzc6MF0gdHNrUmVzZXRUaW1lOworcmVnIFs3OjBdIHRza1Jlc2V0VGltZUNvdW50ZXI7CitiZWdpbgorICAgdHNrUmVzZXRUaW1lQ291bnRlciA9IDA7CisgICB0c2tSZXNldFRpbWUgPSBSZXNldFRpbWU7CisgICBmb3JldmVyIEAocG9zZWRnZSBgVE9QLnVzYl80OG1oel9jbGspIGJlZ2luCisgICAgICB0c2tSZXNldFRpbWVDb3VudGVyID0gdHNrUmVzZXRUaW1lQ291bnRlciArIDEnYjE7CisgICAgICBpZiAodHNrUmVzZXRUaW1lQ291bnRlciA+IHRza1Jlc2V0VGltZSkgYmVnaW4KKyAgICAgICAgICAgIEAocG9zZWRnZSBgVE9QLnVzYl80OG1oel9jbGspOworICAgICAgICAgICAgQChwb3NlZGdlIGBUT1AudXNiXzQ4bWh6X2Nsayk7CisgICAgICAgICAgICBkaXNhYmxlIHVzYmh3X3RpbWVyX3NsZWVwOworICAgICAgZW5kCisgICBlbmQKK2VuZAorZW5kdGFzayAKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jod19odWJfZW5hYmxlOiBFbmFibGUgcm9vdCBodWIgKGRyaXZlIGRhdGEgbGluZXMgdG8gSGlaKQorLy8gICAgICAgICAgICAgICAgICAgYW5kIG9wdGlvbmFsbHkgc3RhcnQgU09GIHBlcmlvZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgdXNiaHdfaHViX2VuYWJsZTsKK2lucHV0IGVuYWJsZV9zb2Y7CityZWcgWzc6MF0gdmFsOworYmVnaW4KKyAgICAkZGlzcGxheSgiSFc6IEVuYWJsZSByb290IGh1YlxuIik7CisKKyAgICAvLyBIb3N0IEZ1bGwgU3BlZWQKKyAgICB2YWwgPSAwOworICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMCA8PCBgVVNCX0NUUkxfUEhZX09QTU9ERV9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9UWF9GTFVTSF9TSElGVCk7CisKKyAgICAvLyBFbmFibGUgU09GCisgICAgaWYgKGVuYWJsZV9zb2YpCisgICAgICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9FTkFCTEVfU09GX1NISUZUKTsKKworICAgIHVzYmh3X3JlZ193cml0ZShgVVNCX0NUUkwsIHZhbCk7CitlbmQKK2VuZHRhc2sKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jod19odWJfZGV2aWNlX2RldGVjdGVkOiBEZXRlY3QgZGV2aWNlIGluc2VydGVkCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHVzYmh3X2h1Yl9kZXZpY2VfZGV0ZWN0ZWQ7CitvdXRwdXQgYmZsYWc7CityZWcgX3VzYl9mc19kZXZpY2U7CityZWcgWzMxOjBdIHN0YXR1czsKK3JlZyAgICBiZmxhZzsKK2JlZ2luCisgICAgLy8gR2V0IGxpbmUgc3RhdGUKKyAgICB1c2Jod19yZWdfcmVhZChgVVNCX1NUQVRVUyxzdGF0dXMpOworICAgIHN0YXR1cyA9IHN0YXR1cyA+PiBgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19TSElGVDsKKyAgICBzdGF0dXMgPSBzdGF0dXMgJiBgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19NQVNLOworCisgICAgLy8gRlM6IEQrIHB1bGxlZCBoaWdoCisgICAgLy8gTFM6IEQtIHB1bGxlZCBoaWdoCisgICAgX3VzYl9mc19kZXZpY2UgPSAoc3RhdHVzICYgMSk7CisgICAgaWYoc3RhdHVzICE9IDEpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIkVSUk9SOiBVU0IgUHVsbCBVcCBTdGF0dXMgaXMgbm90IDEsIE9ubHkgRnVsbCBTZWVkIFN1cHBvcnRlZCIpOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlNUQVRVUzogVVNCIEZ1bGwgU3BlZWQgRGV0ZWN0ZWQiKTsKKyAgICBlbmQKKworICAgIGJmbGFnID0gKHN0YXR1cyAhPSAwKTsKK2VuZAorZW5kdGFzaworCit0YXNrIHN0YXR1c19JTjsKK2lucHV0IFs3OjBdIGRldmljZV9hZGRyOworaW5wdXQgWzM6MF0gZW5kcG9pbnQ7CitvdXRwdXQgWzc6MF0gZXhpdF9jb2RlOworcmVnICAgIFs3OjBdIGV4aXRfY29kZTsKK3JlZyAgIFs3OjBdIHN0YXR1czsKK3JlZyAgICBbNzowXSByeF9jb3VudDsKK2JlZ2luCisgIHVzYmh3X3RyYW5zZmVyX2luKGBQSURfSU4sIGRldmljZV9hZGRyLCBlbmRwb2ludCwgc3RhdHVzLGV4aXRfY29kZSxyeF9jb3VudCk7CitlbmQKK2VuZHRhc2sKKwordGFzayBzdGF0dXNfT1VUOworaW5wdXQgWzc6MF0gZGV2aWNlX2FkZHI7CitpbnB1dCBbMzowXSBlbmRwb2ludDsKK291dHB1dCBbNzowXSBzdGF0dXM7CitiZWdpbgorICB1c2Jod190cmFuc2Zlcl9vdXQoYFBJRF9PVVQsIGRldmljZV9hZGRyLCBlbmRwb2ludCwgMSwgYFBJRF9PVVQsIDAsc3RhdHVzKTsKK2VuZAorZW5kdGFzaworCit0YXNrIGNvbnRyb2xfT1VUOworaW5wdXQgWzc6MF0gZGV2aWNlX2FkZHI7CitpbnB1dCBbMzowXSBlbmRwb2ludDsKK2lucHV0IFs3OjBdIEJ5dGVDb3VudDsKK291dHB1dCBbNzowXSBzdGF0dXM7CitiZWdpbgorICB1c2Jod190cmFuc2Zlcl9vdXQoYFBJRF9PVVQsIGRldmljZV9hZGRyLCBlbmRwb2ludCwgMSwgYFBJRF9EQVRBMSwgQnl0ZUNvdW50LHN0YXR1cyk7CitlbmQKK2VuZHRhc2sKKwordGFzayBjb250cm9sX0lOOworaW5wdXQgWzc6MF0gZGV2aWNlX2FkZHI7CitpbnB1dCBbMzowXSBlbmRwb2ludDsKK2lucHV0IFs3OjBdIEJ5dGVDb3VudDsKK291dHB1dCBbNzowXSBleGl0X2NvZGU7CityZWcgICAgWzc6MF0gZXhpdF9jb2RlOworcmVnICAgIFs3OjBdIHN0YXR1czsKK3JlZyAgICBbNzowXSByeF9jb3VudDsKK2JlZ2luCisgIHVzYmh3X3RyYW5zZmVyX2luKGBQSURfSU4sIGRldmljZV9hZGRyLCBlbmRwb2ludCwgc3RhdHVzLGV4aXRfY29kZSxyeF9jb3VudCk7CitlbmQKK2VuZHRhc2sKKwordGFzayBTZXRBZGRyZXNzOworICBpbnB1dCBbNjowXSBhZGRyZXNzOworYmVnaW4KKyAgICBYbWl0QnVmZmVyWzBdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbMV0gPSA4J2IwMDAwXzAxMDE7IC8vIFNldEFkZHJlc3MKKyAgICBYbWl0QnVmZmVyWzJdID0gezEnYjAsIGFkZHJlc3N9OworICAgIFhtaXRCdWZmZXJbM10gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls0XSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzVdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbNl0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsKK2VuZAorZW5kdGFzaworCisKK3Rhc2sgU2V0Q29uZmlndXJhdGlvbjsKKyAgaW5wdXQgWzE6MF0gY2ZnX3ZhbDsKK2JlZ2luCisgICAgWG1pdEJ1ZmZlclswXSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzFdID0gOCdiMDAwMF8xMDAxOyAvLyBTZXQgQ29uZmlndXJhdGlvbgorICAgIFhtaXRCdWZmZXJbMl0gPSB7NidiMDAwXzAwMCwgY2ZnX3ZhbH07CisgICAgWG1pdEJ1ZmZlclszXSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzRdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbNV0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls2XSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnV29yZFdyOworICBpbnB1dCBbNjowXSBhZGRyZXNzOworICBpbnB1dCBbMzE6MF0gcmVnX2FkZHJlc3M7CisgIGlucHV0IFszMTowXSBkYXRhd29yZDsKKyAgcmVnICAgWzc6MF0gIFN0YXR1czsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gOCdiMDEwMF8wMDAwOworICAgWG1pdEJ1ZmZlclsxXSA9IDgnYjAwMDFfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMl0gPSByZWdfYWRkcmVzc1szMToyNF07CisgICBYbWl0QnVmZmVyWzNdID0gcmVnX2FkZHJlc3NbMjM6MTZdOworICAgWG1pdEJ1ZmZlcls0XSA9IHJlZ19hZGRyZXNzWzE1OjhdOworICAgWG1pdEJ1ZmZlcls1XSA9IHJlZ19hZGRyZXNzWzc6MF07CisgICBYbWl0QnVmZmVyWzZdID0gOCdiMDAwMF8wMTAwOworICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsKKworICAgc2V0dXAgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CisKKyAgIFhtaXRCdWZmZXJbMF0gPSBkYXRhd29yZFszMToyNF07CisgICBYbWl0QnVmZmVyWzFdID0gZGF0YXdvcmRbMjM6MTZdOworICAgWG1pdEJ1ZmZlclsyXSA9IGRhdGF3b3JkWzE1OjhdOworICAgWG1pdEJ1ZmZlclszXSA9IGRhdGF3b3JkWzc6MF07CisKKyAgY29udHJvbF9PVVQoYWRkcmVzcywgNCdoMCwgNCwgU3RhdHVzKTsKKyAgc3RhdHVzX0lOIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnV29yZFJkOworICBpbnB1dCBbNjowXSBhZGRyZXNzOworICBpbnB1dCBbMzE6MF0gcmVnX2FkZHJlc3M7CisgIG91dHB1dCBbMzE6MF0gZGF0YXdvcmQ7CisgIHJlZyAgWzMxOjBdIEJ5dGVDb3VudDsKKyAgcmVnICBbNzowXSAgU3RhdHVzOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSA4J2IxMTAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzFdID0gOCdiMDAwMV8wMDAxOworICAgWG1pdEJ1ZmZlclsyXSA9IHJlZ19hZGRyZXNzWzMxOjI0XTsKKyAgIFhtaXRCdWZmZXJbM10gPSByZWdfYWRkcmVzc1syMzoxNl07CisgICBYbWl0QnVmZmVyWzRdID0gcmVnX2FkZHJlc3NbMTU6OF07CisgICBYbWl0QnVmZmVyWzVdID0gcmVnX2FkZHJlc3NbNzowXTsKKyAgIFhtaXRCdWZmZXJbNl0gPSA4J2IwMDAwXzAxMDA7CisgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOworCisgICBzZXR1cCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKKyAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgIGRhdGF3b3JkWzc6MF0gICAgICA9IFJlY3ZCdWZmZXJbM107CisgICAgZGF0YXdvcmRbMTU6OF0gICAgID0gUmVjdkJ1ZmZlclsyXTsKKyAgICBkYXRhd29yZFsyMzoxNl0gICAgPSBSZWN2QnVmZmVyWzFdOworICAgIGRhdGF3b3JkWzMxOjI0XSAgICA9IFJlY3ZCdWZmZXJbMF07CisgICAgZHVtcF9yZWN2X2J1ZmZlcihCeXRlQ291bnQpOworCisgICBzdGF0dXNfT1VUIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnV29yZFJkQ21wOworICBpbnB1dCBbNjowXSBhZGRyZXNzOworICBpbnB1dCBbMzE6MF0gcmVnX2FkZHJlc3M7CisgIGlucHV0IFszMTowXSBkYXRhd29yZDsKKyAgcmVnICAgWzMxOjBdIEJ5dGVDb3VudDsKKyAgcmVnICAgWzMxOjBdIFJlYWREYXRhOworICByZWcgICAgWzc6MF0gU3RhdHVzOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSA4J2IxMTAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzFdID0gOCdiMDAwMV8wMDAxOworICAgWG1pdEJ1ZmZlclsyXSA9IHJlZ19hZGRyZXNzWzMxOjI0XTsKKyAgIFhtaXRCdWZmZXJbM10gPSByZWdfYWRkcmVzc1syMzoxNl07CisgICBYbWl0QnVmZmVyWzRdID0gcmVnX2FkZHJlc3NbMTU6OF07CisgICBYbWl0QnVmZmVyWzVdID0gcmVnX2FkZHJlc3NbNzowXTsKKyAgIFhtaXRCdWZmZXJbNl0gPSA4J2IwMDAwXzAxMDA7CisgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOworCisgICBzZXR1cCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKKyAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKChSZWN2QnVmZmVyWzNdICE9PSBkYXRhd29yZFs3OjBdKSB8fCAoUmVjdkJ1ZmZlclsyXSAhPT0gZGF0YXdvcmRbMTU6OF0pIAorICAgICAgICAgfHwgKFJlY3ZCdWZmZXJbMV0gIT09IGRhdGF3b3JkWzIzOjE2XSkgfHwgKFJlY3ZCdWZmZXJbMF0gIT09IGRhdGF3b3JkWzMxOjI0XSkpCisgICAgYmVnaW4KKyAgICAgIC0+IGBUT1AudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOworICAgICAgICRkaXNwbGF5KCAidXNiX2FnZW50IGNoZWNrOiBFUlJPUjogUmVnaXN0ZXIgUmVhZCBCeXRlIE1pc21hdGNoICEhISBBZGRyZXNzOiAleCBFeHA6ICV4IDsgUnhkOiAleCIscmVnX2FkZHJlc3MsZGF0YXdvcmRbMzE6MF0sIHtSZWN2QnVmZmVyWzBdLFJlY3ZCdWZmZXJbMV0sIFJlY3ZCdWZmZXJbMl0sUmVjdkJ1ZmZlclszXX0gKTsKKyAgICAgICBkdW1wX3JlY3ZfYnVmZmVyKEJ5dGVDb3VudCk7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAkZGlzcGxheSggInVzYl9hZ2VudCBjaGVjazogU1RBVFVTOiBSZWdpc3RlciBSZWFkIEJ5dGUgTWF0Y2ggISEhIEFkZHJlc3M6ICV4IDsgUnhkOiAleCIscmVnX2FkZHJlc3Mse1JlY3ZCdWZmZXJbMF0sUmVjdkJ1ZmZlclsxXSwgUmVjdkJ1ZmZlclsyXSxSZWN2QnVmZmVyWzNdfSApOworCisgICAgZW5kCisKKyAgIHN0YXR1c19PVVQgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CitlbmQKK2VuZHRhc2sKK3Rhc2sgVmVuUmVnSGFsZldvcmRSZDsKKyAgaW5wdXQgWzY6MF0gYWRkcmVzczsKKyAgaW5wdXQgWzIxOjBdIHJlZ19hZGRyZXNzOworICBpbnB1dCBbMTU6MF0gZGF0YXdvcmQ7CisgIG91dHB1dCBbMzE6MF0gQnl0ZUNvdW50OworICByZWcgICAgWzc6MF0gIFN0YXR1czsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gOCdiMTEwMF8wMDAwOworICAgWG1pdEJ1ZmZlclsxXSA9IHsyJ2IwMCxyZWdfYWRkcmVzc1syMToxNl19OworICAgWG1pdEJ1ZmZlclsyXSA9IHJlZ19hZGRyZXNzWzc6MF07CisgICBYbWl0QnVmZmVyWzNdID0gcmVnX2FkZHJlc3NbMTU6OF07CisgICBYbWl0QnVmZmVyWzRdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls1XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNl0gPSA4J2IwMDAwXzAwMTA7CisgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOworCisgICBzZXR1cCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKKyAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKChSZWN2QnVmZmVyWzBdICE9PSBkYXRhd29yZFs3OjBdKSB8fCAoUmVjdkJ1ZmZlclsxXSAhPT0gZGF0YXdvcmRbMTU6OF0pKSAKKyAgICBiZWdpbgorICAgICAgIC0+IGBUT1AudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOworICAgICAgICRkaXNwbGF5KCAidXNiX2FnZW50IGNoZWNrOiBSZWdpc3RlciBSZWFkIEJ5dGUgTWlzbWF0Y2ggISEhIik7CisgICAgICAgZHVtcF9yZWN2X2J1ZmZlcihCeXRlQ291bnQpOworICAgIGVuZAorICAgc3RhdHVzX09VVCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ0J5dGVSZDsKKyAgaW5wdXQgWzY6MF0gYWRkcmVzczsKKyAgaW5wdXQgWzIxOjBdIHJlZ19hZGRyZXNzOworICBpbnB1dCBbNzowXSBkYXRhd29yZDsKKyAgb3V0cHV0IFszMTowXSBCeXRlQ291bnQ7CisgIHJlZyAgICAgWzc6MF0gU3RhdHVzOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSA4J2IxMTAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzFdID0gezInYjAwLHJlZ19hZGRyZXNzWzIxOjE2XX07CisgICBYbWl0QnVmZmVyWzJdID0gcmVnX2FkZHJlc3NbNzowXTsKKyAgIFhtaXRCdWZmZXJbM10gPSByZWdfYWRkcmVzc1sxNTo4XTsKKyAgIFhtaXRCdWZmZXJbNF0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzVdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls2XSA9IDgnYjAwMDBfMDAwMTsKKyAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7CisKKyAgIHNldHVwIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoKFJlY3ZCdWZmZXJbMF0gIT09IGRhdGF3b3JkWzc6MF0pKQorICAgIGJlZ2luCisgICAgICAgLT4gYFRPUC50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgJGRpc3BsYXkoICJ1c2JfYWdlbnQgY2hlY2s6IFJlZ2lzdGVyIFJlYWQgQnl0ZSBNaXNtYXRjaCAhISEiKTsKKyAgICAgICBkdW1wX3JlY3ZfYnVmZmVyKEJ5dGVDb3VudCk7CisgICAgZW5kCisgICBzdGF0dXNfT1VUIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnV3I7CisgIGlucHV0IFsyMTowXSByZWdfYWRkcmVzczsKKyAgaW5wdXQgWzI6MF0gIGxlbmd0aDsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gOCdiMDEwMF8wMDAwOworICAgWG1pdEJ1ZmZlclsxXSA9IHsyJ2IwMCxyZWdfYWRkcmVzc1syMToxNl19OworICAgWG1pdEJ1ZmZlclsyXSA9IHJlZ19hZGRyZXNzWzc6MF07CisgICBYbWl0QnVmZmVyWzNdID0gcmVnX2FkZHJlc3NbMTU6OF07CisgICBYbWl0QnVmZmVyWzRdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls1XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNl0gPSB7NSdiMDAwMF8wLGxlbmd0aH07CisgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOyAgIAorCitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdSZDsKKyAgaW5wdXQgWzIxOjBdIHJlZ19hZGRyZXNzOworICBpbnB1dCBbMjowXSAgbGVuZ3RoOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSA4J2IxMTAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzFdID0gezInYjAwLHJlZ19hZGRyZXNzWzIxOjE2XX07CisgICBYbWl0QnVmZmVyWzJdID0gcmVnX2FkZHJlc3NbNzowXTsKKyAgIFhtaXRCdWZmZXJbM10gPSByZWdfYWRkcmVzc1sxNTo4XTsKKyAgIFhtaXRCdWZmZXJbNF0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzVdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls2XSA9IHs1J2IwMDAwXzAsbGVuZ3RofTsKKyAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7ICAgCitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdXcldvcmREYXRhOworICBpbnB1dCBbNzowXSBCeXRlMDsKKyAgaW5wdXQgWzc6MF0gQnl0ZTE7CisgIGlucHV0IFs3OjBdIEJ5dGUyOworICBpbnB1dCBbNzowXSBCeXRlMzsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gQnl0ZTA7ICAgICAgICAKKyAgIFhtaXRCdWZmZXJbMV0gPSBCeXRlMTsKKyAgIFhtaXRCdWZmZXJbMl0gPSBCeXRlMjsKKyAgIFhtaXRCdWZmZXJbM10gPSBCeXRlMzsKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1dySFdvcmREYXRhOworICBpbnB1dCBbNzowXSBCeXRlMDsKKyAgaW5wdXQgWzc6MF0gQnl0ZTE7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IEJ5dGUwOyAgICAgICAgCisgICBYbWl0QnVmZmVyWzFdID0gQnl0ZTE7CitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdXckJ5dGVEYXRhOworICBpbnB1dCBbNzowXSBCeXRlMDsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gQnl0ZTA7ICAgICAgICAKK2VuZAorZW5kdGFzaworCit0YXNrIGR1bXBfcmVjdl9idWZmZXI7CisgIGlucHV0IFszMTowXSBOdW1CeXRlczsKKyAgaW50ZWdlciBpOworYmVnaW4KKyAgZm9yKGk9MDsgaSA8IE51bUJ5dGVzOyBpPWkrMSkKKyAgICAkZGlzcGxheSgiUmVjdkJ1ZmZlclslMGRdICA9ICViICA6ICUwZCIsIGksIFJlY3ZCdWZmZXJbaV0sIFJlY3ZCdWZmZXJbaV0pOworZW5kCitlbmR0YXNrCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiaHdfdHJhbnNmZXJfb3V0OiBTZW5kIHRva2VuIHRoZW4gc29tZSBEQVRBIHRvIHRoZSBkZXZpY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgdXNiaHdfdHJhbnNmZXJfb3V0OworaW5wdXQgWzc6MF0gICBwaWQ7CitpbnB1dCBbNzowXSAgIGRldmljZV9hZGRyOworaW5wdXQgWzM6MF0gICBlbmRwb2ludDsgCitpbnB1dCAgICAgICAgIGhhbmRzaGFrZTsgCitpbnB1dCBbNzowXSAgIHJlcXVlc3Q7IAoraW5wdXQgIFs3OjBdICB0eF9sZW5ndGg7CitvdXRwdXQgWzc6MF0gIGV4aXRfY29kZTsKKworcmVnICAgIFs3OjBdICBleGl0X2NvZGU7CisKK3JlZyAgWzMxOjBdIHRkYXRhOworaW50ZWdlciAgICAgbDsKK3JlZyBbMzE6MF0gIHRva2VuOworcmVnIFszMTowXSAgY3RybDsKK3JlZyBbMzE6MF0gIHJlc3A7CityZWcgWzMxOjBdICBzdGF0dXM7CityZWcgWzMxOjBdICBzdGF0dXNfY2hrOworYmVnaW4KKyAgICAvLyRkaXNwbGF5KCJVU0IgVE9LRU46ICVzIiwgKHBpZCA9PSBgUElEX1NFVFVQKSA/ICJTRVRVUCIgOiAocGlkID09IGBQSURfREFUQTApID8gIkRBVEEwIjogKHBpZCA9PSBgUElEX0RBVEExKSA/ICJEQVRBMSIgOiAocGlkID09IGBQSURfSU4pID8gIklOIiA6ICJPVVQiKTsKKyAgICAvLyRkaXNwbGF5KCJVU0IgREVWICVkIEVQICVkXG4iLCBkZXZpY2VfYWRkciwgZW5kcG9pbnQpOworCisgICAgLy8gTG9hZCBEQVRBeCB0cmFuc2ZlciBpbnRvIGFkZHJlc3MgMCsKKyAgICAvLyRkaXNwbGF5KCIgVVNCIFR4OiAlMDJ4IiwgcmVxdWVzdCk7CisgICAgZm9yIChsPTA7bDx0eF9sZW5ndGg7bCA9IGwgKyAxKSBiZWdpbgorICAgICAgICB0ZGF0YSA9IFhtaXRCdWZmZXJbbF07CisgICAgICAgIC8vJGRpc3BsYXkoIlVTQiBUWCBEQVRBICUwMngiLCB0ZGF0YSk7CisgICAgICAgIHVzYmh3X3JlZ193cml0ZShgVVNCX1dSX0RBVEEsIHRkYXRhKTsKKyAgICBlbmQKKworICAgIC8vIFRyYW5zZmVyIGRhdGEgbGVuZ3RoCisgICAgdXNiaHdfcmVnX3dyaXRlKGBVU0JfWEZFUl9EQVRBLCB0eF9sZW5ndGgpOworCisgICAgLy8gQ29uZmlndXJlIHRyYW5zZmVyIGZvciBEQVRBeCBwb3J0aW9uCisgICAgY3RybCA9ICgxIDw8IGBVU0JfWEZFUl9UT0tFTl9TVEFSVF9TSElGVCk7CisKKyAgICAvLyBXYWl0IGZvciByZXNwb25zZSBvciB0aW1lb3V0CisgICAgY3RybD0gY3RybCB8IChoYW5kc2hha2UgPyAoMSA8PCBgVVNCX1hGRVJfVE9LRU5fQUNLX1NISUZUKSA6IDApOworCisgICAgY3RybD0gY3RybCB8ICgocmVxdWVzdCA9PSBgUElEX0RBVEExKSA/ICgxIDw8IGBVU0JfWEZFUl9UT0tFTl9QSURfREFUQVhfU0hJRlQpIDogKDAgPDwgYFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9TSElGVCkpOworCisgICAgLy8gU2V0dXAgdG9rZW4gZGV0YWlscyAoZG9uJ3Qgc3RhcnQgdHJhbnNmZXIgeWV0KQorICAgIHRva2VuID0gKHBpZDw8YFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX1NISUZUKSB8IChkZXZpY2VfYWRkciA8PCBgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfU0hJRlQpIHwgKGVuZHBvaW50IDw8IGBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX1NISUZUKTsKKyAgICB1c2Jod19yZWdfd3JpdGUoYFVTQl9YRkVSX1RPS0VOLCB0b2tlbiB8IGN0cmwpOworCisgICAgLy8gV2FpdCBmb3IgVHggdG8gc3RhcnQKKyAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JYX1NUQVQsc3RhdHVzKSA7CisgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX1NISUZUKTsKKyAgICB3aGlsZSAoc3RhdHVzX2NoaykgYmVnaW4KKyAgICAgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SWF9TVEFULHN0YXR1cykgOworICAgICAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfU0hJRlQpOworICAgIGVuZAorCisgICAgLy8gTm8gaGFuZHNoYWtpbmc/IFdlIGFyZSBkb25lCisgICAgaWYgKCFoYW5kc2hha2UpIGJlZ2luCisJZXhpdF9jb2RlID0gYFVTQl9SRVNfT0s7CisgICAgZW5kCisKKyAgICAvLyBXYWl0IGZvciBpZGxlCisgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SWF9TVEFULHN0YXR1cykgOworICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfSURMRV9TSElGVCkgOworICAgIHdoaWxlICghKHN0YXR1c19jaGspKSBiZWdpbgorICAgICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUlhfU1RBVCxzdGF0dXMpIDsKKyAgICAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX0lETEVfU0hJRlQpIDsKKyAgICBlbmQKKworICAgICRkaXNwbGF5KCJVU0IgUkVTUE9OU0U6ICV4IixzdGF0dXMpOworCisgICAgaWYgKHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9SRVNQX1RJTUVPVVRfU0hJRlQpKSBiZWdpbgorICAgICAgICRkaXNwbGF5KCIgIFVTQiBUSU1FT1VUXG4iKTsKKyAgICAgICAkZGlzcGxheSgiVVNCIEVSUk9SOiBPVVQgdGltZW91dFxuIik7CisgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfVElNRU9VVDsKKyAgICBlbmQKKworICAgIC8vIENoZWNrIGZvciBOQUsgLyBTVEFMTAorICAgIHJlc3AgPSAoKHN0YXR1cyA+PiBgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX1NISUZUKSAmIGBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfTUFTSyk7CisgICAgaWYgKHJlc3AgPT0gYFBJRF9BQ0spIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlVTQiBTVEFUVVM6IEFDS1xuIik7CisgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfT0s7CisgICAgZW5kIGVsc2UgaWYgKHJlc3AgPT0gYFBJRF9OQUspIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlVTQiBTVEFUVVM6IE5BS1xuIik7CisgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfTkFLOworICAgIGVuZCBlbHNlIGlmIChyZXNwID09IGBQSURfU1RBTEwpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlVTQiBTVEFUVVM6ICBTVEFMTFxuIik7CisgICAgICAgJGRpc3BsYXkoIlVTQiBFUlJPUjogIE9VVCBTVEFMTFxuIik7CisgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfU1RBTEw7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiVVNCIEVSUk9SOiBVbmtub3duIE9VVCByZXNwb25zZSAoJTAyeClcbiIsIHJlc3ApOworCisgICAgICAgLy8gVW5rbm93bgorICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX1NUQUxMOworICAgIGVuZAorZW5kCitlbmR0YXNrCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYmh3X3RyYW5zZmVyX2luOiBQZXJmb3JtIElOIHJlcXVlc3QgYW5kIGV4cGVjdCBEQVRBIGZyb20gZGV2aWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHVzYmh3X3RyYW5zZmVyX2luOworaW5wdXQgWzc6MF0gICAgcGlkOyAKK2lucHV0IFs3OjBdICAgIGRldmljZV9hZGRyOyAKK2lucHV0IFs3OjBdICAgIGVuZHBvaW50OyAKK291dHB1dCBbNzowXSAgIHJlc3BvbnNlOyAKK291dHB1dCBbNzowXSAgIGV4aXRfY29kZTsKK291dHB1dCBbNzowXSAgIHJ4X2NvdW50OworCityZWcgIFs3OjBdICAgICBleGl0X2NvZGU7CityZWcgIFs3OjBdICAgICByZXNwb25zZTsgCityZWcgIFs3OjBdICAgICByeF9sZW5ndGg7CitpbnRlZ2VyIGw7CityZWcgIFs3OjBdICAgICByeF9jb3VudDsKK3JlZyBbMzE6MF0gICAgIHRva2VuOworcmVnIFszMTowXSAgICAgZGF0YTsKK3JlZyBbMzE6MF0gICAgIHN0YXR1czsKK3JlZyBbMzE6MF0gICAgIHN0YXR1c19jaGs7CitiZWdpbgorICAgIC8vJGRpc3BsYXkoIlVTQiBUT0tFTjogJXMiLCAocGlkID09IGBQSURfU0VUVVApID8gIlNFVFVQIiA6IChwaWQgPT0gYFBJRF9EQVRBMCkgPyAiREFUQTAiOiAocGlkID09IGBQSURfREFUQTEpID8gIkRBVEExIiA6IChwaWQgPT0gYFBJRF9JTikgPyAiSU4iIDogIk9VVCIpOworICAgIC8vJGRpc3BsYXkoIlVTQiAgREVWICVkIEVQICVkXG4iLCBkZXZpY2VfYWRkciwgZW5kcG9pbnQpOyAgICAKKworICAgIC8vIE5vIGRhdGEgdG8gc2VuZAorICAgIHVzYmh3X3JlZ193cml0ZShgVVNCX1hGRVJfREFUQSwgMCk7CisKKyAgICAvLyBDb25maWd1cmUgdHJhbnNmZXIKKyAgICB0b2tlbiA9IChwaWQ8PGBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19TSElGVCkgfCAoZGV2aWNlX2FkZHIgPDwgYFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX1NISUZUKSB8IChlbmRwb2ludCA8PCBgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9TSElGVCk7CisgICAgdG9rZW49IHRva2VuIHwoMSA8PCBgVVNCX1hGRVJfVE9LRU5fU1RBUlRfU0hJRlQpOworICAgIHRva2VuPSB0b2tlbiB8ICgxIDw8IGBVU0JfWEZFUl9UT0tFTl9JTl9TSElGVCk7CisgICAgdG9rZW49IHRva2VuIHwgKDEgPDwgYFVTQl9YRkVSX1RPS0VOX0FDS19TSElGVCk7CisgICAgLy8kZGlzcGxheSgiVVNCIFRPS0VOIENPTkZJRyA6ICV4Iix0b2tlbik7CisgICAgdXNiaHdfcmVnX3dyaXRlKGBVU0JfWEZFUl9UT0tFTiwgdG9rZW4pOworCisgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EKTsKKyAgICB3aGlsZSAoc3RhdHVzX2NoaykgYmVnaW4KKyAgICAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JYX1NUQVQsc3RhdHVzKTsKKyAgICAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX1NUQVJUX1BFTkQpOworICAgIGVuZAorCisgICAgLy8gV2FpdCBmb3IgcnggaWRsZQorICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUlhfU1RBVCxzdGF0dXMpOyAKKyAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX0lETEVfU0hJRlQpOworICAgIHdoaWxlICghKHN0YXR1c19jaGspKSBiZWdpbgorICAgICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUlhfU1RBVCxzdGF0dXMpOyAKKyAgICAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX0lETEVfU0hJRlQpOworICAgIGVuZAorCisgICAgaWYgKHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9DUkNfRVJSX1NISUZUKSkgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiVVNCOiBDUkMgRVJST1JcbiIpOworICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX1RJTUVPVVQ7CisgICAgZW5kIGVsc2UgaWYgKHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9SRVNQX1RJTUVPVVRfU0hJRlQpKSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJVU0I6IElOIHRpbWVvdXRcbiIpOworICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX1RJTUVPVVQ7CisgICAgZW5kIGVsc2UgYmVnaW4KKworICAgICAgICAvLyBDaGVjayBmb3IgTkFLIC8gU1RBTEwKKyAgICAgICAgcmVzcG9uc2UgPSAoKHN0YXR1cyA+PiBgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX1NISUZUKSAmIGBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfTUFTSyk7CisKKyAgICAgICAgaWYgKHJlc3BvbnNlID09IGBQSURfTkFLKSBiZWdpbgorICAgICAgICAgICAkZGlzcGxheSgiVVNCIE5BSyBSRUNFSVZFRCBcbiIpOworICAgICAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19OQUs7CisgICAgICAgIGVuZCBlbHNlIGlmIChyZXNwb25zZSA9PSBgUElEX1NUQUxMKSBiZWdpbgorICAgICAgICAgICAkZGlzcGxheSgiVVNCOiBJTiBTVEFMTFxuIik7CisgICAgICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX1NUQUxMOworICAgICAgICBlbmQgZWxzZSBiZWdpbgorCisgICAgICAgICAvLyBDaGVjayBDUkMgaXMgb2sKKyAgICAgICAgICAgaWYgKHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9DUkNfRVJSX1NISUZUKSkgYmVnaW4KKyAgICAgICAgICAgICAgICAkZGlzcGxheSgiVVNCOiBDUkMgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX1NUQUxMOworICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorCisgICAgICAgICAgICAgICAgLy8gSG93IG11Y2ggZGF0YSB3YXMgYWN0dWFsbHkgcmVjZWl2ZWQ/CisgICAgICAgICAgICAgICAgcnhfY291bnQgPSAoKHN0YXR1cyA+PiBgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19TSElGVCkgJiBgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19NQVNLKTsKKworICAgICAgICAgICAgICAgIC8vJGRpc3BsYXkoIiBSeCAlZCAoUElEPSV4KTpcbiIsIHJ4X2NvdW50LCByZXNwb25zZSk7CisKKyAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhhdCB1c2VyIGJ1ZmZlciBpcyBiaWcgZW5vdWdoIGZvciB0aGUgcmVzcG9uc2UuCisgICAgICAgICAgICAgICAgLy8gTk9URTogSXQncyBub3QgY3JpdGljYWwgdG8gZG8gdGhpcywgYnV0IHdlIGNhbid0IGVhc2lseSBjaGVjayBDUkNzIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAvLyByZWFkaW5nIHRoZSB3aG9sZSByZXNwb25zZSBpbnRvIGEgYnVmZmVyLgorICAgICAgICAgICAgICAgIC8vIEhpdHRpbmcgdGhpcyBjb25kaXRpb24gbWF5IHBvaW50IHRvd2FyZHMgaXNzdWVzIHdpdGggaGlnaGVyIGxldmVsIHByb3RvY29sCisgICAgICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24uLi4KKyAgICAgICAgICAgICAgICBpZihyeF9sZW5ndGggPj0gcnhfY291bnQpCisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJVU0IgRVJST1IgRGlmZmVyZW5jZSBpbiByeCBsZW46JWQgYW5kIFJ4IERhdGEgQ291bnQ6ICVkIixyeF9sZW5ndGgscnhfY291bnQpOworICAgCisgICAgICAgICAgICAgICAgZm9yIChsPTA7bDxyeF9jb3VudDtsPWwrMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SRF9EQVRBLGRhdGEpOworICAgICAgICAgICAgICAgICAgICAvLyRkaXNwbGF5KCIgVVNCIFJYIENudDogJWQgRGF0YTogJTAyeCIsIGwsIGRhdGEpOworICAgICAgICAgICAgICAgICAgICBSZWN2QnVmZmVyW2xdID0gZGF0YTsKKyAgICAgICAgICAgICAgICBlbmQKKwkJZXhpdF9jb2RlID0gYFVTQl9SRVNfT0s7CisJICAgZW5kCisJZW5kCisgICAgZW5kCitlbmQKK2VuZHRhc2sKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2IxZF9kZWZpbmVzLnYgYi92ZXJpbG9nL2R2L2JmbS91c2IxZF9kZWZpbmVzLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM2MGY0YwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYjFkX2RlZmluZXMudgpAQCAtMCwwICsxLDE0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQiAxLjEgZnVuY3Rpb24gZGVmaW5lcyBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMWRfZGVmaW5lcy52LHYgMS4zIDIwMDItMDktMjUgMDY6MDY6NDkgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0yNSAwNjowNjo0OSAkCisvLyAgJFJldmlzaW9uOiAxLjMgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjIgIDIwMDIvMDkvMjAgMTE6NDY6NTQgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgZml4ZWQgYSB0eXBlICdkZWZpbmUnIHdhcyBtaXNzaW5nIC4uLgorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xOSAxMjowNzo0MCAgcnVkaQorLy8gICAgICAgICAgICAgICBJbml0aWFsIENoZWNraW4KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworCisKKy8vYGRlZmluZSBVU0JGX0RFQlVHCisvL2BkZWZpbmUgVVNCRl9WRVJCT1NFX0RFQlVHCisKKy8vIEVuYWJsZSBvciBkaXNhYmxlIEJsb2NrIEZyYW1lcworLy9gZGVmaW5lIFVTQjFfQkZfRU5BQkxFCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEl0ZW1zIGJlbG93IHRoaXMgcG9pbnQgc2hvdWxkIE5PVCBiZSBtb2RpZmllZCBieSB0aGUgZW5kIHVzZXIKKy8vIFVOTEVTUyB5b3Uga25vdyBleGFjdGx5IHdoYXQgeW91IGFyZSBkb2luZyAhCisvLyBNb2RpZnkgYXQgeW91IG93biByaXNrICEhIQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgZGVmaW5lCVJPTV9TSVpFMAk3J2QwMTgJLy8gRGV2aWNlIERlc2NyaXB0b3IgTGVuZ3RoCitgZGVmaW5lCVJPTV9TSVpFMQk3J2QwNTMJLy8gQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yIExlbmd0aAorYGRlZmluZQlST01fU0laRTJBCTcnZDAwNAkvLyBMYW5ndWFnZSBJRCBEZXNjcmlwdG9yIFN0YXJ0IExlbmd0aAorYGRlZmluZQlST01fU0laRTJCCTcnZDAxMAkvLyBTdHJpbmcgRGVzY3JpcHRvciBMZW5ndGgKK2BkZWZpbmUJUk9NX1NJWkUyQwk3J2QwMTAJLy8gZm9yIGZ1dHVyZSB1c2UKK2BkZWZpbmUJUk9NX1NJWkUyRAk3J2QwMTAJLy8gZm9yIGZ1dHVyZSB1c2UKKworYGRlZmluZQlST01fU1RBUlQwCTcnaDAwCS8vIERldmljZSBEZXNjcmlwdG9yIFN0YXJ0IEFkZHJlc3MKK2BkZWZpbmUJUk9NX1NUQVJUMQk3J2gxMgkvLyBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IgU3RhcnQgQWRkcmVzcworYGRlZmluZQlST01fU1RBUlQyQQk3J2g0NwkvLyBMYW5ndWFnZSBJRCBEZXNjcmlwdG9yIFN0YXJ0IEFkZHJlc3MKK2BkZWZpbmUJUk9NX1NUQVJUMkIJNydoNTAJLy8gU3RyaW5nIERlc2NyaXB0b3IgU3RhcnQgQWRkcmVzcworYGRlZmluZQlST01fU1RBUlQyQwk3J2g2MAkvLyBmb3IgZnV0dXJlIHVzZQorYGRlZmluZQlST01fU1RBUlQyRAk3J2g3MAkvLyBmb3IgZnV0dXJlIHVzZQorCisvLyBFbmRwb2ludCBDb25maWd1cmF0aW9uIENvbnN0YW50cworYGRlZmluZSBJTgkxNCdiMDBfMDAxXzAwMDAwMDAwMAorYGRlZmluZSBPVVQJMTQnYjAwXzAxMF8wMDAwMDAwMDAKK2BkZWZpbmUgQ1RSTAkxNCdiMTBfMTAwXzAwMDAwMDAwMAorYGRlZmluZSBJU08JMTQnYjAxXzAwMF8wMDAwMDAwMDAKK2BkZWZpbmUgQlVMSwkxNCdiMTBfMDAwXzAwMDAwMDAwMAorYGRlZmluZSBJTlQJMTQnYjAwXzAwMF8wMDAwMDAwMDAKKworLy8gUElEIEVuY29kaW5ncworYGRlZmluZSBVU0JGX1RfUElEX09VVAkJNCdiMDAwMQorYGRlZmluZSBVU0JGX1RfUElEX0lOCQk0J2IxMDAxCitgZGVmaW5lIFVTQkZfVF9QSURfU09GCQk0J2IwMTAxCitgZGVmaW5lIFVTQkZfVF9QSURfU0VUVVAJNCdiMTEwMQorYGRlZmluZSBVU0JGX1RfUElEX0RBVEEwCTQnYjAwMTEKK2BkZWZpbmUgVVNCRl9UX1BJRF9EQVRBMQk0J2IxMDExCitgZGVmaW5lIFVTQkZfVF9QSURfREFUQTIJNCdiMDExMQorYGRlZmluZSBVU0JGX1RfUElEX01EQVRBCTQnYjExMTEKK2BkZWZpbmUgVVNCRl9UX1BJRF9BQ0sJCTQnYjAwMTAKK2BkZWZpbmUgVVNCRl9UX1BJRF9OQUNLCQk0J2IxMDEwCitgZGVmaW5lIFVTQkZfVF9QSURfU1RBTEwJNCdiMTExMAorYGRlZmluZSBVU0JGX1RfUElEX05ZRVQJCTQnYjAxMTAKK2BkZWZpbmUgVVNCRl9UX1BJRF9QUkUJCTQnYjExMDAKK2BkZWZpbmUgVVNCRl9UX1BJRF9FUlIJCTQnYjExMDAKK2BkZWZpbmUgVVNCRl9UX1BJRF9TUExJVAk0J2IxMDAwCitgZGVmaW5lIFVTQkZfVF9QSURfUElORwkJNCdiMDEwMAorYGRlZmluZSBVU0JGX1RfUElEX1JFUwkJNCdiMDAwMAorCisvLyBUaGUgSE1TX0RFTCBpcyBhIGNvbnN0YW50IGZvciB0aGUgIkhhbGYgTWljcm8gU2Vjb25kIgorLy8gQ2xvY2sgcHVsc2UgZ2VuZXJhdG9yLiBUaGlzIGNvbnN0YW50IHNwZWNpZmllcyBob3cgbWFueQorLy8gUGh5IGNsb2NrcyB0aGVyZSBhcmUgYmV0d2VlbiB0d28gaG1zX2Nsb2NrIHB1bHNlcy4gVGhpcworLy8gY29uc3RhbnQgcGx1cyAyIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBkZWxheS4KKy8vIEV4YW1wbGU6IEZvciBhIDYwIE1oeiAoMTYuNjY3IG5TIHBlcmlvZCkgUGh5IENsb2NrLCB0aGUKKy8vIGRlbGF5IG11c3QgYmUgMzAgcGh5IGNsb2NrOiA1MDBucyAvIDE2LjY2N25TID0gMzAgY2xvY2tzCitgZGVmaW5lIFVTQkZfSE1TX0RFTAkJNSdoMTYKKworLy8gQWZ0ZXIgc2VuZGluZyBEYXRhIGluIHJlc3BvbnNlIHRvIGFuIElOIHRva2VuIGZyb20gaG9zdCwgdGhlCisvLyBob3N0IG11c3QgcmVwbHkgd2l0aCBhbiBhY2suIFRoZSBob3N0IGhhcyA2MjJuUyBpbiBGdWxsIFNwZWVkCisvLyBtb2RlIGFuZCA0MDBuUyBpbiBIaWdoIFNwZWVkIG1vZGUgdG8gcmVwbHkuIFJYX0FDS19UT19WQUxfRlMKKy8vIGFuZCBSWF9BQ0tfVE9fVkFMX0hTIGFyZSB0aGUgbnVtYmVycyBvZiBVVE1JIGNsb2NrIGN5Y2xlcworLy8gbWludXMgMiBmb3IgRnVsbCBhbmQgSGlnaCBTcGVlZCBtb2Rlcy4KKy8vYGRlZmluZSBVU0JGX1JYX0FDS19UT19WQUxfRlMJOCdkMzYKK2BkZWZpbmUgVVNCRl9SWF9BQ0tfVE9fVkFMX0ZTCTgnZDIwMAorCisvLyBBZnRlciBzZW5kaW5nIGEgT1VUIHRva2VuIHRoZSBob3N0IG11c3Qgc2VuZCBhIGRhdGEgcGFja2V0LgorLy8gVGhlIGhvc3QgaGFzIDYyMm5TIGluIEZ1bGwgU3BlZWQgbW9kZSBhbmQgNDAwblMgaW4gSGlnaCBTcGVlZAorLy8gbW9kZSB0byBzZW5kIHRoZSBkYXRhIHBhY2tldC4KKy8vIFRYX0RBVEFfVE9fVkFMX0ZTIGFuZCBUWF9EQVRBX1RPX1ZBTF9IUyBhcmUgaXMgdGhlIG51bWJlcnMgb2YKKy8vIFVUTUkgY2xvY2sgY3ljbGVzIG1pbnVzIDIuCisvL2BkZWZpbmUgVVNCRl9UWF9EQVRBX1RPX1ZBTF9GUwk4J2QzNgorYGRlZmluZSBVU0JGX1RYX0RBVEFfVE9fVkFMX0ZTCTgnZDIwMApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NvcmUudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jb3JlLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzNmOWVhMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jb3JlLnYKQEAgLTAsMCArMSw3MTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBQb3J0ZWQgdG8gVVNCMlVBUlQgUHJvamVjdAorKiAgQXV0aG9yOiAgRGluZXNoIEFubmF5eWEKKyogICAgICAgICAgIEVtYWlsOi0gZGluZXNoYUBvcGVuY29yZXMub3JnCisqCisqICAgICBEYXRlOiA0dGggRmViIDIwMTMKKyogICAgIENoYW5nZXM6CisqICAgICBBLiBXYXJuaW5nIENsZWFuIFVwCisqICAgICBCLiBVU0IxLXBoeSBpcyBtb3ZlIHRvIGNvcmUgbGV2ZWwKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVNCIDEuMSBmdW5jdGlvbiBJUCBjb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX2NvcmUudix2IDEuMiAyMDAyLTEwLTExIDA1OjQ4OjIwIHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMTAtMTEgMDU6NDg6MjAgJAorLy8gICRSZXZpc2lvbjogMS4yICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xICAyMDAyLzA5LzI1IDA2OjA2OjQ5ICBydWRpCisvLyAgICAgICAgICAgICAgIC0gQWRkZWQgTmV3IFRvcCBMZXZlbAorLy8gICAgICAgICAgICAgICAtIFJlbW92ZSBvbGQgdG9wIGxldmVsIGFuZCBhc3NvY2lhdGVkIGZpbGVzCisvLyAgICAgICAgICAgICAgIC0gTW92ZWQgRklGT3MgdG8gIkdlbmVyaWMgRklGT3MiIHByb2plY3QKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKKy8qCisKKwkJLy8gVVNCIFBIWSBJbnRlcmZhY2UKKwkJdHhfZHAsIHR4X2RuLCB0eF9vZSwKKwkJcnhfZCwgcnhfZHAsIHJ4X2RuLAorVGhlc2UgcGlucyBhcmUgYSBzZW1pLXN0YW5kYXJkIGludGVyZmFjZSB0byBVU0IgMS4xIHRyYW5zY2VpdmVycy4KK0p1c3QgbWF0Y2ggdXAgdGhlIHNpZ25hbCBuYW1lcyB3aXRoIHRoZSBJT3Mgb2YgdGhlIHRyYW5zY2VpdmVyLgorCisJCS8vIFVTQiBNaXNjCisJCXBoeV90eF9tb2RlLCB1c2JfcnN0LCAKK1RoZSBQSFkgc3VwcG9ydHMgc2luZ2xlIGVuZGVkIGFuZCBkaWZmZXJlbnRpYWwgb3V0cHV0IHRvIHRoZQordHJhbnNjZWl2ZXIgRGVwZW5kaW5nIG9uIHdoaWNoIGRldmljZSB5b3UgYXJlIHVzaW5nLCB5b3UgaGF2ZQordG8gdGllIHRoZSBwaHlfdHhfbW9kZSBoaWdoIG9yIGxvdy4KK3VzYl9yc3QgaXMgYXNzZXJ0ZWQgd2hlbmV2ZXIgdGhlIGhvc3Qgc2lnbmFscyByZXNldCBvbiB0aGUgVVNCCitidXMuIFRoZSBVU0IgY29yZSB3aWxsIGludGVybmFsbHkgcmVzZXQgaXRzZWxmIGF1dG9tYXRpY2FsbHkuCitUaGlzIG91dHB1dCBpcyBwcm92aWRlZCBmb3IgZXh0ZXJuYWwgbG9naWMgdGhhdCBuZWVkcyB0byBiZQorcmVzZXQgd2hlbiB0aGUgVVNCIGJ1cyBpcyByZXNldC4KKworCQkvLyBJbnRlcnJ1cHRzCisJCWRyb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWUsCisJCWNyYzE2X2VyciwKK2Ryb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWUgYXJlIGludGVycnVwdCB0byBpbmRpY2F0ZSBlcnJvcgorY29uZGl0aW9ucyBpbiBCbG9jayBGcmFtZSBtb2RlLgorY3JjMTZfZXJyLCBpbmRpY2F0ZXMgd2hlbiBhIGNyYyAxNiBlcnJvciB3YXMgZGV0ZWN0ZWQgb24gdGhlCitwYXlsb2FkIG9mIGEgVVNCIHBhY2tldC4KKworCQkvLyBWZW5kb3IgRmVhdHVyZXMKKwkJdl9zZXRfaW50LCB2X3NldF9mZWF0dXJlLCB3VmFsdWUsCisJCXdJbmRleCwgdmVuZG9yX2RhdGEsCitUaGlzIHNpZ25hbHMgYWxsb3cgdG8gY29udHJvbCB2ZW5kb3Igc3BlY2lmaWMgcmVnaXN0ZXJzIGFuZCBsb2dpYwordGhhdCBjYW4gYmUgbWFuaXB1bGF0ZWQgYW5kIG1vbml0b3JlZCB2aWEgdGhlIGNvbnRyb2wgZW5kcG9pbnQKK3Rocm91Z2ggdmVuZG9yIGRlZmluZWQgY29tbWFuZHMuCisKKwkJLy8gVVNCIFN0YXR1cworCQl1c2JfYnVzeSwgZXBfc2VsLAordXNiX2J1c3kgaXMgYXNzZXJ0ZWQgd2hlbiB0aGUgVVNCIGNvcmUgaXMgYnVzeSB0cmFuc2ZlcnJpbmcKK2RhdGEgZXBfc2VsIGluZGljYXRlZCB0aGUgZW5kcG9pbnQgdGhhdCBpcyBjdXJyZW50bHkgYnVzeS4KK1RoaXMgaW5mb3JtYXRpb24gbWlnaHQgYmUgdXNlZnVsIGlmIG9uZSBkZXNpcmVzIHRvIHJlc2V0L2NsZWFyCit0aGUgYXR0YWNoZWQgRklGT3MgYW5kIHdhbnQgdG8gZG8gdGhpcyB3aGVuIHRoZSBlbmRwb2ludCBpcyBpZGxlLgorCisJCS8vIEVuZHBvaW50IEludGVyZmFjZQorVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyA4IGVuZHBvaW50cy4gRW5kcG9pbnQgMCBpcyB0aGUKK2NvbnRyb2wgZW5kcG9pbnQgYW5kIHVzZWQgaW50ZXJuYWxseS4gRW5kcG9pbnRzIDEtNyBhcmUgYXZhaWxhYmxlCit0byB0aGUgdXNlci4gcmVwbGFjZSAnTicgd2l0aCB0aGUgZW5kcG9pbnQgbnVtYmVyLgorCisJCWVwTl9jZmcsCitUaGlzIGlzIGEgY29uc3RhbnQgaW5wdXQgdXNlZCB0byBjb25maWd1cmUgdGhlIGVuZHBvaW50IGJ5IE9SaW5nCit0aGVzZSBkZWZpbmVzIHRvZ2V0aGVyIGFuZCBhZGRpbmcgdGhlIG1heCBwYWNrZXQgc2l6ZSBmb3IgdGhpcworZW5kcG9pbnQ6CitgSU4gYW5kIGBPVVQgc2VsZWN0IHRoZSB0cmFuc2ZlciBkaXJlY3Rpb24gZm9yIHRoaXMgZW5kcG9pbnQKK2BJU08sIGBCVUxLIGFuZCBgSU5UIGRldGVybWluZSB0aGUgZW5kcG9pbnQgdHlwZQorCitFeGFtcGxlOiAiYEJVTEsgfCBgSU4gIHwgMTQnZDA2NCIgZGVmaW5lcyBhIEJVTEsgSU4gZW5kcG9pbnQgd2l0aAorbWF4IHBhY2tldCBzaXplIG9mIDY0IGJ5dGVzCisKKwkJZXBOX2RpbiwgIGVwTl93ZSwgZXBOX2Z1bGwsCitUaGlzIGlzIHRoZSBPVVQgRklGTyBpbnRlcmZhY2UuIElmIHRoaXMgaXMgYSBJTiBlbmRwb2ludCwgZ3JvdW5kCithbGwgdW51c2VkIGlucHV0cyBhbmQgbGVhdmUgb3V0cHV0cyB1bmNvbm5lY3RlZC4KKworCQllcE5fZG91dCwgZXBOX3JlLCBlcE5fZW1wdHksCit0aGlzIGlzIHRoZSBJTiBGSUZPIGludGVyZmFjZS4gSWYgdGhpcyBpcyBhIE9VVCBlbmRwb2ludCBncm91bmQKK2FsbCB1bnVzZWQgaW5wdXRzIGFuZCBsZWF2ZSBvdXRwdXRzIHVuY29ubmVjdGVkLgorCisJCWVwTl9iZl9lbiwgZXBOX2JmX3NpemUsCitUaGVzZSB0d28gY29uc3RhbnQgY29uZmlndXJlIHRoZSBCbG9jayBGcmFtZSBmZWF0dXJlLgorCisqLworCisKK21vZHVsZSB1c2IxZF9jb3JlKGNsa19pLCByc3RfaSwKKworCQkvLyBVVE1JIEludGVyZmFjZQorCQlEYXRhT3V0LCBUeFZhbGlkLCBUeFJlYWR5LCBSeFZhbGlkLAorCQlSeEFjdGl2ZSwgUnhFcnJvciwgRGF0YUluLCBMaW5lU3RhdGUsCisJCS8vIFVTQiBNaXNjCisJCXBoeV90eF9tb2RlLCB1c2JfcnN0LCAKKworCQkvLyBJbnRlcnJ1cHRzCisJCWRyb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWUsCisJCWNyYzE2X2VyciwKKworCQkvLyBWZW5kb3IgRmVhdHVyZXMKKwkJdl9zZXRfaW50LCB2X3NldF9mZWF0dXJlLCB3VmFsdWUsCisJCXdJbmRleCwgdmVuZG9yX2RhdGEsCisKKwkJLy8gVVNCIFN0YXR1cworCQl1c2JfYnVzeSwgZXBfc2VsLAorCisJCS8vIEVuZHBvaW50IEludGVyZmFjZQorCQllcDFfY2ZnLAorCQllcDFfZGluLCAgZXAxX3dlLCBlcDFfZnVsbCwKKwkJZXAxX2RvdXQsIGVwMV9yZSwgZXAxX2VtcHR5LAorCQllcDFfYmZfZW4sIGVwMV9iZl9zaXplLAorCisJCWVwMl9jZmcsCisJCWVwMl9kaW4sICBlcDJfd2UsIGVwMl9mdWxsLAorCQllcDJfZG91dCwgZXAyX3JlLCBlcDJfZW1wdHksCisJCWVwMl9iZl9lbiwgZXAyX2JmX3NpemUsCisKKwkJZXAzX2NmZywKKwkJZXAzX2RpbiwgIGVwM193ZSwgZXAzX2Z1bGwsCisJCWVwM19kb3V0LCBlcDNfcmUsIGVwM19lbXB0eSwKKwkJZXAzX2JmX2VuLCBlcDNfYmZfc2l6ZSwKKworCQllcDRfY2ZnLAorCQllcDRfZGluLCAgZXA0X3dlLCBlcDRfZnVsbCwKKwkJZXA0X2RvdXQsIGVwNF9yZSwgZXA0X2VtcHR5LAorCQllcDRfYmZfZW4sIGVwNF9iZl9zaXplLAorCisJCWVwNV9jZmcsCisJCWVwNV9kaW4sICBlcDVfd2UsIGVwNV9mdWxsLAorCQllcDVfZG91dCwgZXA1X3JlLCBlcDVfZW1wdHksCisJCWVwNV9iZl9lbiwgZXA1X2JmX3NpemUsCisKKwkJZXA2X2NmZywKKwkJZXA2X2RpbiwgIGVwNl93ZSwgZXA2X2Z1bGwsCisJCWVwNl9kb3V0LCBlcDZfcmUsIGVwNl9lbXB0eSwKKwkJZXA2X2JmX2VuLCBlcDZfYmZfc2l6ZSwKKworCQllcDdfY2ZnLAorCQllcDdfZGluLCAgZXA3X3dlLCBlcDdfZnVsbCwKKwkJZXA3X2RvdXQsIGVwN19yZSwgZXA3X2VtcHR5LAorCQllcDdfYmZfZW4sIGVwN19iZl9zaXplLAorCisJCS8vIFJlZ2lzdGVyIEludGVyZmFjZQorCQlyZWdfYWRkciwKKwkJcmVnX3Jkd3JuLAorCQlyZWdfcmVxLAorCQlyZWdfd2RhdGEsCisJCXJlZ19yZGF0YSwKKwkJcmVnX2FjaworCisJCSk7IAkJCisKK2lucHV0CQljbGtfaTsKK2lucHV0CQlyc3RfaTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVVE1JIEludGVyZmFjZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291dHB1dAlbNzowXQlEYXRhT3V0Oworb3V0cHV0CQlUeFZhbGlkOworaW5wdXQJCVR4UmVhZHk7CitpbnB1dAlbNzowXQlEYXRhSW47CitpbnB1dAkJUnhWYWxpZDsKK2lucHV0CQlSeEFjdGl2ZTsKK2lucHV0CQlSeEVycm9yOworaW5wdXQJWzE6MF0JTGluZVN0YXRlOworCitpbnB1dAkJcGh5X3R4X21vZGU7CitpbnB1dAkJdXNiX3JzdDsKK291dHB1dAkJZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZTsKK291dHB1dAkJY3JjMTZfZXJyOworCitvdXRwdXQJCXZfc2V0X2ludDsKK291dHB1dAkJdl9zZXRfZmVhdHVyZTsKK291dHB1dAlbMTU6MF0Jd1ZhbHVlOworb3V0cHV0CVsxNTowXQl3SW5kZXg7CitpbnB1dAlbMTU6MF0JdmVuZG9yX2RhdGE7CisKK291dHB1dAkJdXNiX2J1c3k7CitvdXRwdXQJWzM6MF0JZXBfc2VsOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciBJbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291dHB1dCBbMzE6MF0gICByZWdfYWRkcjsgICAvLyBSZWdpc3RlciBBZGRyZXNzCitvdXRwdXQJCXJlZ19yZHdybjsgIC8vIDAgLT4gd3JpdGUsIDEtPiByZWFkCitvdXRwdXQJCXJlZ19yZXE7ICAgIC8vICBSZWdpc3RlciBSZXEKK291dHB1dCBbMzE6MF0gICByZWdfd2RhdGE7ICAvLyBSZWdpc3RlciB3cml0ZSBkYXRhCitpbnB1dCAgWzMxOjBdICAgcmVnX3JkYXRhOyAgLy8gUmVnaXN0ZXIgUmVhZCBEYXRhCitpbnB1dAkJcmVnX2FjazsgICAgLy8gUmVnaXN0ZXIgQWNrCisKKy8vIEVuZHBvaW50IEludGVyZmFjZXMKK2lucHV0CVsxMzowXQllcDFfY2ZnOworaW5wdXQJWzc6MF0JZXAxX2RpbjsKK291dHB1dAlbNzowXQllcDFfZG91dDsKK291dHB1dAkJZXAxX3dlLCBlcDFfcmU7CitpbnB1dAkJZXAxX2VtcHR5LCBlcDFfZnVsbDsKK2lucHV0CQllcDFfYmZfZW47CitpbnB1dAlbNjowXQllcDFfYmZfc2l6ZTsKKworaW5wdXQJWzEzOjBdCWVwMl9jZmc7CitpbnB1dAlbNzowXQllcDJfZGluOworb3V0cHV0CVs3OjBdCWVwMl9kb3V0Oworb3V0cHV0CQllcDJfd2UsIGVwMl9yZTsKK2lucHV0CQllcDJfZW1wdHksIGVwMl9mdWxsOworaW5wdXQJCWVwMl9iZl9lbjsKK2lucHV0CVs2OjBdCWVwMl9iZl9zaXplOworCitpbnB1dAlbMTM6MF0JZXAzX2NmZzsKK2lucHV0CVs3OjBdCWVwM19kaW47CitvdXRwdXQJWzc6MF0JZXAzX2RvdXQ7CitvdXRwdXQJCWVwM193ZSwgZXAzX3JlOworaW5wdXQJCWVwM19lbXB0eSwgZXAzX2Z1bGw7CitpbnB1dAkJZXAzX2JmX2VuOworaW5wdXQJWzY6MF0JZXAzX2JmX3NpemU7CisKK2lucHV0CVsxMzowXQllcDRfY2ZnOworaW5wdXQJWzc6MF0JZXA0X2RpbjsKK291dHB1dAlbNzowXQllcDRfZG91dDsKK291dHB1dAkJZXA0X3dlLCBlcDRfcmU7CitpbnB1dAkJZXA0X2VtcHR5LCBlcDRfZnVsbDsKK2lucHV0CQllcDRfYmZfZW47CitpbnB1dAlbNjowXQllcDRfYmZfc2l6ZTsKKworaW5wdXQJWzEzOjBdCWVwNV9jZmc7CitpbnB1dAlbNzowXQllcDVfZGluOworb3V0cHV0CVs3OjBdCWVwNV9kb3V0Oworb3V0cHV0CQllcDVfd2UsIGVwNV9yZTsKK2lucHV0CQllcDVfZW1wdHksIGVwNV9mdWxsOworaW5wdXQJCWVwNV9iZl9lbjsKK2lucHV0CVs2OjBdCWVwNV9iZl9zaXplOworCitpbnB1dAlbMTM6MF0JZXA2X2NmZzsKK2lucHV0CVs3OjBdCWVwNl9kaW47CitvdXRwdXQJWzc6MF0JZXA2X2RvdXQ7CitvdXRwdXQJCWVwNl93ZSwgZXA2X3JlOworaW5wdXQJCWVwNl9lbXB0eSwgZXA2X2Z1bGw7CitpbnB1dAkJZXA2X2JmX2VuOworaW5wdXQJWzY6MF0JZXA2X2JmX3NpemU7CisKK2lucHV0CVsxMzowXQllcDdfY2ZnOworaW5wdXQJWzc6MF0JZXA3X2RpbjsKK291dHB1dAlbNzowXQllcDdfZG91dDsKK291dHB1dAkJZXA3X3dlLCBlcDdfcmU7CitpbnB1dAkJZXA3X2VtcHR5LCBlcDdfZnVsbDsKK2lucHV0CQllcDdfYmZfZW47CitpbnB1dAlbNjowXQllcDdfYmZfc2l6ZTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3dpcmUJWzc6MF0JcnhfZGF0YTsKK3dpcmUJCXJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VycjsKK3dpcmUJWzc6MF0JdHhfZGF0YTsKK3dpcmUJCXR4X3ZhbGlkOword2lyZQkJdHhfcmVhZHk7Cit3aXJlCQl0eF9maXJzdDsKK3dpcmUJCXR4X3ZhbGlkX2xhc3Q7CisKKy8vIEludGVybmFsIFJlZ2lzdGVyIEZpbGUgSW50ZXJmYWNlCit3aXJlCVs2OjBdCWZ1bmN0X2FkcjsJLy8gVGhpcyBmdW5jdGlvbnMgYWRkcmVzcyAoc2V0IGJ5IGNvbnRyb2xsZXIpCit3aXJlCVszOjBdCWVwX3NlbDsJCS8vIEVuZHBvaW50IE51bWJlciBJbnB1dAord2lyZQkJY3JjMTZfZXJyOwkvLyBTZXQgQ1JDMTYgZXJyb3IgaW50ZXJydXB0Cit3aXJlCQlpbnRfdG9fc2V0OwkvLyBTZXQgdGltZSBvdXQgaW50ZXJydXB0Cit3aXJlCQlpbnRfc2VxZXJyX3NldDsJLy8gU2V0IFBJRCBzZXF1ZW5jZSBlcnJvciBpbnRlcnJ1cHQKK3dpcmUJWzMxOjBdCWZybV9uYXQ7CS8vIEZyYW1lIE51bWJlciBhbmQgVGltZSBSZWdpc3Rlcgord2lyZQkJbnNlX2VycjsJLy8gTm8gU3VjaCBFbmRwb2ludCBFcnJvcgord2lyZQkJcGlkX2NzX2VycjsJLy8gUElEIENTIGVycm9yCit3aXJlCQljcmM1X2VycjsJLy8gQ1JDNSBFcnJvcgorCityZWcJWzc6MF0JdHhfZGF0YV9zdDsKK3dpcmUJWzc6MF0JcnhfY3RybF9kYXRhOword2lyZQlbNzowXQlyeF9jdHJsX2RhdGFfZDsKK3JlZwlbMTM6MF0JY2ZnOword2lyZSAgICAgICAgICAgIHJ4X2N0cmxfZHZhbGlkOword2lyZSAgICAgICAgICAgIHJ4X2N0cmxfZGRvbmU7Cit3aXJlICAgICAgICAgICAgaWRtYV9yZTsKK3dpcmUgICAgICAgICAgICBpZG1hX3dlOworcmVnCQllcF9lbXB0eTsKK3JlZwkJZXBfZnVsbDsKK3dpcmUJWzc6MF0Jcnhfc2l6ZTsKK3dpcmUJCXJ4X2RvbmU7CisKK3dpcmUJWzc6MF0JZXAwX2RpbjsKK3dpcmUJWzc6MF0JZXAwX2RvdXQ7Cit3aXJlCQllcDBfcmUsIGVwMF93ZTsKK3dpcmUJWzEzOjBdCWVwMF9jZmc7Cit3aXJlCVs3OjBdCWVwMF9zaXplOword2lyZQlbNzowXQllcDBfY3RybF9kb3V0LCBlcDBfY3RybF9kaW47Cit3aXJlCQllcDBfY3RybF9yZSwgZXAwX2N0cmxfd2U7Cit3aXJlCVszOjBdCWVwMF9jdHJsX3N0YXQ7CisKK3dpcmUJCWN0cmxfc2V0dXAsIGN0cmxfaW4sIGN0cmxfb3V0Oword2lyZQkJc2VuZF9zdGFsbDsKK3dpcmUJCXRva2VuX3ZhbGlkOworcmVnCQlyc3RfbG9jYWw7CQkvLyBpbnRlcm5hbCByZXNldAord2lyZQkJZHJvcHBlZF9mcmFtZTsKK3dpcmUJCW1pc2FsaWduZWRfZnJhbWU7Cit3aXJlCQl2X3NldF9pbnQ7Cit3aXJlCQl2X3NldF9mZWF0dXJlOword2lyZQlbMTU6MF0Jd1ZhbHVlOword2lyZQlbMTU6MF0Jd0luZGV4OworCityZWcJCWVwX2JmX2VuOworcmVnCVs2OjBdCWVwX2JmX3NpemU7Cit3aXJlCVs2OjBdCXJvbV9hZHI7Cit3aXJlCVs3OjBdCXJvbV9kYXRhOworCit3aXJlICAgICAgICAgICAgZXAwX2Z1bGw7Cit3aXJlICAgICAgICAgICAgZXAwX2VtcHR5OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworLy8gRW5kcG9pbnQgdHlwZSBhbmQgTWF4IHRyYW5zZmVyIHNpemUKK2Fzc2lnbiBlcDBfY2ZnID0gYENUUkwgfCBlcDBfc2l6ZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGtfaSkKKwlyc3RfbG9jYWwgPD0gIzEgcnN0X2kgJiB+dXNiX3JzdDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1vZHVsZSBJbnN0YW50aWF0aW9ucworLy8KKy8qKioqKioqIE1vdmUgdG8gcGh5IGxvZ2ljIGlzIG1vdmUgdG8gY29yZSBsZXZlbAordXNiX3BoeSBwaHkoCisJCS5jbGsoCQkJY2xrX2kJCQkpLAorCQkucnN0KAkJCXJzdF9pCQkJKSwJLy8gT05MWSBleHRlcm5hbCByZXNldAorCQkucGh5X3R4X21vZGUoCQlwaHlfdHhfbW9kZQkJKSwKKwkJLnVzYl9yc3QoCQl1c2JfcnN0CQkJKSwKKworCQkvLyBUcmFuc2NlaXZlciBJbnRlcmZhY2UKKwkJLnJ4ZCgJCQlyeF9kCQkJKSwKKwkJLnJ4ZHAoCQkJcnhfZHAJCQkpLAorCQkucnhkbigJCQlyeF9kbgkJCSksCisJCS50eGRwKAkJCXR4X2RwCQkJKSwKKwkJLnR4ZG4oCQkJdHhfZG4JCQkpLAorCQkudHhvZSgJCQl0eF9vZQkJCSksCisKKwkJLy8gVVRNSSBJbnRlcmZhY2UKKwkJLkRhdGFJbl9vKAkJRGF0YUluCQkJKSwKKwkJLlJ4VmFsaWRfbygJCVJ4VmFsaWQJCQkpLAorCQkuUnhBY3RpdmVfbygJCVJ4QWN0aXZlCQkpLAorCQkuUnhFcnJvcl9vKAkJUnhFcnJvcgkJCSksCisJCS5EYXRhT3V0X2koCQlEYXRhT3V0CQkJKSwKKwkJLlR4VmFsaWRfaSgJCVR4VmFsaWQJCQkpLAorCQkuVHhSZWFkeV9vKAkJVHhSZWFkeQkJCSksCisJCS5MaW5lU3RhdGVfbygJCUxpbmVTdGF0ZQkJKQorCQkpOworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIFVUTUkgSW50ZXJmYWNlCit1c2IxZF91dG1pX2lmCXUwKAorCQkucGh5X2NsaygJCWNsa19pCQkJKSwKKwkJLnJzdCgJCQlyc3RfbG9jYWwJCSksCisJCS8vIEludGVyZmFjZSB0b3dhcmRzIFBoeS1UeAorCQkuRGF0YU91dCgJCURhdGFPdXQJCQkpLAorCQkuVHhWYWxpZCgJCVR4VmFsaWQJCQkpLAorCQkuVHhSZWFkeSgJCVR4UmVhZHkJCQkpLAorCisJCS8vIEludGVyZmFjZSB0b3dhcmRzIFBoeS1yeAorCQkuUnhWYWxpZCgJCVJ4VmFsaWQJCQkpLAorCQkuUnhBY3RpdmUoCQlSeEFjdGl2ZQkJKSwKKwkJLlJ4RXJyb3IoCQlSeEVycm9yCQkJKSwKKwkJLkRhdGFJbigJCURhdGFJbgkJCSksCisKKwkJLy8gSW50ZXJmY2FlIHRvd2FyZHMgcHJvdG9jb2wgbGF5ZXItcngKKwkJLnJ4X2RhdGEoCQlyeF9kYXRhCQkJKSwKKwkJLnJ4X3ZhbGlkKAkJcnhfdmFsaWQJCSksCisJCS5yeF9hY3RpdmUoCQlyeF9hY3RpdmUJCSksCisJCS5yeF9lcnIoCQlyeF9lcnIJCQkpLAorCisJCS8vIEludGVyZmNhZSB0b3dhcmRzIHByb3RvY29sIGxheWVyLXR4CisJCS50eF9kYXRhKAkJdHhfZGF0YQkJCSksCisJCS50eF92YWxpZCgJCXR4X3ZhbGlkCQkpLAorCQkudHhfdmFsaWRfbGFzdCgJCXR4X3ZhbGlkX2xhc3QJCSksCisJCS50eF9yZWFkeSgJCXR4X3JlYWR5CQkpLAorCQkudHhfZmlyc3QoCQl0eF9maXJzdAkJKQorCQkpOworCisvLyBQcm90b2NvbCBMYXllcgordXNiMWRfcGwgIHUxKAkuY2xrKAkJCWNsa19pCQkJKSwKKwkJLnJzdCgJCQlyc3RfbG9jYWwJCSksCisJCS8vIEludGVyZmFjZSB0b3dhcmRzIHV0bWktcngKKwkJLnJ4X2RhdGEoCQlyeF9kYXRhCQkJKSwKKwkJLnJ4X3ZhbGlkKAkJcnhfdmFsaWQJCSksCisJCS5yeF9hY3RpdmUoCQlyeF9hY3RpdmUJCSksCisJCS5yeF9lcnIoCQlyeF9lcnIJCQkpLAorCisJCS8vIEludGVyZmFjZSB0b3dhcmRzIHV0bWktdHgKKwkJLnR4X2RhdGEoCQl0eF9kYXRhCQkJKSwKKwkJLnR4X3ZhbGlkKAkJdHhfdmFsaWQJCSksCisJCS50eF92YWxpZF9sYXN0KAkJdHhfdmFsaWRfbGFzdAkJKSwKKwkJLnR4X3JlYWR5KAkJdHhfcmVhZHkJCSksCisJCS50eF9maXJzdCgJCXR4X2ZpcnN0CQkpLAorICAgICAgICAgICAgICAgICAKKwkJLy8gSW50ZXJmYWNlIHRvd2FyZHMgdXNiLXBoeS10eAorCQkudHhfdmFsaWRfb3V0KAkJVHhWYWxpZAkJCSksCisKKwkJLy8gdW51c2VkIG91dHB1dHMKKwkJLnRva2VuX3ZhbGlkKAkJdG9rZW5fdmFsaWQJCSksCisJCS5pbnRfdG9fc2V0KAkJaW50X3RvX3NldAkJKSwKKwkJLmludF9zZXFlcnJfc2V0KAlpbnRfc2VxZXJyX3NldAkJKSwKKwkJLnBpZF9jc19lcnIoCQlwaWRfY3NfZXJyCQkpLAorCQkubnNlX2VycigJCW5zZV9lcnIJCQkpLAorCQkuY3JjNV9lcnIoCQljcmM1X2VycgkJKSwKKwkJLnJ4X3NpemUoCQlyeF9zaXplCQkJKSwKKwkJLnJ4X2RvbmUoCQlyeF9kb25lCQkJKSwKKworCQkvLyBJbnRlcmZhY2UgdG93YXJkcyB1c2ItY3RybAorCQkuZmEoCQkJZnVuY3RfYWRyCQkpLAorCQkuZnJtX25hdCgJCWZybV9uYXQJCQkpLAorCQkuY3RybF9zZXR1cCgJCWN0cmxfc2V0dXAJCSksCisJCS5jdHJsX2luKAkJY3RybF9pbgkJCSksCisJCS5jdHJsX291dCgJCWN0cmxfb3V0CQkpLAorCQkuc2VuZF9zdGFsbCgJCXNlbmRfc3RhbGwJCSksCisKKwkJLy8gdXNiLXN0YXR1cyAKKwkJLmVwX3NlbCgJCWVwX3NlbAkJCSksCisJCS54X2J1c3koCQl1c2JfYnVzeQkJKSwKKwkJLmludF9jcmMxNl9zZXQoCQljcmMxNl9lcnIJCSksCisJCS5kcm9wcGVkX2ZyYW1lKAkJZHJvcHBlZF9mcmFtZQkJKSwKKwkJLm1pc2FsaWduZWRfZnJhbWUoCW1pc2FsaWduZWRfZnJhbWUJKSwKKworCQkuZXBfYmZfZW4oCQllcF9iZl9lbgkJKSwKKwkJLmVwX2JmX3NpemUoCQllcF9iZl9zaXplCQkpLAorCQkuY3NyKAkJCWNmZwkJCSksCisJCS50eF9kYXRhX3N0KAkJdHhfZGF0YV9zdAkJKSwKKworCQkucnhfY3RybF9kYXRhICAgICAgICAgIChyeF9jdHJsX2RhdGEJCSksCisJCS5yeF9jdHJsX2RhdGFfZCAgICAgICAgKHJ4X2N0cmxfZGF0YV9kCQkpLAorCQkucnhfY3RybF9kdmFsaWQgICAgICAgIChyeF9jdHJsX2R2YWxpZCAgICAgICAgICApLAorCQkucnhfY3RybF9kZG9uZSAgICAgICAgIChyeF9jdHJsX2Rkb25lICAgICAgICAgICApLAorCisJCS5pZG1hX3JlKAkJaWRtYV9yZQkJCSksCisJCS5pZG1hX3dlKAkJaWRtYV93ZQkJCSksCisJCS5lcF9lbXB0eSgJCWVwX2VtcHR5CQkpLAorCQkuZXBfZnVsbCgJCWVwX2Z1bGwJCQkpCisJCSk7CisKK3VzYjFkX2N0cmwgIHU0KAkuY2xrKAkJCWNsa19pCQkJKSwKKwkJLnJzdCgJCQlyc3RfbG9jYWwJCSksCisKKwkJLnJvbV9hZHIoCQlyb21fYWRyCQkJKSwKKwkJLnJvbV9kYXRhKAkJcm9tX2RhdGEJCSksCisKKwkJLmN0cmxfc2V0dXAoCQljdHJsX3NldHVwCQkpLAorCQkuY3RybF9pbigJCWN0cmxfaW4JCQkpLAorCQkuY3RybF9vdXQoCQljdHJsX291dAkJKSwKKworCQkucnhfY3RybF9kYXRhICAgICAgICAgIChyeF9jdHJsX2RhdGEgICAgICAgICAgICApLAorCQkucnhfY3RybF9kdmFsaWQgICAgICAgIChyeF9jdHJsX2R2YWxpZCAgICAgICAgICApLAorCQkucnhfY3RybF9kZG9uZSAgICAgICAgIChyeF9jdHJsX2Rkb25lICAgICAgICAgICApLAorCisKKwkJLmVwMF9kaW4oCQllcDBfY3RybF9kb3V0CQkpLAorCQkuZXAwX2RvdXQoCQllcDBfY3RybF9kaW4JCSksCisJCS5lcDBfcmUoCQllcDBfY3RybF9yZQkJKSwKKwkJLmVwMF93ZSgJCWVwMF9jdHJsX3dlCQkpLAorCQkuZXAwX3N0YXQoCQllcDBfY3RybF9zdGF0CQkpLAorCQkuZXAwX3NpemUoCQllcDBfc2l6ZQkJKSwKKworCQkuc2VuZF9zdGFsbCgJCXNlbmRfc3RhbGwJCSksCisJCS5mcmFtZV9ubygJCWZybV9uYXRbMjY6MTZdCQkpLAorCQkuZnVuY3RfYWRyKAkJZnVuY3RfYWRyIAkJKSwKKwkJLmNvbmZpZ3VyZWQoCQkJCQkpLAorCQkuaGFsdCgJCQkJCQkpLAorCisJCS52X3NldF9pbnQoCQl2X3NldF9pbnQJCSksCisJCS52X3NldF9mZWF0dXJlKAkJdl9zZXRfZmVhdHVyZQkJKSwKKwkJLndWYWx1ZSgJCXdWYWx1ZQkJCSksCisJCS53SW5kZXgoCQl3SW5kZXgJCQkpLAorCQkudmVuZG9yX2RhdGEoCQl2ZW5kb3JfZGF0YQkJKSwKKworICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIEludGVyZmFjZQorCSAgICAgICAgLnJlZ19hZGRyICAgIChyZWdfYWRkciksCisJICAgICAgICAucmVnX3Jkd3JuICAgKHJlZ19yZHdybiksCisJICAgICAgICAucmVnX3JlcSAgICAgKHJlZ19yZXEpLAorCSAgICAgICAgLnJlZ193ZGF0YSAgIChyZWdfd2RhdGEpLAorCSAgICAgICAgLnJlZ19yZGF0YSAgIChyZWdfcmRhdGEpLAorCSAgICAgICAgLnJlZ19hY2sgICAgIChyZWdfYWNrKQorCisJCSk7CisKKwordXNiMWRfcm9tMSByb20xKAkuY2xrKAkJY2xrX2kJCSksCisJCS5hZHIoCQlyb21fYWRyCQkpLAorCQkuZG91dCgJCXJvbV9kYXRhCSkKKwkJKTsKKworLy8gQ1RSTCBFbmRwb2ludCBGSUZPCisvKioqKioqKioqKioqKgordXNiMWRfZ2VuZXJpY19maWZvICMoOCw2LDApIHUxMCgKKwkJLmNsaygJCQljbGtfaQkJCSksCisJCS5yc3QoCQkJcnN0X2kJCQkpLAorCQkuY2xyKAkJCXVzYl9yc3QJCQkpLAorCQkuZGluKAkJCXJ4X2N0cmxfZGF0YV9kCQkpLAorCQkud2UoCQkJZXAwX3dlCQkJKSwKKwkJLmRvdXQoCQkJZXAwX2N0cmxfZG91dAkJKSwKKwkJLnJlKAkJCWVwMF9jdHJsX3JlCQkpLAorCQkuZnVsbF9yKAkJCQkJKSwKKwkJLmVtcHR5X3IoCQkJCQkpLAorCQkuZnVsbCgJCQllcDBfZnVsbAkJKSwKKwkJLmVtcHR5KAkJCWVwMF9jdHJsX3N0YXRbMV0JKSwKKwkJLmZ1bGxfbigJCQkJCSksCisJCS5lbXB0eV9uKAkJCQkJKSwKKwkJLmZ1bGxfbl9yKAkJCQkJKSwKKwkJLmVtcHR5X25fcigJCQkJCSksCisJCS5sZXZlbCgJCQkJCQkpCisJCSk7CisKKyoqKioqKioqKioqKiovCisvLyBDVFJMIEVuZHBvaW50IEZJRk8KK3VzYjFkX3N5bmNfZmlmbyAgIyg4LDgpIHUxMCgKKwkgICAgICAgICAgLmNsayAgICAgICAgICAoY2xrX2kpLAorCSAgICAgICAgICAucmVzZXRfbiAgICAgIChyc3RfaSksCisJCSAgLmNsciAgICAgICAgICAodXNiX3JzdCksCisJCSAgLndyX2VuICAgICAgICAoZXAwX3dlKSwKKwkJICAud3JfZGF0YSAgICAgIChyeF9jdHJsX2RhdGFfZCksCisJCSAgLmZ1bGwgICAgICAgICAoZXAwX2Z1bGwpLAorCQkgIC5lbXB0eSAgICAgICAgKGVwMF9jdHJsX3N0YXRbMV0pLAorCQkgIC5yZF9lbiAgICAgICAgKGVwMF9jdHJsX3JlKSwKKwkJICAucmRfZGF0YSAgICAgIChlcDBfY3RybF9kb3V0KQorCSAgKTsKK3VzYjFkX2dlbmVyaWNfZmlmbyAjKDgsNiwwKSB1MTEoCisJCS5jbGsoCQkJY2xrX2kJCQkpLAorCQkucnN0KAkJCXJzdF9pCQkJKSwKKwkJLmNscigJCQl1c2JfcnN0CQkJKSwKKwkJLmRpbigJCQllcDBfY3RybF9kaW4JCSksCisJCS53ZSgJCQllcDBfY3RybF93ZQkJKSwKKwkJLmRvdXQoCQkJZXAwX2RvdXQJCSksCisJCS5yZSgJCQllcDBfcmUJCQkpLAorCQkuZnVsbF9yKAkJCQkJKSwKKwkJLmVtcHR5X3IoCQkJCQkpLAorCQkuZnVsbCgJCQllcDBfY3RybF9zdGF0WzJdCSksCisJCS5lbXB0eSgJCQllcDBfZW1wdHkJCSksCisJCS5mdWxsX24oCQkJCQkpLAorCQkuZW1wdHlfbigJCQkJCSksCisJCS5mdWxsX25fcigJCQkJCSksCisJCS5lbXB0eV9uX3IoCQkJCQkpLAorCQkubGV2ZWwoCQkJCQkJKQorCQkpOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBFbmRwb2ludCBGSUZPIEludGVyZmFjZXMKKy8vCisKK2Fsd2F5cyBAKGVwX3NlbCBvciBlcDBfY2ZnIG9yIGVwMV9jZmcgb3IgZXAyX2NmZyBvciBlcDNfY2ZnIG9yCisJCWVwNF9jZmcgb3IgZXA1X2NmZyBvciBlcDZfY2ZnIG9yIGVwN19jZmcpCisJY2FzZShlcF9zZWwpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMDoJY2ZnID0gZXAwX2NmZzsKKwkgICA0J2gxOgljZmcgPSBlcDFfY2ZnOworCSAgIDQnaDI6CWNmZyA9IGVwMl9jZmc7CisJICAgNCdoMzoJY2ZnID0gZXAzX2NmZzsKKwkgICA0J2g0OgljZmcgPSBlcDRfY2ZnOworCSAgIDQnaDU6CWNmZyA9IGVwNV9jZmc7CisJICAgNCdoNjoJY2ZnID0gZXA2X2NmZzsKKwkgICA0J2g3OgljZmcgPSBlcDdfY2ZnOworCWVuZGNhc2UKKworLy8gSW4gZW5kcG9pbnRzIG9ubHkKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrX2kpCisJY2FzZShlcF9zZWwpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMDoJdHhfZGF0YV9zdCA8PSAjMSBlcDBfZG91dDsKKwkgICA0J2gxOgl0eF9kYXRhX3N0IDw9ICMxIGVwMV9kaW47CisJICAgNCdoMjoJdHhfZGF0YV9zdCA8PSAjMSBlcDJfZGluOworCSAgIDQnaDM6CXR4X2RhdGFfc3QgPD0gIzEgZXAzX2RpbjsKKwkgICA0J2g0Ogl0eF9kYXRhX3N0IDw9ICMxIGVwNF9kaW47CisJICAgNCdoNToJdHhfZGF0YV9zdCA8PSAjMSBlcDVfZGluOworCSAgIDQnaDY6CXR4X2RhdGFfc3QgPD0gIzEgZXA2X2RpbjsKKwkgICA0J2g3Ogl0eF9kYXRhX3N0IDw9ICMxIGVwN19kaW47CisJZW5kY2FzZQorCisvLyBJbiBlbmRwb2ludHMgb25seQorYWx3YXlzIEAocG9zZWRnZSBjbGtfaSkKKwljYXNlKGVwX3NlbCkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gwOgllcF9lbXB0eSA8PSAjMSBlcDBfZW1wdHk7CisJICAgNCdoMToJZXBfZW1wdHkgPD0gIzEgZXAxX2VtcHR5OworCSAgIDQnaDI6CWVwX2VtcHR5IDw9ICMxIGVwMl9lbXB0eTsKKwkgICA0J2gzOgllcF9lbXB0eSA8PSAjMSBlcDNfZW1wdHk7CisJICAgNCdoNDoJZXBfZW1wdHkgPD0gIzEgZXA0X2VtcHR5OworCSAgIDQnaDU6CWVwX2VtcHR5IDw9ICMxIGVwNV9lbXB0eTsKKwkgICA0J2g2OgllcF9lbXB0eSA8PSAjMSBlcDZfZW1wdHk7CisJICAgNCdoNzoJZXBfZW1wdHkgPD0gIzEgZXA3X2VtcHR5OworCWVuZGNhc2UKKworLy8gT1VUIGVuZHBvaW50cyBvbmx5CithbHdheXMgQChlcF9zZWwgb3IgZXAwX2Z1bGwgb3IgZXAxX2Z1bGwgb3IgZXAyX2Z1bGwgb3IgZXAzX2Z1bGwgb3IKKwkJZXA0X2Z1bGwgb3IgZXA1X2Z1bGwgb3IgZXA2X2Z1bGwgb3IgZXA3X2Z1bGwpCisJY2FzZShlcF9zZWwpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMDoJZXBfZnVsbCA9IGVwMF9mdWxsOworCSAgIDQnaDE6CWVwX2Z1bGwgPSBlcDFfZnVsbDsKKwkgICA0J2gyOgllcF9mdWxsID0gZXAyX2Z1bGw7CisJICAgNCdoMzoJZXBfZnVsbCA9IGVwM19mdWxsOworCSAgIDQnaDQ6CWVwX2Z1bGwgPSBlcDRfZnVsbDsKKwkgICA0J2g1OgllcF9mdWxsID0gZXA1X2Z1bGw7CisJICAgNCdoNjoJZXBfZnVsbCA9IGVwNl9mdWxsOworCSAgIDQnaDc6CWVwX2Z1bGwgPSBlcDdfZnVsbDsKKwllbmRjYXNlCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrX2kpCisJY2FzZShlcF9zZWwpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMDoJZXBfYmZfZW4gPSAxJ2IwOworCSAgIDQnaDE6CWVwX2JmX2VuID0gZXAxX2JmX2VuOworCSAgIDQnaDI6CWVwX2JmX2VuID0gZXAyX2JmX2VuOworCSAgIDQnaDM6CWVwX2JmX2VuID0gZXAzX2JmX2VuOworCSAgIDQnaDQ6CWVwX2JmX2VuID0gZXA0X2JmX2VuOworCSAgIDQnaDU6CWVwX2JmX2VuID0gZXA1X2JmX2VuOworCSAgIDQnaDY6CWVwX2JmX2VuID0gZXA2X2JmX2VuOworCSAgIDQnaDc6CWVwX2JmX2VuID0gZXA3X2JmX2VuOworCWVuZGNhc2UKKworYWx3YXlzIEAocG9zZWRnZSBjbGtfaSkKKwljYXNlKGVwX3NlbCkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gxOgllcF9iZl9zaXplID0gZXAxX2JmX3NpemU7CisJICAgNCdoMjoJZXBfYmZfc2l6ZSA9IGVwMl9iZl9zaXplOworCSAgIDQnaDM6CWVwX2JmX3NpemUgPSBlcDNfYmZfc2l6ZTsKKwkgICA0J2g0OgllcF9iZl9zaXplID0gZXA0X2JmX3NpemU7CisJICAgNCdoNToJZXBfYmZfc2l6ZSA9IGVwNV9iZl9zaXplOworCSAgIDQnaDY6CWVwX2JmX3NpemUgPSBlcDZfYmZfc2l6ZTsKKwkgICA0J2g3OgllcF9iZl9zaXplID0gZXA3X2JmX3NpemU7CisJZW5kY2FzZQorCithc3NpZ24gZXAxX2RvdXQgPSByeF9jdHJsX2RhdGFfZDsKK2Fzc2lnbiBlcDJfZG91dCA9IHJ4X2N0cmxfZGF0YV9kOworYXNzaWduIGVwM19kb3V0ID0gcnhfY3RybF9kYXRhX2Q7Cithc3NpZ24gZXA0X2RvdXQgPSByeF9jdHJsX2RhdGFfZDsKK2Fzc2lnbiBlcDVfZG91dCA9IHJ4X2N0cmxfZGF0YV9kOworYXNzaWduIGVwNl9kb3V0ID0gcnhfY3RybF9kYXRhX2Q7Cithc3NpZ24gZXA3X2RvdXQgPSByeF9jdHJsX2RhdGFfZDsKKworYXNzaWduIGVwMF9yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDApOworYXNzaWduIGVwMV9yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDEpICYgIWVwMV9lbXB0eTsKK2Fzc2lnbiBlcDJfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2gyKSAmICFlcDJfZW1wdHk7Cithc3NpZ24gZXAzX3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoMykgJiAhZXAzX2VtcHR5OworYXNzaWduIGVwNF9yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDQpICYgIWVwNF9lbXB0eTsKK2Fzc2lnbiBlcDVfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2g1KSAmICFlcDVfZW1wdHk7Cithc3NpZ24gZXA2X3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoNikgJiAhZXA2X2VtcHR5OworYXNzaWduIGVwN19yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDcpICYgIWVwN19lbXB0eTsKKworYXNzaWduIGVwMF93ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDApOworYXNzaWduIGVwMV93ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDEpICYgIWVwMV9mdWxsOworYXNzaWduIGVwMl93ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDIpICYgIWVwMl9mdWxsOworYXNzaWduIGVwM193ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDMpICYgIWVwM19mdWxsOworYXNzaWduIGVwNF93ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDQpICYgIWVwNF9mdWxsOworYXNzaWduIGVwNV93ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDUpICYgIWVwNV9mdWxsOworYXNzaWduIGVwNl93ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDYpICYgIWVwNl9mdWxsOworYXNzaWduIGVwN193ZSA9IGlkbWFfd2UgJiAoZXBfc2VsID09IDQnaDcpICYgIWVwN19mdWxsOworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jcmMxNi52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzE2LnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWNlZTRkNwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jcmMxNi52CkBAIC0wLDAgKzEsOTggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVU0IgQ1JDMTYgTW9kdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfY3JjMTYudix2IDEuMS4xLjEgMjAwMi0wOS0xOSAxMjowNzozOSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTE5IDEyOjA3OjM5ICQKKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBDUkMxNgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVzYjFkX2NyYzE2KGNyY19pbiwgZGluLCBjcmNfb3V0KTsKK2lucHV0CVsxNTowXQljcmNfaW47CitpbnB1dAlbNzowXQlkaW47CitvdXRwdXQJWzE1OjBdCWNyY19vdXQ7CisKK2Fzc2lnbiBjcmNfb3V0WzBdID0JZGluWzddIF4gZGluWzZdIF4gZGluWzVdIF4gZGluWzRdIF4gZGluWzNdIF4KKwkJCWRpblsyXSBeIGRpblsxXSBeIGRpblswXSBeIGNyY19pbls4XSBeIGNyY19pbls5XSBeCisJCQljcmNfaW5bMTBdIF4gY3JjX2luWzExXSBeIGNyY19pblsxMl0gXiBjcmNfaW5bMTNdIF4KKwkJCWNyY19pblsxNF0gXiBjcmNfaW5bMTVdOworYXNzaWduIGNyY19vdXRbMV0gPQlkaW5bN10gXiBkaW5bNl0gXiBkaW5bNV0gXiBkaW5bNF0gXiBkaW5bM10gXiBkaW5bMl0gXgorCQkJZGluWzFdIF4gY3JjX2luWzldIF4gY3JjX2luWzEwXSBeIGNyY19pblsxMV0gXgorCQkJY3JjX2luWzEyXSBeIGNyY19pblsxM10gXiBjcmNfaW5bMTRdIF4gY3JjX2luWzE1XTsKK2Fzc2lnbiBjcmNfb3V0WzJdID0JZGluWzFdIF4gZGluWzBdIF4gY3JjX2luWzhdIF4gY3JjX2luWzldOworYXNzaWduIGNyY19vdXRbM10gPQlkaW5bMl0gXiBkaW5bMV0gXiBjcmNfaW5bOV0gXiBjcmNfaW5bMTBdOworYXNzaWduIGNyY19vdXRbNF0gPQlkaW5bM10gXiBkaW5bMl0gXiBjcmNfaW5bMTBdIF4gY3JjX2luWzExXTsKK2Fzc2lnbiBjcmNfb3V0WzVdID0JZGluWzRdIF4gZGluWzNdIF4gY3JjX2luWzExXSBeIGNyY19pblsxMl07Cithc3NpZ24gY3JjX291dFs2XSA9CWRpbls1XSBeIGRpbls0XSBeIGNyY19pblsxMl0gXiBjcmNfaW5bMTNdOworYXNzaWduIGNyY19vdXRbN10gPQlkaW5bNl0gXiBkaW5bNV0gXiBjcmNfaW5bMTNdIF4gY3JjX2luWzE0XTsKK2Fzc2lnbiBjcmNfb3V0WzhdID0JZGluWzddIF4gZGluWzZdIF4gY3JjX2luWzBdIF4gY3JjX2luWzE0XSBeIGNyY19pblsxNV07Cithc3NpZ24gY3JjX291dFs5XSA9CWRpbls3XSBeIGNyY19pblsxXSBeIGNyY19pblsxNV07Cithc3NpZ24gY3JjX291dFsxMF0gPQljcmNfaW5bMl07Cithc3NpZ24gY3JjX291dFsxMV0gPQljcmNfaW5bM107Cithc3NpZ24gY3JjX291dFsxMl0gPQljcmNfaW5bNF07Cithc3NpZ24gY3JjX291dFsxM10gPQljcmNfaW5bNV07Cithc3NpZ24gY3JjX291dFsxNF0gPQljcmNfaW5bNl07Cithc3NpZ24gY3JjX291dFsxNV0gPQlkaW5bN10gXiBkaW5bNl0gXiBkaW5bNV0gXiBkaW5bNF0gXiBkaW5bM10gXiBkaW5bMl0gXgorCQkJZGluWzFdIF4gZGluWzBdIF4gY3JjX2luWzddIF4gY3JjX2luWzhdIF4gY3JjX2luWzldIF4KKwkJCWNyY19pblsxMF0gXiBjcmNfaW5bMTFdIF4gY3JjX2luWzEyXSBeIGNyY19pblsxM10gXgorCQkJY3JjX2luWzE0XSBeIGNyY19pblsxNV07CisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjNS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzUudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWVjMGQyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzUudgpAQCAtMCwwICsxLDg5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVNCIENSQzUgTW9kdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX2NyYzUudix2IDEuMS4xLjEgMjAwMi0wOS0xOSAxMjowNzowNSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTE5IDEyOjA3OjA1ICQKKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBDUkM1CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgdXNiMWRfY3JjNShjcmNfaW4sIGRpbiwgY3JjX291dCk7CitpbnB1dAlbNDowXQljcmNfaW47CitpbnB1dAlbMTA6MF0JZGluOworb3V0cHV0CVs0OjBdCWNyY19vdXQ7CisKK2Fzc2lnbiBjcmNfb3V0WzBdID0JZGluWzEwXSBeIGRpbls5XSBeIGRpbls2XSBeIGRpbls1XSBeIGRpblszXSBeCisJCQlkaW5bMF0gXiBjcmNfaW5bMF0gXiBjcmNfaW5bM10gXiBjcmNfaW5bNF07CisKK2Fzc2lnbiBjcmNfb3V0WzFdID0JZGluWzEwXSBeIGRpbls3XSBeIGRpbls2XSBeIGRpbls0XSBeIGRpblsxXSBeCisJCQljcmNfaW5bMF0gXiBjcmNfaW5bMV0gXiBjcmNfaW5bNF07CisKK2Fzc2lnbiBjcmNfb3V0WzJdID0JZGluWzEwXSBeIGRpbls5XSBeIGRpbls4XSBeIGRpbls3XSBeIGRpbls2XSBeCisJCQlkaW5bM10gXiBkaW5bMl0gXiBkaW5bMF0gXiBjcmNfaW5bMF0gXiBjcmNfaW5bMV0gXgorCQkJY3JjX2luWzJdIF4gY3JjX2luWzNdIF4gY3JjX2luWzRdOworCithc3NpZ24gY3JjX291dFszXSA9CWRpblsxMF0gXiBkaW5bOV0gXiBkaW5bOF0gXiBkaW5bN10gXiBkaW5bNF0gXiBkaW5bM10gXgorCQkJZGluWzFdIF4gY3JjX2luWzFdIF4gY3JjX2luWzJdIF4gY3JjX2luWzNdIF4gY3JjX2luWzRdOworCithc3NpZ24gY3JjX291dFs0XSA9CWRpblsxMF0gXiBkaW5bOV0gXiBkaW5bOF0gXiBkaW5bNV0gXiBkaW5bNF0gXiBkaW5bMl0gXgorCQkJY3JjX2luWzJdIF4gY3JjX2luWzNdIF4gY3JjX2luWzRdOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2N0cmwudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jdHJsLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmYxYTY2YwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jdHJsLnYKQEAgLTAsMCArMSw4NDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBQb3J0ZWQgdG8gVVNCMlVBUlQgcHJvamVjdAorKiAgQXV0aG9yOiAgRGluZXNoIEFubmF5eWEKKyogICAgICAgICAgIEVtYWlsOi0gZGluZXNoYUBvcGVuY29yZXMub3JnCisqCisqICAgICBEYXRlOiA0dGggRmViIDIwMTMKKyogICAgIENoYW5nZXM6CisqICAgICBBLiBXYXJuaW5nIENsZWFuIFVwCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEludGVybmFsIFNldHVwIEVuZ2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9jdHJsLnYsdiAxLjIgMjAwMi0wOS0yNSAwNjowNjo0OSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTI1IDA2OjA2OjQ5ICQKKy8vICAkUmV2aXNpb246IDEuMiAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTkgMTI6MDc6MDkgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgSW5pdGlhbCBDaGVja2luCisvLworLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF9jdHJsKAljbGssIHJzdCwKKworCQkJcm9tX2Fkciwgcm9tX2RhdGEsCisKKwkJCWN0cmxfc2V0dXAsIGN0cmxfaW4sIGN0cmxfb3V0LAorCisJCQlyeF9jdHJsX2RhdGEsIHJ4X2N0cmxfZHZhbGlkLHJ4X2N0cmxfZGRvbmUsCisKKwkJCWVwMF9kaW4sIGVwMF9kb3V0LCBlcDBfcmUsIGVwMF93ZSwgZXAwX3N0YXQsCisJCQllcDBfc2l6ZSwKKworCQkJc2VuZF9zdGFsbCwgZnJhbWVfbm8sCisJCQlmdW5jdF9hZHIsIGNvbmZpZ3VyZWQsIGhhbHQsCisKKwkJCXZfc2V0X2ludCwgdl9zZXRfZmVhdHVyZSwgd1ZhbHVlLCB3SW5kZXgsIHZlbmRvcl9kYXRhLAorCisJICAgICAgIC8vIFJlZ2lzdGVyIEludGVyZmFjZQorCQlyZWdfYWRkciwKKwkJcmVnX3Jkd3JuLAorCQlyZWdfcmVxLAorCQlyZWdfd2RhdGEsCisJCXJlZ19yZGF0YSwKKwkJcmVnX2FjaworCisKKwkJKTsKKworaW5wdXQJCWNsaywgcnN0OworCitvdXRwdXQJWzY6MF0Jcm9tX2FkcjsKK2lucHV0CVs3OjBdCXJvbV9kYXRhOworCitpbnB1dAkJY3RybF9zZXR1cDsKK2lucHV0CQljdHJsX2luOworaW5wdXQJCWN0cmxfb3V0OworCisKK2lucHV0IFs3OjBdICAgICByeF9jdHJsX2RhdGE7IAoraW5wdXQgICAgICAgICAgIHJ4X2N0cmxfZHZhbGlkOworaW5wdXQgICAgICAgICAgIHJ4X2N0cmxfZGRvbmU7CisKK2lucHV0CVs3OjBdCWVwMF9kaW47CitvdXRwdXQJWzc6MF0JZXAwX2RvdXQ7CitvdXRwdXQJCWVwMF9yZSwgZXAwX3dlOworaW5wdXQJWzM6MF0JZXAwX3N0YXQ7CitvdXRwdXQJWzc6MF0JZXAwX3NpemU7CisKK291dHB1dAkJc2VuZF9zdGFsbDsKK2lucHV0CVsxMDowXQlmcmFtZV9ubzsKK291dHB1dAlbNjowXQlmdW5jdF9hZHI7CitvdXRwdXQJCWNvbmZpZ3VyZWQsIGhhbHQ7CisKK291dHB1dAkJdl9zZXRfaW50Oworb3V0cHV0CQl2X3NldF9mZWF0dXJlOworb3V0cHV0CVsxNTowXQl3VmFsdWU7CitvdXRwdXQJWzE1OjBdCXdJbmRleDsKK2lucHV0CVsxNTowXQl2ZW5kb3JfZGF0YTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXRwdXQgWzMxOjBdICAgcmVnX2FkZHI7ICAgLy8gUmVnaXN0ZXIgQWRkcmVzcworb3V0cHV0CQlyZWdfcmR3cm47ICAvLyAwIC0+IHdyaXRlLCAxLT4gcmVhZAorb3V0cHV0CQlyZWdfcmVxOyAgICAvLyAgUmVnaXN0ZXIgUmVxCitvdXRwdXQgWzMxOjBdCXJlZ193ZGF0YTsgIC8vIFJlZ2lzdGVyIHdyaXRlIGRhdGEKK2lucHV0ICBbMzE6MF0JcmVnX3JkYXRhOyAgLy8gUmVnaXN0ZXIgUmVhZCBEYXRhCitpbnB1dAkJcmVnX2FjazsgICAgLy8gUmVnaXN0ZXIgQWNrCisKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworcGFyYW1ldGVyCUlETEUJCQk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8wMDAwXzAwMDEsCisJCUdFVF9IRFIJCQk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8wMDAwXzAwMTAsCisJCUdFVF9TVEFUVVNfUwkJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMDAwMF8wMTAwLAorCQlDTEVBUl9GRUFUVVJFX1MJCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzAwMDBfMTAwMCwKKwkJU0VUX0ZFQVRVUkVfUwkJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMDAwMV8wMDAwLAorCQlTRVRfQUREUkVTU19TCQk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8wMDEwXzAwMDAsCisJCUdFVF9ERVNDUklQVE9SX1MJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMDEwMF8wMDAwLAorCQlTRVRfREVTQ1JJUFRPUl9TCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzEwMDBfMDAwMCwKKwkJR0VUX0NPTkZJR19TCQk9CTIwJ2IwMDAwXzAwMDBfMDAwMV8wMDAwXzAwMDAsCisJCVNFVF9DT05GSUdfUwkJPQkyMCdiMDAwMF8wMDAwXzAwMTBfMDAwMF8wMDAwLAorCQlHRVRfSU5URVJGQUNFX1MJCT0JMjAnYjAwMDBfMDAwMF8wMTAwXzAwMDBfMDAwMCwKKwkJU0VUX0lOVEVSRkFDRV9TCQk9CTIwJ2IwMDAwXzAwMDBfMTAwMF8wMDAwXzAwMDAsCisJCVNZTkNIX0ZSQU1FX1MJCT0JMjAnYjAwMDBfMDAwMV8wMDAwXzAwMDBfMDAwMCwKKwkJV0FJVF9JTl9EQVRBCQk9CTIwJ2IwMDAwXzAwMTBfMDAwMF8wMDAwXzAwMDAsCisJCVNUQVRVU19JTgkJPQkyMCdiMDAwMF8wMTAwXzAwMDBfMDAwMF8wMDAwLAorCQlTVEFUVVNfT1VUCQk9CTIwJ2IwMDAwXzEwMDBfMDAwMF8wMDAwXzAwMDAsCisJCVZfU0VUX0lOVF9TCQk9CTIwJ2IwMDAxXzAwMDBfMDAwMF8wMDAwXzAwMDAsCisJCVZfR0VUX1NUQVRVU19TCQk9CTIwJ2IwMDEwXzAwMDBfMDAwMF8wMDAwXzAwMDAsCisJCVZfR0VUX1JFR19SREFUQV9TCT0JMjAnYjAxMDBfMDAwMF8wMDAwXzAwMDBfMDAwMCwKKwkJVl9XQUlUX1JEQVRBX0RPTkVfUyAgICAgPQkyMCdiMTAwMF8wMDAwXzAwMDBfMDAwMF8wMDAwOworCisKK3dpcmUJWzc6MF0JYm1SZXFUeXBlLCBiUmVxdWVzdDsKK3dpcmUJWzE1OjBdCXdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoOword2lyZQkJYm1fcmVxX2RpcjsKK3dpcmUJWzE6MF0JYm1fcmVxX3R5cGU7Cit3aXJlCVs0OjBdCWJtX3JlcV9yZWNwOworCityZWcJCWdldF9zdGF0dXMsIGNsZWFyX2ZlYXR1cmUsIHNldF9mZWF0dXJlLCBzZXRfYWRkcmVzczsKK3JlZwkJZ2V0X2Rlc2NyaXB0b3IsIHNldF9kZXNjcmlwdG9yLCBnZXRfY29uZmlnLCBzZXRfY29uZmlnOworcmVnCQlnZXRfaW50ZXJmYWNlLCBzZXRfaW50ZXJmYWNlLCBzeW5jaF9mcmFtZTsKK3JlZwkJaGRyX2RvbmVfciwgY29uZmlnX2VycjsKK3JlZwkJdl9zZXRfaW50LCB2X3NldF9mZWF0dXJlLCB2X2dldF9zdGF0dXM7CisKK3JlZyAgICAgICAgICAgICB2X3NldF9yZWdfd2FkZHI7IC8vIFNldCB0aGUgUmVnIEJ1cyBBZGRyZXNzCityZWcgICAgICAgICAgICAgdl9zZXRfcmVnX3JhZGRyOyAvLyBTZXQgdGhlIFJlZyBCdXMgQWRkcmVzcworCit3aXJlCQlmaWZvX3JlMSwgZmlmb19mdWxsLCBmaWZvX2VtcHR5OworcmVnCQlmaWZvX3dlX2Q7CityZWcJWzU6MF0JZGF0YV9zZWw7CityZWcJCWVwMF93ZTsKK3JlZwlbNzowXQllcDBfZG91dDsKK3JlZwlbNzowXQllcDBfc2l6ZTsKK3JlZwkJc2VuZF9zdGFsbDsKK3JlZwlbMTk6MF0Jc3RhdGUsIG5leHRfc3RhdGU7CityZWcJCWdldF9oZHI7CityZWcJWzc6MF0JbGU7Cit3aXJlCQloZHJfZG9uZTsKK3JlZwkJYWR2OworcmVnCVs3OjBdCWhkcjAsIGhkcjEsIGhkcjIsIGhkcjMsIGhkcjQsIGhkcjUsIGhkcjYsIGhkcjc7CityZWcJWzY6MF0JZnVuY3RfYWRyOworcmVnCQlzZXRfYWRyX3BlbmRpbmc7CityZWcJWzY6MF0JZnVuY3RfYWRyX3RtcDsKKworcmVnCQlpbl9zaXplXzA7CityZWcJCWluX3NpemVfMTsKK3JlZwkJaW5fc2l6ZV8yOworcmVnCQlpbl9zaXplXzQ7Cit3aXJlCQloaWdoX3NlbDsKK3JlZwkJd3JpdGVfZG9uZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciBJbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyAgIFszMTowXSAgICByZWdfYWRkcjsKK3JlZyAgIFszMTowXSAgICByZWdfd2RhdGE7CityZWcgICBbMzE6MF0gICAgcmVnX3JkYXRhX3I7CityZWcgICAgICAgICAgICAgcmVnX3JlcTsKK3JlZyAgICAgICAgICAgICByZWdfcmR3cm47IC8vIDAgLSB3cml0ZSwgMSAtPiByZWFkCityZWcgICAgICAgICAgICAgcmVnX3dwaGFzZTsgLy8gcmVnaXN0ZXIgd3JpdGUgcGhhc2UKK3JlZyAgICAgICAgICAgICByZWdfcnBoYXNlOyAvLyByZWdpc3RlciByZWFkIHBoYXNlCityZWcgWzM6MF0gICAgICAgdHhfYmNudDsgLy8gdHJhbnNtaXQgYnl0ZSBjb3VudAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEZJRk8gaW50ZXJmYWNlCisvLworCithc3NpZ24gZXAwX3JlID0gZmlmb19yZTE7Cithc3NpZ24gZmlmb19lbXB0eSA9IGVwMF9zdGF0WzFdOworYXNzaWduIGZpZm9fZnVsbCA9IGVwMF9zdGF0WzJdOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gQ3VycmVudCBTdGF0ZXMKKy8vCityZWcJYWRkcmVzc2VkOworcmVnCWNvbmZpZ3VyZWQ7CityZWcJaGFsdDsKK3dpcmUJY2xyX2hhbHQ7Cit3aXJlCXNldF9oYWx0PTA7CS8vIEZJWF9NRQorCisvLyBGb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZSBkbyBub3QgaW1wbGVtZW50IEhBTFQgZm9yIHRoZQorLy8gZGV2aWNlIG5vciBmb3IgYW55IG9mIHRoZSBlbmRwb2ludHMuIFRoaXMgaXMgdXNlbGVzcyBmb3IKKy8vIHRoaXMgZGV2aWNlLCBidXQgY2FuIGJlIGFkZGVkIGhlcmUgbGF0ZXIgLi4uCisvLyBGWUksIHdlIHJlcG9ydCBkZXZpY2UvZW5kcG9pbnQgZXJyb3JzIHZpYSBpbnRlcnJ1cHRzLAorLy8gaW5zdGVhZCBvZiBoYWx0aW5nIHRoZSBlbnRpcmUgb3IgcGFydCBvZiB0aGUgZGV2aWNlLCBtdWNoCisvLyBuaWNlciBmb3Igbm9uLWNyaXRpY2FsIGVycm9ycy4KKworYXNzaWduIGNscl9oYWx0ID0gY3RybF9zZXR1cDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJYWRkcmVzc2VkIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHNldF9hZGRyZXNzKQlhZGRyZXNzZWQgPD0gIzEgMSdiMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJY29uZmlndXJlZCA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihzZXRfY29uZmlnKQljb25maWd1cmVkIDw9ICMxIDEnYjE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCWhhbHQgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoY2xyX2hhbHQpCWhhbHQgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoc2V0X2hhbHQpCWhhbHQgPD0gIzEgMSdiMTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERlc2NyaXB0b3IgUk9NCisvLworcmVnCVs2OjBdCXJvbV9hZHI7CityZWcJCXJvbV9zZWwsIHJvbV9zZWxfcjsKK3dpcmUJCXJvbV9kb25lOworcmVnCVs2OjBdCXJvbV9zaXplOworcmVnCQlmaWZvX3dlX3JvbV9yOworcmVnCQlmaWZvX3dlX3JvbV9yMjsKK3dpcmUJCWZpZm9fd2Vfcm9tOworcmVnCVs3OjBdCXJvbV9zdGFydF9kOworcmVnCVs2OjBdCXJvbV9zaXplX2RkOword2lyZQlbNjowXQlyb21fc2l6ZV9kOworCithbHdheXMgQCh3VmFsdWUpCisJY2FzZSh3VmFsdWVbMTE6OF0pCQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDE6CXJvbV9zdGFydF9kID0gYFJPTV9TVEFSVDA7CisJICAgNCdoMjoJcm9tX3N0YXJ0X2QgPSBgUk9NX1NUQVJUMTsKKwkgICA0J2gzOgorCQljYXNlKHdWYWx1ZVszOjBdKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkgICA0J2gwOglyb21fc3RhcnRfZCA9IGBST01fU1RBUlQyQTsKKwkJICAgNCdoMToJcm9tX3N0YXJ0X2QgPSBgUk9NX1NUQVJUMkI7CisJCSAgIDQnaDI6CXJvbV9zdGFydF9kID0gYFJPTV9TVEFSVDJDOworCQkgICA0J2gzOglyb21fc3RhcnRfZCA9IGBST01fU1RBUlQyRDsKKwkJICAgZGVmYXVsdDoJcm9tX3N0YXJ0X2QgPSBgUk9NX1NUQVJUMkE7CisJCWVuZGNhc2UKKwkgICBkZWZhdWx0Oglyb21fc3RhcnRfZCA9IDcnaDAwOworCWVuZGNhc2UKKworYWx3YXlzIEAod1ZhbHVlKQorCWNhc2Uod1ZhbHVlWzExOjhdKQkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gxOglyb21fc2l6ZV9kZCA9IGBST01fU0laRTA7CisJICAgNCdoMjoJcm9tX3NpemVfZGQgPSBgUk9NX1NJWkUxOworCSAgIDQnaDM6CisJCWNhc2Uod1ZhbHVlWzM6MF0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCSAgIDQnaDA6CXJvbV9zaXplX2RkID0gYFJPTV9TSVpFMkE7CisJCSAgIDQnaDE6CXJvbV9zaXplX2RkID0gYFJPTV9TSVpFMkI7CisJCSAgIDQnaDI6CXJvbV9zaXplX2RkID0gYFJPTV9TSVpFMkM7CisJCSAgIDQnaDM6CXJvbV9zaXplX2RkID0gYFJPTV9TSVpFMkQ7CisJCSAgIGRlZmF1bHQ6CXJvbV9zaXplX2RkID0gYFJPTV9TSVpFMkE7CisJCWVuZGNhc2UKKwkgICBkZWZhdWx0Oglyb21fc2l6ZV9kZCA9IDcnaDAxOworCWVuZGNhc2UKKworYXNzaWduIHJvbV9zaXplX2QgPSAocm9tX3NpemVfZGQgPiB3TGVuZ3RoWzY6MF0pID8gd0xlbmd0aFs2OjBdIDogcm9tX3NpemVfZGQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJvbV9zZWxfciA8PSAjMSByb21fc2VsOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQkJCXJvbV9hZHIgPD0gIzEgNydoMDsKKwllbHNlCisJaWYocm9tX3NlbCAmICFyb21fc2VsX3IpCXJvbV9hZHIgPD0gIzEgcm9tX3N0YXJ0X2Q7CisJZWxzZQorCWlmKHJvbV9zZWwgJiAhZmlmb19mdWxsKQlyb21fYWRyIDw9ICMxIHJvbV9hZHIgKyA3J2gxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQkJCXJvbV9zaXplIDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKHJvbV9zZWwgJiAhcm9tX3NlbF9yKQlyb21fc2l6ZSA8PSAjMSByb21fc2l6ZV9kOworCWVsc2UKKwlpZihyb21fc2VsICYgIWZpZm9fZnVsbCkJcm9tX3NpemUgPD0gIzEgcm9tX3NpemUgLSA3J2gwMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZmlmb193ZV9yb21fciA8PSAjMSByb21fc2VsOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlmaWZvX3dlX3JvbV9yMiA8PSAjMSBmaWZvX3dlX3JvbV9yOworCithc3NpZ24gZmlmb193ZV9yb20gPSByb21fc2VsICYgZmlmb193ZV9yb21fcjI7CisKK2Fzc2lnbiByb21fZG9uZSA9IChyb21fc2l6ZSA9PSA3J2gwKSAmICEocm9tX3NlbCAmICFyb21fc2VsX3IpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2V0IEhlYWRlcgorLy8KKworYXNzaWduIGZpZm9fcmUxID0gKGdldF9oZHIgfCByZWdfd3BoYXNlKSAmICFmaWZvX2VtcHR5OworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlhZHYgPD0gIzEgZ2V0X2hkciAmICFmaWZvX2VtcHR5ICYgIWFkdjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJbGUgPD0gIzEgOCdoMDsKKwllbHNlCisJaWYoIWdldF9oZHIpCWxlIDw9ICMxIDgnaDA7CisJZWxzZQorCWlmKCEofGxlKSkJbGUgPD0gIzEgOCdoMTsKKwllbHNlCisJaWYoZmlmb19yZTEgJiYgZ2V0X2hkcikJbGUgPD0gIzEge2xlWzY6MF0sIDEnYjB9OworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVswXSkJaGRyMCA8PSAjMSBlcDBfZGluOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVsxXSkJaGRyMSA8PSAjMSBlcDBfZGluOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVsyXSkJaGRyMiA8PSAjMSBlcDBfZGluOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVszXSkJaGRyMyA8PSAjMSBlcDBfZGluOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVs0XSkJaGRyNCA8PSAjMSBlcDBfZGluOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVs1XSkJaGRyNSA8PSAjMSBlcDBfZGluOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVs2XSkJaGRyNiA8PSAjMSBlcDBfZGluOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZVs3XSkJaGRyNyA8PSAjMSBlcDBfZGluOworCithc3NpZ24gaGRyX2RvbmUgPSBsZVs3XSAmIGZpZm9fcmUxICYgZ2V0X2hkcjsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFNlbmQgRGF0YSB0byBIb3N0CisvLworcGFyYW1ldGVyCVpFUk9fREFUQQk9CTYnYjAwMDAwMSwKKwkJWkVST19PTkVfREFUQQk9CTYnYjAwMDAxMCwKKwkJQ09ORklHX0RBVEEJPQk2J2IwMDAxMDAsCisJCVNZTkNfRlJBTUVfREFUQQk9CTYnYjAwMTAwMCwKKwkJVkVORF9EQVRBCT0JNidiMDEwMDAwLAorCQlSRUdfUkRBVEEJPQk2J2IxMDAwMDA7CisKK2Fzc2lnbiBoaWdoX3NlbCA9IHdyaXRlX2RvbmU7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWNhc2UoZGF0YV9zZWwpCQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIFpFUk9fREFUQToJCWVwMF9kb3V0IDw9ICMxIHJvbV9zZWwgPyByb21fZGF0YSA6IDgnaDA7CisJICAgWkVST19PTkVfREFUQToJZXAwX2RvdXQgPD0gIzEgaGlnaF9zZWwgPyA4J2gxIDogOCdoMDsKKwkgICBDT05GSUdfREFUQToJCWVwMF9kb3V0IDw9ICMxIHs3J2gwLCBjb25maWd1cmVkfTsJLy8gcmV0dXJuIGNvbmZpZ3VyYXRpb24KKwkgICBTWU5DX0ZSQU1FX0RBVEE6CWVwMF9kb3V0IDw9ICMxIGhpZ2hfc2VsID8gezUnaDAsIGZyYW1lX25vWzEwOjhdfSA6IGZyYW1lX25vWzc6MF07CisJICAgVkVORF9EQVRBOgkJZXAwX2RvdXQgPD0gIzEgaGlnaF9zZWwgPyB2ZW5kb3JfZGF0YVsxNTo4XSA6IHZlbmRvcl9kYXRhWzc6MF07CisJICAgUkVHX1JEQVRBOgkJZXAwX2RvdXQgPD0gIzEgKHR4X2JjbnQ9PTApID8gcmVnX3JkYXRhX3JbMzE6MjRdIDogCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHhfYmNudD09MSkgPyByZWdfcmRhdGFfclsyMzoxNl0gOgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR4X2JjbnQ9PTIpID8gcmVnX3JkYXRhX3JbMTU6OF0gOiByZWdfcmRhdGFfcls3OjBdOworCWVuZGNhc2UKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZXAwX3dlIDw9ICMxIChmaWZvX3dlX2QgJiAhd3JpdGVfZG9uZSkgfCBmaWZvX3dlX3JvbTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoaW5fc2l6ZV8wKQkgICAgICAgIGVwMF9zaXplIDw9ICMxIDgnaDA7CisJZWxzZSBpZihpbl9zaXplXzEpCWVwMF9zaXplIDw9ICMxIDgnaDE7CisJZWxzZSBpZihpbl9zaXplXzIpCWVwMF9zaXplIDw9ICMxIDgnaDI7CisJZWxzZSBpZihpbl9zaXplXzQpCWVwMF9zaXplIDw9ICMxIDgnaDQ7CisJZWxzZQorCWlmKHJvbV9zZWwpCWVwMF9zaXplIDw9ICMxIHsxJ2IwLCByb21fc2l6ZV9kfTsKKworCithbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgIGlmKCFyc3QpIGJlZ2luCisgICAgICAgdHhfYmNudCAgICA8PSAwOworICAgICAgIHdyaXRlX2RvbmUgPD0gMDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgIGlmKHN0YXRlID09IElETEUpICBiZWdpbgorCSAgdHhfYmNudCA8PSAwOworCSAgd3JpdGVfZG9uZSA8PSAwOyAKKyAgICAgIGVuZCBlbHNlIGlmKChlcDBfc2l6ZSA9PSAodHhfYmNudCsxKSkgICYmICghZmlmb19mdWxsICYmIGZpZm9fd2VfZCkpCisJICB3cml0ZV9kb25lIDw9IDE7CisgICAgICBlbHNlIGlmKCFmaWZvX2Z1bGwgJiYgZmlmb193ZV9kICkgCisJICB0eF9iY250IDw9IHR4X2JjbnQrMTsKKyAgICAgIGVsc2UgCisJICB3cml0ZV9kb25lIDw9IDA7CisgICBlbmQKK2VuZAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRGVjb2RlIEhlYWRlcgorLy8KKworLy8gVmFsaWQgYlJlcXVlc3QgQ29kZXMKK3BhcmFtZXRlcglHRVRfU1RBVFVTCT0JOCdoMDAsCisJCUNMRUFSX0ZFQVRVUkUJPQk4J2gwMSwKKwkJU0VUX0ZFQVRVUkUJPQk4J2gwMywKKwkJU0VUX0FERFJFU1MJPQk4J2gwNSwKKwkJR0VUX0RFU0NSSVBUT1IJPQk4J2gwNiwKKwkJU0VUX0RFU0NSSVBUT1IJPQk4J2gwNywKKwkJR0VUX0NPTkZJRwk9CTgnaDA4LAorCQlTRVRfQ09ORklHCT0JOCdoMDksCisJCUdFVF9JTlRFUkZBQ0UJPQk4J2gwYSwKKwkJU0VUX0lOVEVSRkFDRQk9CTgnaDBiLAorCQlTWU5DSF9GUkFNRQk9CTgnaDBjLAorCQlDVVNUT01fUkVHX1dBRERSPQk4J2gxMCwgLy8gQWRkZWQgYnkgRGluZXNoLUEsIDE5dGggRmViIDIwMTMKKwkJQ1VTVE9NX1JFR19SQUREUj0JOCdoMTE7IC8vIEFkZGVkIGJ5IERpbmVzaC1BLCAxOXRoIEZlYiAyMDEzCisKK3BhcmFtZXRlcglWX1NFVF9JTlQJPQk4J2gwZjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIEF1dGhvcjogRGluZXNoLUE6IDE4dGggRmViIDIwMTMgIAorKiAgU2V0dXAgQnl0ZSBEZXRhaWxzCitCeXRlCUZpZWxkCURlc2NyaXB0aW9uCiswCWJtUmVxdWVzdCBUeXBlCSAKKyAgICAgICAgICAgQml0IDc6IFJlcXVlc3QgZGlyZWN0aW9uICgwPUhvc3QgdG8gZGV2aWNlIJYgT3V0LCAxPURldmljZSB0byBob3N0IJYgSW4pLgorICAgICAgICAgICBCaXRzIDUtNjogUmVxdWVzdCB0eXBlICgwPXN0YW5kYXJkLCAxPWNsYXNzLCAyPXZlbmRvciwgMz1yZXNlcnZlZCkuCisgICAgICAgICAgIEJpdHMgMC00OiBSZWNpcGllbnQgKDA9ZGV2aWNlLCAxPWludGVyZmFjZSwgMj1lbmRwb2ludCwzPW90aGVyKS4KKzEJYlJlcXVlc3QJIFRoZSBhY3R1YWwgcmVxdWVzdCAoc2VlIHRoZSBTdGFuZGFyZCBEZXZpY2UgUmVxdWVzdCBDb2RlcyB0YWJsZSBbOS4yLjEuNV0uCisyCXdWYWx1ZUwJIEEgd29yZC1zaXplIHZhbHVlIHRoYXQgdmFyaWVzIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdC4gRm9yIGV4YW1wbGUsIAorICAgICAgICBpbiB0aGUgQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRoZSB2YWx1ZSBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgZmVhdHVyZSwgCisJaW4gdGhlIEdFVF9ERVNDUklQVE9SIHJlcXVlc3QgdGhlIHZhbHVlIGluZGljYXRlcyB0aGUgZGVzY3JpcHRvciB0eXBlIGFuZCBpbiB0aGUgCisJU0VUX0FERFJFU1MgcmVxdWVzdCB0aGUgdmFsdWUgY29udGFpbnMgdGhlIGRldmljZSBhZGRyZXNzLgorMwl3VmFsdWVICVRoZSB1cHBlciBieXRlIG9mIHRoZSBWYWx1ZSB3b3JkLgorNAl3SW5kZXhMCSBBIHdvcmQtc2l6ZSB2YWx1ZSB0aGF0IHZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIHJlcXVlc3QuIAorICAgICAgICBUaGUgaW5kZXggaXMgZ2VuZXJhbGx5IHVzZWQgdG8gc3BlY2lmeSBhbiBlbmRwb2ludCBvciBhbiBpbnRlcmZhY2UuCis1CXdJbmRleEgJVGhlIHVwcGVyIGJ5dGUgb2YgdGhlIEluZGV4IHdvcmQuCis2CXdMZW5ndGhMICBBIHdvcmQtc2l6ZSB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIGlmIHRoZXJlIGlzIGEgZGF0YSBzdGFnZS4KKzcJd0xlbmd0aEggIFRoZSB1cHBlciBieXRlIG9mIHRoZSBMZW5ndGggd29yZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioKK2JSZXF1ZXN0CSAgICAgICAgICAgICAgIFZhbHVlCitHRVRfU1RBVFVTCSAgICAgICAgICAgICAgIDAKK0NMRUFSX0ZFQVRVUkUJICAgICAgICAgICAgICAgMQorUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UJICAgICAgIDIKK1NFVF9GRUFUVVJFCSAgICAgICAgICAgICAgIDMKK1Jlc2VydmVkIGZvciBmdXR1cmUgdXNlCSAgICAgICA0CitTRVRfQUREUkVTUwkgICAgICAgICAgICAgICA1CitHRVRfREVTQ1JJUFRPUgkgICAgICAgICAgICAgICA2CitTRVRfREVTQ1JJUFRPUgkgICAgICAgICAgICAgICA3CitHRVRfQ09ORklHVVJBVElPTgkgICAgICAgOAorU0VUX0NPTkZJR1VSQVRJT04JICAgICAgIDkKK0dFVF9JTlRFUkZBQ0UJICAgICAgICAgICAgICAgMTAKK1NFVF9JTlRFUkZBQ0UJICAgICAgICAgICAgICAgMTEKK1NZTkNIX0ZSQU1FCSAgICAgICAgICAgICAgIDEyCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2Fzc2lnbiBibVJlcVR5cGUgPSBoZHIwOworYXNzaWduIGJtX3JlcV9kaXIgPSBibVJlcVR5cGVbN107CS8vIDAtSG9zdCB0byBkZXZpY2U7IDEtZGV2aWNlIHRvIGhvc3QgCithc3NpZ24gYm1fcmVxX3R5cGUgPSBibVJlcVR5cGVbNjo1XTsJLy8gMC1zdGFuZGFyZDsgMS1jbGFzczsgMi12ZW5kb3I7IDMtUkVTRVJWRUQKK2Fzc2lnbiBibV9yZXFfcmVjcCA9IGJtUmVxVHlwZVs0OjBdOwkvLyAwLWRldmljZTsgMS1pbnRlcmZhY2U7IDItZW5kcG9pbnQ7IDMtb3RoZXIKKwkJCQkJLy8gNC4uMzEtcmVzZXJ2ZWQKK2Fzc2lnbiBiUmVxdWVzdCA9ICBoZHIxOworYXNzaWduIHdWYWx1ZSAgID0ge2hkcjMsIGhkcjJ9OworYXNzaWduIHdJbmRleCAgID0ge2hkcjUsIGhkcjR9OworYXNzaWduIHdMZW5ndGggID0ge2hkcjcsIGhkcjZ9OworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwloZHJfZG9uZV9yIDw9ICMxIGhkcl9kb25lOworCisvLyBTdGFuZGFyZCBjb21tYW5kcyB0aGF0IE1VU1Qgc3VwcG9ydAorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZ2V0X3N0YXR1cyA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBHRVRfU1RBVFVTKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWNsZWFyX2ZlYXR1cmUgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gQ0xFQVJfRkVBVFVSRSkgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZXRfZmVhdHVyZSA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBTRVRfRkVBVFVSRSkgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZXRfYWRkcmVzcyA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBTRVRfQUREUkVTUykgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlnZXRfZGVzY3JpcHRvciA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBHRVRfREVTQ1JJUFRPUikgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZXRfZGVzY3JpcHRvciA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBTRVRfREVTQ1JJUFRPUikgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlnZXRfY29uZmlnIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IEdFVF9DT05GSUcpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2V0X2NvbmZpZyA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBTRVRfQ09ORklHKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWdldF9pbnRlcmZhY2UgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gR0VUX0lOVEVSRkFDRSkgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZXRfaW50ZXJmYWNlIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFNFVF9JTlRFUkZBQ0UpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc3luY2hfZnJhbWUgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gU1lOQ0hfRlJBTUUpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdl9zZXRfaW50IDw9ICMxCQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBWX1NFVF9JTlQpICYgKGJtX3JlcV90eXBlPT0yJ2gyKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdl9zZXRfZmVhdHVyZSA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBTRVRfRkVBVFVSRSkgJiAoYm1fcmVxX3R5cGU9PTInaDIpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl2X2dldF9zdGF0dXMgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gR0VUX1NUQVRVUykgJiAoYm1fcmVxX3R5cGU9PTInaDIpOworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdl9zZXRfcmVnX3dhZGRyIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IENVU1RPTV9SRUdfV0FERFIpICYgKGJtX3JlcV90eXBlPT0yJ2gyKTsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXZfc2V0X3JlZ19yYWRkciA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBDVVNUT01fUkVHX1JBRERSKSAmIChibV9yZXFfdHlwZT09MidoMik7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKHZfc2V0X3JlZ193YWRkciB8fCB2X3NldF9yZWdfcmFkZHIpIHJlZ19hZGRyICA8PSB7aGRyMixoZHIzLGhkcjQsaGRyNX07IAorCityZWcgWzE6MF0gcmVnX2J5dGVfY250OworYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICBpZighcnN0KSBiZWdpbgorICAgICAgIHJlZ19ieXRlX2NudCA8PSAyJ2IwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIGlmKHZfc2V0X3JlZ193YWRkcikgYmVnaW4gCisJICByZWdfd3BoYXNlICAgICAgPD0gMTsgCisJICByZWdfYnl0ZV9jbnQgICAgPD0gMDsKKyAgICAgIGVuZCBlbHNlIGlmKHJlZ19ieXRlX2NudCA9PSAyJ2IxMSAmJiBmaWZvX3JlMSkgYmVnaW4KKwkgIHJlZ193cGhhc2UgIDw9IDA7IAorCSAgcmVnX2J5dGVfY250ICAgIDw9IDA7CisgICAgICBlbmQgZWxzZSBpZihyZWdfd3BoYXNlICYmIGZpZm9fcmUxKSBiZWdpbgorCSByZWdfYnl0ZV9jbnQgPD0gcmVnX2J5dGVfY250KzE7CisgICAgICBlbmQKKyAgIGVuZAorZW5kCisKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisgICAgICBpZihyZWdfd3BoYXNlICYmIGZpZm9fcmUxKSByZWdfd2RhdGEgIDw9IHtyZWdfd2RhdGFbMjM6MF0sZXAwX2Rpbls3OjBdfTsgCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgICAgaWYocmVnX3Jkd3JuICYmIHJlZ19hY2spIHJlZ19yZGF0YV9yICA8PSB7cmVnX3JkYXRhfTsgCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgaWYoIXJzdCkgYmVnaW4KKyAgICAgIHJlZ19yZXEgIDw9IDA7IAorICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIGlmKGZpZm9fcmUxICYmIHJlZ193cGhhc2UgJiYgcmVnX2J5dGVfY250PT0gMidiMTEpIHJlZ19yZXEgIDw9IDE7IAorICAgICAgZWxzZSBpZih2X3NldF9yZWdfcmFkZHIpICAgICAgICAgcmVnX3JlcSAgPD0gMTsgCisgICAgICBlbHNlIHJlZ19yZXEgPD0gMDsKKyAgIGVuZAorZW5kCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKHZfc2V0X3JlZ19yYWRkcikgICAgICByZWdfcmR3cm4gPD0gMSdiMSA7CisJZWxzZSBpZih2X3NldF9yZWdfd2FkZHIpIHJlZ19yZHdybiA8PSAxJ2IwIDsKKworLy8gQSBjb25maWcgZXJyIG11c3QgY2F1c2UgdGhlIGRldmljZSB0byBzZW5kIGEgU1RBTEwgZm9yIGFuIEFDSworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY29uZmlnX2VyciA8PSAjMSBoZHJfZG9uZV9yICYgIShnZXRfc3RhdHVzIHwgY2xlYXJfZmVhdHVyZSB8CisJCQlzZXRfZmVhdHVyZSB8IHNldF9hZGRyZXNzIHwgZ2V0X2Rlc2NyaXB0b3IgfAorCQkJc2V0X2Rlc2NyaXB0b3IgfCBnZXRfY29uZmlnIHwgc2V0X2NvbmZpZyB8CisJCQlnZXRfaW50ZXJmYWNlIHwgc2V0X2ludGVyZmFjZSB8IHN5bmNoX2ZyYW1lIHwKKwkJCXZfc2V0X2ludCB8IHZfc2V0X2ZlYXR1cmUgfCB2X2dldF9zdGF0dXMgfCB2X3NldF9yZWdfd2FkZHIgfCB2X3NldF9yZWdfcmFkZHIpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZW5kX3N0YWxsIDw9ICMxIGNvbmZpZ19lcnI7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTZXQgYWRkcmVzcworLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJCQkJc2V0X2Fkcl9wZW5kaW5nIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKGN0cmxfaW4gfCBjdHJsX291dCB8IGN0cmxfc2V0dXApCXNldF9hZHJfcGVuZGluZyA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihzZXRfYWRkcmVzcykJCQkJc2V0X2Fkcl9wZW5kaW5nIDw9ICMxIDEnYjE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCQkJZnVuY3RfYWRyX3RtcCA8PSAjMSA3J2gwOworCWVsc2UKKwlpZihzZXRfYWRkcmVzcykJCQlmdW5jdF9hZHJfdG1wIDw9ICMxIHdWYWx1ZVs2OjBdOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQkJCWZ1bmN0X2FkciA8PSAjMSA3J2gwOworCWVsc2UKKwlpZihzZXRfYWRyX3BlbmRpbmcgJiBjdHJsX2luKQlmdW5jdF9hZHIgPD0gIzEgZnVuY3RfYWRyX3RtcDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1haW4gRlNNCisvLworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQlzdGF0ZSA8PSAjMSBJRExFOworCWVsc2UJCXN0YXRlIDw9IG5leHRfc3RhdGU7CisKK2Fsd2F5cyBAKHN0YXRlIG9yIGN0cmxfc2V0dXAgb3IgY3RybF9pbiBvciBjdHJsX291dCBvciBoZHJfZG9uZSBvcgorCWZpZm9fZnVsbCBvciByb21fZG9uZSBvciB3cml0ZV9kb25lIG9yIHdWYWx1ZSBvciBibV9yZXFfcmVjcCBvcgorCWdldF9zdGF0dXMgb3IgY2xlYXJfZmVhdHVyZSBvciBzZXRfZmVhdHVyZSBvciBzZXRfYWRkcmVzcyBvcgorCWdldF9kZXNjcmlwdG9yIG9yIHNldF9kZXNjcmlwdG9yIG9yIGdldF9jb25maWcgb3Igc2V0X2NvbmZpZyBvcgorCWdldF9pbnRlcmZhY2Ugb3Igc2V0X2ludGVyZmFjZSBvciBzeW5jaF9mcmFtZSBvciB2X3NldF9pbnQgb3IKKwl2X3NldF9mZWF0dXJlIG9yIHZfZ2V0X3N0YXR1cyBvciB2X3NldF9yZWdfd2FkZHIgb3Igdl9zZXRfcmVnX3JhZGRyLCByZWdfYWNrCisJKQorICAgYmVnaW4KKwluZXh0X3N0YXRlID0gc3RhdGU7CisJZ2V0X2hkciAgPSAxJ2IwOworCWRhdGFfc2VsID0gWkVST19EQVRBOworCWZpZm9fd2VfZCA9IDEnYjA7CisJaW5fc2l6ZV8wID0gMSdiMDsKKwlpbl9zaXplXzEgPSAxJ2IwOworCWluX3NpemVfMiA9IDEnYjA7CisJaW5fc2l6ZV80ID0gMSdiMDsKKwlyb21fc2VsID0gMSdiMDsKKworCWNhc2Uoc3RhdGUpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisKKwkJLy8gV2FpdCBmb3IgU2V0dXAgdG9rZW4KKwkgICBJRExFOgorCQkgICBiZWdpbgorCQkJaWYoY3RybF9zZXR1cCkJCW5leHRfc3RhdGUgPSBHRVRfSERSOworCQkJaWYoZ2V0X3N0YXR1cykJCW5leHRfc3RhdGUgPSBHRVRfU1RBVFVTX1M7CisJCQlpZihjbGVhcl9mZWF0dXJlKQluZXh0X3N0YXRlID0gQ0xFQVJfRkVBVFVSRV9TOworCQkJaWYoc2V0X2ZlYXR1cmUpCQluZXh0X3N0YXRlID0gU0VUX0ZFQVRVUkVfUzsKKwkJCWlmKHNldF9hZGRyZXNzKQkJbmV4dF9zdGF0ZSA9IFNFVF9BRERSRVNTX1M7CisJCQlpZihnZXRfZGVzY3JpcHRvcikJbmV4dF9zdGF0ZSA9IEdFVF9ERVNDUklQVE9SX1M7CisJCQlpZihzZXRfZGVzY3JpcHRvcikJbmV4dF9zdGF0ZSA9IFNFVF9ERVNDUklQVE9SX1M7CisJCQlpZihnZXRfY29uZmlnKQkJbmV4dF9zdGF0ZSA9IEdFVF9DT05GSUdfUzsKKwkJCWlmKHNldF9jb25maWcpCQluZXh0X3N0YXRlID0gU0VUX0NPTkZJR19TOworCQkJaWYoZ2V0X2ludGVyZmFjZSkJbmV4dF9zdGF0ZSA9IEdFVF9JTlRFUkZBQ0VfUzsKKwkJCWlmKHNldF9pbnRlcmZhY2UpCW5leHRfc3RhdGUgPSBTRVRfSU5URVJGQUNFX1M7CisJCQlpZihzeW5jaF9mcmFtZSkJCW5leHRfc3RhdGUgPSBTWU5DSF9GUkFNRV9TOworCQkJaWYodl9zZXRfaW50KQkJbmV4dF9zdGF0ZSA9IFZfU0VUX0lOVF9TOworCQkJaWYodl9zZXRfZmVhdHVyZSkJbmV4dF9zdGF0ZSA9IFZfU0VUX0lOVF9TOworCQkJaWYodl9nZXRfc3RhdHVzKQluZXh0X3N0YXRlID0gVl9HRVRfU1RBVFVTX1M7CisJCQlpZih2X3NldF9yZWdfd2FkZHIpCW5leHRfc3RhdGUgPSBTVEFUVVNfSU47CisJCQlpZih2X3NldF9yZWdfcmFkZHIpCW5leHRfc3RhdGUgPSBWX1dBSVRfUkRBVEFfRE9ORV9TOworCQkgICBlbmQKKworCQkvLyBSZXRyaWV2ZSBTZXR1cCBIZWFkZXIKKwkgICBHRVRfSERSOgorCQkgICBiZWdpbgorCQkJZ2V0X2hkciA9IDEnYjE7CisJCQlpZihoZHJfZG9uZSkJbmV4dF9zdGF0ZSA9IElETEU7CisJCSAgIGVuZAorCisKKwkJLy8gQWN0aW9ucyBmb3Igc3VwcG9ydGVkIGNvbW1hbmRzCisJICAgR0VUX1NUQVRVU19TOgorCQkgICBiZWdpbgorCQkJLy8gUmV0dXJucyB0byBob3N0CisJCQkvLyAxNidoMDAwMSBmb3IgZGV2aWNlCisJCQkvLyAxNidoMDAwMCBmb3IgaW50ZXJmYWNlCisJCQkvLyAxNidoMDAwMCBmb3IgZW5kcG9pbnQKKwkJCWlmKGJtX3JlcV9yZWNwID09IDUnaDAwKQlkYXRhX3NlbCA9IFpFUk9fT05FX0RBVEE7CisJCQllbHNlCQkJCWRhdGFfc2VsID0gWkVST19EQVRBOworCisJCQlpbl9zaXplXzIgPSAxJ2IxOworCQkJaWYoIWZpZm9fZnVsbCkKKwkJCSAgIGJlZ2luCisJCQkJZmlmb193ZV9kID0gMSdiMTsKKwkJCQlpZih3cml0ZV9kb25lKQluZXh0X3N0YXRlID0gV0FJVF9JTl9EQVRBOworCQkJICAgZW5kCisKKwkJICAgZW5kCisJICAgVl9HRVRfU1RBVFVTX1M6CisJCSAgIGJlZ2luCisJCQlkYXRhX3NlbCA9IFZFTkRfREFUQTsKKwkJCWluX3NpemVfMiA9IDEnYjE7CisJCQlpZighZmlmb19mdWxsKQorCQkJICAgYmVnaW4KKwkJCQlmaWZvX3dlX2QgPSAxJ2IxOworCQkJCWlmKHdyaXRlX2RvbmUpCW5leHRfc3RhdGUgPSBXQUlUX0lOX0RBVEE7CisJCQkgICBlbmQKKwkJICAgZW5kCisKKwlWX1dBSVRfUkRBVEFfRE9ORV9TOiBiZWdpbiAvLyBXYWl0IGZvciBSZWdpc3RlciBSZWFkIEFjY2VzcyBDb21wbGV0aW9uCisJCSAgICAgaWYocmVnX2FjaykKKwkJCW5leHRfc3RhdGUgPSBWX0dFVF9SRUdfUkRBVEFfUzsKKwkJICAgZW5kCisKKwkgICBWX0dFVF9SRUdfUkRBVEFfUzogLy8gUmVnaXN0ZXIgQWNjZXNzIFJlYWQgRGF0YQorCQkgICBiZWdpbgorCQkJZGF0YV9zZWwgPSBSRUdfUkRBVEE7CisJCQlpbl9zaXplXzQgPSAxJ2IxOworCQkJaWYoIWZpZm9fZnVsbCkKKwkJCSAgIGJlZ2luCisJCQkJZmlmb193ZV9kID0gMSdiMTsKKwkJCQlpZih3cml0ZV9kb25lKQluZXh0X3N0YXRlID0gV0FJVF9JTl9EQVRBOworCQkJICAgZW5kCisJCSAgIGVuZAkJICAgCisJICAgQ0xFQVJfRkVBVFVSRV9TOgorCQkgICBiZWdpbgorCQkJLy8ganVzdCBpZ25vcmUgdGhpcyBmb3Igbm93CisJCQluZXh0X3N0YXRlID0gU1RBVFVTX0lOOworCQkgICBlbmQKKworCSAgIFNFVF9GRUFUVVJFX1M6CisJCSAgIGJlZ2luCisJCQkvLyBqdXN0IGlnbm9yZSB0aGlzIGZvciBub3cKKwkJCW5leHRfc3RhdGUgPSBTVEFUVVNfSU47CisJCSAgIGVuZAorCisJICAgU0VUX0FERFJFU1NfUzoKKwkJICAgYmVnaW4KKwkJCS8vIGRvbmUgZWxzZXdoZXJlIC4uLi4KKwkJCW5leHRfc3RhdGUgPSBTVEFUVVNfSU47CisJCSAgIGVuZAorCisJICAgR0VUX0RFU0NSSVBUT1JfUzoKKwkJICAgYmVnaW4KKwkJCWlmKAl3VmFsdWVbMTU6OF0gPT0gOCdoMDEgfAorCQkJCXdWYWx1ZVsxNTo4XSA9PSA4J2gwMiB8IAorCQkJCXdWYWx1ZVsxNTo4XSA9PSA4J2gwMwkpCisJCQkJcm9tX3NlbCA9IDEnYjE7CisJCQllbHNlCisJCQkJbmV4dF9zdGF0ZSA9IElETEU7CisKKwkJCWlmKHJvbV9kb25lKQorCQkJCW5leHRfc3RhdGUgPSBJRExFOworCQkgICBlbmQKKworCSAgIFNFVF9ERVNDUklQVE9SX1M6CisJCSAgIGJlZ2luCisJCQkvLyBUaGlzIGRvZXNuJ3QgZG8gYW55dGhpbmcgc2luY2Ugd2UgZG8gbm90IHN1cHBvcnQKKwkJCS8vIHNldHRpbmcgdGhlIGRlc2NyaXB0b3IKKwkJCW5leHRfc3RhdGUgPSBJRExFOworCQkgICBlbmQKKworCSAgIEdFVF9DT05GSUdfUzoKKwkJICAgYmVnaW4KKwkJCS8vIFNlbmQgb25lIGJ5dGUgYmFjayB0aGF0IGluZGljYXRlcyBjdXJyZW50IHN0YXR1cworCQkJaW5fc2l6ZV8xID0gMSdiMTsKKwkJCWRhdGFfc2VsID0gQ09ORklHX0RBVEE7CisJCQlpZighZmlmb19mdWxsKQorCQkJICAgYmVnaW4KKwkJCQlmaWZvX3dlX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBXQUlUX0lOX0RBVEE7CisJCQkgICBlbmQKKwkJICAgZW5kCisKKwkgICBTRVRfQ09ORklHX1M6CisJCSAgIGJlZ2luCisJCQkvLyBkb25lIGVsc2V3aGVyZSAuLi4uCisJCQluZXh0X3N0YXRlID0gU1RBVFVTX0lOOworCQkgICBlbmQKKworCSAgIEdFVF9JTlRFUkZBQ0VfUzoKKwkJICAgYmVnaW4KKwkJCS8vIFJldHVybiBpbnRlcmZhY2UgJzAnCisJCQlpbl9zaXplXzEgPSAxJ2IxOworCQkJaWYoIWZpZm9fZnVsbCkKKwkJCSAgIGJlZ2luCisJCQkJZmlmb193ZV9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gV0FJVF9JTl9EQVRBOworCQkJICAgZW5kCisJCSAgIGVuZAorCisJICAgU0VUX0lOVEVSRkFDRV9TOgorCQkgICBiZWdpbgorCQkJLy8ganVzdCBpZ25vcmUgdGhpcyBmb3Igbm93CisJCQluZXh0X3N0YXRlID0gU1RBVFVTX0lOOworCQkgICBlbmQKKworCSAgIFNZTkNIX0ZSQU1FX1M6CisJCSAgIGJlZ2luCisJCQkvLyBSZXR1cm4gRnJhbWUgY3VycmVudCBmcmFtZSBudW1iZXIKKwkJCWRhdGFfc2VsID0gU1lOQ19GUkFNRV9EQVRBOworCQkJaW5fc2l6ZV8yID0gMSdiMTsKKwkJCWlmKCFmaWZvX2Z1bGwpCisJCQkgICBiZWdpbgorCQkJCWZpZm9fd2VfZCA9IDEnYjE7CisJCQkJaWYod3JpdGVfZG9uZSkJbmV4dF9zdGF0ZSA9IFdBSVRfSU5fREFUQTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCSAgIFZfU0VUX0lOVF9TOgorCQkgICBiZWdpbgorCQkJLy8gZG9uZSBlbHNld2hlcmUgLi4uLgorCQkJbmV4dF9zdGF0ZSA9IFNUQVRVU19JTjsKKwkJICAgZW5kCisKKwkgICBXQUlUX0lOX0RBVEE6CisJCSAgIGJlZ2luCisJCQlpZihjdHJsX2luKQluZXh0X3N0YXRlID0gU1RBVFVTX09VVDsKKwkJICAgZW5kCisKKwkgICBTVEFUVVNfSU46CisJCSAgIGJlZ2luCisJCQlpbl9zaXplXzAgPSAxJ2IxOworCQkJaWYoY3RybF9pbikJbmV4dF9zdGF0ZSA9IElETEU7CisJCSAgIGVuZAorCisJICAgU1RBVFVTX09VVDoKKwkJICAgYmVnaW4KKwkJCWlmKGN0cmxfb3V0KQluZXh0X3N0YXRlID0gSURMRTsKKwkJICAgZW5kCisJZW5kY2FzZQorICAgZW5kCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZmlmbzIudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9maWZvMi52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzMWFjYjQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZmlmbzIudgpAQCAtMCwwICsxLDEwNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEZhc3QgRklGTyAyIGVudHJpZXMgZGVlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9maWZvMi52LHYgMS4xLjEuMSAyMDAyLTA5LTE5IDEyOjA3OjMxIHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMTkgMTI6MDc6MzEgJAorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLworLy8KKy8vCisvLworLy8KKworCittb2R1bGUgdXNiMWRfZmlmbzIoY2xrLCByc3QsIGNsciwgIGRpbiwgd2UsIGRvdXQsIHJlKTsKKworaW5wdXQJCWNsaywgcnN0OworaW5wdXQJCWNscjsKK2lucHV0ICAgWzc6MF0JZGluOworaW5wdXQJCXdlOworb3V0cHV0ICBbNzowXQlkb3V0OworaW5wdXQJCXJlOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMKKy8vCisKK3JlZyAgICAgWzc6MF0JbWVtWzA6MV07CityZWcJCXdwOworcmVnCQlycDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKyAgICAgICAgaWYoIXJzdCkJd3AgPD0gIzEgMSdoMDsKKyAgICAgICAgZWxzZQorICAgICAgICBpZihjbHIpCQl3cCA8PSAjMSAxJ2gwOworICAgICAgICBlbHNlCisgICAgICAgIGlmKHdlKQkJd3AgPD0gIzEgfndwOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKyAgICAgICAgaWYoIXJzdCkJcnAgPD0gIzEgMSdoMDsKKyAgICAgICAgZWxzZQorICAgICAgICBpZihjbHIpCQlycCA8PSAjMSAxJ2gwOworICAgICAgICBlbHNlCisgICAgICAgIGlmKHJlKQkJcnAgPD0gIzEgfnJwOworCisvLyBGaWZvIE91dHB1dAorYXNzaWduICBkb3V0ID0gbWVtWyBycCBdOworCisvLyBGaWZvIElucHV0IAorYWx3YXlzIEAocG9zZWRnZSBjbGspCisgICAgICAgIGlmKHdlKSAgICAgbWVtWyB3cCBdIDw9ICMxIGRpbjsKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2RwcmFtLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19kcHJhbS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzMWE0NDcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19kcHJhbS52CkBAIC0wLDAgKzEsNTAyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEdlbmVyaWMgRHVhbC1Qb3J0IFN5bmNocm9ub3VzIFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgbWVtb3J5IGxpYnJhcnkgYXZhaWxhYmxlIGZyb20gICAgICAgICAgLy8vLw0KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jdnN3ZWIuc2h0bWwvZ2VuZXJpY19tZW1vcmllcy8gICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFRoaXMgYmxvY2sgaXMgYSB3cmFwcGVyIHdpdGggY29tbW9uIGR1YWwtcG9ydCAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBzeW5jaHJvbm91cyBtZW1vcnkgaW50ZXJmYWNlIGZvciBkaWZmZXJlbnQgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgdHlwZXMgb2YgQVNJQyBhbmQgRlBHQSBSQU1zLiBCZXNpZGUgdW5pdmVyc2FsIG1lbW9yeSAgICAgICAgLy8vLw0KKy8vLy8gIGludGVyZmFjZSBpdCBhbHNvIHByb3ZpZGVzIGJlaGF2aW9yYWwgbW9kZWwgb2YgZ2VuZXJpYyAgICAgIC8vLy8NCisvLy8vICBkdWFsLXBvcnQgc3luY2hyb25vdXMgUkFNLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgSXQgYWxzbyBjb250YWlucyBhIGZ1bGx5IHN5bnRoZXNpemVhYmxlIG1vZGVsIGZvciBGUEdBcy4gICAgLy8vLw0KKy8vLy8gIEl0IHNob3VsZCBiZSB1c2VkIGluIGFsbCBPUEVOQ09SRVMgZGVzaWducyB0aGF0IHdhbnQgdG8gYmUgIC8vLy8NCisvLy8vICBwb3J0YWJsZSBhY2Nyb3NzIGRpZmZlcmVudCB0YXJnZXQgdGVjaG5vbG9naWVzIGFuZCAgICAgICAgICAvLy8vDQorLy8vLyAgaW5kZXBlbmRlbnQgb2YgdGFyZ2V0IG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBTdXBwb3J0ZWQgQVNJQyBSQU1zIGFyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgLSBBcnRpc2FuIER1YWwtUG9ydCBTeW5jIFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIC0gQXZhbnQhIFR3by1Qb3J0IFN5bmMgUkFNICgqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAtIFZpcmFnZSAyLXBvcnQgU3luYyBSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFN1cHBvcnRlZCBGUEdBIFJBTXMgYXJlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAtIEdlbmVyaWMgRlBHQSAoVkVORE9SX0ZQR0EpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICBUZXN0ZWQgUkFNczogQWx0ZXJhLCBYaWxpbnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgU3ludGhlc2lzIHRvb2xzOiBMZW9uYXJkb1NwZWN0cnVtLCBTeW5wbGljaXR5ICAgICAgICAgICAgIC8vLy8NCisvLy8vICAtIFhpbGlueCAoVkVORE9SX1hJTElOWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgLSBBbHRlcmEgKFZFTkRPUl9BTFRFUkEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgIC0gZml4IEF2YW50ISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAtIGFkZCBhZGRpdGlvbmFsIFJBTXMgKFZTIGV0YykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAtIFJpY2hhcmQgSGVydmVpbGxlLCByaWNoYXJkQGFzaWNzLndzICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgLSBEYW1qYW4gTGFtcHJldCwgbGFtcHJldEBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vDQorLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLw0KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8NCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8NCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLw0KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8NCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8NCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vDQorLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLw0KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8NCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vDQorLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBDVlMgUmV2aXNpb24gSGlzdG9yeQ0KKy8vDQorLy8gJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQNCisvLyBSZXZpc2lvbiAxLjIgIDIwMDEvMTEvMDggMTk6MTE6MzEgIHNhbWcNCisvLyBhZGRlZCB2YWxpZCBjaGVja3MgdG8gYmVodmlvcmFsIG1vZGVsDQorLy8NCisvLyBSZXZpc2lvbiAxLjEuMS4xICAyMDAxLzA5LzE0IDA5OjU3OjEwICByaGVydmVpbGxlDQorLy8gTWFqb3IgY2xlYW51cC4NCisvLyBGaWxlcyBhcmUgbm93IGNvbXBsaWFudCB0byBBbHRlcmEgJiBYaWxpbnggbWVtb3JpZXMuDQorLy8gTWVtb3JpZXMgYXJlIG5vdyBjb21wYXRpYmxlLCBpLmUuIGRyb3AtaW4gcmVwbGFjZW1lbnRzLg0KKy8vIEFkZGVkIHN5bnRoZXNpemVhYmxlIGdlbmVyaWMgRlBHQSBkZXNjcmlwdGlvbi4NCisvLyBDcmVhdGVkICJnZW5lcmljX21lbW9yaWVzIiBjdnMgZW50cnkuDQorLy8NCisvLyBSZXZpc2lvbiAxLjEuMS4yICAyMDAxLzA4LzIxIDEzOjA5OjI3ICBkYW1qYW4NCisvLyAqKiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqDQorLy8NCisvLyBSZXZpc2lvbiAxLjEgIDIwMDEvMDgvMjAgMTg6MjM6MjAgIGRhbWphbg0KKy8vIEluaXRpYWwgcmV2aXNpb24NCisvLw0KKy8vIFJldmlzaW9uIDEuMSAgMjAwMS8wOC8wOSAxMzozOTozMyAgbGFtcHJldA0KKy8vIE1ham9yIGNsZWFuLXVwLg0KKy8vDQorLy8gUmV2aXNpb24gMS4yICAyMDAxLzA3LzMwIDA1OjM4OjAyICBsYW1wcmV0DQorLy8gQWRkaW5nIGVtcHR5IGRpcmVjdG9yaWVzIHJlcXVpcmVkIGJ5IEhETCBjb2RpbmcgZ3VpZGVsaW5lcw0KKy8vDQorLy8NCisgDQorIA0KKy8vYGRlZmluZSBWRU5ET1JfRlBHQQ0KKy8vYGRlZmluZSBWRU5ET1JfWElMSU5YDQorLy9gZGVmaW5lIFZFTkRPUl9BTFRFUkENCisgDQorbW9kdWxlIHVzYjFkX2dlbmVyaWNfZHByYW0oDQorCS8vIEdlbmVyaWMgc3luY2hyb25vdXMgZHVhbC1wb3J0IFJBTSBpbnRlcmZhY2UNCisJcmNsaywgcnJzdCwgcmNlLCBvZSwgcmFkZHIsIGRvdXQsDQorCXdjbGssIHdyc3QsIHdjZSwgd2UsIHdhZGRyLCBkaQ0KKyk7DQorIA0KKwkvLw0KKwkvLyBEZWZhdWx0IGFkZHJlc3MgYW5kIGRhdGEgYnVzZXMgd2lkdGgNCisJLy8NCisJcGFyYW1ldGVyIGF3ID0gNTsgIC8vIG51bWJlciBvZiBiaXRzIGluIGFkZHJlc3MtYnVzDQorCXBhcmFtZXRlciBkdyA9IDE2OyAvLyBudW1iZXIgb2YgYml0cyBpbiBkYXRhLWJ1cw0KKyANCisJLy8NCisJLy8gR2VuZXJpYyBzeW5jaHJvbm91cyBkb3VibGUtcG9ydCBSQU0gaW50ZXJmYWNlDQorCS8vDQorCS8vIHJlYWQgcG9ydA0KKwlpbnB1dCAgICAgICAgICAgcmNsazsgIC8vIHJlYWQgY2xvY2ssIHJpc2luZyBlZGdlIHRyaWdnZXINCisJaW5wdXQgICAgICAgICAgIHJyc3Q7ICAvLyByZWFkIHBvcnQgcmVzZXQsIGFjdGl2ZSBoaWdoDQorCWlucHV0ICAgICAgICAgICByY2U7ICAgLy8gcmVhZCBwb3J0IGNoaXAgZW5hYmxlLCBhY3RpdmUgaGlnaA0KKwlpbnB1dCAgICAgICAgICAgb2U7CSAgIC8vIG91dHB1dCBlbmFibGUsIGFjdGl2ZSBoaWdoDQorCWlucHV0ICBbYXctMTowXSByYWRkcjsgLy8gcmVhZCBhZGRyZXNzDQorCW91dHB1dCBbZHctMTowXSBkb3V0OyAgICAvLyBkYXRhIG91dHB1dA0KKyANCisJLy8gd3JpdGUgcG9ydA0KKwlpbnB1dCAgICAgICAgICB3Y2xrOyAgLy8gd3JpdGUgY2xvY2ssIHJpc2luZyBlZGdlIHRyaWdnZXINCisJaW5wdXQgICAgICAgICAgd3JzdDsgIC8vIHdyaXRlIHBvcnQgcmVzZXQsIGFjdGl2ZSBoaWdoDQorCWlucHV0ICAgICAgICAgIHdjZTsgICAvLyB3cml0ZSBwb3J0IGNoaXAgZW5hYmxlLCBhY3RpdmUgaGlnaA0KKwlpbnB1dCAgICAgICAgICB3ZTsgICAgLy8gd3JpdGUgZW5hYmxlLCBhY3RpdmUgaGlnaA0KKwlpbnB1dCBbYXctMTowXSB3YWRkcjsgLy8gd3JpdGUgYWRkcmVzcw0KKwlpbnB1dCBbZHctMTowXSBkaTsgICAgLy8gZGF0YSBpbnB1dA0KKyANCisJLy8NCisJLy8gTW9kdWxlIGJvZHkNCisJLy8NCisgDQorYGlmZGVmIFZFTkRPUl9GUEdBDQorCS8vDQorCS8vIEluc3RhbnRpYXRpb24gc3ludGhlc2l6ZWFibGUgRlBHQSBtZW1vcnkNCisJLy8NCisJLy8gVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCB1c2luZyBMZW9uYXJkb1NwZWN0cnVtIGFuZCBTeW5wbGljaXR5Lg0KKwkvLyBUaGUgY29kZSBjb3JyZWN0bHkgaW5zdGFudGlhdGVzIEFsdGVyYSBFQUJzIGFuZCBYaWxpbnggQmxvY2tSQU1zLg0KKwkvLw0KKyANCisJcmVnIFtkdy0xIDowXSBtZW0gWygxPDxhdykgLTE6MF07IC8vIGluc3RhbnRpYXRlIG1lbW9yeQ0KKwlyZWcgW2R3LTE6MF0gZG91dDsgICAgICAgICAgICAgICAgICAvLyBkYXRhIG91dHB1dCByZWdpc3RlcnMNCisgDQorCS8vIHJlYWQgb3BlcmF0aW9uDQorIA0KKwkvKg0KKwlhbHdheXNAKHBvc2VkZ2UgcmNsaykNCisJCWlmIChyY2UpICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb2NrIGVuYWJsZSBpbnN0cnVjdHMgWGlsaW54IHRvb2xzIHRvIHVzZSBTZWxlY3RSQU0gKExVVFMpIGluc3RlYWQgb2YgQmxvY2tSQU0NCisJCQlkbyA8PSAjMSBtZW1bcmFkZHJdOw0KKwkqLw0KKyANCisJYWx3YXlzQChwb3NlZGdlIHJjbGspDQorCQlkb3V0IDw9ICMxIG1lbVtyYWRkcl07DQorIA0KKwkvLyB3cml0ZSBvcGVyYXRpb24NCisJYWx3YXlzQChwb3NlZGdlIHdjbGspDQorCQlpZiAod2UgJiYgd2NlKQ0KKwkJCW1lbVt3YWRkcl0gPD0gIzEgZGk7DQorIA0KK2BlbHNlDQorIA0KK2BpZmRlZiBWRU5ET1JfWElMSU5YDQorCS8vDQorCS8vIEluc3RhbnRpYXRpb24gb2YgRlBHQSBtZW1vcnk6DQorCS8vDQorCS8vIFZpcnRleC9TcGFydGFuMiBCbG9ja1JBTXMNCisJLy8NCisJeGlsaW54X3JhbV9kcCB4aWxpbnhfcmFtKA0KKwkJLy8gcmVhZCBwb3J0DQorCQkuQ0xLQShyY2xrKSwNCisJCS5SU1RBKHJyc3QpLA0KKwkJLkVOQShyY2UpLA0KKwkJLkFERFJBKHJhZGRyKSwNCisJCS5ESUEoIHtkd3sxJ2IwfX0gKSwNCisJCS5XRUEoMSdiMCksDQorCQkuRE9BKGRvdXQpLA0KKyANCisJCS8vIHdyaXRlIHBvcnQNCisJCS5DTEtCKHdjbGspLA0KKwkJLlJTVEIod3JzdCksDQorCQkuRU5CKHdjZSksDQorCQkuQUREUkIod2FkZHIpLA0KKwkJLkRJQihkaSksDQorCQkuV0VCKHdlKSwNCisJCS5ET0IoKQ0KKwkpOw0KKyANCisJZGVmcGFyYW0NCisJCXhpbGlueF9yYW0uZHdpZHRoID0gZHcsDQorCQl4aWxpbnhfcmFtLmF3aWR0aCA9IGF3Ow0KKyANCitgZWxzZQ0KKyANCitgaWZkZWYgVkVORE9SX0FMVEVSQQ0KKwkvLw0KKwkvLyBJbnN0YW50aWF0aW9uIG9mIEZQR0EgbWVtb3J5Og0KKwkvLw0KKwkvLyBBbHRlcmEgRkxFWC9BUEVYIEVBQnMNCisJLy8NCisJYWx0ZXJhX3JhbV9kcCBhbHRlcmFfcmFtKA0KKwkJLy8gcmVhZCBwb3J0DQorCQkucmRjbG9jayhyY2xrKSwNCisJCS5yZGNsb2NrZW4ocmNlKSwNCisJCS5yZGFkZHJlc3MocmFkZHIpLA0KKwkJLnEoZG91dCksDQorIA0KKwkJLy8gd3JpdGUgcG9ydA0KKwkJLndyY2xvY2sod2NsayksDQorCQkud3JjbG9ja2VuKHdjZSksDQorCQkud3Jlbih3ZSksDQorCQkud3JhZGRyZXNzKHdhZGRyKSwNCisJCS5kYXRhKGRpKQ0KKwkpOw0KKyANCisJZGVmcGFyYW0NCisJCWFsdGVyYV9yYW0uZHdpZHRoID0gZHcsDQorCQlhbHRlcmFfcmFtLmF3aWR0aCA9IGF3Ow0KKyANCitgZWxzZQ0KKyANCitgaWZkZWYgVkVORE9SX0FSVElTQU4NCisgDQorCS8vDQorCS8vIEluc3RhbnRpYXRpb24gb2YgQVNJQyBtZW1vcnk6DQorCS8vDQorCS8vIEFydGlzYW4gU3luY2hyb25vdXMgRG91YmxlLVBvcnQgUkFNIChyYTJzaCkNCisJLy8NCisJYXJ0X2hzZHAgIyhkdywgMTw8YXcsIGF3KSBhcnRpc2FuX3NkcCgNCisJCS8vIHJlYWQgcG9ydA0KKwkJLnFhKGRvdXQpLA0KKwkJLmNsa2EocmNsayksDQorCQkuY2VuYSh+cmNlKSwNCisJCS53ZW5hKDEnYjEpLA0KKwkJLmFhKHJhZGRyKSwNCisJCS5kYSgge2R3ezEnYjB9fSApLA0KKwkJLm9lbmEofm9lKSwNCisgDQorCQkvLyB3cml0ZSBwb3J0DQorCQkucWIoKSwNCisJCS5jbGtiKHdjbGspLA0KKwkJLmNlbmIofndjZSksDQorCQkud2VuYih+d2UpLA0KKwkJLmFiKHdhZGRyKSwNCisJCS5kYihkaSksDQorCQkub2VuYigxJ2IxKQ0KKwkpOw0KKyANCitgZWxzZQ0KKyANCitgaWZkZWYgVkVORE9SX0FWQU5UDQorIA0KKwkvLw0KKwkvLyBJbnN0YW50aWF0aW9uIG9mIEFTSUMgbWVtb3J5Og0KKwkvLw0KKwkvLyBBdmFudCEgQXN5bmNocm9ub3VzIFR3by1Qb3J0IFJBTQ0KKwkvLw0KKwlhdmFudF9hdHAgYXZhbnRfYXRwKA0KKwkJLndlYih+d2UpLA0KKwkJLnJlYigpLA0KKwkJLm9lYih+b2UpLA0KKwkJLnJjc2IoKSwNCisJCS53Y3NiKCksDQorCQkucmEocmFkZHIpLA0KKwkJLndhKHdhZGRyKSwNCisJCS5kaShkaSksDQorCQkuZG8oZG91dCkNCisJKTsNCisgDQorYGVsc2UNCisgDQorYGlmZGVmIFZFTkRPUl9WSVJBR0UNCisgDQorCS8vDQorCS8vIEluc3RhbnRpYXRpb24gb2YgQVNJQyBtZW1vcnk6DQorCS8vDQorCS8vIFZpcmFnZSBTeW5jaHJvbm91cyAyLXBvcnQgUi9XIFJBTQ0KKwkvLw0KKwl2aXJhZ2Vfc3RwIHZpcmFnZV9zdHAoDQorCQkvLyByZWFkIHBvcnQNCisJCS5DTEtBKHJjbGspLA0KKwkJLk1FQShyY2VfYSksDQorCQkuQURSQShyYWRkciksDQorCQkuREEoIHtkd3sxJ2IwfX0gKSwNCisJCS5XRUEoMSdiMCksDQorCQkuT0VBKG9lKSwNCisJCS5RQShkb3V0KSwNCisgDQorCQkvLyB3cml0ZSBwb3J0DQorCQkuQ0xLQih3Y2xrKSwNCisJCS5NRUIod2NlKSwNCisJCS5BRFJCKHdhZGRyKSwNCisJCS5EQihkaSksDQorCQkuV0VCKHdlKSwNCisJCS5PRUIoMSdiMSksDQorCQkuUUIoKQ0KKwkpOw0KKyANCitgZWxzZQ0KKyANCisJLy8NCisJLy8gR2VuZXJpYyBkdWFsLXBvcnQgc3luY2hyb25vdXMgUkFNIG1vZGVsDQorCS8vDQorIA0KKwkvLw0KKwkvLyBHZW5lcmljIFJBTSdzIHJlZ2lzdGVycyBhbmQgd2lyZXMNCisJLy8NCisJcmVnCVtkdy0xOjBdCW1lbSBbKDE8PGF3KS0xOjBdOwkvLyBSQU0gY29udGVudA0KKwlyZWcJW2R3LTE6MF0JZG9fcmVnOyAgICAgICAgICAgIC8vIFJBTSBkYXRhIG91dHB1dCByZWdpc3Rlcg0KKyANCisJLy8NCisJLy8gRGF0YSBvdXRwdXQgZHJpdmVycw0KKwkvLw0KKwlhc3NpZ24gZG91dCA9IChvZSAmIHJjZSkgPyBkb19yZWcgOiB7ZHd7MSdien19Ow0KKyANCisJLy8gcmVhZCBvcGVyYXRpb24NCisJYWx3YXlzIEAocG9zZWRnZSByY2xrKQ0KKwkJaWYgKHJjZSkNCisgICAgICAgICAgCQlkb19yZWcgPD0gIzEgKHdlICYmICh3YWRkcj09cmFkZHIpKSA/IHtkd3sxJ2IgeH19IDogbWVtW3JhZGRyXTsNCisgDQorCS8vIHdyaXRlIG9wZXJhdGlvbg0KKwlhbHdheXMgQChwb3NlZGdlIHdjbGspDQorCQlpZiAod2NlICYmIHdlKQ0KKwkJCW1lbVt3YWRkcl0gPD0gIzEgZGk7DQorIA0KKyANCisJLy8gVGFzayBwcmludHMgcmFuZ2Ugb2YgbWVtb3J5DQorCS8vICoqKiBSZW1lbWJlciB0aGF0IHRhc2tzIGFyZSBub24gcmVlbnRyYW50LCBkb24ndCBjYWxsIHRoaXMgdGFzayBpbiBwYXJhbGxlbCBmb3IgbXVsdGlwbGUgaW5zdGFudGlhdGlvbnMuIA0KKwl0YXNrIHByaW50X3JhbTsNCisJaW5wdXQgW2F3LTE6MF0gc3RhcnQ7DQorCWlucHV0IFthdy0xOjBdIGZpbmlzaDsNCisJaW50ZWdlciBybnVtOw0KKyAgCWJlZ2luDQorICAgIAkJZm9yIChybnVtPXN0YXJ0O3JudW08PWZpbmlzaDtybnVtPXJudW0rMSkNCisgICAgICAJCQkkZGlzcGxheSgiQWRkciAlaCA9ICVoIixybnVtLG1lbVtybnVtXSk7DQorICAJZW5kDQorCWVuZHRhc2sNCisgDQorYGVuZGlmIC8vICFWRU5ET1JfVklSQUdFDQorYGVuZGlmIC8vICFWRU5ET1JfQVZBTlQNCitgZW5kaWYgLy8gIVZFTkRPUl9BUlRJU0FODQorYGVuZGlmIC8vICFWRU5ET1JfQUxURVJBDQorYGVuZGlmIC8vICFWRU5ET1JfWElMSU5YDQorYGVuZGlmIC8vICFWRU5ET1JfRlBHQQ0KKyANCitlbmRtb2R1bGUNCisgDQorLy8NCisvLyBCbGFjay1ib3ggbW9kdWxlcw0KKy8vDQorIA0KK2BpZmRlZiBWRU5ET1JfQUxURVJBDQorCW1vZHVsZSBhbHRlcmFfcmFtX2RwKA0KKwkJZGF0YSwNCisJCXdyYWRkcmVzcywNCisJCXJkYWRkcmVzcywNCisJCXdyZW4sDQorCQl3cmNsb2NrLA0KKwkJd3JjbG9ja2VuLA0KKwkJcmRjbG9jaywNCisJCXJkY2xvY2tlbiwNCisJCXEpIC8qIHN5bnRoZXNpcyBibGFja19ib3ggKi87DQorIA0KKwkJcGFyYW1ldGVyIGF3aWR0aCA9IDc7DQorCQlwYXJhbWV0ZXIgZHdpZHRoID0gODsNCisgDQorCQlpbnB1dCBbZHdpZHRoIC0xOjBdIGRhdGE7DQorCQlpbnB1dCBbYXdpZHRoIC0xOjBdIHdyYWRkcmVzczsNCisJCWlucHV0IFthd2lkdGggLTE6MF0gcmRhZGRyZXNzOw0KKwkJaW5wdXQgICAgICAgICAgICAgICB3cmVuOw0KKwkJaW5wdXQgICAgICAgICAgICAgICB3cmNsb2NrOw0KKwkJaW5wdXQgICAgICAgICAgICAgICB3cmNsb2NrZW47DQorCQlpbnB1dCAgICAgICAgICAgICAgIHJkY2xvY2s7DQorCQlpbnB1dCAgICAgICAgICAgICAgIHJkY2xvY2tlbjsNCisJCW91dHB1dCBbZHdpZHRoIC0xOjBdIHE7DQorIA0KKwkJLy8gc3lub3BzaXMgdHJhbnNsYXRlX29mZg0KKwkJLy8gZXhlbXBsYXIgdHJhbnNsYXRlX29mZg0KKyANCisJCXN5bl9kcHJhbV9yb3dyICMoDQorCQkJIlVOVVNFRCIsDQorCQkJZHdpZHRoLA0KKwkJCWF3aWR0aCwNCisJCQkxIDw8IGF3aWR0aA0KKwkJKQ0KKwkJYWx0ZXJhX2RwcmFtX21vZGVsICgNCisJCQkvLyByZWFkIHBvcnQNCisJCQkuUmRDbG9jayhyZGNsb2NrKSwNCisJCQkuUmRDbGtlbihyZGNsb2NrZW4pLA0KKwkJCS5SZEFkZHJlc3MocmRhZGRyZXNzKSwNCisJCQkuUmRFbigxJ2IxKSwNCisJCQkuUShxKSwNCisgDQorCQkJLy8gd3JpdGUgcG9ydA0KKwkJCS5XckNsb2NrKHdyY2xvY2spLA0KKwkJCS5XckNsa2VuKHdyY2xvY2tlbiksDQorCQkJLldyQWRkcmVzcyh3cmFkZHJlc3MpLA0KKwkJCS5XckVuKHdyZW4pLA0KKwkJCS5EYXRhKGRhdGEpDQorCQkpOw0KKyANCisJCS8vIGV4ZW1wbGFyIHRyYW5zbGF0ZV9vbg0KKwkJLy8gc3lub3BzaXMgdHJhbnNsYXRlX29uDQorIA0KKwllbmRtb2R1bGUNCitgZW5kaWYgLy8gVkVORE9SX0FMVEVSQQ0KKyANCitgaWZkZWYgVkVORE9SX1hJTElOWA0KKwltb2R1bGUgeGlsaW54X3JhbV9kcCAoDQorCQlBRERSQSwNCisJCUNMS0EsDQorCQlBRERSQiwNCisJCUNMS0IsDQorCQlESUEsDQorCQlXRUEsDQorCQlESUIsDQorCQlXRUIsDQorCQlFTkEsDQorCQlFTkIsDQorCQlSU1RBLA0KKwkJUlNUQiwNCisJCURPQSwNCisJCURPQikgLyogc3ludGhlc2lzIGJsYWNrX2JveCAqLyA7DQorIA0KKwlwYXJhbWV0ZXIgYXdpZHRoID0gNzsNCisJcGFyYW1ldGVyIGR3aWR0aCA9IDg7DQorIA0KKwkvLyBwb3J0X2ENCisJaW5wdXQgICAgICAgICAgICAgICBDTEtBOw0KKwlpbnB1dCAgICAgICAgICAgICAgIFJTVEE7DQorCWlucHV0ICAgICAgICAgICAgICAgRU5BOw0KKwlpbnB1dCBbYXdpZHRoLTE6MF0gIEFERFJBOw0KKwlpbnB1dCBbZHdpZHRoLTE6MF0gIERJQTsNCisJaW5wdXQgICAgICAgICAgICAgICBXRUE7DQorCW91dHB1dCBbZHdpZHRoLTE6MF0gRE9BOw0KKyANCisJLy8gcG9ydF9iDQorCWlucHV0ICAgICAgICAgICAgICAgQ0xLQjsNCisJaW5wdXQgICAgICAgICAgICAgICBSU1RCOw0KKwlpbnB1dCAgICAgICAgICAgICAgIEVOQjsNCisJaW5wdXQgW2F3aWR0aC0xOjBdICBBRERSQjsNCisJaW5wdXQgW2R3aWR0aC0xOjBdICBESUI7DQorCWlucHV0ICAgICAgICAgICAgICAgV0VCOw0KKwlvdXRwdXQgW2R3aWR0aC0xOjBdIERPQjsNCisgDQorCS8vIGluc2VydCBzaW11bGF0aW9uIG1vZGVsDQorIA0KKyANCisJLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZg0KKwkvLyBleGVtcGxhciB0cmFuc2xhdGVfb2ZmDQorIA0KKwlDX01FTV9EUF9CTE9DS19WMV8wICMoDQorCQlhd2lkdGgsDQorCQlhd2lkdGgsDQorCQkxLA0KKwkJMSwNCisJCSIwIiwNCisJCTEgPDwgYXdpZHRoLA0KKwkJMSA8PCBhd2lkdGgsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJIiIsDQorCQkxNiwNCisJCTAsDQorCQkwLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCWR3aWR0aCwNCisJCWR3aWR0aCkNCisJeGlsaW54X2RwcmFtX21vZGVsICgNCisJCS5BRERSQShBRERSQSksDQorCQkuQ0xLQShDTEtBKSwNCisJCS5BRERSQihBRERSQiksDQorCQkuQ0xLQihDTEtCKSwNCisJCS5ESUEoRElBKSwNCisJCS5XRUEoV0VBKSwNCisJCS5ESUIoRElCKSwNCisJCS5XRUIoV0VCKSwNCisJCS5FTkEoRU5BKSwNCisJCS5FTkIoRU5CKSwNCisJCS5SU1RBKFJTVEEpLA0KKwkJLlJTVEIoUlNUQiksDQorCQkuRE9BKERPQSksDQorCQkuRE9CKERPQikpOw0KKyANCisJCS8vIGV4ZW1wbGFyIHRyYW5zbGF0ZV9vbg0KKwkJLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uDQorIA0KKwllbmRtb2R1bGUNCitgZW5kaWYgLy8gVkVORE9SX1hJTElOWA0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2ZpZm8udiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2ZpZm8udgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OWM2N2U2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZmlmby52CkBAIC0wLDAgKzEsMzM0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBVbml2ZXJzYWwgRklGTyBTaW5nbGUgQ2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBEL0wgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL2dlbmVyaWNfZmlmb3MvICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8NCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8NCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8NCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8NCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8NCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8NCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8NCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8NCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8NCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8NCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8NCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8NCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8NCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8NCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8NCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisgDQorLy8gIENWUyBMb2cNCisvLw0KKy8vICAkSWQ6IGdlbmVyaWNfZmlmb19zY19hLnYsdiAxLjEuMS4xIDIwMDItMDktMjUgMDU6NDI6MDYgcnVkaSBFeHAgJA0KKy8vDQorLy8gICREYXRlOiAyMDAyLTA5LTI1IDA1OjQyOjA2ICQNCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQNCisvLyAgJEF1dGhvcjogcnVkaSAkDQorLy8gICRMb2NrZXI6ICAkDQorLy8gICRTdGF0ZTogRXhwICQNCisvLw0KKy8vIENoYW5nZSBIaXN0b3J5Og0KKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQNCisvLw0KKy8vDQorLy8NCisvLw0KKy8vDQorLy8NCisvLw0KKy8vDQorLy8NCisvLw0KKyANCisgDQorLyoNCisgDQorRGVzY3JpcHRpb24NCis9PT09PT09PT09PQ0KKyANCitJL09zDQorLS0tLQ0KK3JzdAlsb3cgYWN0aXZlLCBlaXRoZXIgc3luYy4gb3IgYXN5bmMuIG1hc3RlciByZXNldCAoc2VlIGJlbG93IGhvdyB0byBzZWxlY3QpDQorY2xyCXN5bmNocm9ub3VzIGNsZWFyIChqdXN0IGxpa2UgcmVzZXQgYnV0IGFsd2F5cyBzeW5jaHJvbm91cyksIGhpZ2ggYWN0aXZlDQorcmUJcmVhZCBlbmFibGUsIHN5bmNocm9ub3VzLCBoaWdoIGFjdGl2ZQ0KK3dlCXJlYWQgZW5hYmxlLCBzeW5jaHJvbm91cywgaGlnaCBhY3RpdmUNCitkaW4JRGF0YSBJbnB1dA0KK2RvdXQJRGF0YSBPdXRwdXQNCisgDQorZnVsbAlJbmRpY2F0ZXMgdGhlIEZJRk8gaXMgZnVsbCAoY29tYmluYXRvcmlhbCBvdXRwdXQpDQorZnVsbF9yCXNhbWUgYXMgYWJvdmUsIGJ1dCByZWdpc3RlcmVkIG91dHB1dCAoc2VlIG5vdGUgYmVsb3cpDQorZW1wdHkJSW5kaWNhdGVzIHRoZSBGSUZPIGlzIGVtcHR5DQorZW1wdHlfcglzYW1lIGFzIGFib3ZlLCBidXQgcmVnaXN0ZXJlZCBvdXRwdXQgKHNlZSBub3RlIGJlbG93KQ0KKyANCitmdWxsX24JCUluZGljYXRlcyBpZiB0aGUgRklGTyBoYXMgc3BhY2UgZm9yIE4gZW50cmllcyAoY29tYmluYXRvcmlhbCBvdXRwdXQpDQorZnVsbF9uX3IJc2FtZSBhcyBhYm92ZSwgYnV0IHJlZ2lzdGVyZWQgb3V0cHV0IChzZWUgbm90ZSBiZWxvdykNCitlbXB0eV9uCQlJbmRpY2F0ZXMgdGhlIEZJRk8gaGFzIGF0IGxlYXN0IE4gZW50cmllcyAoY29tYmluYXRvcmlhbCBvdXRwdXQpDQorZW1wdHlfbl9yCXNhbWUgYXMgYWJvdmUsIGJ1dCByZWdpc3RlcmVkIG91dHB1dCAoc2VlIG5vdGUgYmVsb3cpDQorIA0KK2xldmVsCQlpbmRpY2F0ZXMgdGhlIEZJRk8gbGV2ZWw6DQorCQkyJ2IwMAkwLTI1JQkgZnVsbA0KKwkJMidiMDEJMjUtNTAlCSBmdWxsDQorCQkyJ2IxMAk1MC03NSUJIGZ1bGwNCisJCTInYjExCSU3NS0xMDAlIGZ1bGwNCisgDQorY29tYmluYXRvcmlhbCB2cy4gcmVnaXN0ZXJlZCBzdGF0dXMgb3V0cHV0cw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitCb3RoIHRoZSBjb21iaW5hdG9yaWFsIGFuZCByZWdpc3RlcmVkIHN0YXR1cyBvdXRwdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZQ0KK3N5bmNocm9ub3VzIHRpbWluZy4gTWVhbmluZyB0aGV5IGFyZSBiZWluZyBhc3NlcnRlZCBpbW1lZGlhdGVseSBhdCB0aGUgY2xvY2sNCitlZGdlIGFmdGVyIHRoZSBsYXN0IHJlYWQgb3Igd3JpdGUuIFRoZSBjb21iaW5hdG9yaWFsIG91dHB1dHMgaG93ZXZlciwgcGFzcw0KK3Rocm91Z2ggc2V2ZXJhbCBsZXZlbHMgb2YgbG9naWMgYmVmb3JlIHRoZXkgYXJlIG91dHB1dC4gVGhlIHJlZ2lzdGVyZWQgc3RhdHVzDQorb3V0cHV0cyBhcmUgZGlyZWN0IG91dHB1dHMgb2YgYSBmbGlwLWZsb3AuIFRoZSByZWFzb24gYm90aCBhcmUgcHJvdmlkZWQsIGlzDQordGhhdCB0aGUgcmVnaXN0ZXJlZCBvdXRwdXRzIHJlcXVpcmUgcXVpdGUgYSBiaXQgb2YgYWRkaXRpb25hbCBsb2dpYyBpbnNpZGUNCit0aGUgRklGTy4gSWYgeW91IGNhbiBtZWV0IHRpbWluZyBvZiB5b3VyIGRldmljZSB3aXRoIHRoZSBjb21iaW5hdG9yaWFsDQorb3V0cHV0cywgdXNlIHRoZW0gISBUaGUgRklGTyB3aWxsIGJlIHNtYWxsZXIuIElmIHRoZSBzdGF0dXMgc2lnbmFscyBhcmUNCitpbiB0aGUgY3JpdGljYWwgcGFzcywgdXNlIHRoZSByZWdpc3RlcmVkIG91dHB1dHMsIHRoZXkgaGF2ZSBhIG11Y2ggc21hbGxlcg0KK291dHB1dCBkZWxheSAoYWN0dWFsbHkgb25seSBUY3EpLg0KKyANCitQYXJhbWV0ZXJzDQorLS0tLS0tLS0tLQ0KK1RoZSBGSUZPIHRha2VzIDMgcGFyYW1ldGVyczoNCitkdwlEYXRhIGJ1cyB3aWR0aA0KK2F3CUFkZHJlc3MgYnVzIHdpZHRoIChEZXRlcm1pbmVzIHRoZSBGSUZPIHNpemUgYnkgZXZhbHVhdGluZyAyXmF3KQ0KK24JTiBpcyBhIHNlY29uZCBzdGF0dXMgdGhyZXNob2xkIGNvbnN0YW50IGZvciBmdWxsX24gYW5kIGVtcHR5X24NCisJSWYgeW91IGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNlY29uZCBzdGF0dXMgdGhyZXNob2xkLCBkbyBub3QNCisJY29ubmVjdCB0aGUgb3V0cHV0cyBhbmQgdGhlIGxvZ2ljIHNob3VsZCBiZSByZW1vdmVkIGJ5IHlvdXINCisJc3ludGhlc2lzIHRvb2wuDQorIA0KK1N5bnRoZXNpcyBSZXN1bHRzDQorLS0tLS0tLS0tLS0tLS0tLS0NCitJbiBhIFNwYXJ0YW4gMmUgYSA4IGJpdCB3aWRlLCA4IGVudHJpZXMgZGVlcCBGSUZPLCB0YWtlcyA4NSBMVVRzIGFuZCBydW5zDQorYXQgYWJvdXQgMTE2IE1IeiAoSU8gaW5zZXJ0aW9uIGRpc2FibGVkKS4gVGhlIHJlZ2lzdGVyZWQgc3RhdHVzIG91dHB1dHMNCithcmUgdmFsaWQgYWZ0ZXIgMi4xTlMsIHRoZSBjb21iaW5hdG9yaWFsIG9uY2UgdGFrZSBvdXQgdG8gNi41IE5TIHRvIGJlDQorYXZhaWxhYmxlLg0KKyANCisgDQorTWlzYw0KKy0tLS0NCitUaGlzIGRlc2lnbiBhc3N1bWVzIHlvdSB3aWxsIGRvIGFwcHJvcHJpYXRlIHN0YXR1cyBjaGVja2luZyBleHRlcm5hbGx5Lg0KKyANCitJTVBPUlRBTlQgISB3cml0aW5nIHdoaWxlIHRoZSBGSUZPIGlzIGZ1bGwgb3IgcmVhZGluZyB3aGlsZSB0aGUgRklGTyBpcw0KK2VtcHR5IHdpbGwgcGxhY2UgdGhlIEZJRk8gaW4gYW4gdW5kZWZpbmVkIHN0YXRlLg0KKyANCisqLw0KKyANCisgDQorLy8gU2VsZWN0aW5nIFN5bmMuIG9yIEFzeW5jIFJlc2V0DQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gVW5jb21tZW50IG9uZSBvZiB0aGUgdHdvIGxpbmVzIGJlbG93LiBUaGUgZmlyc3QgbGluZSBmb3INCisvLyBzeW5jaHJvbm91cyByZXNldCwgdGhlIHNlY29uZCBmb3IgYXN5bmNocm9ub3VzIHJlc2V0DQorIA0KK2BkZWZpbmUgU0NfRklGT19BU1lOQ19SRVNFVAkJCQkvLyBVbmNvbW1lbnQgZm9yIFN5bmNyLiByZXNldA0KKy8vYGRlZmluZSBTQ19GSUZPX0FTWU5DX1JFU0VUCW9yIG5lZ2VkZ2UgcnN0CQkvLyBVbmNvbW1lbnQgZm9yIEFzeW5jLiByZXNldA0KKyANCisgDQorbW9kdWxlIHVzYjFkX2dlbmVyaWNfZmlmbyhjbGssIHJzdCwgY2xyLCBkaW4sIHdlLCBkb3V0LCByZSwNCisJCQlmdWxsLCBlbXB0eSwgZnVsbF9yLCBlbXB0eV9yLA0KKwkJCWZ1bGxfbiwgZW1wdHlfbiwgZnVsbF9uX3IsIGVtcHR5X25fciwNCisJCQlsZXZlbCk7DQorIA0KK3BhcmFtZXRlciBkdz04Ow0KK3BhcmFtZXRlciBhdz04Ow0KK3BhcmFtZXRlciBuPTMyOw0KK3BhcmFtZXRlciBtYXhfc2l6ZSA9IDE8PGF3Ow0KKyANCitpbnB1dAkJCWNsaywgcnN0LCBjbHI7DQoraW5wdXQJW2R3LTE6MF0JZGluOw0KK2lucHV0CQkJd2U7DQorb3V0cHV0CVtkdy0xOjBdCWRvdXQ7DQoraW5wdXQJCQlyZTsNCitvdXRwdXQJCQlmdWxsLCBmdWxsX3I7DQorb3V0cHV0CQkJZW1wdHksIGVtcHR5X3I7DQorb3V0cHV0CQkJZnVsbF9uLCBmdWxsX25fcjsNCitvdXRwdXQJCQllbXB0eV9uLCBlbXB0eV9uX3I7DQorb3V0cHV0CVsxOjBdCQlsZXZlbDsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIExvY2FsIFdpcmVzDQorLy8NCisgDQorcmVnCVthdy0xOjBdCXdwOw0KK3dpcmUJW2F3LTE6MF0Jd3BfcGwxOw0KK3dpcmUJW2F3LTE6MF0Jd3BfcGwyOw0KK3JlZwlbYXctMTowXQlycDsNCit3aXJlCVthdy0xOjBdCXJwX3BsMTsNCityZWcJCQlmdWxsX3I7DQorcmVnCQkJZW1wdHlfcjsNCityZWcJCQlnYjsNCityZWcJCQlnYjI7DQorcmVnCVthdzowXQkJY250Ow0KK3dpcmUJCQlmdWxsX24sIGVtcHR5X247DQorcmVnCQkJZnVsbF9uX3IsIGVtcHR5X25fcjsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIE1lbW9yeSBCbG9jaw0KKy8vDQorIA0KK3VzYjFkX2dlbmVyaWNfZHByYW0gICMoYXcsZHcpIHUwKA0KKwkucmNsaygJCWNsawkJKSwNCisJLnJyc3QoCQkhcnN0CQkpLA0KKwkucmNlKAkJMSdiMQkJKSwNCisJLm9lKAkJMSdiMQkJKSwNCisJLnJhZGRyKAkJcnAJCSksDQorCS5kb3V0KAkJZG91dAkJKSwNCisJLndjbGsoCQljbGsJCSksDQorCS53cnN0KAkJIXJzdAkJKSwNCisJLndjZSgJCTEnYjEJCSksDQorCS53ZSgJCXdlCQkpLA0KKwkud2FkZHIoCQl3cAkJKSwNCisJLmRpKAkJZGluCQkpDQorCSk7DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBNaXNjIExvZ2ljDQorLy8NCisgDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCXdwIDw9ICMxIHthd3sxJ2IwfX07DQorCWVsc2UNCisJaWYoY2xyKQkJd3AgPD0gIzEge2F3ezEnYjB9fTsNCisJZWxzZQ0KKwlpZih3ZSkJCXdwIDw9ICMxIHdwX3BsMTsNCisgDQorYXNzaWduIHdwX3BsMSA9IHdwICsgeyB7YXctMXsxJ2IwfX0sIDEnYjF9Ow0KK2Fzc2lnbiB3cF9wbDIgPSB3cCArIHsge2F3LTJ7MSdiMH19LCAyJ2IxMH07DQorIA0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQlycCA8PSAjMSB7YXd7MSdiMH19Ow0KKwllbHNlDQorCWlmKGNscikJCXJwIDw9ICMxIHthd3sxJ2IwfX07DQorCWVsc2UNCisJaWYocmUpCQlycCA8PSAjMSBycF9wbDE7DQorIA0KK2Fzc2lnbiBycF9wbDEgPSBycCArIHsge2F3LTF7MSdiMH19LCAxJ2IxfTsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIENvbWJpbmF0b3JpYWwgRnVsbCAmIEVtcHR5IEZsYWdzDQorLy8NCisgDQorYXNzaWduIGVtcHR5ID0gKCh3cCA9PSBycCkgJiAhZ2IpOw0KK2Fzc2lnbiBmdWxsICA9ICgod3AgPT0gcnApICYgIGdiKTsNCisgDQorLy8gR3VhcmQgQml0IC4uLg0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQkJCWdiIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYoY2xyKQkJCQlnYiA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKCh3cF9wbDEgPT0gcnApICYgd2UpCQlnYiA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKHJlKQkJCQlnYiA8PSAjMSAxJ2IwOw0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gUmVnaXN0ZXJlZCBGdWxsICYgRW1wdHkgRmxhZ3MNCisvLw0KKyANCisvLyBHdWFyZCBCaXQgLi4uDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCQkJZ2IyIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYoY2xyKQkJCQlnYjIgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZigod3BfcGwyID09IHJwKSAmIHdlKQkJZ2IyIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYoKHdwICE9IHJwKSAmIHJlKQkJZ2IyIDw9ICMxIDEnYjA7DQorIA0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQkJCQlmdWxsX3IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZihjbHIpCQkJCQlmdWxsX3IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZih3ZSAmICgod3BfcGwxID09IHJwKSAmIGdiMikgJiAhcmUpCWZ1bGxfciA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKHJlICYgKCh3cF9wbDEgIT0gcnApIHwgIWdiMikgJiAhd2UpCWZ1bGxfciA8PSAjMSAxJ2IwOw0KKyANCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJCQkJZW1wdHlfciA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKGNscikJCQkJCWVtcHR5X3IgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZih3ZSAmICgod3AgIT0gcnBfcGwxKSB8IGdiMikgJiAhcmUpCWVtcHR5X3IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZihyZSAmICgod3AgPT0gcnBfcGwxKSAmICFnYjIpICYgIXdlKQllbXB0eV9yIDw9ICMxIDEnYjE7DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBDb21iaW5hdG9yaWFsIEZ1bGxfbiAmIEVtcHR5X24gRmxhZ3MNCisvLw0KKyANCithc3NpZ24gZW1wdHlfbiA9IGNudCA8IG47DQorYXNzaWduIGZ1bGxfbiAgPSAhKGNudCA8IChtYXhfc2l6ZS1uKzEpKTsNCithc3NpZ24gbGV2ZWwgPSB7MntjbnRbYXddfX0gfCBjbnRbYXctMTphdy0yXTsNCisgDQorLy8gTiBlbnRyaWVzIHN0YXR1cw0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQljbnQgPD0gIzEge2F3KzF7MSdiMH19Ow0KKwllbHNlDQorCWlmKGNscikJCWNudCA8PSAjMSB7YXcrMXsxJ2IwfX07DQorCWVsc2UNCisJaWYoIHJlICYgIXdlKQljbnQgPD0gIzEgY250ICsgeyB7YXd7MSdiMX19LCAxJ2IxfTsNCisJZWxzZQ0KKwlpZighcmUgJiAgd2UpCWNudCA8PSAjMSBjbnQgKyB7IHthd3sxJ2IwfX0sIDEnYjF9Ow0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gUmVnaXN0ZXJlZCBGdWxsX24gJiBFbXB0eV9uIEZsYWdzDQorLy8NCisgDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCQkJCWVtcHR5X25fciA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKGNscikJCQkJCWVtcHR5X25fciA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKHdlICYgKGNudCA+PSAobi0xKSApICYgIXJlKQkJZW1wdHlfbl9yIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYocmUgJiAoY250IDw9IG4gKSAmICF3ZSkJCWVtcHR5X25fciA8PSAjMSAxJ2IxOw0KKyANCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJCQkJZnVsbF9uX3IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZihjbHIpCQkJCQlmdWxsX25fciA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKHdlICYgKGNudCA+PSAobWF4X3NpemUtbikgKSAmICFyZSkJZnVsbF9uX3IgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZihyZSAmIChjbnQgPD0gKG1heF9zaXplLW4rMSkpICYgIXdlKQlmdWxsX25fciA8PSAjMSAxJ2IwOw0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gU2FuaXR5IENoZWNrDQorLy8NCisgDQorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZg0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQ0KKwlpZih3ZSAmIGZ1bGwpDQorCQkkZGlzcGxheSgiJW0gV0FSTklORzogV3JpdGluZyB3aGlsZSBmaWZvIGlzIEZVTEwgKCV0KSIsJHRpbWUpOw0KKyANCithbHdheXMgQChwb3NlZGdlIGNsaykNCisJaWYocmUgJiBlbXB0eSkNCisJCSRkaXNwbGF5KCIlbSBXQVJOSU5HOiBSZWFkaW5nIHdoaWxlIGZpZm8gaXMgRU1QVFkgKCV0KSIsJHRpbWUpOw0KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbg0KKyANCitlbmRtb2R1bGUNCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfaWRtYS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2lkbWEudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTYyMDdjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2lkbWEudgpAQCAtMCwwICsxLDM4NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEludGVybmFsIERNQSBFbmdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9pZG1hLnYsdiAxLjIgMjAwMi0wOS0yNSAwNjowNjo0OSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTI1IDA2OjA2OjQ5ICQKKy8vICAkUmV2aXNpb246IDEuMiAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTkgMTI6MDc6MzggIHJ1ZGkKKy8vICAgICAgICAgICAgICAgSW5pdGlhbCBDaGVja2luCisvLworLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF9pZG1hKAljbGssIHJzdCwKKworCQkvLyBQYWNrZXQgRGlzYXNzZW1ibGVyL0Fzc2VtYmxlciBpbnRlcmZhY2UKKwkJcnhfZGF0YV92YWxpZCwKKwkJcnhfZGF0YV9kb25lLCAKKwkJc2VuZF9kYXRhLAorCQlyZF9uZXh0LAorCisJCXR4X3ZhbGlkLAorCQl0eF9kYXRhX3N0X2ksCisJCXR4X2RhdGFfc3RfbywKKworCQkvLyBQcm90b2NvbCBFbmdpbmUKKwkJdHhfZG1hX2VuLCByeF9kbWFfZW4sIGlkbWFfZG9uZSwKKwkJZXBfc2VsLAorCisJCS8vIFJlZ2lzdGVyIEZpbGUgTWFuYWdlciBJbnRlcmZhY2UKKwkJc2l6ZSwKKwkJcnhfY250LCByeF9kb25lLAorCQl0eF9idXN5LAorCisJCS8vIEJsb2NrIEZyYW1lcworCQllcF9iZl9lbiwgZXBfYmZfc2l6ZSwKKwkJZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZSwKKworCQkvLyBNZW1vcnkgQXJiIGludGVyZmFjZQorCQltd2UsIG1yZSwgZXBfZW1wdHksIGVwX2VtcHR5X2ludCwgZXBfZnVsbAorCQkpOworCisKKy8vIFBhY2tldCBEaXNhc3NlbWJsZXIvQXNzZW1ibGVyIGludGVyZmFjZQoraW5wdXQJCWNsaywgcnN0OworaW5wdXQJCXJ4X2RhdGFfdmFsaWQ7CitpbnB1dAkJcnhfZGF0YV9kb25lOworb3V0cHV0CQlzZW5kX2RhdGE7CitpbnB1dAkJcmRfbmV4dDsKKworaW5wdXQJCXR4X3ZhbGlkOworaW5wdXQJWzc6MF0JdHhfZGF0YV9zdF9pOworb3V0cHV0CVs3OjBdCXR4X2RhdGFfc3RfbzsKKworLy8gUHJvdG9jb2wgRW5naW5lCitpbnB1dAkJdHhfZG1hX2VuOworaW5wdXQJCXJ4X2RtYV9lbjsKK291dHB1dAkJaWRtYV9kb25lOwkvLyBETUEgaXMgZG9uZQoraW5wdXQJWzM6MF0JZXBfc2VsOworCisvLyBSZWdpc3RlciBGaWxlIE1hbmFnZXIgSW50ZXJmYWNlCitpbnB1dAlbODowXQlzaXplOwkJLy8gTUFYIFBMIFNpemUgaW4gYnl0ZXMKK291dHB1dAlbNzowXQlyeF9jbnQ7CitvdXRwdXQJCXJ4X2RvbmU7CitvdXRwdXQJCXR4X2J1c3k7CisKK2lucHV0CQllcF9iZl9lbjsKK2lucHV0CVs2OjBdCWVwX2JmX3NpemU7CitvdXRwdXQJCWRyb3BwZWRfZnJhbWU7CitvdXRwdXQJCW1pc2FsaWduZWRfZnJhbWU7CisKKy8vIE1lbW9yeSBBcmIgaW50ZXJmYWNlCitvdXRwdXQJCW13ZTsKK291dHB1dAkJbXJlOworaW5wdXQJCWVwX2VtcHR5Oworb3V0cHV0CQllcF9lbXB0eV9pbnQ7CitpbnB1dAkJZXBfZnVsbDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3JlZwkJdHhfZG1hX2VuX3I7CityZWcJWzg6MF0Jc2l6ZF9jOwkJCS8vIEludGVybmFsIHNpemUgY291bnRlcgord2lyZQkJYWRyX2luY3c7Cit3aXJlCQlhZHJfaW5jYjsKK3dpcmUJCXNpel9kZWM7Cit3aXJlCQltd2U7CQkJLy8gTWVtb3J5IFdyaXRlIGVuYWJsZQord2lyZQkJbXJlOwkJCS8vIE1lbW9yeSBSZWFkIGVuYWJsZQorcmVnCQltd2VfcjsKK3JlZwkJc2l6ZF9pc196ZXJvOwkJLy8gSW5kaWNhdGVzIHdoZW4gYWxsIGJ5dGVzIGhhdmUgYmVlbgorCQkJCQkvLyB0cmFuc2ZlcnJlZAord2lyZQkJc2l6ZF9pc196ZXJvX2Q7CityZWcJCWlkbWFfZG9uZTsJCS8vIERNQSB0cmFuc2ZlciBpcyBkb25lCit3aXJlCQlzZW5kX2RhdGE7CQkvLyBFbmFibGUgVVRNSSBUcmFuc21pdHRlcgorcmVnCQlyeF9kYXRhX2RvbmVfcjsKK3JlZwkJcnhfZGF0YV92YWxpZF9yOword2lyZQkJZmZfcmUsIGZmX2Z1bGwsIGZmX2VtcHR5OworcmVnCQlmZl93ZSwgZmZfd2UxOworcmVnCQl0eF9kbWFfZW5fcjE7CityZWcJCXR4X2RtYV9lbl9yMjsKK3JlZwkJdHhfZG1hX2VuX3IzOworcmVnCQlzZW5kX2RhdGFfcjsKK3dpcmUJCWZmX2NscjsKK3JlZwlbNzowXQlyeF9jbnQ7CityZWcJWzc6MF0JcnhfY250X3I7CityZWcJCWVwX2VtcHR5X3I7CityZWcJCWVwX2VtcHR5X2xhdGNoZWQ7Cit3aXJlCQllcF9lbXB0eV9pbnQ7CityZWcJWzY6MF0JZWM7Cit3aXJlCQllY19jbHI7CityZWcJCWRyb3BwZWRfZnJhbWU7CityZWcJWzY6MF0JcmNfY250Oword2lyZQkJcmNfY2xyOworcmVnCQllcF9mdWxsX2xhdGNoZWQ7Cit3aXJlCQllcF9mdWxsX2ludDsKK3JlZwkJbWlzYWxpZ25lZF9mcmFtZTsKK3JlZwkJdHhfdmFsaWRfcjsKK3dpcmUJCXR4X3ZhbGlkX2U7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGb3IgSU4gQmxvY2sgRnJhbWVzIHRyYW5zbWl0IGZyYW1lcyBpbiBbZXBfYmZfc2l6ZV0gYnl0ZSBxdWFudGl0aWVzCisvLworCitgaWZkZWYgVVNCMV9CRl9FTkFCTEUKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJCWVjIDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKCFlcF9iZl9lbiB8IGVjX2NscikJZWMgPD0gIzEgNydoMDsKKwllbHNlCisJaWYobXJlKQkJCWVjIDw9ICMxIGVjICsgNydoMTsKKworYXNzaWduIGVjX2NsciA9IChlYyA9PSBlcF9iZl9zaXplKSB8IHR4X2RtYV9lbjsgCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCWVwX2VtcHR5X2xhdGNoZWQgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoZWNfY2xyKQllcF9lbXB0eV9sYXRjaGVkIDw9ICMxIGVwX2VtcHR5OworCithc3NpZ24gZXBfZW1wdHlfaW50ID0gZXBfYmZfZW4gPyBlcF9lbXB0eV9sYXRjaGVkIDogZXBfZW1wdHk7CitgZWxzZQorYXNzaWduIGVwX2VtcHR5X2ludCA9IGVwX2VtcHR5OworYGVuZGlmCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRm9yIE9VVCBCbG9jayBGcmFtZXMgYWx3YXlzIHN0b3JlIGluIFtlcF9iZl9zaXplXSBieXRlIGNodW5rcworLy8gaWYgZmlmbyBjYW4ndCBhY2NlcHQgW2VwX2JmX3NpemVdIGJ5dGVzIGp1bmsgdGhlIGVudGlyZSBbZXBfYmZfc2l6ZV0KKy8vIGJ5dGUgZnJhbWUKKy8vCisKK2BpZmRlZiBVU0IxX0JGX0VOQUJMRQorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJCXJjX2NudCA8PSAjMSA3J2gwOworCWVsc2UKKwlpZighZXBfYmZfZW4gfCByY19jbHIpCXJjX2NudCA8PSAjMSA3J2gwOworCWVsc2UKKwlpZihtd2VfcikJCXJjX2NudCA8PSAjMSByY19jbnQgKyA3J2gxOworCithc3NpZ24gcmNfY2xyID0gKChyY19jbnQgPT0gZXBfYmZfc2l6ZSkgJiBtd2VfcikgfCByeF9kbWFfZW47IAorCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQllcF9mdWxsX2xhdGNoZWQgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYocmNfY2xyKQllcF9mdWxsX2xhdGNoZWQgPD0gIzEgZXBfZnVsbDsKKworYXNzaWduIGVwX2Z1bGxfaW50ID0gZXBfYmZfZW4gPyBlcF9mdWxsX2xhdGNoZWQgOiBlcF9mdWxsOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlkcm9wcGVkX2ZyYW1lIDw9ICMxIHJjX2NsciAmIGVwX2Z1bGwgJiBlcF9iZl9lbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJbWlzYWxpZ25lZF9mcmFtZSA8PSAjMSByeF9kYXRhX2RvbmVfciAmIGVwX2JmX2VuICYgKHJjX2NudCE9NydkMDApOworYGVsc2UKK2Fzc2lnbiBlcF9mdWxsX2ludCA9IGVwX2Z1bGw7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWRyb3BwZWRfZnJhbWUgPD0gIzEgMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJbWlzYWxpZ25lZF9mcmFtZSA8PSAjMSAxJ2IwOworCitgZW5kaWYKKworLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworYWx3YXlzIEAocG9zZWRnZSBkcm9wcGVkX2ZyYW1lKQorCSRkaXNwbGF5KCJXQVJOSU5HOiBCRjogRHJvcGVkIG9uZSBPVVQgZnJhbWUgKG5vIHNwYWNlIGluIEZJRk8pICgldCkiLCR0aW1lKTsKKworYWx3YXlzIEAocG9zZWRnZSBtaXNhbGlnbmVkX2ZyYW1lKQorCSRkaXNwbGF5KCJXQVJOSU5HOiBCRjogUmVjZWl2ZWQgbWlzYWxpZ25lZCBmcmFtZSAoJXQpIiwkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRklGTyBpbnRlcmZhY2UKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCW13ZV9yIDw9ICMxIHJ4X2RhdGFfdmFsaWQ7CisKK2Fzc2lnbiBtd2UgPSBtd2VfciAmICFlcF9mdWxsX2ludDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJ4X2RhdGFfdmFsaWRfciA8PSAjMSByeF9kYXRhX3ZhbGlkOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyeF9kYXRhX2RvbmVfciA8PSAjMSByeF9kYXRhX2RvbmU7CisKKy8vIEdlbmVyYXRlIG9uZSBjeWNsZSBwdWxzZXMgZm9yIHR4IGFuZCByeCBkbWEgZW5hYmxlCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF9kbWFfZW5fciA8PSAjMSB0eF9kbWFfZW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X2RtYV9lbl9yMSA8PSB0eF9kbWFfZW5fcjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfZG1hX2VuX3IyIDw9IHR4X2RtYV9lbl9yMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfZG1hX2VuX3IzIDw9IHR4X2RtYV9lbl9yMjsKKworLy8gRE1BIERvbmUgSW5kaWNhdG9yCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZG1hX2RvbmUgPD0gIzEgKHJ4X2RhdGFfZG9uZV9yIHwgc2l6ZF9pc196ZXJvX2QgfCBlcF9lbXB0eV9pbnQpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUlggU2l6ZSBDb3VudGVyCisvLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCXJ4X2NudF9yIDw9ICMxIDgnaDAwOworCWVsc2UKKwlpZihyeF9kYXRhX2RvbmVfcikJCXJ4X2NudF9yIDw9ICMxIDgnaDAwOworCWVsc2UKKwlpZihyeF9kYXRhX3ZhbGlkKQkJcnhfY250X3IgPD0gIzEgcnhfY250X3IgKyA4J2gwMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCXJ4X2NudCA8PSAjMSA4J2gwMDsKKwllbHNlCisJaWYocnhfZGF0YV9kb25lX3IpCXJ4X2NudCA8PSAjMSByeF9jbnRfcjsKKworYXNzaWduIHJ4X2RvbmUgPSByeF9kYXRhX2RvbmVfcjsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRyYW5zbWl0IFNpemUgQ291bnRlciAoY291bnRpbmcgYmFja3dhcmQgZnJvbSBpbnB1dCBzaXplKQorLy8gRm9yIE1BWCBwYWNrZXQgc2l6ZQorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQlzaXpkX2MgPD0gIzEgOSdoMWZmOworCWVsc2UKKwlpZih0eF9kbWFfZW4pCQkJc2l6ZF9jIDw9ICMxIHNpemU7CisJZWxzZQorCWlmKHNpel9kZWMpCQkJc2l6ZF9jIDw9ICMxIHNpemRfYyAtIDknaDE7CisKK2Fzc2lnbiBzaXpfZGVjID0gKHR4X2RtYV9lbl9yIHwgdHhfZG1hX2VuX3IxIHwgcmRfbmV4dCkgJiAhc2l6ZF9pc196ZXJvX2Q7CisKK2Fzc2lnbiBzaXpkX2lzX3plcm9fZCA9IHNpemRfYyA9PSA5J2gwOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzaXpkX2lzX3plcm8gPD0gIzEgc2l6ZF9pc196ZXJvX2Q7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUWCBMb2dpYworLy8KKworYXNzaWduIHR4X2J1c3kgPSBzZW5kX2RhdGEgfCB0eF9kbWFfZW5fciB8IHR4X2RtYV9lbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfdmFsaWRfciA8PSAjMSB0eF92YWxpZDsKKworYXNzaWduIHR4X3ZhbGlkX2UgPSB0eF92YWxpZF9yICYgIXR4X3ZhbGlkOworCisvLyBTaW5jZSB3ZSBhcmUgcHJlZmV0Y2hpbmcgdHdvIGVudHJpZXMgaW4gdG8gb3VyIGZhc3QgZmlmbywgd2UKKy8vIG5lZWQgdG8ga25vdyB3aGVuIGV4YWN0bHkgZXBfZW1wdHkgd2FzIGFzc2VydGVkLCBhcyB3ZSBtaWdodAorLy8gb25seSBuZWVkIDEgb3IgMiBieXRlcy4gVGhpcyBpcyBmb3IgZXBfZW1wdHlfcgorCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcF9lbXB0eV9yIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKCF0eF92YWxpZCkJCQkJZXBfZW1wdHlfciA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZih0eF9kbWFfZW5fcjIpCQkJZXBfZW1wdHlfciA8PSAjMSBlcF9lbXB0eV9pbnQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCXNlbmRfZGF0YV9yIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKCh0eF9kbWFfZW5fciAmICFlcF9lbXB0eV9pbnQpKQkJc2VuZF9kYXRhX3IgPD0gIzEgMSdiMTsKKwllbHNlCisJaWYocmRfbmV4dCAmIChzaXpkX2lzX3plcm9fZCB8IChlcF9lbXB0eV9pbnQgJiAhc2l6ZF9pc196ZXJvX2QpKSApCisJCQkJCQlzZW5kX2RhdGFfciA8PSAjMSAxJ2IwOworCithc3NpZ24gc2VuZF9kYXRhID0gKHNlbmRfZGF0YV9yICYgIWVwX2VtcHR5X3IgJiAKKwkJIShzaXpkX2lzX3plcm8gJiBzaXplPT05J2gwMSkpIHwgdHhfZG1hX2VuX3IxOworCithc3NpZ24gbXJlID0gKHR4X2RtYV9lbl9yMSB8IHR4X2RtYV9lbl9yIHwgcmRfbmV4dCkgJgorCQkhc2l6ZF9pc196ZXJvX2QgJiAhZXBfZW1wdHlfaW50ICYgKHNlbmRfZGF0YSB8IHR4X2RtYV9lbl9yMSB8IHR4X2RtYV9lbl9yKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZmZfd2UxIDw9IG1yZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZmZfd2UgPD0gZmZfd2UxOworCithc3NpZ24gZmZfcmUgPSByZF9uZXh0OworCithc3NpZ24gZmZfY2xyID0gIXR4X3ZhbGlkOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gSURNQSBmYXN0IHByZWZldGNoIGZpZm8KKy8vCisKKy8vIHR4IGZpZm8KK3VzYjFkX2ZpZm8yIGZmKAorCS5jbGsoCQljbGsJCSksCisJLnJzdCgJCXJzdAkJKSwKKwkuY2xyKAkJZmZfY2xyCQkpLAorCS5kaW4oCQl0eF9kYXRhX3N0X2kJKSwKKwkud2UoCQlmZl93ZQkJKSwKKwkuZG91dCgJCXR4X2RhdGFfc3RfbwkpLAorCS5yZSgJCWZmX3JlCQkpCisJKTsKKworZW5kbW9kdWxlCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BhLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGEudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YmI3MGRlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BhLnYKQEAgLTAsMCArMSwzMzIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQYWNrZXQgQXNzZW1ibGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEFzc2VtYmxlcyBUb2tlbiBhbmQgRGF0YSBVU0IgcGFja2V0cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfcGEudix2IDEuMS4xLjEgMjAwMi0wOS0xOSAxMjowNzoxMyBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTE5IDEyOjA3OjEzICQKKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8KKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfcGEoCWNsaywgcnN0LAorCisJCS8vIFVUTUkgVFggSS9GCisJCXR4X2RhdGEsIHR4X3ZhbGlkLCB0eF92YWxpZF9sYXN0LCB0eF9yZWFkeSwKKwkJdHhfZmlyc3QsCisKKwkJLy8gUHJvdG9jb2wgRW5naW5lIEludGVyZmFjZQorCQlzZW5kX3Rva2VuLCB0b2tlbl9waWRfc2VsLAorCQlzZW5kX2RhdGEsIGRhdGFfcGlkX3NlbCwKKworCQkvLyBJRE1BIEludGVyZmFjZQorCQl0eF9kYXRhX3N0LCByZF9uZXh0LAorCisJCWVwX2VtcHR5CisJCSk7CisKK2lucHV0CQljbGssIHJzdDsKKworLy8gVVRNSSBUWCBJbnRlcmZhY2UKK291dHB1dAlbNzowXQl0eF9kYXRhOworb3V0cHV0CQl0eF92YWxpZDsKK291dHB1dAkJdHhfdmFsaWRfbGFzdDsKK2lucHV0CQl0eF9yZWFkeTsKK291dHB1dAkJdHhfZmlyc3Q7CisKKy8vIFByb3RvY29sIEVuZ2luZSBJbnRlcmZhY2UKK2lucHV0CQlzZW5kX3Rva2VuOworaW5wdXQJWzE6MF0JdG9rZW5fcGlkX3NlbDsKK2lucHV0CQlzZW5kX2RhdGE7CitpbnB1dAlbMTowXQlkYXRhX3BpZF9zZWw7CisKKy8vIElETUEgSW50ZXJmYWNlCitpbnB1dAlbNzowXQl0eF9kYXRhX3N0Oworb3V0cHV0CQlyZF9uZXh0OworCitpbnB1dAkJZXBfZW1wdHk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCitwYXJhbWV0ZXIJWzM6MF0JLy8gc3lub3BzeXMgZW51bSBzdGF0ZQorCQlJRExFICAgPSA0J2IwMDAxLAorCQlEQVRBICAgPSA0J2IwMDEwLAorCQlDUkMxICAgPSA0J2IwMTAwLAorCQlDUkMyICAgPSA0J2IxMDAwOworCityZWcJWzM6MF0JLyogc3lub3BzeXMgZW51bSBzdGF0ZSAqLyBzdGF0ZSwgbmV4dF9zdGF0ZTsKKy8vIHN5bm9wc3lzIHN0YXRlX3ZlY3RvciBzdGF0ZQorCityZWcJCWxhc3Q7CityZWcJCXJkX25leHQ7CisKK3JlZwlbNzowXQl0b2tlbl9waWQsIGRhdGFfcGlkOwkvLyBQSURzIGZyb20gc2VsZWN0b3JzCityZWcJWzc6MF0JdHhfZGF0YV9kOworcmVnCVs3OjBdCXR4X2RhdGFfZGF0YTsKK3JlZwkJZHNlbDsKK3JlZwkJdHhfdmFsaWRfZDsKK3JlZwkJc2VuZF90b2tlbl9yOworcmVnCVs3OjBdCXR4X3NwZWNfZGF0YTsKK3JlZwkJY3JjX3NlbDEsIGNyY19zZWwyOworcmVnCQl0eF9maXJzdF9yOworcmVnCQlzZW5kX2RhdGFfcjsKK3dpcmUJCWNyYzE2X2NscjsKK3JlZwlbMTU6MF0JY3JjMTY7Cit3aXJlCVsxNTowXQljcmMxNl9uZXh0Oword2lyZQlbMTU6MF0JY3JjMTZfcmV2OworcmVnCQljcmMxNl9hZGQ7CityZWcJCXNlbmRfZGF0YV9yMjsKK3JlZwkJdHhfdmFsaWRfcjsKK3JlZwkJdHhfdmFsaWRfcjE7CisKK3dpcmUJCXplcm9fbGVuZ3RoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KK3JlZwkJemVyb19sZW5ndGhfcjsKK2Fzc2lnbgkJemVyb19sZW5ndGggPSBlcF9lbXB0eTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJemVyb19sZW5ndGhfciA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihsYXN0KQl6ZXJvX2xlbmd0aF9yIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKGNyYzE2X2NscikJemVyb19sZW5ndGhfciA8PSAjMSB6ZXJvX2xlbmd0aDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfdmFsaWRfcjEgPD0gIzEgdHhfdmFsaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X3ZhbGlkX3IgPD0gIzEgdHhfdmFsaWRfcjE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXNlbmRfdG9rZW5fciA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihzZW5kX3Rva2VuKQlzZW5kX3Rva2VuX3IgPD0gIzEgMSdiMTsKKwllbHNlCisJaWYodHhfcmVhZHkpCXNlbmRfdG9rZW5fciA8PSAjMSAxJ2IwOworCisvLyBQSUQgU2VsZWN0CithbHdheXMgQCh0b2tlbl9waWRfc2VsKQorCWNhc2UodG9rZW5fcGlkX3NlbCkJCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgMidkMDogdG9rZW5fcGlkID0geyAgfmBVU0JGX1RfUElEX0FDSywgICBgVVNCRl9UX1BJRF9BQ0t9OworCSAgIDInZDE6IHRva2VuX3BpZCA9IHsgfmBVU0JGX1RfUElEX05BQ0ssICBgVVNCRl9UX1BJRF9OQUNLfTsKKwkgICAyJ2QyOiB0b2tlbl9waWQgPSB7fmBVU0JGX1RfUElEX1NUQUxMLCBgVVNCRl9UX1BJRF9TVEFMTH07CisJICAgMidkMzogdG9rZW5fcGlkID0geyB+YFVTQkZfVF9QSURfTllFVCwgIGBVU0JGX1RfUElEX05ZRVR9OworCWVuZGNhc2UKKworYWx3YXlzIEAoZGF0YV9waWRfc2VsKQorCWNhc2UoZGF0YV9waWRfc2VsKQkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICAyJ2QwOiBkYXRhX3BpZCA9IHsgfmBVU0JGX1RfUElEX0RBVEEwLCBgVVNCRl9UX1BJRF9EQVRBMH07CisJICAgMidkMTogZGF0YV9waWQgPSB7IH5gVVNCRl9UX1BJRF9EQVRBMSwgYFVTQkZfVF9QSURfREFUQTF9OworCSAgIDInZDI6IGRhdGFfcGlkID0geyB+YFVTQkZfVF9QSURfREFUQTIsIGBVU0JGX1RfUElEX0RBVEEyfTsKKwkgICAyJ2QzOiBkYXRhX3BpZCA9IHsgfmBVU0JGX1RfUElEX01EQVRBLCBgVVNCRl9UX1BJRF9NREFUQX07CisJZW5kY2FzZQorCisvLyBEYXRhIHBhdGggTXV4ZXMKKworYWx3YXlzIEAoc2VuZF90b2tlbiBvciBzZW5kX3Rva2VuX3Igb3IgdG9rZW5fcGlkIG9yIHR4X2RhdGFfZGF0YSkKKwlpZihzZW5kX3Rva2VuIHwgc2VuZF90b2tlbl9yKQl0eF9kYXRhX2QgPSB0b2tlbl9waWQ7CisJZWxzZQkJCQl0eF9kYXRhX2QgPSB0eF9kYXRhX2RhdGE7CisKK2Fsd2F5cyBAKGRzZWwgb3IgdHhfZGF0YV9zdCBvciB0eF9zcGVjX2RhdGEpCisJaWYoZHNlbCkJdHhfZGF0YV9kYXRhID0gdHhfc3BlY19kYXRhOworCWVsc2UJCXR4X2RhdGFfZGF0YSA9IHR4X2RhdGFfc3Q7CisKK2Fsd2F5cyBAKGNyY19zZWwxIG9yIGNyY19zZWwyIG9yIGRhdGFfcGlkIG9yIGNyYzE2X3JldikKKwlpZighY3JjX3NlbDEgJiAhY3JjX3NlbDIpCXR4X3NwZWNfZGF0YSA9IGRhdGFfcGlkOworCWVsc2UKKwlpZihjcmNfc2VsMSkJCQl0eF9zcGVjX2RhdGEgPSBjcmMxNl9yZXZbMTU6OF07CS8vIENSQyAxCisJZWxzZQkJCQl0eF9zcGVjX2RhdGEgPSBjcmMxNl9yZXZbNzowXTsJLy8gQ1JDIDIKKworYXNzaWduIHR4X2RhdGEgPSB0eF9kYXRhX2Q7CisKKy8vIFRYIFZhbGlkIGFzc2lnbm1lbnQKK2Fzc2lnbiB0eF92YWxpZF9sYXN0ID0gc2VuZF90b2tlbiB8IGxhc3Q7Cithc3NpZ24gdHhfdmFsaWQgPSB0eF92YWxpZF9kOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF9maXJzdF9yIDw9ICMxIHNlbmRfdG9rZW4gfCBzZW5kX2RhdGE7CisKK2Fzc2lnbiB0eF9maXJzdCA9IChzZW5kX3Rva2VuIHwgc2VuZF9kYXRhKSAmICEgdHhfZmlyc3RfcjsKKworLy8gQ1JDIExvZ2ljCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZW5kX2RhdGFfciA8PSAjMSBzZW5kX2RhdGE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNlbmRfZGF0YV9yMiA8PSAjMSBzZW5kX2RhdGFfcjsKKworYXNzaWduIGNyYzE2X2NsciA9IHNlbmRfZGF0YSAmICFzZW5kX2RhdGFfcjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY3JjMTZfYWRkIDw9ICMxICF6ZXJvX2xlbmd0aF9yICYKKwkJCSgoc2VuZF9kYXRhX3IgJiAhc2VuZF9kYXRhX3IyKSB8IChyZF9uZXh0ICYgIWNyY19zZWwxKSk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGNyYzE2X2NscikJCWNyYzE2IDw9ICMxIDE2J2hmZmZmOworCWVsc2UKKwlpZihjcmMxNl9hZGQpCQljcmMxNiA8PSAjMSBjcmMxNl9uZXh0OworCit1c2IxZF9jcmMxNiB1MSgKKwkuY3JjX2luKAljcmMxNgkJKSwKKwkuZGluKAl7dHhfZGF0YV9zdFswXSwgdHhfZGF0YV9zdFsxXSwKKwkJdHhfZGF0YV9zdFsyXSwgdHhfZGF0YV9zdFszXSwKKwkJdHhfZGF0YV9zdFs0XSwgdHhfZGF0YV9zdFs1XSwKKwkJdHhfZGF0YV9zdFs2XSwgdHhfZGF0YV9zdFs3XX0JKSwKKwkuY3JjX291dCgJY3JjMTZfbmV4dAkJKSApOworCithc3NpZ24gY3JjMTZfcmV2WzE1XSA9IH5jcmMxNls4XTsKK2Fzc2lnbiBjcmMxNl9yZXZbMTRdID0gfmNyYzE2WzldOworYXNzaWduIGNyYzE2X3JldlsxM10gPSB+Y3JjMTZbMTBdOworYXNzaWduIGNyYzE2X3JldlsxMl0gPSB+Y3JjMTZbMTFdOworYXNzaWduIGNyYzE2X3JldlsxMV0gPSB+Y3JjMTZbMTJdOworYXNzaWduIGNyYzE2X3JldlsxMF0gPSB+Y3JjMTZbMTNdOworYXNzaWduIGNyYzE2X3Jldls5XSAgPSB+Y3JjMTZbMTRdOworYXNzaWduIGNyYzE2X3Jldls4XSAgPSB+Y3JjMTZbMTVdOworYXNzaWduIGNyYzE2X3Jldls3XSAgPSB+Y3JjMTZbMF07Cithc3NpZ24gY3JjMTZfcmV2WzZdICA9IH5jcmMxNlsxXTsKK2Fzc2lnbiBjcmMxNl9yZXZbNV0gID0gfmNyYzE2WzJdOworYXNzaWduIGNyYzE2X3Jldls0XSAgPSB+Y3JjMTZbM107Cithc3NpZ24gY3JjMTZfcmV2WzNdICA9IH5jcmMxNls0XTsKK2Fzc2lnbiBjcmMxNl9yZXZbMl0gID0gfmNyYzE2WzVdOworYXNzaWduIGNyYzE2X3JldlsxXSAgPSB+Y3JjMTZbNl07Cithc3NpZ24gY3JjMTZfcmV2WzBdICA9IH5jcmMxNls3XTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRyYW5zbWl0L0VuY29kZSBzdGF0ZSBtYWNoaW5lCisvLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlzdGF0ZSA8PSAjMSBJRExFOworCWVsc2UJCXN0YXRlIDw9ICMxIG5leHRfc3RhdGU7CisKK2Fsd2F5cyBAKHN0YXRlIG9yIHNlbmRfZGF0YSBvciB0eF9yZWFkeSBvciB0eF92YWxpZF9yIG9yIHplcm9fbGVuZ3RoKQorICAgYmVnaW4KKwluZXh0X3N0YXRlID0gc3RhdGU7CS8vIERlZmF1bHQgZG9uJ3QgY2hhbmdlIGN1cnJlbnQgc3RhdGUKKwl0eF92YWxpZF9kID0gMSdiMDsKKwlkc2VsID0gMSdiMDsKKwlyZF9uZXh0ID0gMSdiMDsKKwlsYXN0ID0gMSdiMDsKKwljcmNfc2VsMSA9IDEnYjA7CisJY3JjX3NlbDIgPSAxJ2IwOworCWNhc2Uoc3RhdGUpCQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIElETEU6CisJCSAgIGJlZ2luCisJCQlpZih6ZXJvX2xlbmd0aCAmIHNlbmRfZGF0YSkKKwkJCSAgIGJlZ2luCisJCQkJdHhfdmFsaWRfZCA9IDEnYjE7CisJCQkJZHNlbCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IENSQzE7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCWlmKHNlbmRfZGF0YSkJCS8vIFNlbmQgREFUQSBwYWNrZXQKKwkJCSAgIGJlZ2luCisJCQkJdHhfdmFsaWRfZCA9IDEnYjE7CisJCQkJZHNlbCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IERBVEE7CisJCQkgICBlbmQKKwkJICAgZW5kCisJICAgREFUQToKKwkJICAgYmVnaW4KKwkJCWlmKHR4X3JlYWR5ICYgdHhfdmFsaWRfcikKKwkJCQlyZF9uZXh0ID0gMSdiMTsKKworCQkJdHhfdmFsaWRfZCA9IDEnYjE7CisJCQlpZighc2VuZF9kYXRhICYgdHhfcmVhZHkgJiB0eF92YWxpZF9yKQorCQkJICAgYmVnaW4KKwkJCQlkc2VsID0gMSdiMTsKKwkJCQljcmNfc2VsMSA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IENSQzE7CisJCQkgICBlbmQKKwkJICAgZW5kCisJICAgQ1JDMToKKwkJICAgYmVnaW4KKwkJCWRzZWwgPSAxJ2IxOworCQkJdHhfdmFsaWRfZCA9IDEnYjE7CisJCQlpZih0eF9yZWFkeSkKKwkJCSAgIGJlZ2luCisJCQkJbGFzdCA9IDEnYjE7CisJCQkJY3JjX3NlbDIgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBDUkMyOworCQkJICAgZW5kCisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCXR4X3ZhbGlkX2QgPSAxJ2IxOworCQkJCWNyY19zZWwxID0gMSdiMTsKKwkJCSAgIGVuZAorCisJCSAgIGVuZAorCSAgIENSQzI6CisJCSAgIGJlZ2luCisJCQlkc2VsID0gMSdiMTsKKwkJCWNyY19zZWwyID0gMSdiMTsKKwkJCWlmKHR4X3JlYWR5KQorCQkJICAgYmVnaW4KKwkJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQlsYXN0ID0gMSdiMTsKKwkJCSAgIGVuZAorCisJCSAgIGVuZAorCWVuZGNhc2UKKyAgIGVuZAorCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BkLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGQudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YjI1NzJiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BkLnYKQEAgLTAsMCArMSwzOTggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQYWNrZXQgRGlzYXNzZW1ibGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERpc2Fzc2VtYmxlcyBUb2tlbiBhbmQgRGF0YSBVU0IgcGFja2V0cyAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfcGQudix2IDEuMiAyMDAyLTA5LTI1IDA2OjA2OjQ5IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMjUgMDY6MDY6NDkgJAorLy8gICRSZXZpc2lvbjogMS4yICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xOSAxMjowNzoxNyAgcnVkaQorLy8gICAgICAgICAgICAgICBJbml0aWFsIENoZWNraW4KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfcGQoCWNsaywgcnN0LAorCisJCS8vIFVUTUkgUlggSS9GCisJCXJ4X2RhdGEsIHJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VyciwKKworCQkvLyBQSUQgSW5mb3JtYXRpb24KKwkJcGlkX09VVCwgcGlkX0lOLCBwaWRfU09GLCBwaWRfU0VUVVAsCisJCXBpZF9EQVRBMCwgcGlkX0RBVEExLCBwaWRfREFUQTIsIHBpZF9NREFUQSwKKwkJcGlkX0FDSywgcGlkX05BQ0ssIHBpZF9TVEFMTCwgcGlkX05ZRVQsCisJCXBpZF9QUkUsIHBpZF9FUlIsIHBpZF9TUExJVCwgcGlkX1BJTkcsCisJCXBpZF9ja3NfZXJyLAorCisJCS8vIFRva2VuIEluZm9ybWF0aW9uCisJCXRva2VuX2ZhZHIsIHRva2VuX2VuZHAsIHRva2VuX3ZhbGlkLCBjcmM1X2VyciwKKwkJZnJhbWVfbm8sCisKKwkJLy8gUmVjZWl2ZSBEYXRhIE91dHB1dAorCQlyeF9kYXRhX3N0LCByeF9kYXRhX3ZhbGlkLCByeF9kYXRhX2RvbmUsIGNyYzE2X2VyciwKKworCQkvLyBNaXNjLgorCQlzZXFfZXJyLCByeF9idXN5CisJCSk7CisKK2lucHV0CQljbGssIHJzdDsKKworCQkvL1VUTUkgUlggSW50ZXJmYWNlCitpbnB1dAlbNzowXQlyeF9kYXRhOworaW5wdXQJCXJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VycjsKKworCQkvLyBEZWNvZGVkIFBJRHMgKHVzZWQgd2hlbiB0b2tlbl92YWxpZCBpcyBhc3NlcnRlZCkKK291dHB1dAkJcGlkX09VVCwgcGlkX0lOLCBwaWRfU09GLCBwaWRfU0VUVVA7CitvdXRwdXQJCXBpZF9EQVRBMCwgcGlkX0RBVEExLCBwaWRfREFUQTIsIHBpZF9NREFUQTsKK291dHB1dAkJcGlkX0FDSywgcGlkX05BQ0ssIHBpZF9TVEFMTCwgcGlkX05ZRVQ7CitvdXRwdXQJCXBpZF9QUkUsIHBpZF9FUlIsIHBpZF9TUExJVCwgcGlkX1BJTkc7CitvdXRwdXQJCXBpZF9ja3NfZXJyOwkJLy8gSW5kaWNhdGVzIGEgUElEIGNoZWNrc3VtIGVycm9yCisKKworb3V0cHV0CVs2OjBdCXRva2VuX2ZhZHI7CQkvLyBGdW5jdGlvbiBhZGRyZXNzIGZyb20gdG9rZW4KK291dHB1dAlbMzowXQl0b2tlbl9lbmRwOwkJLy8gRW5kcG9pbnQgbnVtYmVyIGZyb20gdG9rZW4KK291dHB1dAkJdG9rZW5fdmFsaWQ7CQkvLyBUb2tlbiBpcyB2YWxpZAorb3V0cHV0CQljcmM1X2VycjsJCS8vIFRva2VuIGNyYzUgZXJyb3IKK291dHB1dAlbMTA6MF0JZnJhbWVfbm87CQkvLyBGcmFtZSBudW1iZXIgZm9yIFNPRiB0b2tlbnMKKworb3V0cHV0CVs3OjBdCXJ4X2RhdGFfc3Q7CQkvLyBEYXRhIHRvIG1lbW9yeSBzdG9yZSB1bml0CitvdXRwdXQJCXJ4X2RhdGFfdmFsaWQ7CQkvLyBEYXRhIG9uIHJ4X2RhdGFfc3QgaXMgdmFsaWQKK291dHB1dAkJcnhfZGF0YV9kb25lOwkJLy8gSW5kaWNhdGVzIGVuZCBvZiBhIHRyYW5zZmVyCitvdXRwdXQJCWNyYzE2X2VycjsJCS8vIERhdGEgcGFja2V0IENSQyAxNiBlcnJvcgorCitvdXRwdXQJCXNlcV9lcnI7CQkvLyBTdGF0ZSBNYWNoaW5lIFNlcXVlbmNlIEVycm9yCitvdXRwdXQJCXJ4X2J1c3k7CQkvLyBSZWNlaXZpZyBEYXRhIFBhY2tldAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworcGFyYW1ldGVyCVszOjBdCS8vIHN5bm9wc3lzIGVudW0gc3RhdGUKKwkJSURMRSAgID0gNCdiMDAwMSwKKwkJQUNUSVZFID0gNCdiMDAxMCwKKwkJVE9LRU4gID0gNCdiMDEwMCwKKwkJREFUQSAgID0gNCdiMTAwMDsKKworcmVnCVszOjBdCS8qIHN5bm9wc3lzIGVudW0gc3RhdGUgKi8gc3RhdGUsIG5leHRfc3RhdGU7CisvLyBzeW5vcHN5cyBzdGF0ZV92ZWN0b3Igc3RhdGUKKworcmVnCVs3OjBdCXBpZDsJCQkvLyBQYWNrZXQgUERJCityZWcJCXBpZF9sZV9zbTsJCS8vIFBJRCBMb2FkIGVuYWJsZSBmcm9tIFN0YXRlIE1hY2hpbmUKK3dpcmUJCXBpZF9sZF9lbjsJCS8vIEVuYWJsZSBsb2FkaW5nIG9mIFBJRCAoYWxsIGNvbmRpdGlvbnMpCit3aXJlCQlwaWRfY2tzX2VycjsJCS8vIEluZGljYXRlcyBhIHBpZCBjaGVja3N1bSBlcnIKKworCQkvLyBEZWNvZGVkIFBJRCB2YWx1ZXMKK3dpcmUJCXBpZF9PVVQsIHBpZF9JTiwgcGlkX1NPRiwgcGlkX1NFVFVQOword2lyZQkJcGlkX0RBVEEwLCBwaWRfREFUQTEsIHBpZF9EQVRBMiwgcGlkX01EQVRBOword2lyZQkJcGlkX0FDSywgcGlkX05BQ0ssIHBpZF9TVEFMTCwgcGlkX05ZRVQ7Cit3aXJlCQlwaWRfUFJFLCBwaWRfRVJSLCBwaWRfU1BMSVQsIHBpZF9QSU5HLCBwaWRfUkVTOword2lyZQkJcGlkX1RPS0VOOwkJLy8gQWxsIFRPS0VOIHBhY2tldCB0aGF0IHdlIHJlY29nbml6ZQord2lyZQkJcGlkX0RBVEE7CQkvLyBBbGwgREFUQSBwYWNrZXRzIHRoYXQgd2UgcmVjb2duaXplCisKK3JlZwlbNzowXQl0b2tlbjAsIHRva2VuMTsJCS8vIFRva2VuIFJlZ2lzdGVycworcmVnCQl0b2tlbl9sZV8xLCB0b2tlbl9sZV8yOwkvLyBMYXRjaCBlbmFibGVzIGZvciB0b2tlbiBzdG9yYWdlIHJlZ2lzdGVycword2lyZQlbNDowXQl0b2tlbl9jcmM1OworCityZWcJWzc6MF0JZDAsIGQxLCBkMjsJCS8vIERhdGEgcGF0aCBkZWxheSBsaW5lICh1c2VkIHRvIGZpbHRlciBvdXQgY3JjcykKK3JlZwkJZGF0YV92YWxpZF9kOwkJLy8gRGF0YSBWYWxpZCBvdXRwdXQgZnJvbSBTdGF0ZSBNYWNoaW5lCityZWcJCWRhdGFfZG9uZTsJCS8vIERhdGEgY3ljbGUgY29tcGxldGUgb3V0cHV0IGZyb20gU3RhdGUgTWFjaGluZQorcmVnCQlkYXRhX3ZhbGlkMDsgCQkvLyBEYXRhIHZhbGlkIGRlbGF5IGxpbmUKK3JlZwkJcnh2MTsKK3JlZwkJcnh2MjsKKworcmVnCQlzZXFfZXJyOwkJLy8gU3RhdGUgbWFjaGluZSBzZXF1ZW5jZSBlcnJvcgorCityZWcJCXBpZF9hY2s7CisKK3JlZwkJdG9rZW5fdmFsaWRfcjE7CityZWcJCXRva2VuX3ZhbGlkX3N0cjEsIHRva2VuX3ZhbGlkX3N0cjI7CisKK3JlZwkJcnhfYWN0aXZlX3I7CisKK3dpcmUJWzQ6MF0JY3JjNV9vdXQ7Cit3aXJlCVs0OjBdCWNyYzVfb3V0MjsKK3dpcmUJCWNyYzE2X2NscjsKK3JlZwlbMTU6MF0JY3JjMTZfc3VtOword2lyZQlbMTU6MF0JY3JjMTZfb3V0OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworcmVnCXJ4X2J1c3ksIHJ4X2J1c3lfZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQlyeF9idXN5X2QgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYocnhfdmFsaWQgJiAoc3RhdGUgPT0gREFUQSkpCXJ4X2J1c3lfZCA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZihzdGF0ZSAhPSBEQVRBKQkJcnhfYnVzeV9kIDw9ICMxIDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJ4X2J1c3kgPD0gIzEgcnhfYnVzeV9kOworCisvLyBQSUQgRGVjb2RpbmcgTG9naWMKK2Fzc2lnbiBwaWRfbGRfZW4gPSBwaWRfbGVfc20gJiByeF9hY3RpdmUgJiByeF92YWxpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCXBpZCA8PSAjMSA4J2hmMDsKKwllbHNlCisJaWYocGlkX2xkX2VuKQkJcGlkIDw9ICMxIHJ4X2RhdGE7CisKK2Fzc2lnbglwaWRfY2tzX2VyciA9IChwaWRbMzowXSAhPSB+cGlkWzc6NF0pOworCithc3NpZ24JcGlkX09VVCAgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfT1VUOworYXNzaWduCXBpZF9JTiAgICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX0lOOworYXNzaWduCXBpZF9TT0YgICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX1NPRjsKK2Fzc2lnbglwaWRfU0VUVVAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9TRVRVUDsKK2Fzc2lnbglwaWRfREFUQTAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9EQVRBMDsKK2Fzc2lnbglwaWRfREFUQTEgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9EQVRBMTsKK2Fzc2lnbglwaWRfREFUQTIgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9EQVRBMjsKK2Fzc2lnbglwaWRfTURBVEEgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9NREFUQTsKK2Fzc2lnbglwaWRfQUNLICAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9BQ0s7Cithc3NpZ24JcGlkX05BQ0sgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfTkFDSzsKK2Fzc2lnbglwaWRfU1RBTEwgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9TVEFMTDsKK2Fzc2lnbglwaWRfTllFVCAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9OWUVUOworYXNzaWduCXBpZF9QUkUgICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX1BSRTsKK2Fzc2lnbglwaWRfRVJSICAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9FUlI7Cithc3NpZ24JcGlkX1NQTElUID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfU1BMSVQ7Cithc3NpZ24JcGlkX1BJTkcgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfUElORzsKK2Fzc2lnbglwaWRfUkVTICAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9SRVM7CisKK2Fzc2lnbglwaWRfVE9LRU4gPSBwaWRfT1VUIHwgcGlkX0lOIHwgcGlkX1NPRiB8IHBpZF9TRVRVUCB8IHBpZF9QSU5HOworYXNzaWduCXBpZF9EQVRBID0gcGlkX0RBVEEwIHwgcGlkX0RBVEExIHwgcGlkX0RBVEEyIHwgcGlkX01EQVRBOworCisvLyBUb2tlbiBEZWNvZGluZyBMT0dJQworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYodG9rZW5fbGVfMSkJdG9rZW4wIDw9ICMxIHJ4X2RhdGE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKHRva2VuX2xlXzIpCXRva2VuMSA8PSAjMSByeF9kYXRhOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0b2tlbl92YWxpZF9yMSA8PSAjMSB0b2tlbl9sZV8yOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0b2tlbl92YWxpZF9zdHIxIDw9ICMxIHRva2VuX3ZhbGlkX3IxIHwgcGlkX2FjazsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdG9rZW5fdmFsaWRfc3RyMiA8PSAjMSB0b2tlbl92YWxpZF9zdHIxOworCithc3NpZ24gdG9rZW5fdmFsaWQgPSB0b2tlbl92YWxpZF9zdHIxOworCisvLyBDUkMgNSBzaG91bGQgcGVyZm9ybSB0aGUgY2hlY2sgaW4gb25lIGN5Y2xlIChmbG93IHRocm91Z2ggbG9naWMpCisvLyAxMSBiaXRzIGFuZCBjcmM1IGlucHV0LCAxIGJpdCBvdXRwdXQKK2Fzc2lnbiBjcmM1X2VyciA9IHRva2VuX3ZhbGlkICYgKGNyYzVfb3V0MiAhPSB0b2tlbl9jcmM1KTsKKwordXNiMWRfY3JjNSB1MCgKKwkuY3JjX2luKAk1J2gxZgkJCSksCisJLmRpbigJewl0b2tlbl9mYWRyWzBdLAorCQkJdG9rZW5fZmFkclsxXSwKKwkJCXRva2VuX2ZhZHJbMl0sCisJCQl0b2tlbl9mYWRyWzNdLAorCQkJdG9rZW5fZmFkcls0XSwKKwkJCXRva2VuX2ZhZHJbNV0sCisJCQl0b2tlbl9mYWRyWzZdLAorCQkJdG9rZW5fZW5kcFswXSwKKwkJCXRva2VuX2VuZHBbMV0sCisJCQl0b2tlbl9lbmRwWzJdLAorCQkJdG9rZW5fZW5kcFszXSAgIH0JKSwKKwkuY3JjX291dCgJY3JjNV9vdXQJCSkgKTsKKworLy8gSW52ZXJ0IGFuZCByZXZlcnNlIHJlc3VsdCBiaXRzCithc3NpZ24JY3JjNV9vdXQyID0gfntjcmM1X291dFswXSwgY3JjNV9vdXRbMV0sIGNyYzVfb3V0WzJdLCBjcmM1X291dFszXSwKKwkJCWNyYzVfb3V0WzRdfTsKKworYXNzaWduIGZyYW1lX25vID0geyB0b2tlbjFbMjowXSwgdG9rZW4wfTsKK2Fzc2lnbiB0b2tlbl9mYWRyID0gdG9rZW4wWzY6MF07Cithc3NpZ24gdG9rZW5fZW5kcCA9IHt0b2tlbjFbMjowXSwgdG9rZW4wWzddfTsKK2Fzc2lnbiB0b2tlbl9jcmM1ID0gdG9rZW4xWzc6M107CisKKy8vIERhdGEgcmVjZWl2aW5nIGxvZ2ljCisvLyBidWlsZCBhIGRlbGF5IGxpbmUgYW5kIHN0b3Agd2hlbiB3ZSBhcmUgYWJvdXQgdG8gZ2V0IGNyYworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCXJ4djEgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoZGF0YV92YWxpZF9kKQlyeHYxIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKGRhdGFfZG9uZSkJCXJ4djEgPD0gIzEgMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCXJ4djIgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYocnh2MSAmIGRhdGFfdmFsaWRfZCkJcnh2MiA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZihkYXRhX2RvbmUpCQlyeHYyIDw9ICMxIDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWRhdGFfdmFsaWQwIDw9ICMxIHJ4djIgJiBkYXRhX3ZhbGlkX2Q7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgYmVnaW4KKwlpZihkYXRhX3ZhbGlkX2QpCWQwIDw9ICMxIHJ4X2RhdGE7CisJaWYoZGF0YV92YWxpZF9kKQlkMSA8PSAjMSBkMDsKKwlpZihkYXRhX3ZhbGlkX2QpCWQyIDw9ICMxIGQxOworICAgZW5kCisKK2Fzc2lnbiByeF9kYXRhX3N0ID0gZDI7Cithc3NpZ24gcnhfZGF0YV92YWxpZCA9IGRhdGFfdmFsaWQwOworYXNzaWduIHJ4X2RhdGFfZG9uZSA9IGRhdGFfZG9uZTsKKworLy8gY3JjMTYgYWNjdW11bGF0ZXMgcnhfZGF0YSBhcyBsb25nIGFzIGRhdGFfdmFsaWRfZCBpcyBhc3NlcnRlZC4KKy8vIHdoZW4gZGF0YV9kb25lIGlzIGFzc2VydGVkLCBjcmMxNiByZXBvcnRzIHN0YXR1cywgYW5kIHJlc2V0cyBpdHNlbGYKKy8vIG5leHQgY3ljbGUuCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyeF9hY3RpdmVfciA8PSAjMSByeF9hY3RpdmU7CisKK2Fzc2lnbiBjcmMxNl9jbHIgPSByeF9hY3RpdmUgJiAhcnhfYWN0aXZlX3I7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGNyYzE2X2NscikJCWNyYzE2X3N1bSA8PSAjMSAxNidoZmZmZjsKKwllbHNlCisJaWYoZGF0YV92YWxpZF9kKQljcmMxNl9zdW0gPD0gIzEgY3JjMTZfb3V0OworCit1c2IxZF9jcmMxNiB1MSgKKwkuY3JjX2luKAljcmMxNl9zdW0JCSksCisJLmRpbigJe3J4X2RhdGFbMF0sIHJ4X2RhdGFbMV0sIHJ4X2RhdGFbMl0sIHJ4X2RhdGFbM10sCisJCXJ4X2RhdGFbNF0sIHJ4X2RhdGFbNV0sIHJ4X2RhdGFbNl0sIHJ4X2RhdGFbN119CSksCisJLmNyY19vdXQoCWNyYzE2X291dAkJKSApOworCisvLyBWZXJpZnkgYWdhaW5zdCBwb2x5bm9taWFsIAorYXNzaWduIGNyYzE2X2VyciA9IGRhdGFfZG9uZSAmIChjcmMxNl9zdW0gIT0gMTYnaDgwMGQpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUmVjZWl2ZS9EZWNvZGUgU3RhdGUgbWFjaGluZQorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJc3RhdGUgPD0gIzEgSURMRTsKKwllbHNlCQlzdGF0ZSA8PSAjMSBuZXh0X3N0YXRlOworCithbHdheXMgQChzdGF0ZSBvciByeF92YWxpZCBvciByeF9hY3RpdmUgb3IgcnhfZXJyIG9yIHBpZF9BQ0sgb3IgcGlkX1RPS0VOCisJb3IgcGlkX0RBVEEpCisgICBiZWdpbgorCW5leHRfc3RhdGUgPSBzdGF0ZTsJLy8gRGVmYXVsdCBkb24ndCBjaGFuZ2UgY3VycmVudCBzdGF0ZQorCXBpZF9sZV9zbSA9IDEnYjA7CisJdG9rZW5fbGVfMSA9IDEnYjA7CisJdG9rZW5fbGVfMiA9IDEnYjA7CisJZGF0YV92YWxpZF9kID0gMSdiMDsKKwlkYXRhX2RvbmUgPSAxJ2IwOworCXNlcV9lcnIgPSAxJ2IwOworCXBpZF9hY2sgPSAxJ2IwOworCWNhc2Uoc3RhdGUpCQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIElETEU6CisJCSAgIGJlZ2luCisJCQlwaWRfbGVfc20gPSAxJ2IxOworCQkJaWYocnhfdmFsaWQgJiByeF9hY3RpdmUpCW5leHRfc3RhdGUgPSBBQ1RJVkU7CisJCSAgIGVuZAorCSAgIEFDVElWRToKKwkJICAgYmVnaW4KKwkJCS8vIFJlY2VpdmVkIGEgQUNLIGZyb20gSG9zdAorCQkJaWYocGlkX0FDSyAmICFyeF9lcnIpCisJCQkgICBiZWdpbgorCQkJCXBpZF9hY2sgPSAxJ2IxOworCQkJCWlmKCFyeF9hY3RpdmUpCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCQllbHNlCisJCQkvLyBSZWNlaXZpbmcgYSBUT0tFTgorCQkJaWYocGlkX1RPS0VOICYgcnhfdmFsaWQgJiByeF9hY3RpdmUgJiAhcnhfZXJyKQorCQkJICAgYmVnaW4KKwkJCQl0b2tlbl9sZV8xID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gVE9LRU47CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCS8vIFJlY2VpdmluZyBEQVRBCisJCQlpZihwaWRfREFUQSAmIHJ4X3ZhbGlkICYgcnhfYWN0aXZlICYgIXJ4X2VycikKKwkJCSAgIGJlZ2luCisJCQkJZGF0YV92YWxpZF9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gREFUQTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJaWYoCSFyeF9hY3RpdmUgfCByeF9lcnIgfAorCQkJCShyeF92YWxpZCAmICEocGlkX1RPS0VOIHwgcGlkX0RBVEEpKSApCS8vIEVSUk9SCisJCQkgICBiZWdpbgorCQkJCXNlcV9lcnIgPSAhcnhfZXJyOworCQkJCWlmKCFyeF9hY3RpdmUpCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCSAgIGVuZAorCSAgIFRPS0VOOgorCQkgICBiZWdpbgorCQkJaWYocnhfdmFsaWQgJiByeF9hY3RpdmUgJiAhcnhfZXJyKQorCQkJICAgYmVnaW4KKwkJCQl0b2tlbl9sZV8yID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJaWYoIXJ4X2FjdGl2ZSB8IHJ4X2VycikJLy8gRVJST1IKKwkJCSAgIGJlZ2luCisJCQkJc2VxX2VyciA9ICFyeF9lcnI7CisJCQkJaWYoIXJ4X2FjdGl2ZSkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJICAgZW5kCisJICAgREFUQToKKwkJICAgYmVnaW4KKwkJCWlmKHJ4X3ZhbGlkICYgcnhfYWN0aXZlICYgIXJ4X2VycikJZGF0YV92YWxpZF9kID0gMSdiMTsKKwkJCWlmKCFyeF9hY3RpdmUgfCByeF9lcnIpCisJCQkgICBiZWdpbgorCQkJCWRhdGFfZG9uZSA9IDEnYjE7CisJCQkJaWYoIXJ4X2FjdGl2ZSkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJICAgZW5kCisJCQorCWVuZGNhc2UKKyAgIGVuZAorCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BlLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGUudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMGRhYWZmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BlLnYKQEAgLTAsMCArMSw4MzYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQcm90b2NvbCBFbmdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFBlcmZvcm1zIGF1dG9tYXRpYyBwcm90b2NvbCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfcGUudix2IDEuMS4xLjEgMjAwMi0wOS0xOSAxMjowNzoyNCBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTE5IDEyOjA3OjI0ICQKKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8KKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfcGUoCWNsaywgcnN0LAorCisJCS8vIFVUTUkgSW50ZXJmYWNlcworCQl0eF92YWxpZCwgcnhfYWN0aXZlLAorCisJCS8vIFBJRCBJbmZvcm1hdGlvbgorCQlwaWRfT1VULCBwaWRfSU4sIHBpZF9TT0YsIHBpZF9TRVRVUCwKKwkJcGlkX0RBVEEwLCBwaWRfREFUQTEsIHBpZF9EQVRBMiwgcGlkX01EQVRBLAorCQlwaWRfQUNLLCBwaWRfUElORywKKworCQkvLyBUb2tlbiBJbmZvcm1hdGlvbgorCQl0b2tlbl92YWxpZCwgCisKKwkJLy8gUmVjZWl2ZSBEYXRhIE91dHB1dAorCQlyeF9kYXRhX2RvbmUsIGNyYzE2X2VyciwKKworCQkvLyBQYWNrZXQgQXNzZW1ibGVyIEludGVyZmFjZQorCQlzZW5kX3Rva2VuLCB0b2tlbl9waWRfc2VsLAorCQlkYXRhX3BpZF9zZWwsCisKKwkJLy8gSURNQSBJbnRlcmZhY2UKKwkJcnhfZG1hX2VuLCB0eF9kbWFfZW4sCisJCWFib3J0LAorCQlpZG1hX2RvbmUsCisKKwkJLy8gUmVnaXN0ZXIgRmlsZSBJbnRlcmZhY2UKKworCQlmc2VsLAorCQllcF9zZWwsIG1hdGNoLCBuc2VfZXJyLAorCQllcF9mdWxsLCBlcF9lbXB0eSwKKworCQlpbnRfdXBpZF9zZXQsIGludF9jcmMxNl9zZXQsIGludF90b19zZXQsIGludF9zZXFlcnJfc2V0LAorCQljc3IsCisJCXNlbmRfc3RhbGwKKworCQkpOworCitpbnB1dAkJY2xrLCByc3Q7CitpbnB1dAkJdHhfdmFsaWQsIHJ4X2FjdGl2ZTsKKworLy8gUGFja2V0IERpc2Fzc2VtYmxlciBJbnRlcmZhY2UKKwkJLy8gRGVjb2RlZCBQSURzICh1c2VkIHdoZW4gdG9rZW5fdmFsaWQgaXMgYXNzZXJ0ZWQpCitpbnB1dAkJcGlkX09VVCwgcGlkX0lOLCBwaWRfU09GLCBwaWRfU0VUVVA7CitpbnB1dAkJcGlkX0RBVEEwLCBwaWRfREFUQTEsIHBpZF9EQVRBMiwgcGlkX01EQVRBOworaW5wdXQJCXBpZF9BQ0ssIHBpZF9QSU5HOworCitpbnB1dAkJdG9rZW5fdmFsaWQ7CQkvLyBUb2tlbiBpcyB2YWxpZAorCitpbnB1dAkJcnhfZGF0YV9kb25lOwkJLy8gSW5kaWNhdGVzIGVuZCBvZiBhIHRyYW5zZmVyCitpbnB1dAkJY3JjMTZfZXJyOwkJLy8gRGF0YSBwYWNrZXQgQ1JDIDE2IGVycm9yCisKKy8vIFBhY2tldCBBc3NlbWJsZXIgSW50ZXJmYWNlCitvdXRwdXQJCXNlbmRfdG9rZW47CitvdXRwdXQJWzE6MF0JdG9rZW5fcGlkX3NlbDsKK291dHB1dAlbMTowXQlkYXRhX3BpZF9zZWw7CisKKy8vIElETUEgSW50ZXJmYWNlCitvdXRwdXQJCXJ4X2RtYV9lbjsJLy8gQWxsb3dzIHRoZSBkYXRhIHRvIGJlIHN0b3JlZAorb3V0cHV0CQl0eF9kbWFfZW47CS8vIEFsbG93cyBmb3IgZGF0YSB0byBiZSByZXRyaWV2ZWQKK291dHB1dAkJYWJvcnQ7CQkvLyBBYm9ydCBUcmFuc2ZlciAodGltZV9vdXQsIGNyY19lcnIgb3IgcnhfZXJyb3IpCitpbnB1dAkJaWRtYV9kb25lOwkvLyBETUEgaXMgZG9uZSBpbmRpY2F0b3IKKworaW5wdXQJCWVwX2Z1bGw7CS8vIEluZGljYXRlcyB0aGUgZW5kcG9pbnRzIGZpZm8gaXMgZnVsbAoraW5wdXQJCWVwX2VtcHR5OwkvLyBJbmRpY2F0ZXMgdGhlIGVuZHBvaW50cyBmaWZvIGlzIGVtcHR5CisKKy8vIFJlZ2lzdGVyIEZpbGUgaW50ZXJmYWNlCitpbnB1dAkJZnNlbDsJCS8vIFRoaXMgZnVuY3Rpb24gaXMgc2VsZWN0ZWQKK2lucHV0CVszOjBdCWVwX3NlbDsJCS8vIEVuZHBvaW50IE51bWJlciBJbnB1dAoraW5wdXQJCW1hdGNoOwkJLy8gRW5kcG9pbnQgTWF0Y2hlZAorb3V0cHV0CQluc2VfZXJyOwkvLyBubyBzdWNoIGVuZHBvaW50IGVycm9yCisKK291dHB1dAkJaW50X3VwaWRfc2V0OwkvLyBTZXQgdW5zdXBwb3J0ZWQgUElEIGludGVycnVwdAorb3V0cHV0CQlpbnRfY3JjMTZfc2V0OwkvLyBTZXQgQ1JDMTYgZXJyb3IgaW50ZXJydXB0CitvdXRwdXQJCWludF90b19zZXQ7CS8vIFNldCB0aW1lIG91dCBpbnRlcnJ1cHQKK291dHB1dAkJaW50X3NlcWVycl9zZXQ7CS8vIFNldCBQSUQgc2VxdWVuY2UgZXJyb3IgaW50ZXJydXB0CisKK2lucHV0CVsxMzowXQljc3I7CQkvLyBJbnRlcm5hbCBDU1IgT3V0cHV0CisKK2lucHV0CQlzZW5kX3N0YWxsOwkvLyBGb3JjZSBzZW5kaW5nIGEgU1RBTEwgZHVyaW5nIHNldHVwCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKKy8vIHR4IHRva2VuIGRlY29kaW5nCitwYXJhbWV0ZXIJQUNLICAgPSAwLAorCQlOQUNLICA9IDEsCisJCVNUQUxMID0gMiwKKwkJTllFVCAgPSAzOworCisvLyBTdGF0ZSBkZWNvZGluZworcGFyYW1ldGVyCVs5OjBdCS8vIHN5bm9wc3lzIGVudW0gc3RhdGUKKwkJSURMRQk9IDEwJ2IwMDAwMDBfMDAwMSwKKwkJVE9LRU4JPSAxMCdiMDAwMDAwXzAwMTAsCisJCUlOCT0gMTAnYjAwMDAwMF8wMTAwLAorCQlJTjIJPSAxMCdiMDAwMDAwXzEwMDAsCisJCU9VVAk9IDEwJ2IwMDAwMDFfMDAwMCwKKwkJT1VUMkEJPSAxMCdiMDAwMDEwXzAwMDAsCisJCU9VVDJCCT0gMTAnYjAwMDEwMF8wMDAwLAorCQlVUERBVEVXCT0gMTAnYjAwMTAwMF8wMDAwLAorCQlVUERBVEUJPSAxMCdiMDEwMDAwXzAwMDAsCisJCVVQREFURTIJPSAxMCdiMTAwMDAwXzAwMDA7CisKK3JlZwlbMTowXQl0b2tlbl9waWRfc2VsOworcmVnCVsxOjBdCXRva2VuX3BpZF9zZWxfZDsKK3JlZwkJc2VuZF90b2tlbjsKK3JlZwkJc2VuZF90b2tlbl9kOworcmVnCQlyeF9kbWFfZW4sIHR4X2RtYV9lbjsKK3JlZwkJaW50X3NlcWVycl9zZXRfZDsKK3JlZwkJaW50X3NlcWVycl9zZXQ7CityZWcJCWludF91cGlkX3NldDsKKworcmVnCQltYXRjaF9yOworCisvLyBFbmRwb2ludCBEZWNvZGluZword2lyZQkJSU5fZXAsIE9VVF9lcCwgQ1RSTF9lcDsJCS8vIEVuZHBvaW50IFR5cGVzCit3aXJlCQl0eGZyX2lzbywgdHhmcl9idWxrLCB0eGZyX2ludDsJLy8gVHJhbnNmZXIgVHlwZXMKKworcmVnCVsxOjBdCXVjX2RwZDsKKworLy8gQnVmZmVyIGNoZWNrcworcmVnCVs5OjBdCS8qIHN5bm9wc3lzIGVudW0gc3RhdGUgKi8gc3RhdGUsIG5leHRfc3RhdGU7CisvLyBzeW5vcHN5cyBzdGF0ZV92ZWN0b3Igc3RhdGUKKworLy8gUElEIG5leHQgYW5kIGN1cnJlbnQgZGVjb2RlcnMKK3JlZwlbMTowXQluZXh0X2RwaWQ7CityZWcJWzE6MF0JdGhpc19kcGlkOworcmVnCQlwaWRfc2VxX2VycjsKK3dpcmUJWzE6MF0JdHJfZnJfZDsKKword2lyZQlbMTM6MF0Jc2l6ZV9uZXh0Oword2lyZQkJYnVmX3NtYWxsZXI7CisKKy8vIEFmdGVyIHNlbmRpbmcgRGF0YSBpbiByZXNwb25zZSB0byBhbiBJTiB0b2tlbiBmcm9tIGhvc3QsIHRoZQorLy8gaG9zdCBtdXN0IHJlcGx5IHdpdGggYW4gYWNrLiBUaGUgaG9zdCBoYXMgWFhYblMgdG8gcmVwbHkuCisvLyAicnhfYWNrX3RvIiBpbmRpY2F0ZXMgd2hlbiB0aGlzIHRpbWUgaGFzIGV4cGlyZWQuCisvLyByeF9hY2tfdG9fY2xyLCBjbGVhcnMgdGhlIHRpbWVyCityZWcJCXJ4X2Fja190b19jbHI7CityZWcJCXJ4X2Fja190b19jbHJfZDsKK3JlZwkJcnhfYWNrX3RvOworcmVnCVs3OjBdCXJ4X2Fja190b19jbnQ7CisKKy8vIEFmdGVyIHNlbmRpbmcgYSBPVVQgdG9rZW4gdGhlIGhvc3QgbXVzdCBzZW5kIGEgZGF0YSBwYWNrZXQuCisvLyBUaGUgaG9zdCBoYXMgWFggblMgdG8gc2VuZCB0aGUgcGFja2V0LiAidHhfZGF0YV90byIgaW5kaWNhdGVzCisvLyB3aGVuIHRoaXMgdGltZSBoYXMgZXhwaXJlZC4KKy8vIHR4X2RhdGFfdG9fY2xyLCBjbGVhcnMgdGhlIHRpbWVyCit3aXJlCQl0eF9kYXRhX3RvX2NscjsKK3JlZwkJdHhfZGF0YV90bzsKK3JlZwlbNzowXQl0eF9kYXRhX3RvX2NudDsKKword2lyZQlbNzowXQlyeF9hY2tfdG9fdmFsLCB0eF9kYXRhX3RvX3ZhbDsKKworCit3aXJlCVsxOjBdCW5leHRfYnNlbDsKK3JlZwkJdWNfc3RhdF9zZXRfZDsKK3JlZwkJdWNfZHBkX3NldDsKKworcmVnCQlpbl90b2tlbjsKK3JlZwkJb3V0X3Rva2VuOworcmVnCQlzZXR1cF90b2tlbjsKKword2lyZQkJaW5fb3AsIG91dF9vcDsJLy8gSW5kaWNhdGUgYSBJTiBvciBPVVQgb3BlcmF0aW9uCisKK3JlZwlbMTowXQlhbGxvd19waWQ7CisKK3JlZwkJbnNlX2VycjsKK3JlZwkJYWJvcnQ7CisKK3dpcmUJWzE6MF0JZXBfdHlwZSwgdHhmcl90eXBlOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworLy8gRW5kcG9pbnQvQ1NSIERlY29kaW5nCithc3NpZ24gSU5fZXAgICA9IGNzcls5XTsKK2Fzc2lnbiBPVVRfZXAgID0gY3NyWzEwXTsKK2Fzc2lnbiBDVFJMX2VwID0gY3NyWzExXTsKKworYXNzaWduIHR4ZnJfaXNvICA9IGNzclsxMl07Cithc3NpZ24gdHhmcl9idWxrID0gY3NyWzEzXTsKK2Fzc2lnbiB0eGZyX2ludCA9ICFjc3JbMTJdICYgIWNzclsxM107CisKK2Fzc2lnbiBlcF90eXBlID0gY3NyWzEwOjldOworYXNzaWduIHR4ZnJfdHlwZSA9IGNzclsxMzoxMl07CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCW1hdGNoX3IgPD0gIzEgbWF0Y2ggICYgZnNlbDsKKworLy8gTm8gU3VjaCBFbmRwb2ludCBJbmRpY2F0b3IKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCW5zZV9lcnIgPD0gIzEgdG9rZW5fdmFsaWQgJiAocGlkX09VVCB8IHBpZF9JTiB8IHBpZF9TRVRVUCkgJiAhbWF0Y2g7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNlbmRfdG9rZW4gPD0gIzEgc2VuZF90b2tlbl9kOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0b2tlbl9waWRfc2VsIDw9ICMxIHRva2VuX3BpZF9zZWxfZDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERhdGEgUGlkIFN0b3JhZ2UKKy8vCisKK3JlZwlbMTowXQllcDBfZHBpZCwgZXAxX2RwaWQsIGVwMl9kcGlkLCBlcDNfZHBpZDsKK3JlZwlbMTowXQllcDRfZHBpZCwgZXA1X2RwaWQsIGVwNl9kcGlkLCBlcDdfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXAwX2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDApKQllcDBfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwMV9kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2gxKSkJZXAxX2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDJfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoMikpCWVwMl9kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXAzX2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDMpKQllcDNfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwNF9kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2g0KSkJZXA0X2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDVfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoNSkpCWVwNV9kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXA2X2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDYpKQllcDZfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwN19kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2g3KSkJZXA3X2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljYXNlKGVwX3NlbCkKKwkgICA0J2gwOiB1Y19kcGQgPD0gZXAwX2RwaWQ7CisJICAgNCdoMTogdWNfZHBkIDw9IGVwMV9kcGlkOworCSAgIDQnaDI6IHVjX2RwZCA8PSBlcDJfZHBpZDsKKwkgICA0J2gzOiB1Y19kcGQgPD0gZXAzX2RwaWQ7CisJICAgNCdoNDogdWNfZHBkIDw9IGVwNF9kcGlkOworCSAgIDQnaDU6IHVjX2RwZCA8PSBlcDVfZHBpZDsKKwkgICA0J2g2OiB1Y19kcGQgPD0gZXA2X2RwaWQ7CisJICAgNCdoNzogdWNfZHBkIDw9IGVwN19kcGlkOworCWVuZGNhc2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERhdGEgUGlkIFNlcXVlbmNlcgorLy8KKworYXNzaWduIHRyX2ZyX2QgPSAyJ2gwOworCithbHdheXMgQChwb3NlZGdlIGNsaykJLy8gdHIvbWY6ZXAvdHlwZTp0ci90eXBlOmxhc3QgZHBkCisJY2FzZXgoe3RyX2ZyX2QsZXBfdHlwZSx0eGZyX3R5cGUsdWNfZHBkfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA4J2IwP18wMV8wMV8/PzogbmV4dF9kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gSU4sIDEgdHIvbWYKKworCSAgIDgnYjEwXzAxXzAxXz8wOiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CS8vIElTTyB0eGZyLiBJTiwgMiB0ci9tZgorCSAgIDgnYjEwXzAxXzAxXz8xOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBJTiwgMiB0ci9tZgorCisJICAgOCdiMTFfMDFfMDFfMDA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSVNPIHR4ZnIuIElOLCAzIHRyL21mCisJICAgOCdiMTFfMDFfMDFfMDE6IG5leHRfZHBpZCA8PSAjMSAyJ2IxMDsJLy8gSVNPIHR4ZnIuIElOLCAzIHRyL21mCisJICAgOCdiMTFfMDFfMDFfMTA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIElOLCAzIHRyL21mCisKKwkgICA4J2IwP18xMF8wMV8/PzogbmV4dF9kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gT1VULCAxIHRyL21mCisKKwkgICA4J2IxMF8xMF8wMV8/PzogCQkJCS8vIElTTyB0eGZyLiBPVVQsIDIgdHIvbWYKKwkJCSAgIGJlZ2luCS8vIFJlc3luY2hyb25pemUgaW4gY2FzZSBvZiBQSUQgZXJyb3IKKwkJCQljYXNlKHtwaWRfTURBVEEsIHBpZF9EQVRBMX0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCQkJICAyJ2IxMDogbmV4dF9kcGlkIDw9ICMxIDInYjAxOworCQkJCSAgMidiMDE6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsKKwkJCQllbmRjYXNlCisJCQkgICBlbmQKKworCSAgIDgnYjExXzEwXzAxXzAwOiAJCQkJLy8gSVNPIHR4ZnIuIE9VVCwgMyB0ci9tZgorCQkJICAgYmVnaW4JLy8gUmVzeW5jaHJvbml6ZSBpbiBjYXNlIG9mIFBJRCBlcnJvcgorCQkJCWNhc2Uoe3BpZF9NREFUQSwgcGlkX0RBVEEyfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJCQkgIDInYjEwOiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CisJCQkJICAyJ2IwMTogbmV4dF9kcGlkIDw9ICMxIDInYjAwOworCQkJCWVuZGNhc2UKKwkJCSAgIGVuZAorCSAgIDgnYjExXzEwXzAxXzAxOiAJCQkJLy8gSVNPIHR4ZnIuIE9VVCwgMyB0ci9tZgorCQkJICAgYmVnaW4JLy8gUmVzeW5jaHJvbml6ZSBpbiBjYXNlIG9mIFBJRCBlcnJvcgorCQkJCWNhc2Uoe3BpZF9NREFUQSwgcGlkX0RBVEEyfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJCQkgIDInYjEwOiBuZXh0X2RwaWQgPD0gIzEgMidiMTA7CisJCQkJICAyJ2IwMTogbmV4dF9kcGlkIDw9ICMxIDInYjAwOworCQkJCWVuZGNhc2UKKwkJCSAgIGVuZAorCSAgIDgnYjExXzEwXzAxXzEwOiAJCQkJLy8gSVNPIHR4ZnIuIE9VVCwgMyB0ci9tZgorCQkJICAgYmVnaW4JLy8gUmVzeW5jaHJvbml6ZSBpbiBjYXNlIG9mIFBJRCBlcnJvcgorCQkJCWNhc2Uoe3BpZF9NREFUQSwgcGlkX0RBVEEyfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJCQkgIDInYjEwOiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CisJCQkJICAyJ2IwMTogbmV4dF9kcGlkIDw9ICMxIDInYjAwOworCQkJCWVuZGNhc2UKKwkJCSAgIGVuZAorCisJICAgOCdiPz9fMDFfMDBfPzAsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMDBfPzA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSU5UIHRyYW5zZmVycworCisJICAgOCdiPz9fMDFfMDBfPzEsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMDBfPzE6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSU5UIHRyYW5zZmVycworCisJICAgOCdiPz9fMDFfMTBfPzAsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMTBfPzA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gQlVMSyB0cmFuc2ZlcnMKKworCSAgIDgnYj8/XzAxXzEwXz8xLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzEwXz8xOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CS8vIEJVTEsgdHJhbnNmZXJzCisKKwkgICA4J2I/P18wMF8/P18/PzoJCQkJLy8gQ1RSTCBFbmRwb2ludAorCQljYXNleCh7c2V0dXBfdG9rZW4sIGluX29wLCBvdXRfb3AsIHVjX2RwZH0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCSAgIDUnYjFfPz9fPz86IG5leHRfZHBpZCA8PSAjMSAyJ2IxMTsJLy8gU0VUVVAgb3BlcmF0aW9uCisJCSAgIDUnYjBfMTBfMD86IG5leHRfZHBpZCA8PSAjMSAyJ2IxMTsJLy8gSU4gb3BlcmF0aW9uCisJCSAgIDUnYjBfMTBfMT86IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSU4gb3BlcmF0aW9uCisJCSAgIDUnYjBfMDFfPzA6IG5leHRfZHBpZCA8PSAjMSAyJ2IxMTsJLy8gT1VUIG9wZXJhdGlvbgorCQkgICA1J2IwXzAxXz8xOiBuZXh0X2RwaWQgPD0gIzEgMidiMTA7CS8vIE9VVCBvcGVyYXRpb24KKwkJZW5kY2FzZQorCisJZW5kY2FzZQorCisvLyBDdXJyZW50IFBJRCBkZWNvZGVyCisKKy8vIEFsbG93IGFueSBQSUQgZm9yIElTTy4gdHJhbnNmZXJzIHdoZW4gbW9kZSBmdWxsIHNwZWVkIG9yIHRyX2ZyIGlzIHplcm8KK2Fsd2F5cyBAKHBpZF9EQVRBMCBvciBwaWRfREFUQTEgb3IgcGlkX0RBVEEyIG9yIHBpZF9NREFUQSkKKwljYXNlKHtwaWRfREFUQTAsIHBpZF9EQVRBMSwgcGlkX0RBVEEyLCBwaWRfTURBVEF9ICkgLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2IxMDAwOiBhbGxvd19waWQgPSAyJ2IwMDsKKwkgICA0J2IwMTAwOiBhbGxvd19waWQgPSAyJ2IwMTsKKwkgICA0J2IwMDEwOiBhbGxvd19waWQgPSAyJ2IxMDsKKwkgICA0J2IwMDAxOiBhbGxvd19waWQgPSAyJ2IxMTsKKwllbmRjYXNlCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQkvLyB0Zi9tZjplcC90eXBlOnRyL3R5cGU6bGFzdCBkcGQKKwljYXNleCh7dHJfZnJfZCxlcF90eXBlLHR4ZnJfdHlwZSx1Y19kcGR9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDgnYjA/XzAxXzAxXz8/OiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBJTiwgMSB0ci9tZgorCisJICAgOCdiMTBfMDFfMDFfPzA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSVNPIHR4ZnIuIElOLCAyIHRyL21mCisJICAgOCdiMTBfMDFfMDFfPzE6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIElOLCAyIHRyL21mCisKKwkgICA4J2IxMV8wMV8wMV8wMDogdGhpc19kcGlkIDw9ICMxIDInYjEwOwkvLyBJU08gdHhmci4gSU4sIDMgdHIvbWYKKwkgICA4J2IxMV8wMV8wMV8wMTogdGhpc19kcGlkIDw9ICMxIDInYjAxOwkvLyBJU08gdHhmci4gSU4sIDMgdHIvbWYKKwkgICA4J2IxMV8wMV8wMV8xMDogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gSU4sIDMgdHIvbWYKKworCSAgIDgnYjAwXzEwXzAxXz8/OiB0aGlzX2RwaWQgPD0gIzEgYWxsb3dfcGlkOwkvLyBJU08gdHhmci4gT1VULCAwIHRyL21mCisJICAgOCdiMDFfMTBfMDFfPz86IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIE9VVCwgMSB0ci9tZgorCisJICAgOCdiMTBfMTBfMDFfPzA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IxMTsJLy8gSVNPIHR4ZnIuIE9VVCwgMiB0ci9tZgorCSAgIDgnYjEwXzEwXzAxXz8xOiB0aGlzX2RwaWQgPD0gIzEgMidiMDE7CS8vIElTTyB0eGZyLiBPVVQsIDIgdHIvbWYKKworCSAgIDgnYjExXzEwXzAxXzAwOiB0aGlzX2RwaWQgPD0gIzEgMidiMTE7CS8vIElTTyB0eGZyLiBPVVQsIDMgdHIvbWYKKwkgICA4J2IxMV8xMF8wMV8wMTogdGhpc19kcGlkIDw9ICMxIDInYjExOwkvLyBJU08gdHhmci4gT1VULCAzIHRyL21mCisJICAgOCdiMTFfMTBfMDFfMTA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IxMDsJLy8gSVNPIHR4ZnIuIE9VVCwgMyB0ci9tZgorCisJICAgOCdiPz9fMDFfMDBfPzAsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMDBfPzA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSU5UIHRyYW5zZmVycworCSAgIDgnYj8/XzAxXzAwXz8xLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzAwXz8xOiB0aGlzX2RwaWQgPD0gIzEgMidiMDE7CS8vIElOVCB0cmFuc2ZlcnMKKworCSAgIDgnYj8/XzAxXzEwXz8wLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzEwXz8wOiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIEJVTEsgdHJhbnNmZXJzCisJICAgOCdiPz9fMDFfMTBfPzEsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMTBfPzE6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gQlVMSyB0cmFuc2ZlcnMKKworCSAgIDgnYj8/XzAwXz8/Xz8/OgkJCQkvLyBDVFJMIEVuZHBvaW50CisJCWNhc2V4KHtzZXR1cF90b2tlbixpbl9vcCwgb3V0X29wLCB1Y19kcGR9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkgICA1J2IxXz8/Xz8/OiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIFNFVFVQIG9wZXJhdGlvbgorCQkgICA1J2IwXzEwXzA/OiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIElOIG9wZXJhdGlvbgorCQkgICA1J2IwXzEwXzE/OiB0aGlzX2RwaWQgPD0gIzEgMidiMDE7CS8vIElOIG9wZXJhdGlvbgorCQkgICA1J2IwXzAxXz8wOiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIE9VVCBvcGVyYXRpb24KKwkJICAgNSdiMF8wMV8/MTogdGhpc19kcGlkIDw9ICMxIDInYjAxOwkvLyBPVVQgb3BlcmF0aW9uCisJCWVuZGNhc2UKKwllbmRjYXNlCisKKy8vIEFzc2lnbiBQSUQgZm9yIG91dGdvaW5nIHBhY2tldHMKK2Fzc2lnbiBkYXRhX3BpZF9zZWwgPSB0aGlzX2RwaWQ7CisKKy8vIFZlcmlmeSBQSUQgZm9yIGluY29taW5nIGRhdGEgcGFja2V0cworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcGlkX3NlcV9lcnIgPD0gIzEgISgJKHRoaXNfZHBpZD09MidiMDAgJiBwaWRfREFUQTApIHwKKwkJCQkodGhpc19kcGlkPT0yJ2IwMSAmIHBpZF9EQVRBMSkgfAorCQkJCSh0aGlzX2RwaWQ9PTInYjEwICYgcGlkX0RBVEEyKSB8CisJCQkJKHRoaXNfZHBpZD09MidiMTEgJiBwaWRfTURBVEEpCSk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBJRE1BIFNldHVwICYgc3JjL2RzdCBidWZmZXIgc2VsZWN0CisvLworCisvLyBGb3IgQ29udHJvbCBlbmRwb2ludHMgdGhpbmdzIGFyZSBkaWZmZXJlbnQ6CisvLyBidWZmZXIwIGlzIHVzZWQgZm9yIE9VVCAoaW5jb21pbmcpIGRhdGEgcGFja2V0cworLy8gYnVmZmVyMSBpcyB1c2VkIGZvciBJTiAob3V0Z29pbmcpIGRhdGEgcGFja2V0cworCisvLyBLZWVwIHRyYWNrIG9mIGxhc3QgdG9rZW4gZm9yIGNvbnRyb2wgZW5kcG9pbnRzCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJaW5fdG9rZW4gPD0gIzEgMSdiMDsKKwllbHNlCisJaWYocGlkX0lOKQkJaW5fdG9rZW4gPD0gIzEgMSdiMTsKKwllbHNlCisJaWYocGlkX09VVCB8IHBpZF9TRVRVUCkJaW5fdG9rZW4gPD0gIzEgMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCW91dF90b2tlbiA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihwaWRfT1VUIHwgcGlkX1NFVFVQKQlvdXRfdG9rZW4gPD0gIzEgMSdiMTsKKwllbHNlCisJaWYocGlkX0lOKQkJb3V0X3Rva2VuIDw9ICMxIDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlzZXR1cF90b2tlbiA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihwaWRfU0VUVVApCQlzZXR1cF90b2tlbiA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZihwaWRfT1VUIHwgcGlkX0lOKQlzZXR1cF90b2tlbiA8PSAjMSAxJ2IwOworCisvLyBJbmRpY2F0ZXMgaWYgd2UgYXJlIHBlcmZvcm1pbmcgYW4gSU4gb3BlcmF0aW9uCithc3NpZ24JaW5fb3AgPSBJTl9lcCB8IChDVFJMX2VwICYgaW5fdG9rZW4pOworCisvLyBJbmRpY2F0ZXMgaWYgd2UgYXJlIHBlcmZvcm1pbmcgYW4gT1VUIG9wZXJhdGlvbgorYXNzaWduCW91dF9vcCA9IE9VVF9lcCB8IChDVFJMX2VwICYgb3V0X3Rva2VuKTsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRGV0ZXJtaW5lIGlmIHBhY2tldCBpcyB0byBzbWFsbCBvciB0byBsYXJnZQorLy8gVGhpcyBpcyB1c2VkIHRvIE5BQ0sgYW5kIGlnbm9yZSBwYWNrZXQgZm9yIE9VVCBlbmRwb2ludHMKKy8vCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFJlZ2lzdGVyIEZpbGUgVXBkYXRlIExvZ2ljCisvLworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl1Y19kcGRfc2V0IDw9ICMxIHVjX3N0YXRfc2V0X2Q7CisKKy8vIEFib3J0IHNpZ25hbAorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJYWJvcnQgPD0gIzEgbWF0Y2ggJiBmc2VsICYgKHN0YXRlICE9IElETEUpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVElNRSBPVVQgVElNRVJTCisvLworCisvLyBBZnRlciBzZW5kaW5nIERhdGEgaW4gcmVzcG9uc2UgdG8gYW4gSU4gdG9rZW4gZnJvbSBob3N0LCB0aGUKKy8vIGhvc3QgbXVzdCByZXBseSB3aXRoIGFuIGFjay4gVGhlIGhvc3QgaGFzIDYyMm5TIGluIEZ1bGwgU3BlZWQKKy8vIG1vZGUgYW5kIDQwMG5TIGluIEhpZ2ggU3BlZWQgbW9kZSB0byByZXBseS4KKy8vICJyeF9hY2tfdG8iIGluZGljYXRlcyB3aGVuIHRoaXMgdGltZSBoYXMgZXhwaXJlZC4KKy8vIHJ4X2Fja190b19jbHIsIGNsZWFycyB0aGUgdGltZXIKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcnhfYWNrX3RvX2NsciA8PSAjMSB0eF92YWxpZCB8IHJ4X2Fja190b19jbHJfZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYocnhfYWNrX3RvX2NscikJcnhfYWNrX3RvX2NudCA8PSAjMSA4J2gwOworCWVsc2UJCQlyeF9hY2tfdG9fY250IDw9ICMxIHJ4X2Fja190b19jbnQgKyA4J2gxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyeF9hY2tfdG8gPD0gIzEgKHJ4X2Fja190b19jbnQgPT0gcnhfYWNrX3RvX3ZhbCk7CisKK2Fzc2lnbiByeF9hY2tfdG9fdmFsID0gYFVTQkZfUlhfQUNLX1RPX1ZBTF9GUzsKKworLy8gQWZ0ZXIgc2VuZGluZyBhIE9VVCB0b2tlbiB0aGUgaG9zdCBtdXN0IHNlbmQgYSBkYXRhIHBhY2tldC4KKy8vIFRoZSBob3N0IGhhcyA2MjJuUyBpbiBGdWxsIFNwZWVkIG1vZGUgYW5kIDQwMG5TIGluIEhpZ2ggU3BlZWQKKy8vIG1vZGUgdG8gc2VuZCB0aGUgZGF0YSBwYWNrZXQuCisvLyAidHhfZGF0YV90byIgaW5kaWNhdGVzIHdoZW4gdGhpcyB0aW1lIGhhcyBleHBpcmVkLgorLy8gInR4X2RhdGFfdG9fY2xyIiBjbGVhcnMgdGhlIHRpbWVyCisKK2Fzc2lnbgl0eF9kYXRhX3RvX2NsciA9IHJ4X2FjdGl2ZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYodHhfZGF0YV90b19jbHIpCXR4X2RhdGFfdG9fY250IDw9ICMxIDgnaDA7CisJZWxzZQkJCXR4X2RhdGFfdG9fY250IDw9ICMxIHR4X2RhdGFfdG9fY250ICsgOCdoMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfZGF0YV90byA8PSAjMSAodHhfZGF0YV90b19jbnQgPT0gdHhfZGF0YV90b192YWwpOworCithc3NpZ24gdHhfZGF0YV90b192YWwgPSBgVVNCRl9UWF9EQVRBX1RPX1ZBTF9GUzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEludGVycnVwdHMKKy8vCityZWcJcGlkX09VVF9yLCBwaWRfSU5fciwgcGlkX1BJTkdfciwgcGlkX1NFVFVQX3I7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXBpZF9PVVRfciA8PSAjMSBwaWRfT1VUOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlwaWRfSU5fciA8PSAjMSBwaWRfSU47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXBpZF9QSU5HX3IgPD0gIzEgcGlkX1BJTkc7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXBpZF9TRVRVUF9yIDw9ICMxIHBpZF9TRVRVUDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaW50X3VwaWRfc2V0IDw9ICMxIG1hdGNoX3IgJiAhcGlkX1NPRiAmICgKKwkJCQkoIE9VVF9lcCAmICEocGlkX09VVF9yIHwgcGlkX1BJTkdfcikpCQl8CisJCQkJKCAgSU5fZXAgJiAgIXBpZF9JTl9yKQkJCQl8CisJCQkJKENUUkxfZXAgJiAhKHBpZF9JTl9yIHwgcGlkX09VVF9yIHwgcGlkX1BJTkdfciB8IHBpZF9TRVRVUF9yKSkKKwkJCQkJKTsKKworCithc3NpZ24gaW50X3RvX3NldCAgPSAoKHN0YXRlID09IElOMikgJiByeF9hY2tfdG8pIHwgKChzdGF0ZSA9PSBPVVQpICYgdHhfZGF0YV90byk7CisKK2Fzc2lnbiBpbnRfY3JjMTZfc2V0ID0gcnhfZGF0YV9kb25lICYgY3JjMTZfZXJyOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpbnRfc2VxZXJyX3NldCA8PSAjMSBpbnRfc2VxZXJyX3NldF9kOworCityZWcJc2VuZF9zdGFsbF9yOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlzZW5kX3N0YWxsX3IgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoc2VuZF9zdGFsbCkJc2VuZF9zdGFsbF9yIDw9ICMxIDEnYjE7CisJZWxzZQkKKwlpZihzZW5kX3Rva2VuKQlzZW5kX3N0YWxsX3IgPD0gIzEgMSdiMDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1haW4gUHJvdG9jb2wgU3RhdGUgTWFjaGluZQorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJc3RhdGUgPD0gIzEgSURMRTsKKwllbHNlCisJaWYobWF0Y2gpCXN0YXRlIDw9ICMxIElETEU7CisJZWxzZQkJc3RhdGUgPD0gIzEgbmV4dF9zdGF0ZTsKKworYWx3YXlzIEAoc3RhdGUgb3IgCisJcGlkX3NlcV9lcnIgb3IgaWRtYV9kb25lIG9yIGVwX2Z1bGwgb3IgZXBfZW1wdHkgb3IKKwl0b2tlbl92YWxpZCBvciBwaWRfQUNLIG9yIHJ4X2RhdGFfZG9uZSBvcgorCXR4X2RhdGFfdG8gb3IgY3JjMTZfZXJyIG9yIAorCXJ4X2Fja190byBvciBwaWRfUElORyBvciB0eGZyX2lzbyBvciB0eGZyX2ludCBvcgorCUNUUkxfZXAgb3IgcGlkX0lOIG9yIHBpZF9PVVQgb3IgSU5fZXAgb3IgT1VUX2VwIG9yIHBpZF9TRVRVUCBvciBwaWRfU09GCisJb3IgbWF0Y2hfciBvciBhYm9ydCBvciBzZW5kX3N0YWxsX3IKKwkpCisgICBiZWdpbgorCW5leHRfc3RhdGUgPSBzdGF0ZTsKKwl0b2tlbl9waWRfc2VsX2QgPSBBQ0s7CisJc2VuZF90b2tlbl9kID0gMSdiMDsKKwlyeF9kbWFfZW4gPSAxJ2IwOworCXR4X2RtYV9lbiA9IDEnYjA7CisJdWNfc3RhdF9zZXRfZCA9IDEnYjA7CisJcnhfYWNrX3RvX2Nscl9kID0gMSdiMTsKKwlpbnRfc2VxZXJyX3NldF9kID0gMSdiMDsKKworCWNhc2Uoc3RhdGUpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgSURMRToKKwkJICAgYmVnaW4KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIElETEUgKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorYGlmZGVmIFVTQkZfREVCVUcKKwkJaWYocnN0ICYgbWF0Y2hfciAmICFwaWRfU09GKQorCQliZWdpbgorCQlpZihtYXRjaF9yID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IG1hdGNoX3IgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX1NPRiA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBwaWRfU09GIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKENUUkxfZXAgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogQ1RSTF9lcCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfSU4gPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogcGlkX0lOIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9PVVQgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogcGlkX09VVCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfU0VUVVAgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogcGlkX1NFVFVQIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9QSU5HID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IHBpZF9QSU5HIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKElOX2VwID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IElOX2VwIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKE9VVF9lcCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBPVVRfZXAgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJZW5kCitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCisJCQlpZihtYXRjaF9yICYgIXBpZF9TT0YpCisJCQkgICBiZWdpbgorLyoKKwkJCQlpZihlcF9zdGFsbCkJCS8vIEhhbHQgRm9yY2VkIHNlbmQgU1RBTEwKKwkJCQkgICBiZWdpbgorCQkJCQl0b2tlbl9waWRfc2VsX2QgPSBTVEFMTDsKKwkJCQkJc2VuZF90b2tlbl9kID0gMSdiMTsKKwkJCQkJbmV4dF9zdGF0ZSA9IFRPS0VOOworCQkJCSAgIGVuZAorCQkJCWVsc2UKKyovCisJCQkJaWYoSU5fZXAgfCAoQ1RSTF9lcCAmIHBpZF9JTikpCisJCQkJICAgYmVnaW4KKwkJCQkJaWYodHhmcl9pbnQgJiBlcF9lbXB0eSkKKwkJCQkJICAgYmVnaW4KKwkJCQkJCXRva2VuX3BpZF9zZWxfZCA9IE5BQ0s7CisJCQkJCQlzZW5kX3Rva2VuX2QgPSAxJ2IxOworCQkJCQkJbmV4dF9zdGF0ZSA9IFRPS0VOOworCQkJCQkgICBlbmQKKwkJCQkJZWxzZQorCQkJCQkgICBiZWdpbgorCQkJCQkJdHhfZG1hX2VuID0gMSdiMTsKKwkJCQkJCW5leHRfc3RhdGUgPSBJTjsKKwkJCQkJICAgZW5kCisJCQkJICAgZW5kCisJCQkJZWxzZQorCQkJCWlmKE9VVF9lcCB8IChDVFJMX2VwICYgKHBpZF9PVVQgfCBwaWRfU0VUVVApKSkKKwkJCQkgICBiZWdpbgorCQkJCQlyeF9kbWFfZW4gPSAxJ2IxOworCQkJCQluZXh0X3N0YXRlID0gT1VUOworCQkJCSAgIGVuZAorCQkJICAgZW5kCisJCSAgIGVuZAorCisJICAgVE9LRU46CisJCSAgIGJlZ2luCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBUT0tFTiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCW5leHRfc3RhdGUgPSBJRExFOworCQkgICBlbmQKKworCSAgIElOOgorCQkgICBiZWdpbgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgSU4gKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorYGlmZGVmIFVTQkZfREVCVUcKKwkJaWYoaWRtYV9kb25lID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElOOiBpZG1hX2RvbmUgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYodHhmcl9pc28gPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSU46IHR4ZnJfaXNvIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJcnhfYWNrX3RvX2Nscl9kID0gMSdiMDsKKwkJCWlmKGlkbWFfZG9uZSkKKwkJCSAgIGJlZ2luCisJCQkJaWYodHhmcl9pc28pCW5leHRfc3RhdGUgPSBVUERBVEU7CisJCQkJZWxzZQkJbmV4dF9zdGF0ZSA9IElOMjsKKwkJCSAgIGVuZAorCisJCSAgIGVuZAorCSAgIElOMjoKKwkJICAgYmVnaW4KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIElOMiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCitgaWZkZWYgVVNCRl9ERUJVRworCQlpZihyeF9hY2tfdG8gPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSU4yOiByeF9hY2tfdG8gaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYodG9rZW5fdmFsaWQgPT09IDEnYngpJGRpc3BsYXkoIkVSUk9SOiBJTjI6IHRva2VuX3ZhbGlkIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9BQ0sgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSU4yOiBwaWRfQUNLIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJcnhfYWNrX3RvX2Nscl9kID0gMSdiMDsKKwkJCS8vIFdhaXQgZm9yIEFDSyBmcm9tIEhPU1Qgb3IgVGltZW91dAorCQkJaWYocnhfYWNrX3RvKQluZXh0X3N0YXRlID0gSURMRTsKKwkJCWVsc2UKKwkJCWlmKHRva2VuX3ZhbGlkICYgcGlkX0FDSykKKwkJCSAgIGJlZ2luCisJCQkJbmV4dF9zdGF0ZSA9IFVQREFURTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCSAgIE9VVDoKKwkJICAgYmVnaW4KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIE9VVCAoJXQpIiwgJHRpbWUpOworYGVuZGlmCitgaWZkZWYgVVNCRl9ERUJVRworCQlpZih0eF9kYXRhX3RvID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IE9VVDogdHhfZGF0YV90byBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihjcmMxNl9lcnIgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogT1VUOiBjcmMxNl9lcnIgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYoYWJvcnQgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogT1VUOiBhYm9ydCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihyeF9kYXRhX2RvbmUgPT09IDEnYngpJGRpc3BsYXkoIkVSUk9SOiBPVVQ6IHJ4X2RhdGFfZG9uZSBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZih0eGZyX2lzbyA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBPVVQ6IHR4ZnJfaXNvIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9zZXFfZXJyID09PSAxJ2J4KSRkaXNwbGF5KCJFUlJPUjogT1VUOiByeF9kYXRhX2RvbmUgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQlpZih0eF9kYXRhX3RvIHwgY3JjMTZfZXJyIHwgYWJvcnQgKQorCQkJCW5leHRfc3RhdGUgPSBJRExFOworCQkJZWxzZQorCQkJaWYocnhfZGF0YV9kb25lKQorCQkJICAgYmVnaW4JCS8vIFNlbmQgQWNrCisJCQkJaWYodHhmcl9pc28pCisJCQkJICAgYmVnaW4KKwkJCQkJaWYocGlkX3NlcV9lcnIpCQlpbnRfc2VxZXJyX3NldF9kID0gMSdiMTsKKwkJCQkJbmV4dF9zdGF0ZSA9IFVQREFURVc7CisJCQkJICAgZW5kCisJCQkJZWxzZQkJbmV4dF9zdGF0ZSA9IE9VVDJBOworCQkJICAgZW5kCisJCSAgIGVuZAorCisJICAgT1VUMkI6CisJCSAgIGJlZ2luCS8vIFRoaXMgaXMgYSBkZWxheSBTdGF0ZSB0byBOQUNLIHRvIHNtYWxsIG9yIHRvCisJCQkJLy8gbGFyZ2UgcGFja2V0cy4gdGhpcyBzdGF0ZSBjb3VsZCBiZSBza2lwcGVkCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBPVVQyQiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCitgaWZkZWYgVVNCRl9ERUJVRworCQlpZihhYm9ydCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBPVVQyQTogYWJvcnQgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQlpZihhYm9ydCkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQllbHNlCQluZXh0X3N0YXRlID0gT1VUMkI7CisJCSAgIGVuZAorCSAgIE9VVDJBOgorCQkgICBiZWdpbgkvLyBTZW5kIEFDSy9OQUNLL05ZRVQKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIE9VVDJBICgldCkiLCAkdGltZSk7CitgZW5kaWYKK2BpZmRlZiBVU0JGX0RFQlVHCisJCWlmKGFib3J0ID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IE9VVDJBOiBhYm9ydCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfc2VxX2VyciA9PT0gMSdieCkkZGlzcGxheSgiRVJST1I6IE9VVDJBOiByeF9kYXRhX2RvbmUgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQlpZihhYm9ydCkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQllbHNlCisKKwkJCWlmKHNlbmRfc3RhbGxfcikKKwkJCSAgIGJlZ2luCisJCQkJdG9rZW5fcGlkX3NlbF9kID0gU1RBTEw7CisJCQkJc2VuZF90b2tlbl9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJaWYoZXBfZnVsbCkKKwkJCSAgIGJlZ2luCisJCQkJdG9rZW5fcGlkX3NlbF9kID0gTkFDSzsKKwkJCQlzZW5kX3Rva2VuX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCXRva2VuX3BpZF9zZWxfZCA9IEFDSzsKKwkJCQlzZW5kX3Rva2VuX2QgPSAxJ2IxOworCQkJCWlmKHBpZF9zZXFfZXJyKQluZXh0X3N0YXRlID0gSURMRTsKKwkJCQllbHNlCQluZXh0X3N0YXRlID0gVVBEQVRFOworCQkJICAgZW5kCisJCSAgIGVuZAorCisJICAgVVBEQVRFVzoKKwkJICAgYmVnaW4KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIFVQREFURVcgKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQluZXh0X3N0YXRlID0gVVBEQVRFOworCQkgICBlbmQKKworCSAgIFVQREFURToKKwkJICAgYmVnaW4KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIFVQREFURSAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCXVjX3N0YXRfc2V0X2QgPSAxJ2IxOworCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCSAgIGVuZAorCWVuZGNhc2UKKyAgIGVuZAorCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BsLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGwudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOGEyODFjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BsLnYKQEAgLTAsMCArMSw0MTkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQcm90b2NvbCBMYXllciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgYmxvY2sgaXMgdHlwaWNhbGx5IHJlZmVycmVkIHRvIGFzIHRoZSBTRUkgaW4gVVNCICAgICAgLy8vLworLy8vLyAgU3BlY2lmaWNhdGlvbi4gSXQgZW5jYXBzdWxhdGVzIHRoZSBQYWNrZXQgQXNzZW1ibGVyLCAgICAgICAvLy8vCisvLy8vICBkaXNhc3NlbWJsZXIsIHByb3RvY29sIGVuZ2luZSBhbmQgaW50ZXJuYWwgRE1BICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1Y250Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX3BsLnYsdiAxLjIgMjAwMi0wOS0yNSAwNjowNjo0OSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTI1IDA2OjA2OjQ5ICQKKy8vICAkUmV2aXNpb246IDEuMiAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTkgMTI6MDc6MjggIHJ1ZGkKKy8vICAgICAgICAgICAgICAgSW5pdGlhbCBDaGVja2luCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfcGwoCWNsaywgcnN0LAorCisJCS8vIFVUTUkgSW50ZXJmYWNlCisJCXJ4X2RhdGEsIHJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VyciwKKwkJdHhfZGF0YSwgdHhfdmFsaWQsIHR4X3ZhbGlkX2xhc3QsIHR4X3JlYWR5LAorCQl0eF9maXJzdCwgdHhfdmFsaWRfb3V0LAorCisJCXRva2VuX3ZhbGlkLAorCisJCS8vIFJlZ2lzdGVyIEZpbGUgSW50ZXJmYWNlCisJCWZhLAorCQllcF9zZWwsIAorCQl4X2J1c3ksCisJCWludF9jcmMxNl9zZXQsIGludF90b19zZXQsIGludF9zZXFlcnJfc2V0LAorCisJCS8vIE1pc2MKKwkJZnJtX25hdCwKKwkJcGlkX2NzX2VyciwgbnNlX2VyciwKKwkJY3JjNV9lcnIsCisJCXJ4X3NpemUsIHJ4X2RvbmUsCisJCWN0cmxfc2V0dXAsIGN0cmxfaW4sIGN0cmxfb3V0LAorCisJCS8vIEJsb2NrIEZyYW1lcworCQllcF9iZl9lbiwgZXBfYmZfc2l6ZSwKKwkJZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZSwKKworCQkvLyBFUCBJbnRlcmZhY2UKKwkJY3NyLAorCQl0eF9kYXRhX3N0LCAKKwkJcnhfY3RybF9kYXRhLCAKKwkJcnhfY3RybF9kYXRhX2QsIAorCQlyeF9jdHJsX2R2YWxpZCwKKwkJcnhfY3RybF9kZG9uZSwKKwkJaWRtYV9yZSwgaWRtYV93ZSwKKwkJZXBfZW1wdHksIGVwX2Z1bGwsIHNlbmRfc3RhbGwKKworCQkpOworCisvLyBVVE1JIEludGVyZmFjZQoraW5wdXQJCWNsaywgcnN0OworaW5wdXQJWzc6MF0JcnhfZGF0YTsKK2lucHV0CQlyeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnI7CitvdXRwdXQJWzc6MF0JdHhfZGF0YTsKK291dHB1dAkJdHhfdmFsaWQ7CitvdXRwdXQJCXR4X3ZhbGlkX2xhc3Q7CitpbnB1dAkJdHhfcmVhZHk7CitvdXRwdXQJCXR4X2ZpcnN0OworaW5wdXQJCXR4X3ZhbGlkX291dDsKKworb3V0cHV0CQl0b2tlbl92YWxpZDsKKworLy8gUmVnaXN0ZXIgRmlsZSBpbnRlcmZhY2UKK2lucHV0CVs2OjBdCWZhOwkJLy8gRnVuY3Rpb24gQWRkcmVzcyAoYXMgc2V0IGJ5IHRoZSBjb250cm9sbGVyKQorb3V0cHV0CVszOjBdCWVwX3NlbDsJCS8vIEVuZHBvaW50IE51bWJlciBJbnB1dAorb3V0cHV0CQl4X2J1c3k7CQkvLyBJbmRpY2F0ZXMgVVNCIGlzIGJ1c3kKKworb3V0cHV0CQlpbnRfY3JjMTZfc2V0OwkvLyBTZXQgQ1JDMTYgZXJyb3IgaW50ZXJydXB0CitvdXRwdXQJCWludF90b19zZXQ7CS8vIFNldCB0aW1lIG91dCBpbnRlcnJ1cHQKK291dHB1dAkJaW50X3NlcWVycl9zZXQ7CS8vIFNldCBQSUQgc2VxdWVuY2UgZXJyb3IgaW50ZXJydXB0CisKKy8vIE1pc2MKK291dHB1dAkJcGlkX2NzX2VycjsJLy8gcGlkIGNoZWNrc3VtIGVycm9yCitvdXRwdXQJCWNyYzVfZXJyOwkvLyBjcmM1IGVycm9yCitvdXRwdXQJWzMxOjBdCWZybV9uYXQ7CitvdXRwdXQJCW5zZV9lcnI7CS8vIG5vIHN1Y2ggZW5kcG9pbnQgZXJyb3IKK291dHB1dAlbNzowXQlyeF9zaXplOworb3V0cHV0CQlyeF9kb25lOworb3V0cHV0CQljdHJsX3NldHVwOworb3V0cHV0CQljdHJsX2luOworb3V0cHV0CQljdHJsX291dDsKK2lucHV0CQllcF9iZl9lbjsKK2lucHV0CVs2OjBdCWVwX2JmX3NpemU7CitvdXRwdXQJCWRyb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWU7CisKKy8vIEVuZHBvaW50IEludGVyZmFjZXMKK2lucHV0CVsxMzowXQljc3I7CQoraW5wdXQJWzc6MF0JdHhfZGF0YV9zdDsKK291dHB1dAlbNzowXQlyeF9jdHJsX2RhdGE7CitvdXRwdXQJWzc6MF0JcnhfY3RybF9kYXRhX2Q7CitvdXRwdXQJCXJ4X2N0cmxfZHZhbGlkOworb3V0cHV0CQlyeF9jdHJsX2Rkb25lOworb3V0cHV0CQlpZG1hX3JlLCBpZG1hX3dlOworaW5wdXQJCWVwX2VtcHR5OworaW5wdXQJCWVwX2Z1bGw7CisKK2lucHV0CQlzZW5kX3N0YWxsOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworLy8gUGFja2V0IERpc2Fzc2VtYmxlciBJbnRlcmZhY2UKK3dpcmUJCWNsaywgcnN0Oword2lyZQlbNzowXQlyeF9kYXRhOword2lyZQkJcGlkX09VVCwgcGlkX0lOLCBwaWRfU09GLCBwaWRfU0VUVVA7Cit3aXJlCQlwaWRfREFUQTAsIHBpZF9EQVRBMSwgcGlkX0RBVEEyLCBwaWRfTURBVEE7Cit3aXJlCQlwaWRfQUNLLCBwaWRfTkFDSywgcGlkX1NUQUxMLCBwaWRfTllFVDsKK3dpcmUJCXBpZF9QUkUsIHBpZF9FUlIsIHBpZF9TUExJVCwgcGlkX1BJTkc7Cit3aXJlCVs2OjBdCXRva2VuX2ZhZHI7Cit3aXJlCQl0b2tlbl92YWxpZDsKK3dpcmUJCWNyYzVfZXJyOword2lyZQlbMTA6MF0JZnJhbWVfbm87Cit3aXJlCVs3OjBdCXJ4X2N0cmxfZGF0YTsKK3JlZwlbNzowXQlyeF9jdHJsX2RhdGFfZDsKK3dpcmUJCXJ4X2N0cmxfZHZhbGlkOword2lyZQkJcnhfY3RybF9kZG9uZTsKK3dpcmUJCWNyYzE2X2VycjsKK3dpcmUJCXJ4X3NlcV9lcnI7CisKKy8vIFBhY2tldCBBc3NlbWJsZXIgSW50ZXJmYWNlCit3aXJlCQlzZW5kX3Rva2VuOword2lyZQlbMTowXQl0b2tlbl9waWRfc2VsOword2lyZQkJc2VuZF9kYXRhOword2lyZQlbMTowXQlkYXRhX3BpZF9zZWw7Cit3aXJlCVs3OjBdCXR4X2RhdGFfc3Q7Cit3aXJlCVs3OjBdCXR4X2RhdGFfc3RfbzsKK3dpcmUJCXJkX25leHQ7CisKKy8vIElETUEgSW50ZXJmYWNlCit3aXJlCQlyeF9kbWFfZW47CS8vIEFsbG93cyB0aGUgZGF0YSB0byBiZSBzdG9yZWQKK3dpcmUJCXR4X2RtYV9lbjsJLy8gQWxsb3dzIGZvciBkYXRhIHRvIGJlIHJldHJpZXZlZAord2lyZQkJYWJvcnQ7CQkvLyBBYm9ydCBUcmFuc2ZlciAodGltZV9vdXQsIGNyY19lcnIgb3IgcnhfZXJyb3IpCit3aXJlCQlpZG1hX2RvbmU7CS8vIERNQSBpcyBkb25lCisKKy8vIE1lbW9yeSBBcmJpdGVyIEludGVyZmFjZQord2lyZQkJaWRtYV93ZTsKK3dpcmUJCWlkbWFfcmU7CisKKy8vIExvY2FsIHNpZ25hbHMKK3dpcmUJCXBpZF9iYWQ7CisKK3JlZwkJaG1zX2NsazsJLy8gMC41IE1pY3JvIFNlY29uZCBDbG9jaworcmVnCVs0OjBdCWhtc19jbnQ7CityZWcJWzEwOjBdCWZyYW1lX25vX3I7CS8vIEN1cnJlbnQgRnJhbWUgTnVtYmVyIHJlZ2lzdGVyCit3aXJlCQlmcmFtZV9ub193ZTsKK3JlZwlbMTE6MF0Jc29mX3RpbWU7CS8vIFRpbWUgc2luY2UgbGFzdCBzb2YKK3JlZwkJY2xyX3NvZl90aW1lOword2lyZQkJZnNlbDsJCS8vIFRoaXMgRnVuY3Rpb24gaXMgc2VsZWN0ZWQKK3dpcmUJCW1hdGNoX287CisKK3JlZwkJZnJhbWVfbm9fd2VfcjsKK3JlZwkJY3RybF9zZXR1cDsKK3JlZwkJY3RybF9pbjsKK3JlZwkJY3RybF9vdXQ7CisKK3dpcmUJCWlkbWFfd2VfZDsKK3dpcmUJCWVwX2VtcHR5X2ludDsKK3dpcmUJCXJ4X2J1c3k7Cit3aXJlCQl0eF9idXN5OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworYXNzaWduIHhfYnVzeSA9IHR4X2J1c3kgfCByeF9idXN5OworCisvLyBQSURzIHdlIHNob3VsZCBuZXZlciByZWNlaXZlCithc3NpZ24gcGlkX2JhZCA9IHBpZF9BQ0sgfCBwaWRfTkFDSyB8IHBpZF9TVEFMTCB8IHBpZF9OWUVUIHwgcGlkX1BSRSB8CisJCQlwaWRfRVJSIHwgcGlkX1NQTElUIHwgIHBpZF9QSU5HOworCithc3NpZ24gbWF0Y2hfbyA9ICFwaWRfYmFkICYgdG9rZW5fdmFsaWQgJiAhY3JjNV9lcnI7CisKKy8vIFJlY2VpdmluZyBTZXR1cAorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY3RybF9zZXR1cCA8PSAjMSB0b2tlbl92YWxpZCAmIHBpZF9TRVRVUCAmIChlcF9zZWw9PTQnaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljdHJsX2luIDw9ICMxIHRva2VuX3ZhbGlkICYgcGlkX0lOICYgKGVwX3NlbD09NCdoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWN0cmxfb3V0IDw9ICMxIHRva2VuX3ZhbGlkICYgcGlkX09VVCAmIChlcF9zZWw9PTQnaDApOworCisvLyBGcmFtZSBOdW1iZXIgKGZyb20gU09GIHRva2VuKQorYXNzaWduIGZyYW1lX25vX3dlID0gdG9rZW5fdmFsaWQgJiAhY3JjNV9lcnIgJiBwaWRfU09GOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlmcmFtZV9ub193ZV9yIDw9ICMxIGZyYW1lX25vX3dlOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJZnJhbWVfbm9fciA8PSAjMSAxMSdoMDsKKwllbHNlCisJaWYoZnJhbWVfbm9fd2VfcikJZnJhbWVfbm9fciA8PSAjMSBmcmFtZV9ubzsKKworLy9TT0YgZGVsYXkgY291bnRlcgorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY2xyX3NvZl90aW1lIDw9ICMxIGZyYW1lX25vX3dlOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihjbHJfc29mX3RpbWUpCXNvZl90aW1lIDw9ICMxIDEyJ2gwOworCWVsc2UKKwlpZihobXNfY2xrKQkJc29mX3RpbWUgPD0gIzEgc29mX3RpbWUgKyAxMidoMTsKKworYXNzaWduIGZybV9uYXQgPSB7NCdoMCwgMSdiMCwgZnJhbWVfbm9fciwgNCdoMCwgc29mX3RpbWV9OworCisvLyAwLjUgTWljcm8gU2Vjb25kcyBDbG9jayBHZW5lcmF0b3IKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWhtc19jbnQgPD0gIzEgNSdoMDsKKwllbHNlCisJaWYoaG1zX2NsayB8IGZyYW1lX25vX3dlX3IpCQlobXNfY250IDw9ICMxIDUnaDA7CisJZWxzZQkJCQkJaG1zX2NudCA8PSAjMSBobXNfY250ICsgNSdoMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaG1zX2NsayA8PSAjMSAoaG1zX2NudCA9PSBgVVNCRl9ITVNfREVMKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcnhfY3RybF9kYXRhX2QgPD0gcnhfY3RybF9kYXRhOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgYWRkcmVzc2VkCithc3NpZ24gZnNlbCA9ICh0b2tlbl9mYWRyID09IGZhKTsKKworLy8gT25seSB3cml0ZSB3aGVuIHdlIGFyZSBhZGRyZXNzZWQgISEhCithc3NpZ24gaWRtYV93ZSA9IGlkbWFfd2VfZCAmIGZzZWw7IC8vIG1vdmVkIGZ1bGwgY2hlY2sgdG8gaWRtYSAuLi4gICYgIWVwX2Z1bGw7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNb2R1bGUgSW5zdGFudGlhdGlvbnMKKy8vCisKKy8vUGFja2V0IERlY29kZXIKK3VzYjFkX3BkCXUwKAkuY2xrKAkJY2xrCQkpLAorCQkucnN0KAkJcnN0CQkpLAorCisJCS5yeF9kYXRhKAlyeF9kYXRhCQkpLAorCQkucnhfdmFsaWQoCXJ4X3ZhbGlkCSksCisJCS5yeF9hY3RpdmUoCXJ4X2FjdGl2ZQkpLAorCQkucnhfZXJyKAlyeF9lcnIJCSksCisJCS5waWRfT1VUKAlwaWRfT1VUCQkpLAorCQkucGlkX0lOKAlwaWRfSU4JCSksCisJCS5waWRfU09GKAlwaWRfU09GCQkpLAorCQkucGlkX1NFVFVQKAlwaWRfU0VUVVAJKSwKKwkJLnBpZF9EQVRBMCgJcGlkX0RBVEEwCSksCisJCS5waWRfREFUQTEoCXBpZF9EQVRBMQkpLAorCQkucGlkX0RBVEEyKAlwaWRfREFUQTIJKSwKKwkJLnBpZF9NREFUQSgJcGlkX01EQVRBCSksCisJCS5waWRfQUNLKAlwaWRfQUNLCQkpLAorCQkucGlkX05BQ0soCXBpZF9OQUNLCSksCisJCS5waWRfU1RBTEwoCXBpZF9TVEFMTAkpLAorCQkucGlkX05ZRVQoCXBpZF9OWUVUCSksCisJCS5waWRfUFJFKAlwaWRfUFJFCQkpLAorCQkucGlkX0VSUigJcGlkX0VSUgkJKSwKKwkJLnBpZF9TUExJVCgJcGlkX1NQTElUCSksCisJCS5waWRfUElORygJcGlkX1BJTkcJKSwKKwkJLnBpZF9ja3NfZXJyKAlwaWRfY3NfZXJyCSksCisJCS50b2tlbl9mYWRyKAl0b2tlbl9mYWRyCSksCisJCS50b2tlbl9lbmRwKAllcF9zZWwJCSksCisJCS50b2tlbl92YWxpZCgJdG9rZW5fdmFsaWQJKSwKKwkJLmNyYzVfZXJyKAljcmM1X2VycgkpLAorCQkuZnJhbWVfbm8oCWZyYW1lX25vCSksCisJCS5yeF9kYXRhX3N0KAlyeF9jdHJsX2RhdGEJKSwKKwkJLnJ4X2RhdGFfdmFsaWQoCXJ4X2N0cmxfZHZhbGlkCSksCisJCS5yeF9kYXRhX2RvbmUoCXJ4X2N0cmxfZGRvbmUJKSwKKwkJLmNyYzE2X2VycigJY3JjMTZfZXJyCSksCisJCS5zZXFfZXJyKAlyeF9zZXFfZXJyCSksCisJCS5yeF9idXN5KAlyeF9idXN5CQkpCisJCSk7CisKKy8vIFBhY2tldCBBc3NlbWJsZXIKK3VzYjFkX3BhCXUxKAkuY2xrKAkJY2xrCQkpLAorCQkucnN0KAkJcnN0CQkpLAorCQkudHhfZGF0YSgJdHhfZGF0YQkJKSwKKwkJLnR4X3ZhbGlkKAl0eF92YWxpZAkpLAorCQkudHhfdmFsaWRfbGFzdCgJdHhfdmFsaWRfbGFzdAkpLAorCQkudHhfcmVhZHkoCXR4X3JlYWR5CSksCisJCS50eF9maXJzdCgJdHhfZmlyc3QJKSwKKwkJLnNlbmRfdG9rZW4oCXNlbmRfdG9rZW4JKSwKKwkJLnRva2VuX3BpZF9zZWwoCXRva2VuX3BpZF9zZWwJKSwKKwkJLnNlbmRfZGF0YSgJc2VuZF9kYXRhCSksCisJCS5kYXRhX3BpZF9zZWwoCWRhdGFfcGlkX3NlbAkpLAorCQkudHhfZGF0YV9zdCgJdHhfZGF0YV9zdF9vCSksCisJCS5yZF9uZXh0KAlyZF9uZXh0CQkpLAorCQkuZXBfZW1wdHkoCWVwX2VtcHR5X2ludCkKKwkJKTsKKworLy8gSW50ZXJuYWwgRE1BIC8gTWVtb3J5IEFyYml0ZXIgSW50ZXJmYWNlCit1c2IxZF9pZG1hCisJdTIoCS5jbGsoCQljbGsJCSksCisJCS5yc3QoCQlyc3QJCSksCisKKwkJLnR4X3ZhbGlkKAl0eF92YWxpZAkpLAorCQkucnhfZGF0YV92YWxpZCgJcnhfY3RybF9kdmFsaWQJKSwKKwkJLnJ4X2RhdGFfZG9uZSgJcnhfY3RybF9kZG9uZQkpLAorCQkuc2VuZF9kYXRhKAlzZW5kX2RhdGEJKSwKKwkJLnJkX25leHQoCXJkX25leHQJCSksCisKKwkJLnR4X2RhdGFfc3RfaSgJdHhfZGF0YV9zdAkpLAorCQkudHhfZGF0YV9zdF9vKAl0eF9kYXRhX3N0X28JKSwKKwkJLmVwX3NlbCgJZXBfc2VsCQkpLAorCisJCS5lcF9iZl9lbigJZXBfYmZfZW4JKSwKKwkJLmVwX2JmX3NpemUoCWVwX2JmX3NpemUJKSwKKwkJLmRyb3BwZWRfZnJhbWUoZHJvcHBlZF9mcmFtZQkpLAorCQkubWlzYWxpZ25lZF9mcmFtZShtaXNhbGlnbmVkX2ZyYW1lKSwKKworCQkudHhfYnVzeSgJdHhfYnVzeQkJKSwKKworCQkudHhfZG1hX2VuKAl0eF9kbWFfZW4JKSwKKwkJLnJ4X2RtYV9lbigJcnhfZG1hX2VuCSksCisJCS5pZG1hX2RvbmUoCWlkbWFfZG9uZQkpLAorCQkuc2l6ZSgJCWNzcls4OjBdCSksCisJCS5yeF9jbnQoCXJ4X3NpemUJCSksCisJCS5yeF9kb25lKAlyeF9kb25lCQkpLAorCQkubXdlKAkJaWRtYV93ZV9kCSksCisJCS5tcmUoCQlpZG1hX3JlCQkpLAorCQkuZXBfZW1wdHkoCWVwX2VtcHR5CSksCisJCS5lcF9lbXB0eV9pbnQoCWVwX2VtcHR5X2ludAkpLAorCQkuZXBfZnVsbCgJZXBfZnVsbAkJKQorCQkpOworCisvLyBQcm90b2NvbCBFbmdpbmUKK3VzYjFkX3BlCisJdTMoCS5jbGsoCQkJY2xrCQkJKSwKKwkJLnJzdCgJCQlyc3QJCQkpLAorCisJCS50eF92YWxpZCgJCXR4X3ZhbGlkX291dAkJKSwKKwkJLnJ4X2FjdGl2ZSgJCXJ4X2FjdGl2ZQkJKSwKKwkJLnBpZF9PVVQoCQlwaWRfT1VUCQkJKSwKKwkJLnBpZF9JTigJCXBpZF9JTgkJCSksCisJCS5waWRfU09GKAkJcGlkX1NPRgkJCSksCisJCS5waWRfU0VUVVAoCQlwaWRfU0VUVVAJCSksCisJCS5waWRfREFUQTAoCQlwaWRfREFUQTAJCSksCisJCS5waWRfREFUQTEoCQlwaWRfREFUQTEJCSksCisJCS5waWRfREFUQTIoCQlwaWRfREFUQTIJCSksCisJCS5waWRfTURBVEEoCQlwaWRfTURBVEEJCSksCisJCS5waWRfQUNLKAkJcGlkX0FDSwkJCSksCisJCS5waWRfUElORygJCXBpZF9QSU5HCQkpLAorCQkudG9rZW5fdmFsaWQoCQl0b2tlbl92YWxpZAkJKSwKKwkJLnJ4X2RhdGFfZG9uZSgJCXJ4X2N0cmxfZGRvbmUJCSksCisJCS5jcmMxNl9lcnIoCQljcmMxNl9lcnIJCSksCisJCS5zZW5kX3Rva2VuKAkJc2VuZF90b2tlbgkJKSwKKwkJLnRva2VuX3BpZF9zZWwoCQl0b2tlbl9waWRfc2VsCQkpLAorCQkuZGF0YV9waWRfc2VsKAkJZGF0YV9waWRfc2VsCQkpLAorCQkucnhfZG1hX2VuKAkJcnhfZG1hX2VuCQkpLAorCQkudHhfZG1hX2VuKAkJdHhfZG1hX2VuCQkpLAorCQkuYWJvcnQoCQkJYWJvcnQJCQkpLAorCQkuaWRtYV9kb25lKAkJaWRtYV9kb25lCQkpLAorCQkuZnNlbCgJCQlmc2VsCQkJKSwKKwkJLmVwX3NlbCgJCWVwX3NlbAkJCSksCisJCS5lcF9mdWxsKAkJZXBfZnVsbAkJCSksCisJCS5lcF9lbXB0eSgJCWVwX2VtcHR5CQkpLAorCQkubWF0Y2goCQkJbWF0Y2hfbwkJCSksCisJCS5uc2VfZXJyKAkJbnNlX2VycgkJCSksCisJCS5pbnRfdXBpZF9zZXQoCQkgICAgICAgICAJCSksCisJCS5pbnRfY3JjMTZfc2V0KAkJaW50X2NyYzE2X3NldAkJKSwKKwkJLmludF90b19zZXQoCQlpbnRfdG9fc2V0CQkpLAorCQkuaW50X3NlcWVycl9zZXQoCWludF9zZXFlcnJfc2V0CQkpLAorCQkuY3NyKAkJCWNzcgkJCSksCisJCS5zZW5kX3N0YWxsKAkJc2VuZF9zdGFsbAkJKQorCQkpOworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9yb20xLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcm9tMS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllNzUzZjYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcm9tMS52CkBAIC0wLDAgKzEsMjQzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRvciBST00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX3JvbTEudix2IDEuMS4xLjEgMjAwMi0wOS0xOSAxMjowNzoyOSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTE5IDEyOjA3OjI5ICQKKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF9yb20xKGNsaywgYWRyLCBkb3V0KTsKK2lucHV0CQljbGs7CitpbnB1dAlbNjowXQlhZHI7CitvdXRwdXQJWzc6MF0JZG91dDsKKworcmVnCVs3OjBdCWRvdXQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWNhc2UoYWRyKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgICBERVZJQ0UgRGVzY3JpcHRvciAgICAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICA3J2gwMDoJZG91dCA8PSAjMSA4J2QxODsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDAxOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2gwMjoJZG91dCA8PSAjMSA4J2gwMDsJLy8gVVNCIHZlcnNpb24gbG93IGJ5dGUKKwkgICA3J2gwMzoJZG91dCA8PSAjMSA4J2gwMTsJLy8gVVNCIHZlcnNpb24gaGlnaCBieXRlCisJICAgNydoMDQ6CWRvdXQgPD0gIzEgOCdoZmY7CS8vIGRldmljZSBjbGFzcworCSAgIDcnaDA1Oglkb3V0IDw9ICMxIDgnaDAwOwkvLyBkZXZpY2Ugc3ViIGNsYXNzCisJICAgNydoMDY6CWRvdXQgPD0gIzEgOCdoZmY7CS8vIGRldmljZSBwcm90b2NvbAorCSAgIDcnaDA3Oglkb3V0IDw9ICMxIDgnZDY0OwkvLyBtYXggcGFja2V0IHNpemUKKwkgICA3J2gwODoJZG91dCA8PSAjMSA4J2gzNDsJLy8gdmVuZG9yIElEIGxvdyBieXRlCisJICAgNydoMDk6CWRvdXQgPD0gIzEgOCdoMTI7CS8vIHZlbmRvciBJRCBoaWdoIGJ5dGUKKwkgICA3J2gwYToJZG91dCA8PSAjMSA4J2g3ODsJLy8gcHJvZHVjdCBJRCBsb3cgYnl0ZQorCSAgIDcnaDBiOglkb3V0IDw9ICMxIDgnaDU2OwkvLyBwcm9kdWN0IElEIGhpZ2ggYnl0ZQorCSAgIDcnaDBjOglkb3V0IDw9ICMxIDgnaDEwOwkvLyBkZXZpY2UgcmVsLiBudW1iZXIgbG93IGJ5dGUKKwkgICA3J2gwZDoJZG91dCA8PSAjMSA4J2gwMDsJLy8gZGV2aWNlIHJlbC4gbnVtYmVyIGhpZ2ggYnl0ZQorCSAgIDcnaDBlOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBNYW51ZmFjdHVyZXIgU3RyaW5nIEluZGV4CisJICAgNydoMGY6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIFByb2R1Y3QgRGVzY3IuIFN0cmluZyBJbmRleAorCSAgIDcnaDEwOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBTL04gU3RyaW5nIEluZGV4CisJICAgNydoMTE6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIE51bWJlciBvZiBwb3NzaWJsZSBjb25maWcuCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09IENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICA3J2gxMjoJZG91dCA8PSAjMSA4J2gwOTsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDEzOglkb3V0IDw9ICMxIDgnaDAyOwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2gxNDoJZG91dCA8PSAjMSA4J2Q1MzsJLy8gdG90YWwgZGF0YSBsZW5ndGggbG93IGJ5dGUKKwkgICA3J2gxNToJZG91dCA8PSAjMSA4J2QwMDsJLy8gdG90YWwgZGF0YSBsZW5ndGggaGlnaCBieXRlCisJICAgNydoMTY6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIG51bWJlciBvZiBpbnRlcmZhY2VzCisJICAgNydoMTc6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIG51bWJlciBvZiBjb25maWd1cmF0aW9ucworCSAgIDcnaDE4Oglkb3V0IDw9ICMxIDgnaDAwOwkvLyBDb25mLiBTdHJpbmcgSW5kZXgKKwkgICA3J2gxOToJZG91dCA8PSAjMSA4J2g0MDsJLy8gQ29uZmlnLiBDaGFyYWN0ZXJpc3RpY3MKKwkgICA3J2gxYToJZG91dCA8PSAjMSA4J2gwMDsJLy8gTWF4LiBQb3dlciBDb25zdW1wdGlvbgorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIEludGVyZmFjZSBEZXNjcmlwdG9yICAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgNydoMWI6CWRvdXQgPD0gIzEgOCdoMDk7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2gxYzoJZG91dCA8PSAjMSA4J2gwNDsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoMWQ6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIGludGVyZmFjZSBudW1iZXIKKwkgICA3J2gxZToJZG91dCA8PSAjMSA4J2gwMDsJLy8gYWx0ZXJuYXRlIHNldHRpbmcKKwkgICA3J2gxZjoJZG91dCA8PSAjMSA4J2gwNTsJLy8gbnVtYmVyIG9mIGVuZHBvaW50cworCSAgIDcnaDIwOglkb3V0IDw9ICMxIDgnaGZmOwkvLyBpbnRlcmZhY2UgY2xhc3MKKwkgICA3J2gyMToJZG91dCA8PSAjMSA4J2gwMTsJLy8gaW50ZXJmYWNlIHN1YiBjbGFzcworCSAgIDcnaDIyOglkb3V0IDw9ICMxIDgnaGZmOwkvLyBpbnRlcmZhY2UgcHJvdG9jb2wKKwkgICA3J2gyMzoJZG91dCA8PSAjMSA4J2gwMDsJLy8gaW50ZXJmYWNlIHN0cmluZyBpbmRleAorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIEVuZHBvaW50IDEgRGVzY3JpcHRvciAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgNydoMjQ6CWRvdXQgPD0gIzEgOCdoMDc7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2gyNToJZG91dCA8PSAjMSA4J2gwNTsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoMjY6CWRvdXQgPD0gIzEgOCdoODE7CS8vIGVuZHBvaW50IGFkZHJlc3MKKwkgICA3J2gyNzoJZG91dCA8PSAjMSA4J2gwMTsJLy8gZW5kcG9pbnQgYXR0cmlidXRlcworCSAgIDcnaDI4Oglkb3V0IDw9ICMxIDgnaDAwOwkvLyBtYXggcGFja2V0IHNpemUgbG93IGJ5dGUKKwkgICA3J2gyOToJZG91dCA8PSAjMSA4J2gwMTsJLy8gbWF4IHBhY2tldCBzaXplIGhpZ2ggYnl0ZQorCSAgIDcnaDJhOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBwb2xsaW5nIGludGVydmFsCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgRW5kcG9pbnQgMiBEZXNjcmlwdG9yICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICA3J2gyYjoJZG91dCA8PSAjMSA4J2gwNzsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDJjOglkb3V0IDw9ICMxIDgnaDA1OwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2gyZDoJZG91dCA8PSAjMSA4J2gwMjsJLy8gZW5kcG9pbnQgYWRkcmVzcworCSAgIDcnaDJlOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBlbmRwb2ludCBhdHRyaWJ1dGVzCisJICAgNydoMmY6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIG1heCBwYWNrZXQgc2l6ZSBsb3cgYnl0ZQorCSAgIDcnaDMwOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBtYXggcGFja2V0IHNpemUgaGlnaCBieXRlCisJICAgNydoMzE6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIHBvbGxpbmcgaW50ZXJ2YWwKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBFbmRwb2ludCAzIERlc2NyaXB0b3IgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgIDcnaDMyOglkb3V0IDw9ICMxIDgnaDA3OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoMzM6CWRvdXQgPD0gIzEgOCdoMDU7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDM0Oglkb3V0IDw9ICMxIDgnaDgzOwkvLyBlbmRwb2ludCBhZGRyZXNzCisJICAgNydoMzU6CWRvdXQgPD0gIzEgOCdoMDI7CS8vIGVuZHBvaW50IGF0dHJpYnV0ZXMKKwkgICA3J2gzNjoJZG91dCA8PSAjMSA4J2Q2NDsJLy8gbWF4IHBhY2tldCBzaXplIGxvdyBieXRlCisJICAgNydoMzc6CWRvdXQgPD0gIzEgOCdkMDA7CS8vIG1heCBwYWNrZXQgc2l6ZSBoaWdoIGJ5dGUKKwkgICA3J2gzODoJZG91dCA8PSAjMSA4J2gwMTsJLy8gcG9sbGluZyBpbnRlcnZhbAorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIEVuZHBvaW50IDQgRGVzY3JpcHRvciAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgNydoMzk6CWRvdXQgPD0gIzEgOCdoMDc7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2gzYToJZG91dCA8PSAjMSA4J2gwNTsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoM2I6CWRvdXQgPD0gIzEgOCdoMDQ7CS8vIGVuZHBvaW50IGFkZHJlc3MKKwkgICA3J2gzYzoJZG91dCA8PSAjMSA4J2gwMjsJLy8gZW5kcG9pbnQgYXR0cmlidXRlcworCSAgIDcnaDNkOglkb3V0IDw9ICMxIDgnZDY0OwkvLyBtYXggcGFja2V0IHNpemUgbG93IGJ5dGUKKwkgICA3J2gzZToJZG91dCA8PSAjMSA4J2QwMDsJLy8gbWF4IHBhY2tldCBzaXplIGhpZ2ggYnl0ZQorCSAgIDcnaDNmOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBwb2xsaW5nIGludGVydmFsCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgRW5kcG9pbnQgNSBEZXNjcmlwdG9yICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICA3J2g0MDoJZG91dCA8PSAjMSA4J2gwNzsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDQxOglkb3V0IDw9ICMxIDgnaDA1OwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2g0MjoJZG91dCA8PSAjMSA4J2g4NTsJLy8gZW5kcG9pbnQgYWRkcmVzcworCSAgIDcnaDQzOglkb3V0IDw9ICMxIDgnaDAzOwkvLyBlbmRwb2ludCBhdHRyaWJ1dGVzCisJICAgNydoNDQ6CWRvdXQgPD0gIzEgOCdkNjQ7CS8vIG1heCBwYWNrZXQgc2l6ZSBsb3cgYnl0ZQorCSAgIDcnaDQ1Oglkb3V0IDw9ICMxIDgnZDAwOwkvLyBtYXggcGFja2V0IHNpemUgaGlnaCBieXRlCisJICAgNydoNDY6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIHBvbGxpbmcgaW50ZXJ2YWwKKworLyoKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09IFN0cmluZyBEZXNjcmlwdG9yIExhbmcgSUQ9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgIDcnaDQ3Oglkb3V0IDw9ICMxIDgnZDA2OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoNDg6CWRvdXQgPD0gIzEgOCdkMDM7CS8vIGRlc2NyaXB0b3IgdHlwZQorCisJICAgNydoNDk6CWRvdXQgPD0gIzEgOCdkMDk7CS8vIExhbmd1YWdlIElEIDAgbG93IGJ5dGUKKwkgICA3J2g0YToJZG91dCA8PSAjMSA4J2QwNDsJLy8gTGFuZ3VhZ2UgSUQgMCBoaWdoIGJ5dGUKKworCSAgIDcnaDRiOglkb3V0IDw9ICMxIDgnZDA5OwkvLyBMYW5ndWFnZSBJRCAxIGxvdyBieXRlCisJICAgNydoNGM6CWRvdXQgPD0gIzEgOCdkMDQ7CS8vIExhbmd1YWdlIElEIDEgaGlnaCBieXRlCisKKwkgICA3J2g0ZDoJZG91dCA8PSAjMSA4J2QwOTsJLy8gTGFuZ3VhZ2UgSUQgMiBsb3cgYnl0ZQorCSAgIDcnaDRlOglkb3V0IDw9ICMxIDgnZDA0OwkvLyBMYW5ndWFnZSBJRCAyIGhpZ2ggYnl0ZQorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIFN0cmluZyBEZXNjcmlwdG9yIDAgICAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICA3J2g1MDoJZG91dCA8PSAjMSA4J2QwMTA7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2g1MToJZG91dCA8PSAjMSA4J2QwMzsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoNTI6CWRvdXQgPD0gIzEgIjAiOworCSAgIDcnaDUzOglkb3V0IDw9ICMxICIgIjsKKwkgICA3J2g1NDoJZG91dCA8PSAjMSAiZyI7CisJICAgNydoNTU6CWRvdXQgPD0gIzEgIm4iOworCSAgIDcnaDU2Oglkb3V0IDw9ICMxICJpIjsKKwkgICA3J2g1NzoJZG91dCA8PSAjMSAiciI7CisJICAgNydoNTg6CWRvdXQgPD0gIzEgInQiOworCSAgIDcnaDU5Oglkb3V0IDw9ICMxICJTIjsKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBTdHJpbmcgRGVzY3JpcHRvciAxICAgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJICAgNydoNjA6CWRvdXQgPD0gIzEgOCdkMDEwOwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoNjE6CWRvdXQgPD0gIzEgOCdkMDM7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDYyOglkb3V0IDw9ICMxICIxIjsKKwkgICA3J2g2MzoJZG91dCA8PSAjMSAiICI7CisJICAgNydoNjQ6CWRvdXQgPD0gIzEgImciOworCSAgIDcnaDY1Oglkb3V0IDw9ICMxICJuIjsKKwkgICA3J2g2NjoJZG91dCA8PSAjMSAiaSI7CisJICAgNydoNjc6CWRvdXQgPD0gIzEgInIiOworCSAgIDcnaDY4Oglkb3V0IDw9ICMxICJ0IjsKKwkgICA3J2g2OToJZG91dCA8PSAjMSAiUyI7CisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgU3RyaW5nIERlc2NyaXB0b3IgMiAgICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgIDcnaDcwOglkb3V0IDw9ICMxIDgnZDAxMDsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDcxOglkb3V0IDw9ICMxIDgnZDAzOwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2g3MjoJZG91dCA8PSAjMSAiMiI7CisJICAgNydoNzM6CWRvdXQgPD0gIzEgIiAiOworCSAgIDcnaDc0Oglkb3V0IDw9ICMxICJnIjsKKwkgICA3J2g3NToJZG91dCA8PSAjMSAibiI7CisJICAgNydoNzY6CWRvdXQgPD0gIzEgImkiOworCSAgIDcnaDc3Oglkb3V0IDw9ICMxICJyIjsKKwkgICA3J2g3ODoJZG91dCA8PSAjMSAidCI7CisJICAgNydoNzk6CWRvdXQgPD0gIzEgIlMiOworCisqLworCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgIC8vZGVmYXVsdDoJZG91dCA8PSAjMSA4J2QwMDsKKwllbmRjYXNlCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3N5bmNfZmlmby52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3N5bmNfZmlmby52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzNWUzNGUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfc3luY19maWZvLnYKQEAgLTAsMCArMSwxNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAorICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvc2RyX2N0cmwvICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIERlc2NyaXB0aW9uOiBTWU5DIEZJRk8gCisgIFBhcmFtZXRlcnM6CisgICAgICBXIDogV2lkdGggKGludGVnZXIpCisgICAgICBEIDogRGVwdGggKGludGVnZXIsIHBvd2VyIG9mIDIsIDQgdG8gMjU2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgQXV0aG9yKHMpOiAgRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIAorIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAKKyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgCisgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgCisgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIAorIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAKKyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgCitsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAKKyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgCisgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIAorIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKKyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAKKyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgCisgZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworbW9kdWxlIHVzYjFkX3N5bmNfZmlmbyAoY2xrLAorCSAgICAgICAgICByZXNldF9uLAorCQkgIGNsciwKKwkJICB3cl9lbiwKKwkJICB3cl9kYXRhLAorCQkgIGZ1bGwsCisJCSAgZW1wdHksCisJCSAgcmRfZW4sCisJCSAgcmRfZGF0YSk7CisKKyAgIHBhcmFtZXRlciBXID0gODsKKyAgIHBhcmFtZXRlciBEID0gNDsKKworICAgcGFyYW1ldGVyIEFXID0gKEQgPT0gNCkgICA/IDIgOgorCQkgIChEID09IDgpICAgPyAzIDoKKwkJICAoRCA9PSAxNikgID8gNCA6CisJCSAgKEQgPT0gMzIpICA/IDUgOgorCQkgIChEID09IDY0KSAgPyA2IDoKKwkJICAoRCA9PSAxMjgpID8gNyA6CisJCSAgKEQgPT0gMjU2KSA/IDggOiAwOworICAgCisgICBvdXRwdXQgW1ctMSA6IDBdICByZF9kYXRhOworICAgaW5wdXQgW1ctMSA6IDBdICAgd3JfZGF0YTsKKyAgIGlucHV0IAkgICAgIGNsaywgcmVzZXRfbiwgY2xyLHdyX2VuLCByZF9lbjsKKyAgIG91dHB1dCAJICAgICBmdWxsLCBlbXB0eTsKKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorCisgICBpbml0aWFsIGJlZ2luCisgICAgICBpZiAoQVcgPT0gMCkgYmVnaW4KKwkgJGRpc3BsYXkgKCIlbSA6IEVSUk9SISEhIEZpZm8gZGVwdGggJWQgbm90IGluIHJhbmdlIDQgdG8gMjU2IiwgRCk7CisgICAgICBlbmQgLy8gaWYgKEFXID09IDApCisgICBlbmQgLy8gaW5pdGlhbCBiZWdpbgorCisgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworCisgICByZWcgW1ctMSA6IDBdICAgIG1lbVtELTEgOiAwXTsKKyAgIHJlZyBbQVctMSA6IDBdICAgcmRfcHRyLCB3cl9wdHI7CisgICByZWcJIAkgICAgZnVsbCwgZW1wdHk7CisKKworICAgd2lyZSBbVy0xIDogMF0gICByZF9kYXRhOworICAgCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICB3cl9wdHIgPD0ge0FXezEnYjB9fSA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKwkgaWYoY2xyKSAgIHdyX3B0ciA8PSB7QVd7MSdiMH19IDsKKwkgZWxzZSBiZWdpbgorCSAgICBpZiAod3JfZW4gJiAhZnVsbCkgYmVnaW4KKyAgICAgICAgICAgICAgIHdyX3B0ciA8PSB3cl9wdHIgKyAxJ2IxIDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICBlbmQKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgcmRfcHRyIDw9IHtBV3sxJ2IwfX0gOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisJIGlmKGNscikgICByZF9wdHIgPD0ge0FXezEnYjB9fSA7CisJIGVsc2UgYmVnaW4KKwkgICAgaWYgKHJkX2VuICYgIWVtcHR5KSBiZWdpbgorICAgICAgICAgICAgICAgcmRfcHRyIDw9IHJkX3B0ciArIDEnYjEgOworICAgICAgICAgICAgZW5kCisJIGVuZAorICAgICAgZW5kCisKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgZW1wdHkgPD0gMSdiMSA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgIGVtcHR5IDw9ICgoKHdyX3B0ciAtIHJkX3B0cikgPT0ge3soQVctMSl7MSdiMH19LCAxJ2IxfSkgJiByZF9lbiAmIH53cl9lbikgPyAxJ2IxIDogCisgICAgICAgICAgICAgICAgICAgKCh3cl9wdHIgPT0gcmRfcHRyKSAmIH5yZF9lbiAmIHdyX2VuKSA/IDEnYjAgOiBlbXB0eSA7CisgICAgICBlbmQKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgZnVsbCA8PSAxJ2IwIDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgZnVsbCA8PSAoKCh3cl9wdHIgLSByZF9wdHIpID09IHt7KEFXLTEpezEnYjF9fSwgMSdiMH0pICYgfnJkX2VuICYgd3JfZW4pID8gMSdiMSA6IAorICAgICAgICAgICAgICAgICAoKCh3cl9wdHIgLSByZF9wdHIpID09IHtBV3sxJ2IxfX0pICYgcmRfZW4gJiB+d3JfZW4pID8gMSdiMCA6IGZ1bGwgOworICAgICAgZW5kCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsaykgCisgICAgICBpZiAod3JfZW4pCisJIG1lbVt3cl9wdHJdIDw9IHdyX2RhdGE7CisKK2Fzc2lnbiAgcmRfZGF0YSA9IG1lbVtyZF9wdHJdOworCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKyAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgaWYgKHdyX2VuICYmIGZ1bGwpIGJlZ2luCisgICAgICAgICAkZGlzcGxheSgiJW0gOiBFcnJvciEgc2ZpZm8gb3ZlcmZsb3chIik7CisgICAgICBlbmQKKyAgIGVuZAorCisgICBhbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICAgIGlmIChyZF9lbiAmJiBlbXB0eSkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5KCIlbSA6IGVycm9yISBzZmlmbyB1bmRlcmZsb3chIik7CisgICAgICBlbmQKKyAgIGVuZAorCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VuZG1vZHVsZQorCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF91dG1pX2lmLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfdXRtaV9pZi52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ1NDY5MDYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfdXRtaV9pZi52CkBAIC0wLDAgKzEsMTQ3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVRNSSBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX3V0bWlfaWYudix2IDEuMS4xLjEgMjAwMi0wOS0xOSAxMjowNzoxNCBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTE5IDEyOjA3OjE0ICQKKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX3V0bWlfaWYoIC8vIFVUTUkgSW50ZXJmYWNlIChFWFRFUk5BTCkKKwkJcGh5X2NsaywgcnN0LAorCQlEYXRhT3V0LCBUeFZhbGlkLCBUeFJlYWR5LAorCQlSeFZhbGlkLCBSeEFjdGl2ZSwgUnhFcnJvciwgRGF0YUluLAorCisJCS8vIEludGVybmFsIEludGVyZmFjZQorCQlyeF9kYXRhLCByeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnIsCisJCXR4X2RhdGEsIHR4X3ZhbGlkLCB0eF92YWxpZF9sYXN0LCB0eF9yZWFkeSwKKwkJdHhfZmlyc3QKKworCQkpOworCitpbnB1dAkJcGh5X2NsazsKK2lucHV0CQlyc3Q7CisKK291dHB1dAlbNzowXQlEYXRhT3V0Oworb3V0cHV0CQlUeFZhbGlkOworaW5wdXQJCVR4UmVhZHk7CisKK2lucHV0CVs3OjBdCURhdGFJbjsKK2lucHV0CQlSeFZhbGlkOworaW5wdXQJCVJ4QWN0aXZlOworaW5wdXQJCVJ4RXJyb3I7CisKKworb3V0cHV0CVs3OjBdCXJ4X2RhdGE7CitvdXRwdXQJCXJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VycjsKK2lucHV0CVs3OjBdCXR4X2RhdGE7CitpbnB1dAkJdHhfdmFsaWQ7CitpbnB1dAkJdHhfdmFsaWRfbGFzdDsKK291dHB1dAkJdHhfcmVhZHk7CitpbnB1dAkJdHhfZmlyc3Q7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworcmVnCVs3OjBdCXJ4X2RhdGE7CityZWcJCXJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VycjsKK3JlZwlbNzowXQlEYXRhT3V0OworcmVnCQl0eF9yZWFkeTsKK3JlZwkJVHhWYWxpZDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFJYIEludGVyZmFjZSBJbnB1dCByZWdpc3RlcnMKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgcGh5X2NsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlyeF92YWxpZCA8PSAjMSAxJ2IwOworCWVsc2UJCXJ4X3ZhbGlkIDw9ICMxIFJ4VmFsaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgcGh5X2NsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlyeF9hY3RpdmUgPD0gIzEgMSdiMDsKKwllbHNlCQlyeF9hY3RpdmUgPD0gIzEgUnhBY3RpdmU7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgcGh5X2NsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlyeF9lcnIgPD0gIzEgMSdiMDsKKwllbHNlCQlyeF9lcnIgPD0gIzEgUnhFcnJvcjsKKworYWx3YXlzIEAocG9zZWRnZSBwaHlfY2xrKQorCQlyeF9kYXRhIDw9ICMxIERhdGFJbjsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRYIEludGVyZmFjZSBPdXRwdXQvSW5wdXQgcmVnaXN0ZXJzCisvLworCithbHdheXMgQChwb3NlZGdlIHBoeV9jbGspCisJaWYoVHhSZWFkeSB8IHR4X2ZpcnN0KQlEYXRhT3V0IDw9ICMxIHR4X2RhdGE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgcGh5X2NsaykKKwl0eF9yZWFkeSA8PSAjMSBUeFJlYWR5OworCithbHdheXMgQChwb3NlZGdlIHBoeV9jbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJVHhWYWxpZCA8PSAjMSAxJ2IwOworCWVsc2UKKwlUeFZhbGlkIDw9ICMxIHR4X3ZhbGlkIHwgdHhfdmFsaWRfbGFzdCB8IChUeFZhbGlkICYgIVR4UmVhZHkpOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfcGh5LnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF9waHkudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDZjNTIzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfcGh5LnYKQEAgLTAsMCArMSwxOTAgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVU0IgMS4xIFBIWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYl9waHkvICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYl9waHkudix2IDEuNCAyMDAzLTEwLTIxIDA1OjU4OjQwIHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDMtMTAtMjEgMDU6NTg6NDAgJAorLy8gICRSZXZpc2lvbjogMS40ICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4zICAyMDAzLzEwLzE5IDE3OjQwOjEzICBydWRpCisvLyAgICAgICAgICAgICAgIC0gTWFkZSBjb3JlIG1vcmUgcm9idXN0IGFnYWluc3QgbGluZSBub2lzZQorLy8gICAgICAgICAgICAgICAtIEFkZGVkIEVycm9yIENoZWNraW5nIGFuZCBSZXBvcnRpbmcKKy8vICAgICAgICAgICAgICAgKFNlZSBSRUFETUUudHh0IGZvciBtb3JlIGluZm8pCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjIgIDIwMDIvMDkvMTYgMTY6MDY6MzcgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgQ2hhbmdlZCB0b3AgbGV2ZWwgbmFtZSB0byBiZSBjb25zaXN0ZW50IC4uLgorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xNiAxNDoyNjo1OSAgcnVkaQorLy8gICAgICAgICAgICAgICBDcmVhdGVkIERpcmVjdG9yeSBTdHJ1Y3R1cmUKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworCisKK21vZHVsZSB1c2IxZF9waHkoY2xrLCByc3RuLCBwaHlfdHhfbW9kZSwgdXNiX3JzdCwKKwkKKwkJLy8gVHJhbnNjaWV2ZXIgSW50ZXJmYWNlCisJCXR4ZHAsIHR4ZG4sIHR4b2UsCQorCQlyeGQsIHJ4ZHAsIHJ4ZG4sCisKKwkJLy8gVVRNSSBJbnRlcmZhY2UKKwkJRGF0YU91dF9pLCBUeFZhbGlkX2ksIFR4UmVhZHlfbywgUnhWYWxpZF9vLAorCQlSeEFjdGl2ZV9vLCBSeEVycm9yX28sIERhdGFJbl9vLCBMaW5lU3RhdGVfbworCQkpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvbW1hbiBTaWduYWwKKyogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnB1dAkJY2xrICAgICAgICAgICAgICA7IC8vIDQ4TWh6IGNsb2NrCitpbnB1dAkJcnN0biAgICAgICAgICAgICAgOyAvLyBBY3RpdmUgbG93IGFzeW5jIHJlc2V0CisKK2lucHV0CQlwaHlfdHhfbW9kZSAgICAgIDsgLy8gVXNlZCBpbiBUeCBQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgUEhZIHN1cHBvcnRzIHNpbmdsZSBlbmRlZCBhbmQgZGlmZmVyZW50aWFsIG91dHB1dCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNjZWl2ZXIgRGVwZW5kaW5nIG9uIHdoaWNoIGRldmljZSB5b3UgYXJlIHVzaW5nLCB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aWUgdGhlIHBoeV90eF9tb2RlIGhpZ2ggb3IgbG93LiAKK291dHB1dAkJdXNiX3JzdCAgICAgICAgICA7IC8vIHVzYl9yc3QgaXMgYXNzZXJ0ZWQgd2hlbmV2ZXIgdGhlIGhvc3Qgc2lnbmFscyByZXNldCBvbiB0aGUgVVNCIGJ1cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFVTQiBjb3JlIHdpbGwgaW50ZXJuYWxseSByZXNldCBpdHNlbGYgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBvdXRwdXQgaXMgcHJvdmlkZWQgZm9yIGV4dGVybmFsIGxvZ2ljIHRoYXQgbmVlZHMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgd2hlbiB0aGUgVVNCIGJ1cyBpcyByZXNldC4KKworb3V0cHV0CQl0eGRwLCB0eGRuLCB0eG9lOworaW5wdXQJCXJ4ZCwgcnhkcCwgcnhkbjsKK2lucHV0CVs3OjBdCURhdGFPdXRfaTsKK2lucHV0CQlUeFZhbGlkX2k7CitvdXRwdXQJCVR4UmVhZHlfbzsKK291dHB1dAlbNzowXQlEYXRhSW5fbzsKK291dHB1dAkJUnhWYWxpZF9vOworb3V0cHV0CQlSeEFjdGl2ZV9vOworb3V0cHV0CQlSeEVycm9yX287CitvdXRwdXQJWzE6MF0JTGluZVN0YXRlX287CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCityZWcJWzQ6MF0JcnN0X2NudDsKK3JlZwkJdXNiX3JzdDsKK3dpcmUJCWZzX2NlOword2lyZQkJcnN0bjsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUWCBQaHkKKy8vCisKK3VzYjFkX3R4X3BoeSBpX3R4X3BoeSgKKwkuY2xrKAkJY2xrCQkpLAorCS5yc3RuKAkJcnN0bgkJKSwKKwkuZnNfY2UoCQlmc19jZQkJKSwKKwkucGh5X21vZGUoCXBoeV90eF9tb2RlCSksCisKKwkvLyBUcmFuc2NpZXZlciBJbnRlcmZhY2UKKwkudHhkcCgJCXR4ZHAJCSksCisJLnR4ZG4oCQl0eGRuCQkpLAorCS50eG9lKAkJdHhvZQkJKSwKKworCS8vIFVUTUkgSW50ZXJmYWNlCisJLkRhdGFPdXRfaSgJRGF0YU91dF9pCSksCisJLlR4VmFsaWRfaSgJVHhWYWxpZF9pCSksCisJLlR4UmVhZHlfbygJVHhSZWFkeV9vCSkKKwkpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUlggUGh5IGFuZCBEUExMCisvLworCit1c2IxZF9yeF9waHkgaV9yeF9waHkoCisJLmNsaygJCWNsawkJKSwKKwkucnN0bigJCXJzdG4JCSksCisJLmZzX2NlKAkJZnNfY2UJCSksCisKKwkvLyBUcmFuc2NpZXZlciBJbnRlcmZhY2UKKwkucnhkKAkJcnhkCQkpLAorCS5yeGRwKAkJcnhkcAkJKSwKKwkucnhkbigJCXJ4ZG4JCSksCisKKwkvLyBVVE1JIEludGVyZmFjZQorCS5EYXRhSW5fbygJRGF0YUluX28JKSwKKwkuUnhWYWxpZF9vKAlSeFZhbGlkX28JKSwKKwkuUnhBY3RpdmVfbygJUnhBY3RpdmVfbwkpLAorCS5SeEVycm9yX28oCVJ4RXJyb3JfbwkpLAorCS5SeEVuX2koCXR4b2UJCSksCisJLkxpbmVTdGF0ZSgJTGluZVN0YXRlX28JKQorCSk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5lcmF0ZSBhbiBVU0IgUmVzZXQgaXMgd2Ugc2VlIFNFMCBmb3IgYXQgbGVhc3QgMi41dVMKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQkJcnN0X2NudCA8PSA1J2gwOworCWVsc2UKKwlpZihMaW5lU3RhdGVfbyAhPSAyJ2gwKQkJcnN0X2NudCA8PSA1J2gwOworCWVsc2UJCisJaWYoIXVzYl9yc3QgJiYgZnNfY2UpCQlyc3RfY250IDw9IHJzdF9jbnQgKyA1J2gxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl1c2JfcnN0IDw9IChyc3RfY250ID09IDUnaDFmKTsKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3J4X3BoeS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfcnhfcGh5LnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmNmNDJkYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3J4X3BoeS52CkBAIC0wLDAgKzEsNDU1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVNCIDEuMSBQSFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSWCAmIERQTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYl9waHkvICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYl9yeF9waHkudix2IDEuNSAyMDA0LTEwLTE5IDA5OjI5OjA3IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDQtMTAtMTkgMDk6Mjk6MDcgJAorLy8gICRSZXZpc2lvbjogMS41ICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS40ICAyMDAzLzEyLzAyIDA0OjU2OjAwICBydWRpCisvLyAgICAgICAgICAgICAgIEZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IEthcmwgQy4gUG9zY2ggZnJvbSBHcmF6IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neS4gVGhhbmtzIEthcmwgIQorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4zICAyMDAzLzEwLzE5IDE4OjA3OjQ1ICBydWRpCisvLyAgICAgICAgICAgICAgIC0gRml4ZWQgU3luYyBFcnJvciB0byBiZSBvbmx5IGNoZWNrZWQvZ2VuZXJhdGVkIGR1cmluZyB0aGUgc3luYyBwaGFzZQorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4yICAyMDAzLzEwLzE5IDE3OjQwOjEzICBydWRpCisvLyAgICAgICAgICAgICAgIC0gTWFkZSBjb3JlIG1vcmUgcm9idXN0IGFnYWluc3QgbGluZSBub2lzZQorLy8gICAgICAgICAgICAgICAtIEFkZGVkIEVycm9yIENoZWNraW5nIGFuZCBSZXBvcnRpbmcKKy8vICAgICAgICAgICAgICAgKFNlZSBSRUFETUUudHh0IGZvciBtb3JlIGluZm8pCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE2IDE0OjI3OjAxICBydWRpCisvLyAgICAgICAgICAgICAgIENyZWF0ZWQgRGlyZWN0b3J5IFN0cnVjdHVyZQorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisKKworbW9kdWxlIHVzYjFkX3J4X3BoeSgJY2xrLCByc3RuLCBmc19jZSwKKwkKKwkJCS8vIFRyYW5zY2lldmVyIEludGVyZmFjZQorCQkJcnhkLCByeGRwLCByeGRuLAorCisJCQkvLyBVVE1JIEludGVyZmFjZQorCQkJUnhWYWxpZF9vLCBSeEFjdGl2ZV9vLCBSeEVycm9yX28sIERhdGFJbl9vLAorCQkJUnhFbl9pLCBMaW5lU3RhdGUpOworCitpbnB1dAkJY2xrOworaW5wdXQJCXJzdG47CitvdXRwdXQJCWZzX2NlOworaW5wdXQJCXJ4ZCwgcnhkcCwgcnhkbjsKK291dHB1dAlbNzowXQlEYXRhSW5fbzsKK291dHB1dAkJUnhWYWxpZF9vOworb3V0cHV0CQlSeEFjdGl2ZV9vOworb3V0cHV0CQlSeEVycm9yX287CitpbnB1dAkJUnhFbl9pOworb3V0cHV0CVsxOjBdCUxpbmVTdGF0ZTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3JlZwkJcnhkX3MwLCByeGRfczEsICByeGRfczsKK3JlZwkJcnhkcF9zMCwgcnhkcF9zMSwgcnhkcF9zLCByeGRwX3NfcjsKK3JlZwkJcnhkbl9zMCwgcnhkbl9zMSwgcnhkbl9zLCByeGRuX3NfcjsKK3JlZwkJc3luY2VkX2Q7Cit3aXJlCQlrLCBqLCBzZTA7CityZWcJCXJ4ZF9yOworcmVnCQlyeF9lbjsKK3JlZwkJcnhfYWN0aXZlOworcmVnCVsyOjBdCWJpdF9jbnQ7CityZWcJCXJ4X3ZhbGlkMSwgcnhfdmFsaWQ7CityZWcJCXNoaWZ0X2VuOworcmVnCQlzZF9yOworcmVnCQlzZF9ucnppOworcmVnCVs3OjBdCWhvbGRfcmVnOword2lyZQkJZHJvcF9iaXQ7CS8vIEluZGljYXRlcyBhIHN0dWZmZWQgYml0CityZWcJWzI6MF0Jb25lX2NudDsKKworcmVnCVsxOjBdCWRwbGxfc3RhdGUsIGRwbGxfbmV4dF9zdGF0ZTsKK3JlZwkJZnNfY2VfZDsKK3JlZwkJZnNfY2U7Cit3aXJlCQljaGFuZ2U7Cit3aXJlCQlsb2NrX2VuOworcmVnCVsyOjBdCWZzX3N0YXRlLCBmc19uZXh0X3N0YXRlOworcmVnCQlyeF92YWxpZF9yOworcmVnCQlzeW5jX2Vycl9kLCBzeW5jX2VycjsKK3JlZwkJYml0X3N0dWZmX2VycjsKK3JlZwkJc2UwX3IsIGJ5dGVfZXJyOworcmVnCQlzZTBfczsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKK2Fzc2lnbiBSeEFjdGl2ZV9vID0gcnhfYWN0aXZlOworYXNzaWduIFJ4VmFsaWRfbyA9IHJ4X3ZhbGlkOworYXNzaWduIFJ4RXJyb3JfbyA9IHN5bmNfZXJyIHwgYml0X3N0dWZmX2VyciB8IGJ5dGVfZXJyOworYXNzaWduIERhdGFJbl9vID0gaG9sZF9yZWc7Cithc3NpZ24gTGluZVN0YXRlID0ge3J4ZG5fczEsIHJ4ZHBfczF9OworCithbHdheXMgQChwb3NlZGdlIGNsaykJcnhfZW4gPD0gUnhFbl9pOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXN5bmNfZXJyIDw9ICFyeF9hY3RpdmUgJiBzeW5jX2Vycl9kOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gU3luY2hyb25pemUgSW5wdXRzCisvLworCisvLyBGaXJzdCBzeW5jaHJvbml6ZSB0byB0aGUgbG9jYWwgc3lzdGVtIGNsb2NrIHRvCisvLyBhdm9pZCBtZXRhc3RhYmlsaXR5IG91dHNpZGUgdGhlIHN5bmMgYmxvY2sgKCpfczApLgorLy8gVGhlbiBtYWtlIHN1cmUgd2Ugc2VlIHRoZSBzaWduYWwgZm9yIGF0IGxlYXN0IHR3bworLy8gY2xvY2sgY3ljbGVzIHN0YWJsZSB0byBhdm9pZCBnbGl0Y2hlcyBhbmQgbm9pc2UKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZF9zMCAgPD0gcnhkOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZF9zMSAgPD0gcnhkX3MwOworYWx3YXlzIEAocG9zZWRnZSBjbGspCQkJCQkJCS8vIEF2b2lkIGRldGVjdGluZyBMaW5lIEdsaXRjaGVzIGFuZCBub2lzZQorCWlmKHJ4ZF9zMCAmJiByeGRfczEpCXJ4ZF9zIDw9IDEnYjE7CisJZWxzZQorCWlmKCFyeGRfczAgJiYgIXJ4ZF9zMSkJcnhkX3MgPD0gMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZHBfczAgIDw9IHJ4ZHA7CithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkcF9zMSAgPD0gcnhkcF9zMDsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRwX3NfciA8PSByeGRwX3MwICYgcnhkcF9zMTsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRwX3MgICA8PSAocnhkcF9zMCAmIHJ4ZHBfczEpIHwgcnhkcF9zX3I7CS8vIEF2b2lkIGRldGVjdGluZyBMaW5lIEdsaXRjaGVzIGFuZCBub2lzZQorCithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkbl9zMCAgPD0gcnhkbjsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRuX3MxICA8PSByeGRuX3MwOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZG5fc19yIDw9IHJ4ZG5fczAgJiByeGRuX3MxOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZG5fcyAgIDw9IChyeGRuX3MwICYgcnhkbl9zMSkgfCByeGRuX3NfcjsJLy8gQXZvaWQgZGV0ZWN0aW5nIExpbmUgR2xpdGNoZXMgYW5kIG5vaXNlCisKK2Fzc2lnbiBrID0gIXJ4ZHBfcyAmICByeGRuX3M7Cithc3NpZ24gaiA9ICByeGRwX3MgJiAhcnhkbl9zOworYXNzaWduIHNlMCA9ICFyeGRwX3MgJiAhcnhkbl9zOworCithbHdheXMgQChwb3NlZGdlIGNsaykJaWYoZnNfY2UpCXNlMF9zIDw9IHNlMDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERQTEwKKy8vCisKKy8vIFRoaXMgZGVzaWduIHVzZXMgYSBjbG9jayBlbmFibGUgdG8gZG8gMTJNaHogdGltaW5nIGFuZCBub3QgYQorLy8gcmVhbCAxMk1oeiBjbG9jay4gRXZlcnl0aGluZyBhbHdheXMgcnVucyBhdCA0OE1oei4gV2Ugd2FudCB0bworLy8gbWFrZSBzdXJlIGhvd2V2ZXIsIHRoYXQgdGhlIGNsb2NrIGVuYWJsZSBpcyBhbHdheXMgZXhhY3RseSBpbgorLy8gdGhlIG1pZGRsZSBiZXR3ZWVuIHR3byB2aXJ0dWFsIDEyTWh6IHJpc2luZyBlZGdlcy4KKy8vIFdlIG1vbml0b3IgcnhkcCBhbmQgcnhkbiBmb3IgYW55IGNoYW5nZXMgYW5kIGRvIHRoZSBhcHByb3BpYXRlCisvLyBhZGp1c3RtZW50cy4KKy8vIEluIGFkZGl0aW9uIHRvIHRoZSBsb2NraW5nIGRvbmUgaW4gdGhlIGRwbGwgRlNNLCB3ZSBhZGp1c3QgdGhlCisvLyBmaW5hbCBsYXRjaCBlbmFibGUgdG8gY29tcGVuc2F0ZSBmb3IgdmFyaW91cyBzeW5jIHJlZ2lzdGVycyAuLi4KKworLy8gQWxsb3cgbG9ja2luZiBvbmx5IHdoZW4gd2UgYXJlIHJlY2VpdmluZworYXNzaWduCWxvY2tfZW4gPSByeF9lbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZF9yIDw9IHJ4ZF9zOworCisvLyBFZGdlIGRldGVjdG9yCithc3NpZ24gY2hhbmdlID0gcnhkX3IgIT0gcnhkX3M7CisKKy8vIERQTEwgRlNNCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlkcGxsX3N0YXRlIDw9IDInaDE7CisJZWxzZQkJZHBsbF9zdGF0ZSA8PSBkcGxsX25leHRfc3RhdGU7CisKK2Fsd2F5cyBAKGRwbGxfc3RhdGUgb3IgbG9ja19lbiBvciBjaGFuZ2UpCisgICBiZWdpbgorCWZzX2NlX2QgPSAxJ2IwOworCWNhc2UoZHBsbF9zdGF0ZSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICAyJ2gwOgorCQlpZihsb2NrX2VuICYmIGNoYW5nZSkJZHBsbF9uZXh0X3N0YXRlID0gMidoMDsKKwkJZWxzZQkJCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDE7CisJICAgMidoMTpiZWdpbgorCQlmc19jZV9kID0gMSdiMTsKKwkJaWYobG9ja19lbiAmJiBjaGFuZ2UpCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDM7CisJCWVsc2UJCQlkcGxsX25leHRfc3RhdGUgPSAyJ2gyOworCQllbmQKKwkgICAyJ2gyOgorCQlpZihsb2NrX2VuICYmIGNoYW5nZSkJZHBsbF9uZXh0X3N0YXRlID0gMidoMDsKKwkJZWxzZQkJCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDM7CisJICAgMidoMzoKKwkJaWYobG9ja19lbiAmJiBjaGFuZ2UpCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDA7CisJCWVsc2UJCQlkcGxsX25leHRfc3RhdGUgPSAyJ2gwOworCWVuZGNhc2UKKyAgIGVuZAorCisvLyBDb21wZW5zYXRlIGZvciBzeW5jIHJlZ2lzdGVycyBhdCB0aGUgaW5wdXQgLSBhbGxpZ24gZnVsbCBzcGVlZAorLy8gY2xvY2sgZW5hYmxlIHRvIGJlIGluIHRoZSBtaWRkbGUgYmV0d2VlbiB0d28gYml0IGNoYW5nZXMgLi4uCityZWcJZnNfY2VfcjEsIGZzX2NlX3IyOworCithbHdheXMgQChwb3NlZGdlIGNsaykJZnNfY2VfcjEgPD0gZnNfY2VfZDsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlmc19jZV9yMiA8PSBmc19jZV9yMTsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlmc19jZSA8PSBmc19jZV9yMjsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRmluZCBTeW5jIFBhdHRlcm4gRlNNCisvLworCitwYXJhbWV0ZXIJRlNfSURMRQk9IDMnaDAsCisJCUsxCT0gMydoMSwKKwkJSjEJPSAzJ2gyLAorCQlLMgk9IDMnaDMsCisJCUoyCT0gMydoNCwKKwkJSzMJPSAzJ2g1LAorCQlKMwk9IDMnaDYsCisJCUs0CT0gMydoNzsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJZnNfc3RhdGUgPD0gRlNfSURMRTsKKwllbHNlCQlmc19zdGF0ZSA8PSBmc19uZXh0X3N0YXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICBEaW5lc2guQSwgN3RoIEZlYiAyMDEzCisgICAgICAgU3luYyBEZXRlY3Rpb24sIHdoZW4gZm9sbG93aW5nIHBhdHRlcm4gZGV0ZWN0ZWQKKyAgICAgICAgICBrLGosayxqLGssaixrLGsKKyAgICAgICBXaGVyZSBrID0xOyBpZiAgcnhkcCA9PSAwICBhbmQgcnhkbiA9PSAxIAorICAgICAgIFdoZXJlIGogPTE7IGlmICByeGRwID09IDEgIGFuZCByeGRuID09IDAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2Fsd2F5cyBAKGZzX3N0YXRlIG9yIGZzX2NlIG9yIGsgb3IgaiBvciByeF9lbiBvciByeF9hY3RpdmUgb3Igc2UwIG9yIHNlMF9zKQorICAgYmVnaW4KKwlzeW5jZWRfZCA9IDEnYjA7CisJc3luY19lcnJfZCA9IDEnYjA7CisJZnNfbmV4dF9zdGF0ZSA9IGZzX3N0YXRlOworCWlmKGZzX2NlICYmICFyeF9hY3RpdmUgJiYgIXNlMCAmJiAhc2UwX3MpCisJICAgY2FzZShmc19zdGF0ZSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJRlNfSURMRToKKwkJICAgICBiZWdpbgorCQkJaWYoayAmJiByeF9lbikJZnNfbmV4dF9zdGF0ZSA9IEsxOworCQkgICAgIGVuZAorCQlLMToKKwkJICAgICBiZWdpbgorCQkJaWYoaiAmJiByeF9lbikJZnNfbmV4dF9zdGF0ZSA9IEoxOworCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQkJc3luY19lcnJfZCA9IDEnYjE7CisJCQkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOworCQkJICAgZW5kCisJCSAgICAgZW5kCisJCUoxOgorCQkgICAgIGJlZ2luCisJCQlpZihrICYmIHJ4X2VuKQlmc19uZXh0X3N0YXRlID0gSzI7CisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCQlzeW5jX2Vycl9kID0gMSdiMTsKKwkJCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CisJCQkgICBlbmQKKwkJICAgICBlbmQKKwkJSzI6CisJCSAgICAgYmVnaW4KKwkJCWlmKGogJiYgcnhfZW4pCWZzX25leHRfc3RhdGUgPSBKMjsKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJCXN5bmNfZXJyX2QgPSAxJ2IxOworCQkJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsKKwkJCSAgIGVuZAorCQkgICAgIGVuZAorCQlKMjoKKwkJICAgICBiZWdpbgorCQkJaWYoayAmJiByeF9lbikJZnNfbmV4dF9zdGF0ZSA9IEszOworCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQkJc3luY19lcnJfZCA9IDEnYjE7CisJCQkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOworCQkJICAgZW5kCisJCSAgICAgZW5kCisJCUszOgorCQkgICAgIGJlZ2luCisJCQlpZihqICYmIHJ4X2VuKQlmc19uZXh0X3N0YXRlID0gSjM7CisJCQllbHNlCisJCQlpZihrICYmIHJ4X2VuKQorCQkJICAgYmVnaW4KKwkJCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CS8vIEFsbG93IG1pc3NpbmcgZmlyc3QgSy1KCisJCQkJCXN5bmNlZF9kID0gMSdiMTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQkJc3luY19lcnJfZCA9IDEnYjE7CisJCQkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOworCQkJICAgZW5kCisJCSAgICAgZW5kCisJCUozOgorCQkgICAgIGJlZ2luCisJCQlpZihrICYmIHJ4X2VuKQlmc19uZXh0X3N0YXRlID0gSzQ7CisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCQlzeW5jX2Vycl9kID0gMSdiMTsKKwkJCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CisJCQkgICBlbmQKKwkJICAgICBlbmQKKwkJSzQ6CisJCSAgICAgYmVnaW4KKwkJCWlmKGspCXN5bmNlZF9kID0gMSdiMTsKKwkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOworCQkgICAgIGVuZAorCSAgIGVuZGNhc2UKKyAgIGVuZAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGUgUnhBY3RpdmUKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQlyeF9hY3RpdmUgPD0gMSdiMDsKKwllbHNlCisJaWYoc3luY2VkX2QgJiYgcnhfZW4pCXJ4X2FjdGl2ZSA8PSAxJ2IxOworCWVsc2UKKwlpZihzZTAgJiYgcnhfdmFsaWRfcikJcnhfYWN0aXZlIDw9IDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKHJ4X3ZhbGlkKQlyeF92YWxpZF9yIDw9IDEnYjE7CisJZWxzZQorCWlmKGZzX2NlKQlyeF92YWxpZF9yIDw9IDEnYjA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBOUlpJIERlY29kZXIKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGZzX2NlKQlzZF9yIDw9IHJ4ZF9zOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJc2RfbnJ6aSA8PSAxJ2IwOworCWVsc2UKKwlpZighcnhfYWN0aXZlKQkJc2RfbnJ6aSA8PSAxJ2IxOworCWVsc2UKKwlpZihyeF9hY3RpdmUgJiYgZnNfY2UpCXNkX25yemkgPD0gIShyeGRfcyBeIHNkX3IpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gQml0IFN0dWZmIERldGVjdAorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJb25lX2NudCA8PSAzJ2gwOworCWVsc2UKKwlpZighc2hpZnRfZW4pCW9uZV9jbnQgPD0gMydoMDsKKwllbHNlCisJaWYoZnNfY2UpCisJICAgYmVnaW4KKwkJaWYoIXNkX25yemkgfHwgZHJvcF9iaXQpCW9uZV9jbnQgPD0gMydoMDsKKwkJZWxzZQkJCQlvbmVfY250IDw9IG9uZV9jbnQgKyAzJ2gxOworCSAgIGVuZAorCithc3NpZ24gZHJvcF9iaXQgPSAob25lX2NudD09MydoNik7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQliaXRfc3R1ZmZfZXJyIDw9IGRyb3BfYml0ICYgc2RfbnJ6aSAmIGZzX2NlICYgIXNlMCAmIHJ4X2FjdGl2ZTsgLy8gQml0IFN0dWZmIEVycm9yCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTZXJpYWwgPT4gUGFyYWxsZWwgY29udmVydGVyCisvLworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihmc19jZSkJc2hpZnRfZW4gPD0gc3luY2VkX2QgfCByeF9hY3RpdmU7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGZzX2NlICYmIHNoaWZ0X2VuICYmICFkcm9wX2JpdCkKKwkJaG9sZF9yZWcgPD0ge3NkX25yemksIGhvbGRfcmVnWzc6MV19OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGUgUnhWYWxpZAorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCWJpdF9jbnQgPD0gMydiMDsKKwllbHNlCisJaWYoIXNoaWZ0X2VuKQkJYml0X2NudCA8PSAzJ2gwOworCWVsc2UKKwlpZihmc19jZSAmJiAhZHJvcF9iaXQpCWJpdF9jbnQgPD0gYml0X2NudCArIDMnaDE7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQkJCQlyeF92YWxpZDEgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UgJiYgIWRyb3BfYml0ICYmIChiaXRfY250PT0zJ2g3KSkJcnhfdmFsaWQxIDw9IDEnYjE7CisJZWxzZQorCWlmKHJ4X3ZhbGlkMSAmJiBmc19jZSAmJiAhZHJvcF9iaXQpCQlyeF92YWxpZDEgPD0gMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4X3ZhbGlkIDw9ICFkcm9wX2JpdCAmIHJ4X3ZhbGlkMSAmIGZzX2NlOworCithbHdheXMgQChwb3NlZGdlIGNsaykJc2UwX3IgPD0gc2UwOworCithbHdheXMgQChwb3NlZGdlIGNsaykJYnl0ZV9lcnIgPD0gc2UwICYgIXNlMF9yICYgKHxiaXRfY250WzI6MV0pICYgcnhfYWN0aXZlOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfdHhfcGh5LnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF90eF9waHkudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzBmOWZkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfdHhfcGh5LnYKQEAgLTAsMCArMSw0NjEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVU0IgMS4xIFBIWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiX3BoeS8gICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiX3R4X3BoeS52LHYgMS40IDIwMDQtMTAtMTkgMDk6Mjk6MDcgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwNC0xMC0xOSAwOToyOTowNyAkCisvLyAgJFJldmlzaW9uOiAxLjQgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjMgIDIwMDMvMTAvMjEgMDU6NTg6NDEgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgdXNiX3JzdCBpcyBubyBsb25nZXIgb3InZWQgd2l0aCB0aGUgaW5jb21taW5nIHJlc2V0IGludGVybmFsbHkuCisvLyAgICAgICAgICAgICAgIE5vdyB1c2JfcnN0IGlzIHNpbXBseSBhbiBvdXRwdXQsIHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIGhvdworLy8gICAgICAgICAgICAgICB0byB1dGlsaXplIGl0LgorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4yICAyMDAzLzEwLzE5IDE3OjQwOjEzICBydWRpCisvLyAgICAgICAgICAgICAgIC0gTWFkZSBjb3JlIG1vcmUgcm9idXN0IGFnYWluc3QgbGluZSBub2lzZQorLy8gICAgICAgICAgICAgICAtIEFkZGVkIEVycm9yIENoZWNraW5nIGFuZCBSZXBvcnRpbmcKKy8vICAgICAgICAgICAgICAgKFNlZSBSRUFETUUudHh0IGZvciBtb3JlIGluZm8pCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE2IDE0OjI3OjAyICBydWRpCisvLyAgICAgICAgICAgICAgIENyZWF0ZWQgRGlyZWN0b3J5IFN0cnVjdHVyZQorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKworCittb2R1bGUgdXNiMWRfdHhfcGh5KAorCQljbGssIHJzdG4sIGZzX2NlLCBwaHlfbW9kZSwKKwkKKwkJLy8gVHJhbnNjaWV2ZXIgSW50ZXJmYWNlCisJCXR4ZHAsIHR4ZG4sIHR4b2UsCQorCisJCS8vIFVUTUkgSW50ZXJmYWNlCisJCURhdGFPdXRfaSwgVHhWYWxpZF9pLCBUeFJlYWR5X28KKwkJKTsKKworaW5wdXQJCWNsazsKK2lucHV0CQlyc3RuOworaW5wdXQJCWZzX2NlOworaW5wdXQJCXBoeV9tb2RlOworb3V0cHV0CQl0eGRwLCB0eGRuLCB0eG9lOworaW5wdXQJWzc6MF0JRGF0YU91dF9pOworaW5wdXQJCVR4VmFsaWRfaTsKK291dHB1dAkJVHhSZWFkeV9vOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworcGFyYW1ldGVyCUlETEUJPSAzJ2QwLAorCQlTT1AJPSAzJ2gxLAorCQlEQVRBCT0gMydoMiwKKwkJRU9QMQk9IDMnaDMsCisJCUVPUDIJPSAzJ2g0LAorCQlXQUlUCT0gMydoNTsKKworcmVnCQlUeFJlYWR5X287CityZWcJWzI6MF0Jc3RhdGUsIG5leHRfc3RhdGU7CityZWcJCXR4X3JlYWR5X2Q7CityZWcJCWxkX3NvcF9kOworcmVnCQlsZF9kYXRhX2Q7CityZWcJCWxkX2VvcF9kOworcmVnCQl0eF9pcDsKK3JlZwkJdHhfaXBfc3luYzsKK3JlZwlbMjowXQliaXRfY250OworcmVnCVs3OjBdCWhvbGRfcmVnOworcmVnCVs3OjBdCWhvbGRfcmVnX2Q7CisKK3JlZwkJc2RfcmF3X287Cit3aXJlCQlob2xkOworcmVnCQlkYXRhX2RvbmU7CityZWcJCXNmdF9kb25lOworcmVnCQlzZnRfZG9uZV9yOword2lyZQkJc2Z0X2RvbmVfZTsKK3JlZwkJbGRfZGF0YTsKK3dpcmUJCWVvcF9kb25lOworcmVnCVsyOjBdCW9uZV9jbnQ7Cit3aXJlCQlzdHVmZjsKK3JlZwkJc2RfYnNfbzsKK3JlZwkJc2RfbnJ6aV9vOworcmVnCQlhcHBlbmRfZW9wOworcmVnCQlhcHBlbmRfZW9wX3N5bmMxOworcmVnCQlhcHBlbmRfZW9wX3N5bmMyOworcmVnCQlhcHBlbmRfZW9wX3N5bmMzOworcmVnCQlhcHBlbmRfZW9wX3N5bmM0OworcmVnCQl0eGRwLCB0eGRuOworcmVnCQl0eG9lX3IxLCB0eG9lX3IyOworcmVnCQl0eG9lOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJVHhSZWFkeV9vIDw9IDEnYjA7CisJZWxzZQkJVHhSZWFkeV9vIDw9IHR4X3JlYWR5X2QgJiBUeFZhbGlkX2k7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBsZF9kYXRhIDw9IGxkX2RhdGFfZDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRyYW5zbWl0IGluIHByb2dyZXNzIGluZGljYXRvcgorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJdHhfaXAgPD0gMSdiMDsKKwllbHNlCisJaWYobGRfc29wX2QpCXR4X2lwIDw9IDEnYjE7CisJZWxzZQorCWlmKGVvcF9kb25lKQl0eF9pcCA8PSAxJ2IwOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJdHhfaXBfc3luYyA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJCXR4X2lwX3N5bmMgPD0gdHhfaXA7CisKKy8vIGRhdGFfZG9uZSBoZWxwcyB1cyB0byBjYXRjaCBjYXNlcyB3aGVyZSBUeFZhbGlkIGRyb3BzIGR1ZSB0bworLy8gcGFja2V0IGVuZCBhbmQgdGhlbiBnZXRzIHJlLWFzc2VydGVkIGFzIGEgbmV3IHBhY2tldCBzdGFydHMuCisvLyBXZSBtaWdodCBub3Qgc2VlIHRoaXMgYmVjYXVzZSB3ZSBhcmUgc3RpbGwgdHJhbnNtaXR0aW5nLgorLy8gZGF0YV9kb25lIHNob3VsZCBzb2x2ZSB0aG9zZSBjYXNlcyAuLi4KK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQkJZGF0YV9kb25lIDw9IDEnYjA7CisJZWxzZQorCWlmKFR4VmFsaWRfaSAmJiAhIHR4X2lwKQlkYXRhX2RvbmUgPD0gMSdiMTsKKwllbHNlCisJaWYoIVR4VmFsaWRfaSkJCQlkYXRhX2RvbmUgPD0gMSdiMDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFNoaWZ0IFJlZ2lzdGVyCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJYml0X2NudCA8PSAzJ2gwOworCWVsc2UKKwlpZighdHhfaXBfc3luYykJCWJpdF9jbnQgPD0gMydoMDsKKwllbHNlCisJaWYoZnNfY2UgJiYgIWhvbGQpCWJpdF9jbnQgPD0gYml0X2NudCArIDMnaDE7CisKK2Fzc2lnbiBob2xkID0gc3R1ZmY7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCF0eF9pcF9zeW5jKQkJc2RfcmF3X28gPD0gMSdiMDsKKwllbHNlCisJY2FzZShiaXRfY250KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDMnaDA6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbMF07CisJICAgMydoMTogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFsxXTsKKwkgICAzJ2gyOiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzJdOworCSAgIDMnaDM6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbM107CisJICAgMydoNDogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFs0XTsKKwkgICAzJ2g1OiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzVdOworCSAgIDMnaDY6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbNl07CisJICAgMydoNzogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFs3XTsKKwllbmRjYXNlCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNmdF9kb25lIDw9ICFob2xkICYgKGJpdF9jbnQgPT0gMydoNyk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNmdF9kb25lX3IgPD0gc2Z0X2RvbmU7CisKK2Fzc2lnbiBzZnRfZG9uZV9lID0gc2Z0X2RvbmUgJiAhc2Z0X2RvbmVfcjsKKworLy8gT3V0IERhdGEgSG9sZCBSZWdpc3RlcgorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGRfc29wX2QpCWhvbGRfcmVnIDw9IDgnaDgwOworCWVsc2UKKwlpZihsZF9kYXRhKQlob2xkX3JlZyA8PSBEYXRhT3V0X2k7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBob2xkX3JlZ19kIDw9IGhvbGRfcmVnOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gQml0IFN0dWZmZXIKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCW9uZV9jbnQgPD0gMydoMDsKKwllbHNlCisJaWYoIXR4X2lwX3N5bmMpCW9uZV9jbnQgPD0gMydoMDsKKwllbHNlCisJaWYoZnNfY2UpCisJICAgYmVnaW4KKwkJaWYoIXNkX3Jhd19vIHx8IHN0dWZmKQlvbmVfY250IDw9IDMnaDA7CisJCWVsc2UJCQlvbmVfY250IDw9IG9uZV9jbnQgKyAzJ2gxOworCSAgIGVuZAorCithc3NpZ24gc3R1ZmYgPSAob25lX2NudD09MydoNik7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXNkX2JzX28gPD0gMSdoMDsKKwllbHNlCisJaWYoZnNfY2UpCXNkX2JzX28gPD0gIXR4X2lwX3N5bmMgPyAxJ2IwIDogKHN0dWZmID8gMSdiMCA6IHNkX3Jhd19vKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE5SWkkgRW5jb2RlcgorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCQlzZF9ucnppX28gPD0gMSdiMTsKKwllbHNlCisJaWYoIXR4X2lwX3N5bmMgfHwgIXR4b2VfcjEpCXNkX25yemlfbyA8PSAxJ2IxOworCWVsc2UKKwlpZihmc19jZSkJCQlzZF9ucnppX28gPD0gc2RfYnNfbyA/IHNkX25yemlfbyA6IH5zZF9ucnppX287CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBFT1AgYXBwZW5kIGxvZ2ljCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJYXBwZW5kX2VvcCA8PSAxJ2IwOworCWVsc2UKKwlpZihsZF9lb3BfZCkJCWFwcGVuZF9lb3AgPD0gMSdiMTsKKwllbHNlCisJaWYoYXBwZW5kX2VvcF9zeW5jMikJYXBwZW5kX2VvcCA8PSAxJ2IwOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlhcHBlbmRfZW9wX3N5bmMxIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQlhcHBlbmRfZW9wX3N5bmMxIDw9IGFwcGVuZF9lb3A7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCWFwcGVuZF9lb3Bfc3luYzIgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCWFwcGVuZF9lb3Bfc3luYzIgPD0gYXBwZW5kX2VvcF9zeW5jMTsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJYXBwZW5kX2VvcF9zeW5jMyA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJYXBwZW5kX2VvcF9zeW5jMyA8PSBhcHBlbmRfZW9wX3N5bmMyIHwKKwkJCShhcHBlbmRfZW9wX3N5bmMzICYgIWFwcGVuZF9lb3Bfc3luYzQpOwkvLyBNYWtlIHN1cmUgYWx3YXlzIDIgYml0IHdpZGUKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJYXBwZW5kX2VvcF9zeW5jNCA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJYXBwZW5kX2VvcF9zeW5jNCA8PSBhcHBlbmRfZW9wX3N5bmMzOworCithc3NpZ24gZW9wX2RvbmUgPSBhcHBlbmRfZW9wX3N5bmMzOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gT3V0cHV0IEVuYWJsZSBMb2dpYworLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJdHhvZV9yMSA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJdHhvZV9yMSA8PSB0eF9pcF9zeW5jOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQl0eG9lX3IyIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQl0eG9lX3IyIDw9IHR4b2VfcjE7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXR4b2UgPD0gMSdiMTsKKwllbHNlCisJaWYoZnNfY2UpCXR4b2UgPD0gISh0eG9lX3IxIHwgdHhvZV9yMik7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBPdXRwdXQgUmVnaXN0ZXJzCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQl0eGRwIDw9IDEnYjE7CisJZWxzZQorCWlmKGZzX2NlKQl0eGRwIDw9IHBoeV9tb2RlID8KKwkJCQkJKCFhcHBlbmRfZW9wX3N5bmMzICYgIHNkX25yemlfbykgOgorCQkJCQlzZF9ucnppX287CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXR4ZG4gPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCXR4ZG4gPD0gcGh5X21vZGUgPworCQkJCQkoIWFwcGVuZF9lb3Bfc3luYzMgJiB+c2RfbnJ6aV9vKSA6CisJCQkJCWFwcGVuZF9lb3Bfc3luYzM7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUeCBTdGF0ZW1hc2hpbmUKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXN0YXRlIDw9IElETEU7CisJZWxzZQkJc3RhdGUgPD0gbmV4dF9zdGF0ZTsKKworYWx3YXlzIEAoc3RhdGUgb3IgVHhWYWxpZF9pIG9yIGRhdGFfZG9uZSBvciBzZnRfZG9uZV9lIG9yIGVvcF9kb25lIG9yIGZzX2NlKQorICAgYmVnaW4KKwluZXh0X3N0YXRlID0gc3RhdGU7CisJdHhfcmVhZHlfZCA9IDEnYjA7CisKKwlsZF9zb3BfZCA9IDEnYjA7CisJbGRfZGF0YV9kID0gMSdiMDsKKwlsZF9lb3BfZCA9IDEnYjA7CisKKwljYXNlKHN0YXRlKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIElETEU6CisJCQlpZihUeFZhbGlkX2kpCisJCQkgICBiZWdpbgorCQkJCWxkX3NvcF9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gU09QOworCQkJICAgZW5kCisJICAgU09QOgorCQkJaWYoc2Z0X2RvbmVfZSkKKwkJCSAgIGJlZ2luCisJCQkJdHhfcmVhZHlfZCA9IDEnYjE7CisJCQkJbGRfZGF0YV9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gREFUQTsKKwkJCSAgIGVuZAorCSAgIERBVEE6CisJCSAgIGJlZ2luCisJCQlpZighZGF0YV9kb25lICYmIHNmdF9kb25lX2UpCisJCQkgICBiZWdpbgorCQkJCWxkX2VvcF9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gRU9QMTsKKwkJCSAgIGVuZAorCQkJCisJCQlpZihkYXRhX2RvbmUgJiYgc2Z0X2RvbmVfZSkKKwkJCSAgIGJlZ2luCisJCQkJdHhfcmVhZHlfZCA9IDEnYjE7CisJCQkJbGRfZGF0YV9kID0gMSdiMTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKwkgICBFT1AxOgorCQkJaWYoZW9wX2RvbmUpCQluZXh0X3N0YXRlID0gRU9QMjsKKwkgICBFT1AyOgorCQkJaWYoIWVvcF9kb25lICYmIGZzX2NlKQluZXh0X3N0YXRlID0gV0FJVDsKKwkgICBXQUlUOgorCQkJaWYoZnNfY2UpCQluZXh0X3N0YXRlID0gSURMRTsKKwllbmRjYXNlCisgICBlbmQKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvdG9wL3VzYjFkX3RvcC52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS90b3AvdXNiMWRfdG9wLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjYxYzFiMgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvdG9wL3VzYjFkX3RvcC52CkBAIC0wLDAgKzEsNDExIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVVNCIERldmljZSBsZXZlbCBpbnRlZ3JhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgIEZvbGxvd2luZyBtb2R1bGVzIGFyZSBpbnRlZ3JhdGVkICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgMS4gdXNiMV9waHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgIDIuIHVzYjFfY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICBWZXIgMC4xIDogMDEuTWFyLjIwMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8NCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vDQorLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLw0KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLw0KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vDQorLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLw0KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLw0KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8NCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vDQorLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLw0KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLw0KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8NCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisNCisNCittb2R1bGUgdXNiMWRfdG9wKA0KKyAgICAgICAgY2xrX2ksIA0KKyAgICAgICAgcnN0bl9pLA0KKw0KKyAgICAgICAgLy8gVHJhbnNjaWV2ZXIgSW50ZXJmYWNlDQorCXVzYl9kcCwNCisJdXNiX2RuLA0KKw0KKyAgICAgICAgLy8gVVNCIE1pc2MNCisgICAgICAgIHBoeV90eF9tb2RlICwNCisgICAgICAgIHVzYl9yc3QsDQorDQorICAgICAgICAvLyBJbnRlcnJ1cHRzDQorICAgICAgICBkcm9wcGVkX2ZyYW1lLCANCisgICAgICAgIG1pc2FsaWduZWRfZnJhbWUsDQorICAgICAgICBjcmMxNl9lcnIsDQorDQorICAgICAgICAvLyBWZW5kb3IgRmVhdHVyZXMNCisgICAgICAgIHZfc2V0X2ludCwgDQorICAgICAgICB2X3NldF9mZWF0dXJlLCANCisgICAgICAgIHdWYWx1ZSwNCisgICAgICAgIHdJbmRleCwgDQorICAgICAgICB2ZW5kb3JfZGF0YSwNCisNCisgICAgICAgIC8vIFVTQiBTdGF0dXMNCisgICAgICAgIHVzYl9idXN5LCANCisgICAgICAgIGVwX3NlbCwNCisNCisgICAgICAgIC8vIEVuZHBvaW50IEludGVyZmFjZQ0KKyAgICAgICAgZXAxX2NmZywNCisgICAgICAgIGVwMV9kaW4sICANCisgICAgICAgIGVwMV93ZSwgDQorICAgICAgICBlcDFfZnVsbCwNCisgICAgICAgIGVwMV9kb3V0LCANCisgICAgICAgIGVwMV9yZSwgDQorICAgICAgICBlcDFfZW1wdHksDQorICAgICAgICBlcDFfYmZfZW4sIA0KKyAgICAgICAgZXAxX2JmX3NpemUsDQorDQorICAgICAgICBlcDJfY2ZnLA0KKyAgICAgICAgZXAyX2RpbiwgIA0KKyAgICAgICAgZXAyX3dlLCANCisgICAgICAgIGVwMl9mdWxsLA0KKyAgICAgICAgZXAyX2RvdXQsIA0KKyAgICAgICAgZXAyX3JlLCANCisgICAgICAgIGVwMl9lbXB0eSwNCisgICAgICAgIGVwMl9iZl9lbiwgDQorICAgICAgICBlcDJfYmZfc2l6ZSwNCisNCisgICAgICAgIGVwM19jZmcsDQorICAgICAgICBlcDNfZGluLCAgDQorICAgICAgICBlcDNfd2UsIA0KKyAgICAgICAgZXAzX2Z1bGwsDQorICAgICAgICBlcDNfZG91dCwgDQorICAgICAgICBlcDNfcmUsIA0KKyAgICAgICAgZXAzX2VtcHR5LA0KKyAgICAgICAgZXAzX2JmX2VuLCANCisgICAgICAgIGVwM19iZl9zaXplLA0KKw0KKyAgICAgICAgZXA0X2NmZywNCisgICAgICAgIGVwNF9kaW4sICANCisgICAgICAgIGVwNF93ZSwgDQorICAgICAgICBlcDRfZnVsbCwNCisgICAgICAgIGVwNF9kb3V0LCANCisgICAgICAgIGVwNF9yZSwgDQorICAgICAgICBlcDRfZW1wdHksDQorICAgICAgICBlcDRfYmZfZW4sIA0KKyAgICAgICAgZXA0X2JmX3NpemUsDQorDQorICAgICAgICBlcDVfY2ZnLA0KKyAgICAgICAgZXA1X2RpbiwgIA0KKyAgICAgICAgZXA1X3dlLCANCisgICAgICAgIGVwNV9mdWxsLA0KKyAgICAgICAgZXA1X2RvdXQsIA0KKyAgICAgICAgZXA1X3JlLCANCisgICAgICAgIGVwNV9lbXB0eSwNCisgICAgICAgIGVwNV9iZl9lbiwgDQorICAgICAgICBlcDVfYmZfc2l6ZSwNCisNCisgICAgICAgIGVwNl9jZmcsDQorICAgICAgICBlcDZfZGluLCAgDQorICAgICAgICBlcDZfd2UsIGVwNl9mdWxsLA0KKyAgICAgICAgZXA2X2RvdXQsIGVwNl9yZSwgZXA2X2VtcHR5LA0KKyAgICAgICAgZXA2X2JmX2VuLCBlcDZfYmZfc2l6ZSwNCisNCisgICAgICAgIGVwN19jZmcsDQorICAgICAgICBlcDdfZGluLCAgZXA3X3dlLCBlcDdfZnVsbCwNCisgICAgICAgIGVwN19kb3V0LCBlcDdfcmUsIGVwN19lbXB0eSwNCisgICAgICAgIGVwN19iZl9lbiwgZXA3X2JmX3NpemUsDQorCQkvLyBSZWdpc3RlciBJbnRlcmZhY2UNCisJCXJlZ19hZGRyLA0KKwkJcmVnX3Jkd3JuLA0KKwkJcmVnX3JlcSwNCisJCXJlZ193ZGF0YSwNCisJCXJlZ19yZGF0YSwNCisJCXJlZ19hY2sNCisNCisgICAgICAgICk7ICAgICAgDQorDQoraW5wdXQgICAgICAgICAgIGNsa19pOw0KK2lucHV0ICAgICAgICAgICByc3RuX2k7DQorDQoraW5vdXQgICAgIAl1c2JfZHA7DQoraW5vdXQgICAgIAl1c2JfZG47DQorDQoraW5wdXQgICAgICAgICAgIHBoeV90eF9tb2RlOw0KK291dHB1dCAgICAgICAgICB1c2JfcnN0Ow0KK291dHB1dCAgICAgICAgICBkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lOw0KK291dHB1dCAgICAgICAgICBjcmMxNl9lcnI7DQorDQorb3V0cHV0ICAgICAgICAgIHZfc2V0X2ludDsNCitvdXRwdXQgICAgICAgICAgdl9zZXRfZmVhdHVyZTsNCitvdXRwdXQgIFsxNTowXSAgd1ZhbHVlOw0KK291dHB1dCAgWzE1OjBdICB3SW5kZXg7DQoraW5wdXQgICBbMTU6MF0gIHZlbmRvcl9kYXRhOw0KKw0KK291dHB1dCAgICAgICAgICB1c2JfYnVzeTsNCitvdXRwdXQgIFszOjBdICAgZXBfc2VsOw0KKw0KKy8vIEVuZHBvaW50IEludGVyZmFjZXMNCitpbnB1dCAgIFsxMzowXSAgZXAxX2NmZzsNCitpbnB1dCAgIFs3OjBdICAgZXAxX2RpbjsNCitvdXRwdXQgIFs3OjBdICAgZXAxX2RvdXQ7DQorb3V0cHV0ICAgICAgICAgIGVwMV93ZSwgZXAxX3JlOw0KK2lucHV0ICAgICAgICAgICBlcDFfZW1wdHksIGVwMV9mdWxsOw0KK2lucHV0ICAgICAgICAgICBlcDFfYmZfZW47DQoraW5wdXQgICBbNjowXSAgIGVwMV9iZl9zaXplOw0KKw0KK2lucHV0ICAgWzEzOjBdICBlcDJfY2ZnOw0KK2lucHV0ICAgWzc6MF0gICBlcDJfZGluOw0KK291dHB1dCAgWzc6MF0gICBlcDJfZG91dDsNCitvdXRwdXQgICAgICAgICAgZXAyX3dlLCBlcDJfcmU7DQoraW5wdXQgICAgICAgICAgIGVwMl9lbXB0eSwgZXAyX2Z1bGw7DQoraW5wdXQgICAgICAgICAgIGVwMl9iZl9lbjsNCitpbnB1dCAgIFs2OjBdICAgZXAyX2JmX3NpemU7DQorDQoraW5wdXQgICBbMTM6MF0gIGVwM19jZmc7DQoraW5wdXQgICBbNzowXSAgIGVwM19kaW47DQorb3V0cHV0ICBbNzowXSAgIGVwM19kb3V0Ow0KK291dHB1dCAgICAgICAgICBlcDNfd2UsIGVwM19yZTsNCitpbnB1dCAgICAgICAgICAgZXAzX2VtcHR5LCBlcDNfZnVsbDsNCitpbnB1dCAgICAgICAgICAgZXAzX2JmX2VuOw0KK2lucHV0ICAgWzY6MF0gICBlcDNfYmZfc2l6ZTsNCisNCitpbnB1dCAgIFsxMzowXSAgZXA0X2NmZzsNCitpbnB1dCAgIFs3OjBdICAgZXA0X2RpbjsNCitvdXRwdXQgIFs3OjBdICAgZXA0X2RvdXQ7DQorb3V0cHV0ICAgICAgICAgIGVwNF93ZSwgZXA0X3JlOw0KK2lucHV0ICAgICAgICAgICBlcDRfZW1wdHksIGVwNF9mdWxsOw0KK2lucHV0ICAgICAgICAgICBlcDRfYmZfZW47DQoraW5wdXQgICBbNjowXSAgIGVwNF9iZl9zaXplOw0KKw0KK2lucHV0ICAgWzEzOjBdICBlcDVfY2ZnOw0KK2lucHV0ICAgWzc6MF0gICBlcDVfZGluOw0KK291dHB1dCAgWzc6MF0gICBlcDVfZG91dDsNCitvdXRwdXQgICAgICAgICAgZXA1X3dlLCBlcDVfcmU7DQoraW5wdXQgICAgICAgICAgIGVwNV9lbXB0eSwgZXA1X2Z1bGw7DQoraW5wdXQgICAgICAgICAgIGVwNV9iZl9lbjsNCitpbnB1dCAgIFs2OjBdICAgZXA1X2JmX3NpemU7DQorDQoraW5wdXQgICBbMTM6MF0gIGVwNl9jZmc7DQoraW5wdXQgICBbNzowXSAgIGVwNl9kaW47DQorb3V0cHV0ICBbNzowXSAgIGVwNl9kb3V0Ow0KK291dHB1dCAgICAgICAgICBlcDZfd2UsIGVwNl9yZTsNCitpbnB1dCAgICAgICAgICAgZXA2X2VtcHR5LCBlcDZfZnVsbDsNCitpbnB1dCAgICAgICAgICAgZXA2X2JmX2VuOw0KK2lucHV0ICAgWzY6MF0gICBlcDZfYmZfc2l6ZTsNCisNCitpbnB1dCAgIFsxMzowXSAgZXA3X2NmZzsNCitpbnB1dCAgIFs3OjBdICAgZXA3X2RpbjsNCitvdXRwdXQgIFs3OjBdICAgZXA3X2RvdXQ7DQorb3V0cHV0ICAgICAgICAgIGVwN193ZSwgZXA3X3JlOw0KK2lucHV0ICAgICAgICAgICBlcDdfZW1wdHksIGVwN19mdWxsOw0KK2lucHV0ICAgICAgICAgICBlcDdfYmZfZW47DQoraW5wdXQgICBbNjowXSAgIGVwN19iZl9zaXplOw0KKw0KKw0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBSZWdpc3RlciBJbnRlcmZhY2UNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorb3V0cHV0IFszMTowXSAgIHJlZ19hZGRyOyAgIC8vIFJlZ2lzdGVyIEFkZHJlc3MNCitvdXRwdXQgICAgICAgICAgcmVnX3Jkd3JuOyAgLy8gMCAtPiB3cml0ZSwgMS0+IHJlYWQNCitvdXRwdXQgICAgICAgICAgcmVnX3JlcTsgICAgLy8gIFJlZ2lzdGVyIFJlcQ0KK291dHB1dCBbMzE6MF0gICByZWdfd2RhdGE7ICAvLyBSZWdpc3RlciB3cml0ZSBkYXRhDQoraW5wdXQgWzMxOjBdICAgIHJlZ19yZGF0YTsgIC8vIFJlZ2lzdGVyIFJlYWQgRGF0YQ0KK2lucHV0ICAgICAgICAgICByZWdfYWNrOyAgICAvLyBSZWdpc3RlciBBY2sNCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIFVUTUkgSW50ZXJmYWNlDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit3aXJlICAgIFs3OjBdICAgRGF0YU91dDsNCit3aXJlICAgICAgICAgICAgVHhWYWxpZDsNCit3aXJlICAgICAgICAgICAgVHhSZWFkeTsNCit3aXJlICAgIFs3OjBdICAgRGF0YUluOw0KK3dpcmUgICAgICAgICAgICBSeFZhbGlkOw0KK3dpcmUgICAgICAgICAgICBSeEFjdGl2ZTsNCit3aXJlICAgICAgICAgICAgUnhFcnJvcjsNCit3aXJlICAgIFsxOjBdICAgTGluZVN0YXRlOw0KK3dpcmUgICAgICAgICAgICBjbGs7DQord2lyZSAgICAgICAgICAgIHJzdDsNCit3aXJlICAgICAgICAgICAgcGh5X3R4X21vZGU7DQord2lyZSAgICAgICAgICAgIHVzYl9yc3Q7DQorDQorLy8gVVNCIFRyYWNlaXZlciBpbnRlcmZhY2UNCit3aXJlICAgICAgICAgIHVzYl90eGRwOyAvLyBVU0IgVFggKyANCit3aXJlICAgICAgICAgIHVzYl90eGRuOyAvLyBVU0IgVFggLQ0KK3dpcmUgICAgICAgICAgdXNiX3R4b2U7IC8vIFVTQiBUWCBPRU4sIE91dHB1dCBkcml2ZW4gYXQgdHhvZT0wDQord2lyZSAgICAgICAgICB1c2JfcnhkOyANCit3aXJlICAgICAgICAgIHVzYl9yeGRwOyAgLy8gVVNCIFJYKw0KK3dpcmUgICAgICAgICAgdXNiX3J4ZG47ICAvLyBVU0IgUlgtDQorDQorYXNzaWduICB1c2JfZHAgPSAodXNiX3R4b2UgPT0gMSdiMCkgPyB1c2JfdHhkcCAgOiAxJ2J6Ow0KK2Fzc2lnbiAgdXNiX2RuID0gKHVzYl90eG9lID09IDEnYjApID8gdXNiX3R4ZG4gIDogMSdiejsNCisNCithc3NpZ24gIHVzYl9yeGQgPSAgdXNiX2RwOw0KK2Fzc2lnbiAgdXNiX3J4ZHAgPSB1c2JfZHA7DQorYXNzaWduICB1c2JfcnhkbiA9IHVzYl9kbjsNCisNCisgICAgDQordXNiMWRfcGh5IHVfdXNiX3BoeSgNCisgICAgICAgICAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKCBjbGtfaSAgICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJzdG4gICAgICAgICAgICAgICAoIHJzdG5faSAgICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAucGh5X3R4X21vZGUgICAgICAgICggcGh5X3R4X21vZGUgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC51c2JfcnN0ICAgICAgICAgICAgKCB1c2JfcnN0ICAgICAgICAgICApLA0KKw0KKyAgICAgICAgLy8gVHJhbnNjZWl2ZXIgSW50ZXJmYWNlDQorICAgICAgICAgICAgICAgICAgICAucnhkICAgICAgICAgICAgICAgICggdXNiX3J4ZCAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yeGRwICAgICAgICAgICAgICAgKCB1c2JfcnhkcCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJ4ZG4gICAgICAgICAgICAgICAoIHVzYl9yeGRuICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAudHhkcCAgICAgICAgICAgICAgICggdXNiX3R4ZHAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC50eGRuICAgICAgICAgICAgICAgKCB1c2JfdHhkbiAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnR4b2UgICAgICAgICAgICAgICAoIHVzYl90eG9lICAgICAgICAgICksDQorDQorICAgICAgICAvLyBVVE1JIEludGVyZmFjZQ0KKyAgICAgICAgICAgICAgICAgICAgLkRhdGFJbl9vICAgICAgICAgICAoIERhdGFJbiAgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuUnhWYWxpZF9vICAgICAgICAgICggUnhWYWxpZCAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5SeEFjdGl2ZV9vICAgICAgICAgKCBSeEFjdGl2ZSAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlJ4RXJyb3JfbyAgICAgICAgICAoIFJ4RXJyb3IgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuRGF0YU91dF9pICAgICAgICAgICggRGF0YU91dCAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5UeFZhbGlkX2kgICAgICAgICAgKCBUeFZhbGlkICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlR4UmVhZHlfbyAgICAgICAgICAoIFR4UmVhZHkgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuTGluZVN0YXRlX28gICAgICAgICggTGluZVN0YXRlICAgICAgICAgKQ0KKyAgICAgICAgKTsNCisNCisNCit1c2IxZF9jb3JlICB1X3VzYl9jb3JlKA0KKyAgICAgICAgICAgICAgICAgICAgLmNsa19pICAgICAgICAgICAgICAoIGNsa19pICAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLnJzdF9pICAgICAgICAgICAgICAoIHJzdG5faSAgICAgICAgICAgICApLA0KKw0KKw0KKyAgICAgICAgICAgICAgICAgLy8gVVNCIE1pc2MNCisgICAgICAgICAgICAgICAgICAgIC5waHlfdHhfbW9kZSAgICAgICAgKCBwaHlfdHhfbW9kZSAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC51c2JfcnN0ICAgICAgICAgICAgKCB1c2JfcnN0ICAgICAgICAgICApLCANCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVVRNSSBJbnRlcmZhY2UNCisgICAgICAgICAgICAgICAgICAgIC5EYXRhSW4gICAgICAgICAgICAgKCBEYXRhSW4gICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlJ4VmFsaWQgICAgICAgICAgICAoIFJ4VmFsaWQgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuUnhBY3RpdmUgICAgICAgICAgICggUnhBY3RpdmUgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5SeEVycm9yICAgICAgICAgICAgKCBSeEVycm9yICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLkRhdGFPdXQgICAgICAgICAgICAoIERhdGFPdXQgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuVHhWYWxpZCAgICAgICAgICAgICggVHhWYWxpZCAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5UeFJlYWR5ICAgICAgICAgICAgKCBUeFJlYWR5ICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLkxpbmVTdGF0ZSAgICAgICAgICAoIExpbmVTdGF0ZSAgICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAvLyBJbnRlcnJ1cHRzDQorICAgICAgICAgICAgICAgICAgICAuZHJvcHBlZF9mcmFtZSAgICAgICggZHJvcHBlZF9mcmFtZSAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAubWlzYWxpZ25lZF9mcmFtZSAgICggbWlzYWxpZ25lZF9mcmFtZSAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5jcmMxNl9lcnIgICAgICAgICAgKCBjcmMxNl9lcnIgICAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgIC8vIFZlbmRvciBGZWF0dXJlcw0KKyAgICAgICAgICAgICAgICAgICAgLnZfc2V0X2ludCAgICAgICAgICAoIHZfc2V0X2ludCAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLnZfc2V0X2ZlYXR1cmUgICAgICAoIHZfc2V0X2ZlYXR1cmUgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLndWYWx1ZSAgICAgICAgICAgICAoIHdWYWx1ZSAgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAud0luZGV4ICAgICAgICAgICAgICggd0luZGV4ICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAudmVuZG9yX2RhdGEgICAgICAgICggdmVuZG9yX2RhdGEgICAgICAgKSwNCisNCisgICAgICAgIC8vIFVTQiBTdGF0dXMNCisgICAgICAgICAgICAgICAgICAgIC51c2JfYnVzeSAgICAgICAgICAgKCB1c2JfYnVzeSAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcF9zZWwgICAgICAgICAgICAgKCBlcF9zZWwgICAgICAgICAgICApLA0KKw0KKyAgICAgICAgLy8gRW5kcG9pbnQgSW50ZXJmYWNlDQorICAgICAgICAgICAgICAgICAgICAuZXAxX2NmZyAgICAgICAgICAgICggZXAxX2NmZyAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDFfZGluICAgICAgICAgICAgKCBlcDFfZGluICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAuZXAxX3dlICAgICAgICAgICAgICggZXAxX3dlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAxX2Z1bGwgICAgICAgICAgICggZXAxX2Z1bGwgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDFfZG91dCAgICAgICAgICAgKCBlcDFfZG91dCAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDFfcmUgICAgICAgICAgICAgKCBlcDFfcmUgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDFfZW1wdHkgICAgICAgICAgKCBlcDFfZW1wdHkgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9iZl9lbiAgICAgICAgICAoIGVwMV9iZl9lbiAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9iZl9zaXplICAgICAgICAoIGVwMV9iZl9zaXplICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAgICAuZXAyX2NmZyAgICAgICAgICAgICggZXAyX2NmZyAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDJfZGluICAgICAgICAgICAgKCBlcDJfZGluICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAuZXAyX3dlICAgICAgICAgICAgICggZXAyX3dlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAyX2Z1bGwgICAgICAgICAgICggZXAyX2Z1bGwgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDJfZG91dCAgICAgICAgICAgKCBlcDJfZG91dCAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDJfcmUgICAgICAgICAgICAgKCBlcDJfcmUgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDJfZW1wdHkgICAgICAgICAgKCBlcDJfZW1wdHkgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9iZl9lbiAgICAgICAgICAoIGVwMl9iZl9lbiAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9iZl9zaXplICAgICAgICAoIGVwMl9iZl9zaXplICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAgICAuZXAzX2NmZyAgICAgICAgICAgICggZXAzX2NmZyAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDNfZGluICAgICAgICAgICAgKCBlcDNfZGluICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAuZXAzX3dlICAgICAgICAgICAgICggZXAzX3dlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAzX2Z1bGwgICAgICAgICAgICggZXAzX2Z1bGwgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDNfZG91dCAgICAgICAgICAgKCBlcDNfZG91dCAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDNfcmUgICAgICAgICAgICAgKCBlcDNfcmUgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDNfZW1wdHkgICAgICAgICAgKCBlcDNfZW1wdHkgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19iZl9lbiAgICAgICAgICAoIGVwM19iZl9lbiAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19iZl9zaXplICAgICAgICAoIGVwM19iZl9zaXplICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAgICAuZXA0X2NmZyAgICAgICAgICAgICggZXA0X2NmZyAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDRfZGluICAgICAgICAgICAgKCBlcDRfZGluICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAuZXA0X3dlICAgICAgICAgICAgICggZXA0X3dlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA0X2Z1bGwgICAgICAgICAgICggZXA0X2Z1bGwgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDRfZG91dCAgICAgICAgICAgKCBlcDRfZG91dCAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDRfcmUgICAgICAgICAgICAgKCBlcDRfcmUgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDRfZW1wdHkgICAgICAgICAgKCBlcDRfZW1wdHkgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9iZl9lbiAgICAgICAgICAoIGVwNF9iZl9lbiAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9iZl9zaXplICAgICAgICAoIGVwNF9iZl9zaXplICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAgICAuZXA1X2NmZyAgICAgICAgICAgICggZXA1X2NmZyAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDVfZGluICAgICAgICAgICAgKCBlcDVfZGluICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAuZXA1X3dlICAgICAgICAgICAgICggZXA1X3dlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA1X2Z1bGwgICAgICAgICAgICggZXA1X2Z1bGwgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDVfZG91dCAgICAgICAgICAgKCBlcDVfZG91dCAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDVfcmUgICAgICAgICAgICAgKCBlcDVfcmUgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDVfZW1wdHkgICAgICAgICAgKCBlcDVfZW1wdHkgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9iZl9lbiAgICAgICAgICAoIGVwNV9iZl9lbiAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9iZl9zaXplICAgICAgICAoIGVwNV9iZl9zaXplICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAgICAuZXA2X2NmZyAgICAgICAgICAgICggZXA2X2NmZyAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDZfZGluICAgICAgICAgICAgKCBlcDZfZGluICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAuZXA2X3dlICAgICAgICAgICAgICggZXA2X3dlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA2X2Z1bGwgICAgICAgICAgICggZXA2X2Z1bGwgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDZfZG91dCAgICAgICAgICAgKCBlcDZfZG91dCAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDZfcmUgICAgICAgICAgICAgKCBlcDZfcmUgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDZfZW1wdHkgICAgICAgICAgKCBlcDZfZW1wdHkgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9iZl9lbiAgICAgICAgICAoIGVwNl9iZl9lbiAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9iZl9zaXplICAgICAgICAoIGVwNl9iZl9zaXplICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAgICAuZXA3X2NmZyAgICAgICAgICAgICggZXA3X2NmZyAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDdfZGluICAgICAgICAgICAgKCBlcDdfZGluICAgICAgICAgICApLCAgDQorICAgICAgICAgICAgICAgICAgICAuZXA3X3dlICAgICAgICAgICAgICggZXA3X3dlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA3X2Z1bGwgICAgICAgICAgICggZXA3X2Z1bGwgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDdfZG91dCAgICAgICAgICAgKCBlcDdfZG91dCAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDdfcmUgICAgICAgICAgICAgKCBlcDdfcmUgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDdfZW1wdHkgICAgICAgICAgKCBlcDdfZW1wdHkgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19iZl9lbiAgICAgICAgICAoIGVwN19iZl9lbiAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19iZl9zaXplICAgICAgICAoIGVwN19iZl9zaXplICAgICAgICksDQorDQorICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIEludGVyZmFjZQ0KKyAgICAgICAgICAgICAgICAgICAgLnJlZ19hZGRyICAgICAgICAgICAoIHJlZ19hZGRyICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucmVnX3Jkd3JuICAgICAgICAgICggcmVnX3Jkd3JuICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yZWdfcmVxICAgICAgICAgICAgKCByZWdfcmVxICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJlZ193ZGF0YSAgICAgICAgICAoIHJlZ193ZGF0YSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucmVnX3JkYXRhICAgICAgICAgICggcmVnX3JkYXRhICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yZWdfYWNrICAgICAgICAgICAgKCByZWdfYWNrICAgICAgICAgICApDQorDQorDQorICAgICAgICApOyAgICAgIA0KKw0KKw0KKw0KK2VuZG1vZHVsZQ0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYmRfZmlsZXMudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYmRfZmlsZXMudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDg3Y2YwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiZF9maWxlcy52CkBAIC0wLDAgKzEsMTkgQEAKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfY29yZS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9jdHJsLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZHByYW0udiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGEudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGwudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfdXRtaV9pZi52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9jcmMxNi52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2ZpZm8udiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGQudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfcm9tMS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9jcmM1LnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2ZpZm8yLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2lkbWEudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGUudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfc3luY19maWZvLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9waHkvdXNiMWRfcnhfcGh5LnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9waHkvdXNiMWRfcGh5LnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9waHkvdXNiMWRfdHhfcGh5LnYiCitgaW5jbHVkZSAidXNiX2RldmljZS90b3AvdXNiMWRfdG9wLnYiCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyX3RiLnYgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyX3RiLnYKaW5kZXggNDYzNmRjZS4uYWE0ZDlmNiAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52CisrKyBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvdWFydF9tYXN0ZXJfdGIudgpAQCAtODgsNiArODgsOCBAQAogCiAJaW5pdGlhbCBiZWdpbgogCisJCSRkaXNwbGF5KCJUZXN0IFN0YXJ0ZWQgLi4uIik7CisJCSRkdW1wb247CiAJCS8vIFJlcGVhdCBjeWNsZXMgb2YgMTAwMCBjbG9jayBlZGdlcyBhcyBuZWVkZWQgdG8gY29tcGxldGUgdGVzdGJlbmNoCiAJCXJlcGVhdCAoNDAwKSBiZWdpbgogCQkJcmVwZWF0ICgxMDAwKSBAKHBvc2VkZ2UgY2xvY2spOwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy91c2VyX2Jhc2ljX3RiLnYKaW5kZXggOTllMGFjYi4uZGVkZDI2MCAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgorKysgYi92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvdXNlcl9iYXNpY190Yi52CkBAIC0xNzksNjIgKzE3OSw2MSBAQAogICAgICAgICAgIC8vIGNmZ193Yl9jbGtfY3RybCAgICAgID0gcmVnXzBbMTE6OV07CiAgICAgICAgICAgLy8gY2ZnX3J0Y19jbGtfY3RybCAgICAgPSByZWdfMFsxOToxMl07CiAgICAgICAgICAgLy8gY2ZnX2NwdV9jbGtfY3RybCAgICAgPSByZWdfMFsyMzoyMF07Ci0gICAgICAgICAgLy8gY2ZnX3NkcmFtX2Nsa19jdHJsICAgPSByZWdfMFsyNzoyNF07Ci0gICAgICAgICAgLy8gY2ZnX3VzYl9jbGtfY3RybCAgICAgPSByZWdfMFszMToyOF07CisgICAgICAgICAgLy8gY2ZnX3VzYl9jbGtfY3RybCAgICAgPSByZWdfMFszMToyNF07CiAJICAkZGlzcGxheSgiU3RlcC0xLCBDUFU6IENMT0NLMSwgUlRDOiBDTE9DSzIgKjIsIFVTQjogQ0xPQ0syLCBXQlM6Q0xPQ0sxIik7CiAJICB0ZXN0X3N0ZXAgPSAxOwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoMCw0J2gwLDQnaDAsOCdoMCw0J2gwLDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2gwLDQnaDAsOCdoMCw0J2gwLDgnaDAwfSk7CiAJICBjbG9ja19tb25pdG9yKENMSzFfUEVSSU9ELENMSzJfUEVSSU9EKjIsQ0xLMl9QRVJJT0QsQ0xLMV9QRVJJT0QpOwogCiAJICAkZGlzcGxheSgiU3RlcC0yLCBDUFU6IENMT0NLMiwgUlRDOiBDTE9DSzIvKDIrMSksIFVTQjogQ0xPQ0syLzIsIFdCUzpDTE9DSzIiKTsKIAkgIHRlc3Rfc3RlcCA9IDI7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2g4LDQnaDAsNCdoOCw4J2gxLDQnaDgsOCdoMDB9KTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDgwLDQnaDgsOCdoMSw0J2g4LDgnaDAwfSk7CiAJICBjbG9ja19tb25pdG9yKENMSzJfUEVSSU9ELCgzKSpDTEsyX1BFUklPRCwyKkNMSzJfUEVSSU9ELENMSzJfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtMywgQ1BVOiBDTE9DSzEvMiwgUlRDOiBDTE9DSzIvKDIrMiksIFVTQjogQ0xPQ0syLygyKzEpLCBXQlM6Q0xPQ0sxLzIiKTsKIAkgIHRlc3Rfc3RlcCA9IDM7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2g5LDQnaDAsNCdoNCw4J2gyLDQnaDQsOCdoMDB9KTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDgxLDQnaDQsOCdoMiw0J2g0LDgnaDAwfSk7CiAJICBjbG9ja19tb25pdG9yKDIqQ0xLMV9QRVJJT0QsKDQpKkNMSzJfUEVSSU9ELDMqQ0xLMl9QRVJJT0QsMipDTEsxX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTQsIENQVTogQ0xPQ0sxLzMsIFJUQzogQ0xPQ0syLygyKzMpLCBVU0I6IENMT0NLMi8oMisyKSwgV0JTOkNMT0NLMS8zIik7CiAJICB0ZXN0X3N0ZXAgPSA0OwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoQSw0J2gwLDQnaDUsOCdoMyw0J2g1LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4Miw0J2g1LDgnaDMsNCdoNSw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcigzKkNMSzFfUEVSSU9ELDUqQ0xLMl9QRVJJT0QsNCpDTEsyX1BFUklPRCwzKkNMSzFfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtNSwgQ1BVOiBDTE9DSzEvNCwgUlRDOiBDTE9DSzIvKDIrNCksIFVTQjogQ0xPQ0syLygyKzMpLCBXQlM6Q0xPQ0sxLzQiKTsKIAkgIHRlc3Rfc3RlcCA9IDU7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hCLDQnaDAsNCdoNiw4J2g0LDQnaDYsOCdoMDB9KTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDgzLDQnaDYsOCdoNCw0J2g2LDgnaDAwfSk7CiAJICBjbG9ja19tb25pdG9yKDQqQ0xLMV9QRVJJT0QsNipDTEsyX1BFUklPRCw1KkNMSzJfUEVSSU9ELDQqQ0xLMV9QRVJJT0QpOwogCiAJICAkZGlzcGxheSgiU3RlcC02LCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrNSksIFVTQjogQ0xPQ0syLygyKzQpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CiAJICB0ZXN0X3N0ZXAgPSA2OwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoQyw0J2gwLDQnaDcsOCdoNSw0J2g3LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4NCw0J2g3LDgnaDUsNCdoNyw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcig1KkNMSzFfUEVSSU9ELDcqQ0xLMl9QRVJJT0QsNipDTEsyX1BFUklPRCw1KkNMSzFfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtNywgQ1BVOiBDTE9DSzIvKDIpLCBSVEM6IENMT0NLMi8oMis2KSwgVVNCOiBDTE9DSzIvKDIrNSksIFdCUzpDTE9DSzIvKDIpIik7CiAJICB0ZXN0X3N0ZXAgPSA3OwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRCw0J2gwLDQnaEMsOCdoNiw0J2hDLDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4NSw0J2hDLDgnaDYsNCdoQyw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcigyKkNMSzJfUEVSSU9ELDgqQ0xLMl9QRVJJT0QsNypDTEsyX1BFUklPRCwyKkNMSzJfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtOCwgQ1BVOiBDTE9DSzIvMywgUlRDOiBDTE9DSzIvKDIrNyksIFVTQjogQ0xPQ0syLygyKzYpLCBXQlM6Q0xPQ0syLzMiKTsKIAkgIHRlc3Rfc3RlcCA9IDg7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hFLDQnaDAsNCdoRCw4J2g3LDQnaEQsOCdoMDB9KTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDg2LDQnaEQsOCdoNyw0J2hELDgnaDAwfSk7CiAJICBjbG9ja19tb25pdG9yKDMqQ0xLMl9QRVJJT0QsOSpDTEsyX1BFUklPRCw4KkNMSzJfUEVSSU9ELDMqQ0xLMl9QRVJJT0QpOwogCiAJICAkZGlzcGxheSgiU3RlcC05LCBDUFU6IENMT0NLMi80LCBSVEM6IENMT0NLMi8oMis4KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzIvNCIpOwogCSAgdGVzdF9zdGVwID0gOTsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEYsNCdoMCw0J2hFLDgnaDgsNCdoRSw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODcsNCdoRSw4J2g4LDQnaEUsOCdoMDB9KTsKIAkgIGNsb2NrX21vbml0b3IoNCpDTEsyX1BFUklPRCwxMCpDTEsyX1BFUklPRCw5KkNMSzJfUEVSSU9ELDQqQ0xLMl9QRVJJT0QpOwogCi0JICAkZGlzcGxheSgiU3RlcC0xMCwgQ1BVOiBDTE9DSzIvKDIrMyksIFJUQzogQ0xPQ0syLygyKzEyOCksIFVTQjogQ0xPQ0syLygyKzcpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CisJICAkZGlzcGxheSgiU3RlcC0xMCwgQ1BVOiBDTE9DSzIvKDIrMyksIFJUQzogQ0xPQ0syLygyKzEyOCksIFVTQjogQ0xPQ0syLygyKzgpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CiAJICB0ZXN0X3N0ZXAgPSAxMDsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEYsNCdoMCw0J2hGLDgnaDgwLDQnaEYsOCdoMDB9KTsKLQkgIGNsb2NrX21vbml0b3IoNSpDTEsyX1BFUklPRCwxMzAqQ0xLMl9QRVJJT0QsOSpDTEsyX1BFUklPRCw1KkNMSzJfUEVSSU9EKTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDg4LDQnaEYsOCdoODAsNCdoRiw4J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcig1KkNMSzJfUEVSSU9ELDEzMCpDTEsyX1BFUklPRCwxMCpDTEsyX1BFUklPRCw1KkNMSzJfUEVSSU9EKTsKIAotCSAgJGRpc3BsYXkoIlN0ZXAtMTAsIENQVTogQ0xPQ0syLygyKzMpLCBSVEM6IENMT0NLMi8oMisyNTUpLCBVU0I6IENMT0NLMi8oMis3KSwgV0JTOkNMT0NLMi8oMiszKSIpOworCSAgJGRpc3BsYXkoIlN0ZXAtMTAsIENQVTogQ0xPQ0syLygyKzMpLCBSVEM6IENMT0NLMi8oMisyNTUpLCBVU0I6IENMT0NLMi8oMis5KSwgV0JTOkNMT0NLMi8oMiszKSIpOwogCSAgdGVzdF9zdGVwID0gMTA7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoRiw4J2hGRiw0J2hGLDgnaDAwfSk7Ci0JICBjbG9ja19tb25pdG9yKDUqQ0xLMl9QRVJJT0QsMjU3KkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4OSw0J2hGLDgnaEZGLDQnaEYsOCdoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNSpDTEsyX1BFUklPRCwyNTcqQ0xLMl9QRVJJT0QsMTEqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCk7CiAKICAgICAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBDaGVja2luZyB0aGUgY2hpcCBzaWduYXR1cmUgOiIpOwpAQCAtMjQyLDggKzI0MSw4IEBACiAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKIAogCSB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNTgscmVhZF9kYXRhLDMyJ2g4MjczXzgzNDMpOwotCSB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMscmVhZF9kYXRhLDMyJ2gwMjAzXzIwMjIpOwotCSB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNjAscmVhZF9kYXRhLDMyJ2gwMDAzXzcwMDApOworCSB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMscmVhZF9kYXRhLDMyJ2gxMDAzXzIwMjIpOworCSB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNjAscmVhZF9kYXRhLDMyJ2gwMDAzXzgwMDApOwogCiAgICAgICBlbmQKICAgIApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VzYi9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwODJkMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9CRUhBVklPVVJBTF9CRk0gICAgPSAuLi9iZm0KK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjJjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L29wdC9wZGsvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorUklTQ19DT1JFPz0wCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfdXNiCisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICAtSSAkKFVQUkpfQkVIQVZJT1VSQUxfQkZNKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIC1JICQoVVBSSl9CRUhBVklPVVJBTF9CRk0pIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi52dnAgKi52Y2QgKi5sb2cgKi5mc3QKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0MS52IGIvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDEudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNTIyZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDEudgpAQCAtMCwwICsxLDU2IEBACitgZGVmaW5lIHVzYmJmbSAgdV91c2JfYWdlbnQKK3Rhc2sgdXNiX3Rlc3QxOworCityZWcgWzY6MF0gYWRkcmVzczsKK3JlZyBbMzowXSBlbmRwdDsKK3JlZyBbMzowXSBTdGF0dXM7CityZWcgWzMxOjBdIEJ5dGVDb3VudDsKKworaW50ZWdlciAgICBpLGo7CityZWcgWzc6MF0gIHN0YXJ0Ynl0ZTsKK3JlZyBbMTU6MF0gbWFzazsKK2ludGVnZXIgICAgTWF4UGt0U2l6ZTsKK3JlZyBbMzowXSAgUGFja1R5cGU7CisKKworcGFyYW1ldGVyICBNWUFDSyAgID0gNCdiMDAwMCwKKyAgICAgICAgICAgTVlOQUsgICA9IDQnYjAwMDEsCisgICAgICAgICAgIE1ZU1RBTEwgPSA0J2IwMDEwLAorICAgICAgICAgICBNWVRPVVQgID0gNCdiMDAxMSwKKyAgICAgICAgICAgTVlJVlJFUyA9IDQnYjAxMDAsCisgICAgICAgICAgIE1ZQ1JDRVIgPSA0J2IwMTAxOworCisKKworICAgICBiZWdpbgorICAKKworICAgICRkaXNwbGF5KCIlMGQ6IFVTQiBSZXNldCAgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS51c2Jod19yZXNldDsKKworICAgIGFkZHJlc3MgPSAxOworICAgIGVuZHB0ICAgID0gMDsKKyAgICAkZGlzcGxheSgiJTBkOiBTZXQgQWRkcmVzcyA9ICV4IC0tLS0tIiwgJHRpbWUsYWRkcmVzcyk7CisgICAgYHVzYmJmbS5TZXRBZGRyZXNzIChhZGRyZXNzKTsKKyAgICAkZGlzcGxheSgiJTBkOiBTZW5kaW5nIFNldHVwIENvbW1hbmQgIiwgJHRpbWUpOworICAgIGB1c2JiZm0uc2V0dXAoNydoMDAsIDQnaDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICAkZGlzcGxheSgiJTBkOiBTZW5kaW5nIFN0YXR1cyBDb21tYW5kICIsICR0aW1lKTsKKyAgICBgdXNiYmZtLnN0YXR1c19JTig3J2gwMCwgZW5kcHQsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICAjNTAwMDsKKyAgCisgICAgJGRpc3BsYXkoIiUwZDogU2V0IGNvbmZpZ3VyYXRpb24gIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0uU2V0Q29uZmlndXJhdGlvbigyJ2IwMSk7CisgICAgYHVzYmJmbS5zZXR1cChhZGRyZXNzLCA0J2IwMDAwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgYHVzYmJmbS5zdGF0dXNfSU4oYWRkcmVzcywgNCdiMDAwMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgICMyMDAwOworCisgICAgJGRpc3BsYXkoIiUwZDogQ29uZmlndXJhdGlvbiBkb25lICEhISEhISIsICR0aW1lKTsKKyAgICB0ZXN0X2NvbnRyb2wuZmluaXNoX3Rlc3Q7CisgICAgIAorICBlbmQKKworZW5kdGFzawpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDIudiBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QyLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmUzNzU0OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QyLnYKQEAgLTAsMCArMSw5MSBAQAorYGRlZmluZSB1c2JiZm0gIHVfdXNiX2FnZW50Cit0YXNrIHVzYl90ZXN0MjsKKworcmVnIFs2OjBdIGFkZHJlc3M7CityZWcgWzM6MF0gZW5kcHQ7CityZWcgWzM6MF0gU3RhdHVzOworCisgIGludGVnZXIgICAgaSxqOworICByZWcgWzc6MF0gIHN0YXJ0Ynl0ZTsKKyAgcmVnIFsxNTowXSBtYXNrOworICBpbnRlZ2VyICAgIE1heFBrdFNpemU7CisgIHJlZyBbMzowXSAgUGFja1R5cGU7CisKKworcGFyYW1ldGVyICBNWUFDSyAgID0gNCdiMDAwMCwKKyAgICAgICAgICAgTVlOQUsgICA9IDQnYjAwMDEsCisgICAgICAgICAgIE1ZU1RBTEwgPSA0J2IwMDEwLAorICAgICAgICAgICBNWVRPVVQgID0gNCdiMDAxMSwKKyAgICAgICAgICAgTVlJVlJFUyA9IDQnYjAxMDAsCisgICAgICAgICAgIE1ZQ1JDRVIgPSA0J2IwMTAxOworCisgICAgIGJlZ2luCisgICAgIGFkZHJlc3MgPSA3J2IwMDBfMDAwMTsKKyAgICAgZW5kcHQgICA9IDQnYjAwMDA7CisKKyAgICAkZGlzcGxheSgiJTBkOiBVU0IgUmVzZXQgIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0udXNiaHdfcmVzZXQ7CisKKyAgICAkZGlzcGxheSgiJTBkOiBTZXQgQWRkcmVzcyA9IDEgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS5TZXRBZGRyZXNzIChhZGRyZXNzKTsKKyAgICBgdXNiYmZtLnNldHVwKDcnaDAwLCA0J2gwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgYHVzYmJmbS5zdGF0dXNfSU4oNydoMDAsIGVuZHB0LCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgIzUwMDA7CisgIAorICAgICRkaXNwbGF5KCIlMGQ6IFNldCBjb25maWd1cmF0aW9uICAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLlNldENvbmZpZ3VyYXRpb24oMidiMDEpOworICAgIGB1c2JiZm0uc2V0dXAoYWRkcmVzcywgNCdiMDAwMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgIGB1c2JiZm0uc3RhdHVzX0lOKGFkZHJlc3MsIDQnYjAwMDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICAjMjAwMDsKKworICAgICRkaXNwbGF5KCIlMGQ6IENvbmZpZ3VyYXRpb24gZG9uZSAhISEhISEiLCAkdGltZSk7CisgICAgIAorICAgLy8gd3JpdGUgVUFSVCAgcmVnaXN0ZXJzIHRocm91Z2ggVVNCCisJCisgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkKKwkKKyAgICAvLyByZWdpc3RlciB3b3JkIHdyaXRlCisgICAgJGRpc3BsYXkoIiUwZDogUGVyZm9ybWluZyBSZWdpc3RlciBXb3JkIFdyaXRlLS0tLS0tLS0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMCwgIDMyJ2gxMTIyMzM0NCk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2g0LCAgMzInaDIyMzM0NDU1KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDgsICAzMidoMzM0NDU1NjYpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoQywgIDMyJ2g0NDU1NjY3Nyk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gxMCwgMzInaDU1NjY3Nzg4KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDE0LCAzMidoNjY3Nzg4OTkpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMTgsIDMyJ2g3Nzg4OTlBQSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gxQywgMzInaDg4OTlBQUJCKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDIwLCAzMidoOTlBQUJCQ0MpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMjQsIDMyJ2hBQUJCQ0NERCk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gyOCwgMzInaEJCQ0NEREVFKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDJDLCAzMidoQ0NEREVFRkYpOworICAgICM1MDA7CisKKyAgICAvLyByZWdpc3RlciB3b3JkIFJlYWQKKyAgICAkZGlzcGxheSgiJTBkOiBQZXJmb3JtaW5nIFJlZ2lzdGVyIFdvcmQgUmVhZC0tLS0tLS0tLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDAgLCAzMidoMTEyMjMzNDQpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoNCAsIDMyJ2gyMjMzNDQ1NSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2g4ICwgMzInaDMzNDQ1NTY2KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaEMgLCAzMidoNDQ1NTY2NzcpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMTAsIDMyJ2g1NTY2Nzc4OCk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gxNCwgMzInaDY2Nzc4ODk5KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDE4LCAzMidoNzc4ODk5QUEpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMUMsIDMyJ2g4ODk5QUFCQik7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gyMCwgMzInaDk5QUFCQkNDKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDI0LCAzMidoQUFCQkNDREQpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMjgsIDMyJ2hCQkNDRERFRSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gyQywgMzInaENDRERFRUZGKTsKKyAgICAjNTAwCisKKworICAKKyAgICAkZGlzcGxheSAoIlVTQiBkb2luZyByZWdpc3RlciB3cml0ZXMgYW5kIHJlYWRzIHRvIFVTQiBibG9jayBlbmQgXG4iKTsKKworICAgIHRlc3RfY29udHJvbC5maW5pc2hfdGVzdDsKKyAgZW5kCisKK2VuZHRhc2sKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QzLnYgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0My52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxZDFjNjkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0My52CkBAIC0wLDAgKzEsMTgyIEBACitgZGVmaW5lIHVzYmJmbSAgdGJfdG9wLnVfdXNiX2FnZW50Cit0YXNrIHVzYl90ZXN0MzsKKworcmVnIFs2OjBdIGFkZHJlc3M7CityZWcgWzM6MF0gZW5kcHQ7CityZWcgWzM6MF0gU3RhdHVzOworcmVnIFszMTowXSBCeXRlQ291bnQ7CityZWcgWzMxOjBdIFJlYWREYXRhOworaW50ZWdlciAgICBpLGosazsKKworCityZWcgWzE6MF0gZGF0YV9iaXQgICAgICAgIDsKK3JlZwkgIHN0b3BfYml0cyAgICAgICA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CityZWcJICBzdGlja19wYXJpdHkgICAgOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorcmVnCSAgcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorcmVnCSAgZXZlbl9vZGRfcGFyaXR5IDsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKK3JlZyBbMTU6MF0gZGl2aXNvciAgICAgICAgOwkvLyBkaXZpZGVkIGJ5IChuKzEpICogMTYKK3JlZyBbMTU6MF0gdGltZW91dCAgICAgICAgOy8vIHdhaXQgdGltZSBsaW1pdAorcmVnIAlmaWZvX2VuYWJsZSAgICAgICA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisKK3JlZyBbNzowXSB3cml0ZV9kYXRhIFswOjM5XTsKK3JlZyBbMTU6MF0gcnhfbnU7CityZWcgWzE1OjBdIHR4X251OworCisKK3BhcmFtZXRlciAgTVlBQ0sgICA9IDQnYjAwMDAsCisgICAgICAgICAgIE1ZTkFLICAgPSA0J2IwMDAxLAorICAgICAgICAgICBNWVNUQUxMID0gNCdiMDAxMCwKKyAgICAgICAgICAgTVlUT1VUICA9IDQnYjAwMTEsCisgICAgICAgICAgIE1ZSVZSRVMgPSA0J2IwMTAwLAorICAgICAgICAgICBNWUNSQ0VSID0gNCdiMDEwMTsKKworICAgICBiZWdpbgorICAgICBhZGRyZXNzID0gNydiMDAwXzAwMDE7CisgICAgIGVuZHB0ICAgPSA0J2IwMDAwOworCisgICAgJGRpc3BsYXkoIiUwZDogVVNCIFJlc2V0ICAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLnVzYmh3X3Jlc2V0OworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogICAgICAgICAgSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0UKKyAgICAqICAxLiAgMHgyRCwweDAwLCAweDAwICAgIAorICAgICogIDIuICAweEMzLDB4MDAsMHgwNSwweDAxLAorICAgICogICAgICAweDAwLDB4MDAsMHgwMCwweDAwLAorICAgICogICAgICAweDAwLDB4RUIsMHgyNQorICAgICogIDMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgKiAgNC4gIDB4NjksMHgwMCwgMHgxMCAgCisgICAgKiAgNS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEIsIDB4MDAgIAorICAgICogIDYuICAweEQyCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAkZGlzcGxheSgiJTBkOiBTZXQgQWRkcmVzcyA9IDEgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS5TZXRBZGRyZXNzIChhZGRyZXNzKTsKKyAgICBgdXNiYmZtLnNldHVwKDcnaDAwLCA0J2gwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgYHVzYmJmbS5zdGF0dXNfSU4oNydoMDAsIGVuZHB0LCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisKKyAgICAjNTAwMDsKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgICAgICAgICBIT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRQorICAgICogIDEuICAweDJELDB4MDEsIDB4RTggICAgCisgICAgKiAgMi4gIDB4QzMsMHgwMCwweDA5LDB4MDEsCisgICAgKiAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsCisgICAgKiAgICAgIDB4MDAsMHgyNywweDI1CisgICAgKiAgMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAqICA0LiAgMHg2OSwweDAxLCAweEU4ICAKKyAgICAqICA1LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0QiwgMHgwMCAgCisgICAgKiAgNi4gIDB4RDIKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgICAkZGlzcGxheSgiJTBkOiBTZXQgY29uZmlndXJhdGlvbiAgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS5TZXRDb25maWd1cmF0aW9uKDInYjAxKTsKKyAgICBgdXNiYmZtLnNldHVwKGFkZHJlc3MsIDQnYjAwMDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICBgdXNiYmZtLnN0YXR1c19JTihhZGRyZXNzLCA0J2IwMDAwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgIzIwMDA7CisKKyAgICAkZGlzcGxheSgiJTBkOiBDb25maWd1cmF0aW9uIGRvbmUgISEhISEhIiwgJHRpbWUpOworICAgICAKKyAgIC8vIHdyaXRlIFVBUlQgIHJlZ2lzdGVycyB0aHJvdWdoIFVTQgorCQorICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgIGRhdGFfYml0ICAgICAgICA9IDInYjExOworICAgICAgc3RvcF9iaXRzICAgICAgID0gMDsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKKyAgICAgIHN0aWNrX3Bhcml0eSAgICA9IDA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CisgICAgICBwYXJpdHlfZW4gICAgICAgPSAxOyAvLyBwYXJpdHkgZW5hYmxlCisgICAgICBldmVuX29kZF9wYXJpdHkgPSAxOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorICAgICAgZGl2aXNvciAgICAgICAgPSAxNTsJLy8gZGl2aWRlZCBieSAobisxKSAqIDE2CisgICAgICB0aW1lb3V0ICAgICAgICA9IDUwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgICAgIGZpZm9fZW5hYmxlICAgICAgID0gMDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKwkKKyAgICB0Yl90b3AudV91YXJ0X2FnZW50LnVhcnRfaW5pdDsKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgICAgICAgICBIT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRQorICAgICogIDEuICAweDJELDB4MDEsIDB4RTggICAgCisgICAgKiAgMi4gIDB4QzMsMHg0MCwweDEwLDB4MDAsCisgICAgKiAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDQsCisgICAgKiAgICAgIDB4MDAsMHhBOCwweEM1CisgICAgKiAgMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAqICA0LiAgMHhFMSwweDAxLCAweEU4ICAKKyAgICAqICA1LiAgMHg0QiwweDAwLDB4MDAsMHgwMCAgICAgICAgICAgICAgICAgCisgICAgKiAgICAgIDB4MTcsMHhCRiwweEQ1CisgICAgKiAgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAqICA3LiAgMHg2OSwweDAxLDB4RTgKKyAgICAqICA4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0QiwweDAwCisgICAgKiAgOS4gICAweEQyCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDAsIHsyNydoMCwyJ2IxMCwxJ2IxLDEnYjEsMSdiMX0pOyAgCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogICAgICAgICAgSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0UKKyAgICAqICAxLiAgMHgyRCwweDAxLCAweEU4ICAgIAorICAgICogIDIuICAweEMzLDB4NDAsMHgxMCwweDAwLAorICAgICogICAgICAweDAwLDB4MDAsMHgwOCwweDA0LAorICAgICogICAgICAweDAwLDB4MjksMHgwNworICAgICogIDMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgKiAgNC4gIDB4RTEsMHgwMSwgMHhFOCAgCisgICAgKiAgNS4gIDB4NEIsMHgwMCwweDAwLDB4MDAgICAgICAgICAgICAgICAgIAorICAgICogICAgICAweDBFLDB4N0UsMHgxRgorICAgICogIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgKiAgNy4gIDB4NjksMHgwMSwweEU4CisgICAgKiAgOC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEIsMHgwMAorICAgICogIDkuICAgMHhEMgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLy8gQmF1ZCBDbG9jayAxNngsICBNYXN0ZXIgQ2xvY2svICgyK2NmZ192YWx1ZSkKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDgsIGRpdmlzb3ItMSk7ICAKKyAgICB0Yl90b3AudV91YXJ0X2FnZW50LmNvbnRyb2xfc2V0dXAgKGRhdGFfYml0LCBzdG9wX2JpdHMsIHBhcml0eV9lbiwgZXZlbl9vZGRfcGFyaXR5LCBzdGlja19wYXJpdHksIHRpbWVvdXQsIGRpdmlzb3IsIGZpZm9fZW5hYmxlKTsKKwkKKyAgICBmb3IgKGk9MDsgaTw0MDsgaT1pKzEpCisJd3JpdGVfZGF0YVtpXSA9ICRyYW5kb207CisKKyAgIGZvcmsKKyAgIGJlZ2luCisgICAgICBmb3IgKGk9MDsgaTw0MDsgaT1pKzEpCisgICAgICBiZWdpbgorICAgICAgICAkZGlzcGxheSAoIlxuLi4uIFdyaXRpbmcgY2hhciAlZCAuLi4iLCB3cml0ZV9kYXRhW2ldKTsKKyAgICAgICAgIHRiX3RvcC51X3VhcnRfYWdlbnQud3JpdGVfY2hhciAod3JpdGVfZGF0YVtpXSk7CisJICMyMDAwMDsKKyAgICAgIGVuZAorICAgZW5kCisKKyAgIGJlZ2luCisgICAgICBmb3IgKGo9MDsgajw0MDsgaj1qKzEpCisgICAgICBiZWdpbgorICAgICAgICB0Yl90b3AudV91YXJ0X2FnZW50LnJlYWRfY2hhcl9jaGsod3JpdGVfZGF0YVtqXSk7CisgICAgICBlbmQKKyAgIGVuZAorCisgICAvLyBSZWFkIHRocm91Z2ggdGhlIFVTQiBhbmQgY2hlY2sgdGhlIFVBUlQgUlggRmlmbyBTdGF0dXM7CisgICAvLyBJZiBBdmFpbGFibGUsIHRoZW4gbG9vcCBpdCBiYWNrCisgICBiZWdpbgorICAgICAgZm9yIChrPTA7IGs8NDA7IGs9aysxKQorICAgICAgYmVnaW4KKyAgICAgICAgUmVhZERhdGFbMV09IDEnYjE7CisgICAgICAgIHdoaWxlKFJlYWREYXRhWzFdID09IDEnYjEgKSBiZWdpbiAvLyBDaGVjayBmb3IgVUFSVCBSWCBmaWZvIG5vdCBlbXB0eQorICAgICAgICAgICAkZGlzcGxheSAoIlxuLi4uIFJlYWRpbmcgdGhlIFVBUlQgU3RhdHVzOiAleCAuLi4iLCBSZWFkRGF0YSk7CisgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICogICAgICAgICAgSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0UKKyAgICAgICAgICAqICAxLiAgMHgyRCwweDAxLCAweEU4ICAgIAorICAgICAgICAgICogIDIuICAweEMzLDB4QzAsMHgxMSwweDAwLAorICAgICAgICAgICogICAgICAweDAwLDB4MDAsMHgwQywweDA0LAorICAgICAgICAgICogICAgICAweDAwLDB4NzAsMHg2NgorICAgICAgICAgICogIDMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgICAgICAgKiAgNC4gIDB4NjksMHgwMSwgMHhFOCAgCisJICAqICA1LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0QiwwMAorCSAgKiAgNi4gIDB4RDIKKwkgICogIDcuICAweEUxLDB4MDEsMHhFOAorCSAgKiAgOC4gIDB4NEIsMHgwMCwgMHgwMAorICAgICAgICAgICogIDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZCAoYWRkcmVzcywgMzInaEMsIFJlYWREYXRhKTsgIAorICAgICAgIGVuZAorICAgICAgICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkIChhZGRyZXNzLCAzMidoMTQsIFJlYWREYXRhKTsgIC8vIFJlYWQgdGhlIFVBUlQgUlhEIERhdGEKKyAgICAgICAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDEwLCBSZWFkRGF0YSk7ICAgLy8gV3JpdGUgQmFjayB0byBVQVJUIFRYRAorICAgICAgZW5kCisgICBlbmQKKyAgIGpvaW4KKworICAgIzEwMAorICAgdGJfdG9wLnVfdWFydF9hZ2VudC5yZXBvcnRfc3RhdHVzKHJ4X251LCB0eF9udSk7CitlbmQKK2VuZHRhc2sKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvdXNlcl91c2JfdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdXNlcl91c2JfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2UyYjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VzYi91c2VyX3VzYl90Yi52CkBAIC0wLDAgKzEsNTYxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgU3RhbmRhbG9uZSBVc2VyIHZhbGlkYXRpb24gVGVzdCBiZW5jaCAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHJpc2NkdWlubyBwcm9qZWN0ICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcmlzY2R1aW5vLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIFRoaXMgaXMgYSBzdGFuZGFsb25lIHRlc3QgYmVuY2ggdG8gdmFsaWRhdGUgdGhlICAgICAgICAgICAgLy8vLworLy8vLyAgIHVzYiBpbnRlcmZhZmFjZSB0aHJvdWdoIEV4dGVybmFsIFdCIGkvRi4gICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAwOSBNYXIgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKKworYHRpbWVzY2FsZSAxIG5zIC8gMSBucworCisvLyBOb3RlIGluIGNhcmF2ZWwsIDB4MzBYWF9YWFhYIG9ubHkgY29tZSB0byB1c2VyIGludGVyZmFjZQorLy8gU28sIHVzaW5nIHdiX2hvc3QgYmFuayBzZWxlY3Qgd2UgaGF2ZSBjaGFuZ2luZyBNU0IgYWRkcmVzcyBbMzE6MjRdID0gMHgxMAorYGRlZmluZSBBRERSX1NQQUNFX1VBUlQgICAgMzInaDMwMDFfMDAwMAorYGRlZmluZSBBRERSX1NQQUNFX1VTQiAgICAgMzInaDMwMDFfMDA4MAorYGRlZmluZSBBRERSX1NQQUNFX1NTUEkgICAgMzInaDMwMDFfMDBDMAorYGRlZmluZSBBRERSX1NQQUNFX1BJTk1VWCAgMzInaDMwMDJfMDAwMAorCitgZGVmaW5lIFRCX0dMQkwgICAgdXNlcl91c2JfdGIKK2BkZWZpbmUgVVNCX0JGTSAgICB1X3VzYl9hZ2VudAorCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgInVzYl9hZ2VudHMudiIKK2BpbmNsdWRlICJ0ZXN0X2NvbnRyb2wudiIKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCitgaW5jbHVkZSAidXNiZF9maWxlcy52IgorCittb2R1bGUgdXNlcl91c2JfdGI7CisKK3BhcmFtZXRlciAgVVNCX0hQRVIgICA9IDEwLjQxNjc7IC8vIDQ4TWh6IEhhbGYgY3ljbGUKK3BhcmFtZXRlciAgVVNFUjJfSFBFUiA9IDIuNjA0MjsgLy8gMTkyTWh6IEhhbGYgY3ljbGUKKworCXJlZyBjbG9jazsKKwlyZWcgdXNlcl9jbG9jazI7CisJcmVnIHVzYl80OG1oel9jbGs7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisJLy8gVXNlciBJL08KKwl3aXJlIFszNzowXSBpb19vZWI7CisJd2lyZSBbMzc6MF0gaW9fb3V0OworCXdpcmUgWzM3OjBdIGlvX2luOworCisKKwlyZWcgWzE6MF0gc3BpX2NoaXBfbm87CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwlyZWcgICAgICAgIHRlc3RfZmFpbDsKKwlyZWcgWzMxOjBdIHJlYWRfZGF0YTsKKworICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFJlZ2lzdGVyIEludGVyZmFjZQorICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHdpcmUgWzMxOjBdICAgdXNiZF9yZWdfYWRkcjsgICAvLyBSZWdpc3RlciBBZGRyZXNzCisgICAgICAgCXdpcmUgCSAgICAgIHVzYmRfcmVnX3Jkd3JuOyAgLy8gMCAtPiB3cml0ZSwgMS0+IHJlYWQKKyAgICAgICAJd2lyZSAJICAgICAgdXNiZF9yZWdfcmVxOyAgICAvLyAgUmVnaXN0ZXIgUmVxCisgICAgICAgIHdpcmUgWzMxOjBdICAgdXNiZF9yZWdfd2RhdGE7ICAvLyBSZWdpc3RlciB3cml0ZSBkYXRhCisgICAgICAgIHJlZyBbMzE6MF0gICAgdXNiZF9yZWdfcmRhdGE7ICAvLyBSZWdpc3RlciBSZWFkIERhdGEKKyAgICAgICAgcmVnICAgICAgICAgICB1c2JkX3JlZ19hY2sgPSAxJ2IxOyAgICAvLyBSZWdpc3RlciBBY2sKKworCXJlZyAgWzMxOjBdICAgUmVnQmFuayBbMDoxNV07CisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIzEyLjUgY2xvY2sgPD0gKGNsb2NrID09PSAxJ2IwKTsKKworCS8vIDQ4TWh6IGNsb2NrIGdlbmVyYXRpb24KKwlhbHdheXMgYmVnaW4KKyAgICAgICAgICAjVVNCX0hQRVIgICAgIHVzYl80OG1oel9jbGsgPSAxJ2IwOworICAgICAgICAgICNVU0JfSFBFUiAgICAgdXNiXzQ4bWh6X2NsayA9IDEnYjE7CisgICAgICAgIGVuZAorCisJLy8gVVNFUiBDbG9jayBnZW5lcmF0aW9uCisJYWx3YXlzIGJlZ2luCisgICAgICAgICAgI1VTRVIyX0hQRVIgICAgIHVzZXJfY2xvY2syID0gMSdiMDsKKyAgICAgICAgICAjVVNFUjJfSFBFUiAgICAgdXNlcl9jbG9jazIgPSAxJ2IxOworICAgICAgICBlbmQKKworCWluaXRpYWwgYmVnaW4KKwkJY2xvY2sgPSAwOworICAgICAgICAgICAgICAgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgICAgICAgICAgICAgICAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICAgICAgICAgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisJZW5kCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDUsIHVzZXJfdXNiX3RiKTsKKwkgICBlbmQKKyAgICAgICBgZW5kaWYKKworICAgICAgICBhbHdheXNAKHBvc2VkZ2Ugd2JfcnN0X2kgIG9yIHBvc2VkZ2UgdXNiXzQ4bWh6X2NsaykKKwliZWdpbgorCSAgIGlmKHdiX3JzdF9pID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgIHVzYmRfcmVnX3JkYXRhID0gJ2gwOworICAgICAgICAgICAgICB1c2JkX3JlZ19hY2sgICA9ICdoMDsKKwkgICBlbmQgZWxzZSBiZWdpbgorCSAgICAgIGlmKHVzYmRfcmVnX3JlcSAmJiB1c2JkX3JlZ19yZHdybiA9PSAxJ2IwICYmICF1c2JkX3JlZ19hY2spIGJlZ2luCisgICAgICAgICAgICAgICAgIHVzYmRfcmVnX2FjayA9ICdoMTsKKwkJIFJlZ0JhbmtbdXNiZF9yZWdfYWRkcls1OjJdXSA9IHVzYmRfcmVnX3dkYXRhOworCQkgJGRpc3BsYXkoIlNUQVRVUzogV3JpdGUgQWNjZXNzIEFkZHJlc3MgOiAleCBEYXRhOiAleCIsdXNiZF9yZWdfYWRkcls3OjBdLHVzYmRfcmVnX3dkYXRhKTsKKwkgICAgICBlbmQgZWxzZSBpZih1c2JkX3JlZ19yZXEgJiYgdXNiZF9yZWdfcmR3cm4gPT0gMSdiMSAmJiAhdXNiZF9yZWdfYWNrKSBiZWdpbgorICAgICAgICAgICAgICAgICB1c2JkX3JlZ19hY2sgPSAnaDE7CisJCSB1c2JkX3JlZ19yZGF0YSA9IFJlZ0JhbmtbdXNiZF9yZWdfYWRkcls1OjJdXTsKKwkJICRkaXNwbGF5KCJTVEFUVVM6IFJlYWQgQWNjZXNzIEFkZHJlc3MgOiAleCBEYXRhOiAleCIsdXNiZF9yZWdfYWRkcls3OjBdLHVzYmRfcmVnX3JkYXRhKTsKKwkgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICB1c2JkX3JlZ19hY2sgPSAnaDA7CisJICAgICAgZW5kCisJICAgZW5kCisJZW5kCisKKwlpbml0aWFsIGJlZ2luCisJCSRkdW1wb247CisKKwkJIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCSAgICAgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgVGVzdCBTdGFydGVkIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisgICAgICAgICAgICAgICAgLy8gRW5hYmxlIFNQSSBNdWx0aSBGdW5jdGlvbmFsIFBvcnRzCisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX1BJTk1VWCsnaDAwMzgsJ2g0MDApOworCisJICAgICAgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisJCSMxOworICAgICAgICAgCisJICAgICAgICAvLyBTZXQgVVNCIGNsb2NrIDogMTkyLzQgPSA0OE1oegkKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDgyLDQnaDAsOCdoMCw0J2gwLDgnaDAxfSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHJlc2V0CisJCS8vIFJlbW92ZSBXQiBhbmQgU1BJL1VBUlQgUmVzZXQsIEtlZXAgQ09SRSB1bmRlciBSZXNldAorICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9QSU5NVVgrOCdoOCwnaDAzRik7CisKKworCQl0ZXN0X2ZhaWwgPSAwOworCSAgICAgICAgcmVwZWF0ICgyMDApIEAocG9zZWRnZSBjbG9jayk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisKKworCQkvL3VzYl90ZXN0MTsKKwkJdXNiX3Rlc3QyOworCisKKwkJcmVwZWF0ICgxMDApIEAocG9zZWRnZSBjbG9jayk7CisJCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisKKyAgICAgICAgICAJaWYodGVzdF9jb250cm9sLmVycm9yX2NvdW50ID09IDApIGJlZ2luCisJCSAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBVU0IgTW9kZSAoR0wpIFBhc3NlZCIpOworCQkgICBgZWxzZQorCQkgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFVTQiBNb2RlIChSVEwpIFBhc3NlZCIpOworCQkgICBgZW5kaWYKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJCSAgICBgaWZkZWYgR0wKKwkgICAgCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFVTQiBNb2RlIChHTCkgRmFpbGVkIik7CisJCSAgICBgZWxzZQorCQkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBVU0IgTW9kZSAoUlRMKSBGYWlsZWQiKTsKKwkJICAgIGBlbmRpZgorCQkgZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJICAgICAgICAkZmluaXNoOworCWVuZAorCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgIChjbG9jayAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICh1c2VyX2Nsb2NrMiApLCAgLy8gUmVhbC10aW1lIGNsb2NrCisgICAgLndiX3JzdF9pICAgICh3Yl9yc3RfaSAgICApLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIC53YnNfY3ljX2kgICAod2JkX2V4dF9jeWNfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfc3RiX2kgICAod2JkX2V4dF9zdGJfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfYWRyX2kgICAod2JkX2V4dF9hZHJfaSksICAvLyBhZGRyZXNzCisgICAgLndic193ZV9pICAgICh3YmRfZXh0X3dlX2kpLCAgLy8gd3JpdGUKKyAgICAud2JzX2RhdF9pICAgKHdiZF9leHRfZGF0X2kpLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAud2JzX3NlbF9pICAgKHdiZF9leHRfc2VsX2kpLCAgLy8gYnl0ZSBlbmFibGUKKworICAgIC53YnNfZGF0X28gICAod2JkX2V4dF9kYXRfbyksICAvLyBkYXRhIGlucHV0CisgICAgLndic19hY2tfbyAgICh3YmRfZXh0X2Fja19vKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgLmxhX2RhdGFfaW4gICAgICAoJzEpICwKKyAgICAubGFfZGF0YV9vdXQgICAgICgpLAorICAgIC5sYV9vZW5iICAgICAgICAgKCcwKSwKKyAKKworICAgIC8vIElPcworICAgIC5pb19pbiAgICAgICAgICAoaW9faW4pICAsCisgICAgLmlvX291dCAgICAgICAgIChpb19vdXQpICwKKyAgICAuaW9fb2ViICAgICAgICAgKGlvX29lYikgLAorCisgICAgLnVzZXJfaXJxICAgICAgICgpIAorCispOworICAgIHVzYl9hZ2VudCB1X3VzYl9hZ2VudCgpOworICAgIHRlc3RfY29udHJvbCB0ZXN0X2NvbnRyb2woKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisKKyAgICBlbmQKK2BlbmRpZiAgCisKKy8vIERyaXZlIFVTQiBQYWRzCisvLwordHJpIHVzYmRfdHhkcCA9IChpb19vZWJbMzZdID09IDEnYjApID8gaW9fb3V0WzM2XSA6IDEnYno7Cit0cmkgdXNiZF90eGRuID0gKGlvX29lYlszN10gPT0gMSdiMCkgPyBpb19vdXRbMzddIDogMSdiejsKKworYXNzaWduIGlvX2luWzM2XSA9IHVzYmRfdHhkcDsKK2Fzc2lnbiBpb19pblszN10gPSB1c2JkX3R4ZG47CisKKy8vIEZ1bGwgU3BlZWQgRGV2aWNlIEluZGljYXRpb24KKworcHVsbHVwKHVzYmRfdHhkcCk7IAorLy9wdWxsZG93bih1c2JkX3R4ZG4pOworCit1c2IxZF90b3AgdV91c2JfdG9wKAorCisJLmNsa19pICAgICAgICAgICAodXNiXzQ4bWh6X2NsayksIAorCS5yc3RuX2kgICAgICAgICAgKCF3Yl9yc3RfaSksCisgCisJCS8vIFVTQiBQSFkgSW50ZXJmYWNlCisJLnVzYl9kcCAgICAgICAgICAodXNiZF90eGRwKSwgCisJLnVzYl9kbiAgICAgICAgICAodXNiZF90eGRuKSwgCisgCisJLy8gVVNCIE1pc2MKKwkucGh5X3R4X21vZGUgICAgICgxJ2IxKSwgCisgICAgICAgIC51c2JfcnN0ICAgICAgICAgKCksCisgCisJLy8gSW50ZXJydXB0cworCS5kcm9wcGVkX2ZyYW1lICAgKCksIAorCS5taXNhbGlnbmVkX2ZyYW1lKCksCisJLmNyYzE2X2VyciAgICAgICAoKSwKKyAKKwkvLyBWZW5kb3IgRmVhdHVyZXMKKwkudl9zZXRfaW50ICAgICAgICgpLCAKKwkudl9zZXRfZmVhdHVyZSAgICgpLCAKKwkud1ZhbHVlICAgICAgICAgICgpLAorCS53SW5kZXggICAgICAgICAgKCksIAorCS52ZW5kb3JfZGF0YSAgICAgKCksCisgCisJLy8gVVNCIFN0YXR1cworCS51c2JfYnVzeSAgICAgICAgKCksIAorCS5lcF9zZWwgICAgICAgICAgKCksCisgCisJLy8gRW5kIHBvaW50IDEgY29uZmlndXJhdGlvbgorCS5lcDFfY2ZnICAgICAgICAgKAlgSVNPICB8IGBJTiAgfCAxNCdkMDI1NgkJKSwKKwkvLyBFbmQgcG9pbnQgMSAnT1VUJyBGSUZPIGkvZgorCS5lcDFfZG91dCAgICAgICAgKAkJCQkJKSwKKwkuZXAxX3dlICAgICAgICAgICgJCQkJCSksCisJLmVwMV9mdWxsICAgICAgICAoCQkxJ2IwCQkJKSwKKwkvLyBFbmQgcG9pbnQgMSAnSU4nIEZJRk8gaS9mCisJLmVwMV9kaW4gICAgICAgICAoCQk4J2gwCQkgICAgICAgICksCisJLmVwMV9yZSAgICAgICAgICAoCQkgICAJCSAgICAgICAgKSwKKwkuZXAxX2VtcHR5ICAgICAgICgJCTEnYjAgICAgIAkJKSwKKwkuZXAxX2JmX2VuICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDFfYmZfc2l6ZSAgICAgKAkJNydoMAkJCSksCisgCisJLy8gRW5kIHBvaW50IDIgY29uZmlndXJhdGlvbgorCS5lcDJfY2ZnICAgICAgICAgKAlgSVNPICB8IGBPVVQgfCAxNCdkMDI1NgkJKSwKKwkvLyBFbmQgcG9pbnQgMiAnT1VUJyBGSUZPIGkvZgorCS5lcDJfZG91dCAgICAgICAgKAkJCQkgICAgICAgICksCisJLmVwMl93ZSAgICAgICAgICAoCQkJCSAgICAgICAgKSwKKwkuZXAyX2Z1bGwgICAgICAgICgJCTEnYjAgICAgIAkJKSwKKwkvLyBFbmQgcG9pbnQgMiAnSU4nIEZJRk8gaS9mCisJLmVwMl9kaW4gICAgICAgICAoCQk4J2gwCQkJKSwKKwkuZXAyX3JlICAgICAgICAgICgJCQkJCSksCisJLmVwMl9lbXB0eSAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXAyX2JmX2VuICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDJfYmZfc2l6ZSAgICAgKAkJNydoMAkJCSksCisgCisJLy8gRW5kIHBvaW50IDMgY29uZmlndXJhdGlvbgorCS5lcDNfY2ZnICAgICAgICAgKAlgQlVMSyB8IGBJTiAgfCAxNCdkMDY0CQkpLAorCS8vIEVuZCBwb2ludCAzICdPVVQnIEZJRk8gaS9mCisJLmVwM19kb3V0ICAgICAgICAoCQkJCQkpLAorCS5lcDNfd2UgICAgICAgICAgKAkJCQkJKSwKKwkuZXAzX2Z1bGwgICAgICAgICgJCTEnYjAJCQkpLAorCS8vIEVuZCBwb2ludCAzICdJTicgRklGTyBpL2YKKwkuZXAzX2RpbiAgICAgICAgICgJCTgnaDAgICAgICAJCSksCisJLmVwM19yZSAgICAgICAgICAoCQkgICAgICAgIAkJKSwKKwkuZXAzX2VtcHR5ICAgICAgICgJCTEnYjAgICAgCQkpLAorCS5lcDNfYmZfZW4gICAgICAgKAkJMSdiMAkJCSksCisJLmVwM19iZl9zaXplICAgICAoCQk3J2gwCQkJKSwKKyAKKwkvLyBFbmQgcG9pbnQgNCBjb25maWd1cmF0aW9uCisJLmVwNF9jZmcgICAgICAgICAoCWBCVUxLIHwgYE9VVCB8IDE0J2QwNjQJCSksCisJLy8gRW5kIHBvaW50IDQgJ09VVCcgRklGTyBpL2YKKwkuZXA0X2RvdXQgICAgICAgICgJCSAgICAgICAgCQkpLAorCS5lcDRfd2UgICAgICAgICAgKAkJICAgICAgICAJCSksCisJLmVwNF9mdWxsICAgICAgICAoCQkxJ2IwICAgICAJCSksCisJLy8gRW5kIHBvaW50IDQgJ0lOJyBGSUZPIGkvZgorCS5lcDRfZGluICAgICAgICAgKAkJOCdoMAkJCSksCisJLmVwNF9yZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDRfZW1wdHkgICAgICAgKAkJMSdiMAkJCSksCisJLmVwNF9iZl9lbiAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXA0X2JmX3NpemUgICAgICgJCTcnaDAJCQkpLAorIAorCS8vIEVuZCBwb2ludCA1IGNvbmZpZ3VyYXRpb24KKwkuZXA1X2NmZyAgICAgICAgICgJYElOVCAgfCBgSU4gIHwgMTQnZDA2NAkJKSwKKwkvLyBFbmQgcG9pbnQgNSAnT1VUJyBGSUZPIGkvZgorCS5lcDVfZG91dCAgICAgICAgKAkJCQkJKSwKKwkuZXA1X3dlICAgICAgICAgICgJCQkJCSksCisJLmVwNV9mdWxsICAgICAgICAoCQkxJ2IwCQkJKSwKKwkvLyBFbmQgcG9pbnQgNSAnSU4nIEZJRk8gaS9mCisJLmVwNV9kaW4gICAgICAgICAoCQk4J2gwICAgICAJCSksCisJLmVwNV9yZSAgICAgICAgICAoCQkJCSAgICAgICAgKSwKKwkuZXA1X2VtcHR5ICAgICAgICgJCTEnYjAgICAgIAkJKSwKKwkuZXA1X2JmX2VuICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDVfYmZfc2l6ZSAgICAgKAkJNydoMAkJCSksCisgCisJLy8gRW5kIHBvaW50IDYgY29uZmlndXJhdGlvbgorCS5lcDZfY2ZnICAgICAgICAgKAkJMTQnaDAwCQkJKSwKKwkvLyBFbmQgcG9pbnQgNiAnT1VUJyBGSUZPIGkvZgorCS5lcDZfZG91dCAgICAgICAgKAkJCQkJKSwKKwkuZXA2X3dlICAgICAgICAgICgJCQkJCSksCisJLmVwNl9mdWxsICAgICAgICAoCQkxJ2IwCQkJKSwKKwkvLyBFbmQgcG9pbnQgNiAnSU4nIEZJRk8gaS9mCisJLmVwNl9kaW4gICAgICAgICAoCQk4J2gwCQkJKSwKKwkuZXA2X3JlICAgICAgICAgICgJCQkJCSksCisJLmVwNl9lbXB0eSAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXA2X2JmX2VuICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDZfYmZfc2l6ZSAgICAgKAkJNydoMAkJCSksCisgCisJLy8gRW5kIHBvaW50IDcgY29uZmlndXJhdGlvbgorCS5lcDdfY2ZnICAgICAgICAgKAkJMTQnaDAwCQkJKSwKKwkvLyBFbmQgcG9pbnQgNyAnT1VUJyBGSUZPIGkvZgorCS5lcDdfZG91dCAgICAgICAgKAkJCQkJKSwKKwkuZXA3X3dlICAgICAgICAgICgJCQkJCSksCisJLmVwN19mdWxsICAgICAgICAoCQkxJ2IwCQkJKSwKKwkvLyBFbmQgcG9pbnQgNyAnSU4nIEZJRk8gaS9mCisJLmVwN19kaW4gICAgICAgICAoCQk4J2gwCQkJKSwKKwkuZXA3X3JlICAgICAgICAgICgJCQkJCSksCisJLmVwN19lbXB0eSAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXA3X2JmX2VuICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDdfYmZfc2l6ZSAgICAgKAkJNydoMAkJCSksCisgCisgICAgICAgIC8vIFJlZ2lzdGVyIEludGVyZmFjZQorCS5yZWdfYWRkciAgICAgICAgKHVzYmRfcmVnX2FkZHIpLAorCS5yZWdfcmR3cm4gICAgICAgKHVzYmRfcmVnX3Jkd3JuKSwKKwkucmVnX3JlcSAgICAgICAgICh1c2JkX3JlZ19yZXEpLAorCS5yZWdfd2RhdGEgICAgICAgKHVzYmRfcmVnX3dkYXRhKSwKKwkucmVnX3JkYXRhICAgICAgICh1c2JkX3JlZ19yZGF0YSksCisJLnJlZ19hY2sgICAgICAgICAodXNiZF9yZWdfYWNrKQorIAorCSk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgVGFzaworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgdGVzdF9lcnI7CitiZWdpbgorICAgICB0ZXN0X2ZhaWwgPSAxOworZW5kCitlbmR0YXNrCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgV1JJVEUgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAvLyRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CitpbnB1dCBbMzE6MF0gY21wX2RhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgaWYoZGF0YSAhPT0gY21wX2RhdGEpIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUiA6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBFeGQ6IDB4JXggUnhkOiAweCV4ICIsYWRkcmVzcyxjbXBfZGF0YSxkYXRhKTsKKyAgICAgdXNlcl91c2JfdGIudGVzdF9mYWlsID0gMTsKKyAgZW5kIGVsc2UgYmVnaW4KKyAgICAgJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgUkVBRCAgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICBlbmQKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKKworYGlmZGVmIEdMCisKK3dpcmUgICAgICAgIHdiZF9zcGlfc3RiX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc3BpX2Fja19vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fja19vOword2lyZSAgICAgICAgd2JkX3NwaV93ZV9pICAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9hZHJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NwaV9zZWxfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3NkcmFtX3N0Yl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NkcmFtX2Fja19vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2Fja19vOword2lyZSAgICAgICAgd2JkX3NkcmFtX3dlX2kgID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fYWRyX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWRkcl9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NkcmFtX3NlbF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfdWFydF9zdGJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfY3M7Cit3aXJlICAgICAgICB3YmRfdWFydF9hY2tfbyAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWNrOword2lyZSAgICAgICAgd2JkX3VhcnRfd2VfaSAgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dyOword2lyZSBbNzowXSAgd2JkX3VhcnRfYWRyX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FkZHI7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9kYXRfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd2RhdGE7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9kYXRfbyAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfcmRhdGE7Cit3aXJlICAgICAgICB3YmRfdWFydF9zZWxfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYmU7CisKK2BlbmRpZgorCisvKioKK2BpZmRlZiBHTAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUklTQyBJTUVNIGFtZCBETUVNIE1vbml0b3JpbmcgVEFTSworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgZGVmaW5lIFJJU0NfQ09SRSAgdXNlcl91YXJ0X3RiLnVfdG9wLnVfY29yZS51X3Jpc2N2X3RvcAorCithbHdheXNAKHBvc2VkZ2UgYFJJU0NfQ09SRS53Yl9jbGspIGJlZ2luCisgICAgaWYoYFJJU0NfQ09SRS53YmRfaW1lbV9hY2tfaSkKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gSU1FTSBBRERSRVNTOiAleCBSZWFkIERhdGEgOiAleCIsIGBSSVNDX0NPUkUud2JkX2ltZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfaW1lbV9kYXRfaSk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiBgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggV3JpdGUgRGF0YTogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X28pOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgIWBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBSRUFEIERhdGEgOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfaSk7CitlbmQKKworYGVuZGlmCisqKi8KK2BpbmNsdWRlICJ0ZXN0cy91c2JfdGVzdDEudiIKK2BpbmNsdWRlICJ0ZXN0cy91c2JfdGVzdDIudiIKKworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdgppbmRleCBlOWY3MTI1Li42NGY5OWM3IDEwMDY0NAotLS0gYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YKKysrIGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXhfcmVnLnN2CkBAIC03NjksNyArNzY5LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFNvZnR3YXJlIFJlZy0yLCBSZWxlYXNlIGRhdGU6IDxEQVk+PE1PTlRIPjxZRUFSPgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZ2VuXzMyYl9yZWcgICMoMzInaDAyMDNfMjAyMikgdV9yZWdfMjMJKAorZ2VuXzMyYl9yZWcgICMoMzInaDEwMDNfMjAyMikgdV9yZWdfMjMJKAogCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKIAkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAogCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCkBAIC03ODIsOSArNzgyLDkgQEAKIAkgICAgICApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTb2Z0d2FyZSBSZWctMzogUG9qZWN0IFJldmlzb24gMy43ID0gMDAwMzcwMAorLy8gU29mdHdhcmUgUmVnLTM6IFBvamVjdCBSZXZpc29uIDMuOCA9IDAwMDM4MDAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWdlbl8zMmJfcmVnICAjKDMyJ2gwMDAzXzcwMDApIHVfcmVnXzI0CSgKK2dlbl8zMmJfcmVnICAjKDMyJ2gwMDAzXzgwMDApIHVfcmVnXzI0CSgKIAkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCiAJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKIAkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdiBiL3Zlcmlsb2cvcnRsL3VhcnRfaTJjX3VzYl9zcGkvc3JjL3VhcnRfaTJjX3VzYl9zcGkuc3YKaW5kZXggZDMzNzhlMC4uMDI4ZjFkNyAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdgorKysgYi92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Jfc3BpL3NyYy91YXJ0X2kyY191c2Jfc3BpLnN2CkBAIC0xNjgsOCArMTY4LDggQEAKIAogd2lyZSByZWdfdWFydF9jcyAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1VBUlQpID8gcmVnX2NzIDogMSdiMDsKIHdpcmUgcmVnX2kyY21fY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9JMkMpICA/IHJlZ19jcyA6IDEnYjA7Ci13aXJlIHJlZ191c2JfY3MgICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfVUFSVCkgPyByZWdfY3MgOiAxJ2IwOwotd2lyZSByZWdfc3BpbV9jcyAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1NQSSkgPyAgcmVnX2NzIDogMSdiMDsKK3dpcmUgcmVnX3VzYl9jcyAgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VU0IpICA/IHJlZ19jcyA6IDEnYjA7Cit3aXJlIHJlZ19zcGltX2NzICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfU1BJKSAgPyAgcmVnX2NzIDogMSdiMDsKIAogdWFydF9jb3JlICB1X3VhcnRfY29yZSAoICAKIApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXByal9uZXRsaXN0cy52IGIvdmVyaWxvZy9ydGwvdXByal9uZXRsaXN0cy52CmluZGV4IGI1NGYyMTguLjZlZWJiZDggMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3VwcmpfbmV0bGlzdHMudgorKysgYi92ZXJpbG9nL3J0bC91cHJqX25ldGxpc3RzLnYKQEAgLTQyLDcgKzQyLDkgQEAKICAgICAgYGluY2x1ZGUgImxpYnMucmVmL3NreTEzMF9mZF9zY19odmwvdmVyaWxvZy9za3kxMzBfZmRfc2NfaHZsLnYiCiAKIAotICAgICBgaW5jbHVkZSAic3JhbV9tYWNyb3Mvc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84LnYiCisgICAgIGBpZm5kZWYgRlVMTF9DSElQX1NJTSAKKyAgICAgICAgYGluY2x1ZGUgInNyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52IgorICAgICBgZW5kaWYKICAgICAgYGluY2x1ZGUgInBpbm11eC9zcmMvcGlubXV4LnN2IgogICAgICBgaW5jbHVkZSAicGlubXV4L3NyYy9waW5tdXhfcmVnLnN2IgogICAgICBgaW5jbHVkZSAicGlubXV4L3NyYy9ncGlvX2ludHIuc3YiCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3RvcC91c2IxX2hvc3Quc3YgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3RvcC91c2IxX2hvc3Quc3YKaW5kZXggMWRlNzBkNC4uNmVlMGZmNSAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy90b3AvdXNiMV9ob3N0LnN2CisrKyBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdgpAQCAtNTcsOCArNTcsOCBAQAogICAgIGlucHV0ICAgICAgICAgICAgICAgICAgaW5fZHAgICAsCiAgICAgaW5wdXQgICAgICAgICAgICAgICAgICBpbl9kbiAgICwKIAotICAgIGlucHV0ICAgICAgICAgICAgICAgICAgb3V0X2RwICAgLAotICAgIGlucHV0ICAgICAgICAgICAgICAgICAgb3V0X2RuICAgLAorICAgIG91dHB1dCAgICAgICAgICAgICAgICAgb3V0X2RwICAgLAorICAgIG91dHB1dCAgICAgICAgICAgICAgICAgb3V0X2RuICAgLAogICAgIG91dHB1dCAgICAgICAgICAgICAgICAgb3V0X3R4X29lbiwKIAogICAgIC8vIE1hc3RlciBQb3J0CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52IGIvdmVyaWxvZy9ydGwvdXNlcl9wcm9qZWN0X3dyYXBwZXIudgppbmRleCBjNWM0Y2EyLi45NWEzMmNjIDEwMDY0NAotLS0gYS92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52CisrKyBiL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYKQEAgLTE4Niw3ICsxODYsMTAgQEAKIC8vLy8gICAgICAgMS4gcXNwaSBjcyMgcG9ydCBtYXBwaW5nIGNoYW5nZWQgZnJvbSBpbyAyODoyNSB0byAyNToyOC8vLy8KIC8vLy8gICAgICAgMi4gc3NwaSwgYnVnIGZpeCBpbiByZWcgYWNjZXNzIGFuZCBlbmRpYW4gc3VwcG9ydCBhZGRlZC8vLy8KIC8vLy8gICAgICAgMy4gV2lzaGJvbmUgaW50ZXJjb25uZWN0IG5vdyBzdXBwb3J0IGNyb3NzLWNvbm5lY3QgICAgIC8vLy8KLS8vLy8gICAgICAgICAgZmVhdHVyZQorLy8vLyAgICAgICAgICBmZWF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAzLjggIE1hciAxMCAyMDIyLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIDEuIHVzYiBjaGlwIHNlbGVjdCBidWcgaW5zaWRlIHVhcnRfKiB3cmFwcGVyICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIDIuIGluIHdiX2hvc3QsIGluY3JlYXNlZCB1c2IgY2xrIGN0cmwgdG8gNCB0byA4IGJpdCAgLy8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwogLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvd2JfaG9zdC9zcmMvd2JfaG9zdC5zdiBiL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YKaW5kZXggNTViZjlmYi4uZWVmNTQ5YSAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvd2JfaG9zdC9zcmMvd2JfaG9zdC5zdgorKysgYi92ZXJpbG9nL3J0bC93Yl9ob3N0L3NyYy93Yl9ob3N0LnN2CkBAIC0xNTIsNyArMTUyLDcgQEAKIGxvZ2ljICBbMzowXSAgICAgICAgY2ZnX3diX2Nsa19jdHJsOwogbG9naWMgIFszOjBdICAgICAgICBjZmdfY3B1X2Nsa19jdHJsOwogbG9naWMgIFs3OjBdICAgICAgICBjZmdfcnRjX2Nsa19jdHJsOwotbG9naWMgIFszOjBdICAgICAgICBjZmdfdXNiX2Nsa19jdHJsOworbG9naWMgIFs3OjBdICAgICAgICBjZmdfdXNiX2Nsa19jdHJsOwogbG9naWMgIFs3OjBdICAgICAgICBjZmdfZ2xiX2N0cmw7CiAKIC8vIHVhcnQgTWFzdGVyIFBvcnQKQEAgLTM2Myw3ICszNjMsNyBAQAogYXNzaWduIGNmZ193Yl9jbGtfY3RybCAgICAgID0gcmVnXzBbMTE6OF07CiBhc3NpZ24gY2ZnX3J0Y19jbGtfY3RybCAgICAgPSByZWdfMFsxOToxMl07CiBhc3NpZ24gY2ZnX2NwdV9jbGtfY3RybCAgICAgPSByZWdfMFsyMzoyMF07Ci1hc3NpZ24gY2ZnX3VzYl9jbGtfY3RybCAgICAgPSByZWdfMFszMToyOF07Cithc3NpZ24gY2ZnX3VzYl9jbGtfY3RybCAgICAgPSByZWdfMFszMToyNF07CiAKIAogYWx3YXlzIEAoICopCkBAIC01NDQsOCArNTQ0LDggQEAKIHdpcmUgICB1c2JfcmVmX2NsazsKIHdpcmUgICB1c2JfY2xrX2ludDsKIAotd2lyZSAgICAgICBjZmdfdXNiX2Nsa19kaXYgICAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzNdOwotd2lyZSBbMjowXSBjZmdfdXNiX2Nsa19yYXRpbyAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzI6MF07Cit3aXJlICAgICAgIGNmZ191c2JfY2xrX2RpdiAgICAgICA9IGNmZ191c2JfY2xrX2N0cmxbN107Cit3aXJlIFs2OjBdIGNmZ191c2JfY2xrX3JhdGlvICAgICA9IGNmZ191c2JfY2xrX2N0cmxbNjowXTsKIAogYXNzaWduIHVzYl9yZWZfY2xrID0gdXNlcl9jbG9jazIgOwogLy9hc3NpZ24gdXNiX2Nsa19pbnQgPSAoY2ZnX3VzYl9jbGtfZGl2KSAgICAgPyB1c2JfY2xrX2RpdiA6IHVzYl9yZWZfY2xrOwpAQCAtNTU0LDcgKzU1NCw3IEBACiAKIGN0ZWNoX2Nsa19idWYgdV9jbGtidWZfdXNiICguQSAodXNiX2Nsa19pbnQpLCAuIFgodXNiX2NsaykpOwogCi1jbGtfY3RsICMoMikgdV91c2JjbGsgKAorY2xrX2N0bCAjKDYpIHVfdXNiY2xrICgKICAgIC8vIE91dHB1dHMKICAgICAgICAuY2xrX28gICAgICAgICAodXNiX2Nsa19kaXYgICAgICApLAogICAgLy8gSW5wdXRzCg==