ZGlmZiAtLWdpdCBhL3NpZ25vZmYvcGlubXV4L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvcGlubXV4L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgppbmRleCBhMDNiYjEwLi5mMDU0OWNkIDEwMDY0NAotLS0gYS9zaWdub2ZmL3Bpbm11eC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKKysrIGIvc2lnbm9mZi9waW5tdXgvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0xLDIgKzEsMiBAQAogLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQotMCwvcHJvamVjdC9vcGVubGFuZS9waW5tdXgscGlubXV4LHBpbm11eCxmbG93IGNvbXBsZXRlZCwwaDhtMTJzMG1zLDBoNW0yNHMwbXMsNDQxMjkuMjkyOTI5MjkyOTMsMC4yNDc1LDIyMDY0LjY0NjQ2NDY0NjQ2NiwyNi4xOSw4ODIuNjgsNTQ2MSwwLDAsMCwwLDAsMCwwLC0xLDAsLTEsLTEsNDQ2MzM2LDU2MjExLDAuMCwwLjAsLTEsMC4wLDAuMCwwLjAsMC4wLC0xLDAuMCwwLjAsMzQ5MjEzMzM5LjAsMC4wLDU4LjIxLDQyLjg5LDMzLjQ4LDIxLjY1LC0xLDM0ODAsODUxOSw1NjIsNTYwMSwwLDAsMCw0MDYzLDEyMywxMDcsNDAsNzcsOTMzLDEwOSwxNCwyODUsMTA4NiwxMDM0LDExLDMxNCwzMjU5LDAsMzU3MywxMDAuMCwxMC4wLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjMsMC4zLHNreTEzMF9mZF9zY19oZCw0LDQKKzAsL3Byb2plY3Qvb3BlbmxhbmUvcGlubXV4LHBpbm11eCxwaW5tdXgsZmxvdyBjb21wbGV0ZWQsMGg4bTM4czBtcywwaDVtMzhzMG1zLDQ0MTI5LjI5MjkyOTI5MjkzLDAuMjQ3NSwyMjA2NC42NDY0NjQ2NDY0NjYsMjYuMTksODkxLjQ4LDU0NjEsMCwwLDAsMCwwLDAsMCwtMSwwLC0xLC0xLDQ0NTcyNSw1NjUxMywwLjAsMC4wLC0xLDAuMCwwLjAsMC4wLDAuMCwtMSwwLjAsMC4wLDM0OTg3NTU0Mi4wLDAuMCw1OC40NSw0My4wNSwzMy4zNiwyMC4wMSwtMSwzNDgwLDg1MTksNTYyLDU2MDEsMCwwLDAsNDA2MywxMjMsMTA3LDQwLDc3LDkzMywxMDksMTQsMjg1LDEwODYsMTAzNCwxMSwzMTQsMzI1OSwwLDM1NzMsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC4zLDAuMyxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpX3RvcC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpX3RvcC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKaW5kZXggYWMzMGIyYS4uZDk4ZmQxNSAxMDA2NDQKLS0tIGEvc2lnbm9mZi91YXJ0X2kyY21fdXNiX3NwaV90b3AvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CisrKyBiL3NpZ25vZmYvdWFydF9pMmNtX3VzYl9zcGlfdG9wL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMSwyICsxLDIgQEAKICxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKLTAsL3Byb2plY3Qvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGlfdG9wLHVhcnRfaTJjX3VzYl9zcGlfdG9wLHVhcnRfaTJjbV91c2Jfc3BpX3RvcCxmbG93IGNvbXBsZXRlZCwwaDE1bTMzczBtcywwaDExbTJzMG1zLDY5NDAwLjAsMC4zNSwzNDcwMC4wLDM5LjI3LDE0NjMuMDMsMTIxNDUsMCwwLDAsMCwwLDAsMCwtMSwwLC0xLC0xLDYzMDk5NiwxMDU3OTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3MzUyODY1NS4wLDAuMCw1My40OCw1Mi43OCwyMy43LDI1LjkyLC0xLDg2OTgsMTMwNjMsMTU1Miw1ODUzLDAsMCwwLDk4MjAsMzc4LDE4OSwyNTksMjc2LDIxOTQsMzU2LDg2LDgwNywyNDA5LDIzNDgsMTksNDk4LDQ2NDMsMCw1MTQxLDEwMC4wLDEwLjAsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuNDUsMC4zLHNreTEzMF9mZF9zY19oZCw0LDQKKzAsL3Byb2plY3Qvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGlfdG9wLHVhcnRfaTJjX3VzYl9zcGlfdG9wLHVhcnRfaTJjbV91c2Jfc3BpX3RvcCxmbG93IGNvbXBsZXRlZCwwaDE4bTJzMG1zLDBoMTNtMTVzMG1zLDY5Mjg1LjcxNDI4NTcxNDI5LDAuMzUsMzQ2NDIuODU3MTQyODU3MTQ1LDM5LjIxLDE0MzAuMzQsMTIxMjUsMCwwLDAsMCwwLDAsMCwtMSwwLC0xLC0xLDU5NDQzOSwxMDM4OTYsMC4wLDAuMCwwLjAsMC4wLC0wLjAyLDAuMCwwLjAsMC4wLDAuMCwtMC4wMiwzNjk5MTcxNzcuMCwwLjAsNTEuMTEsNTEuNDcsMTkuMjYsMjIuOTgsLTEsODcwMiwxMzA2NywxNTUyLDU4NTMsMCwwLDAsOTgyNCwzOTIsMTg5LDI1NiwyNzIsMjIwMCwzNTQsODgsODA3LDI0MDksMjM0OCwxOCw0OTgsNDY0MywwLDUxNDEsOTkuODAwMzk5MjAxNTk2OCwxMC4wMiwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC40NSwwLjMsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi91c2VyX3Byb2plY3Rfd3JhcHBlci9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgppbmRleCA0NjgwNjU4Li41NGNhOGM3IDEwMDY0NAotLS0gYS9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgorKysgYi9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMSwyICsxLDIgQEAKICxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKLTAsL3Byb2plY3Qvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIsdXNlcl9wcm9qZWN0X3dyYXBwZXIsdXNlcl9wcm9qZWN0X3dyYXBwZXIsZmxvdyBjb21wbGV0ZWQsMWgzMG0zNXMwbXMsMGg0bTM2czBtcywtMi4wLC0xLC0xLC0xLDU0Ny45MiwxMiwwLDAsMCwwLDAsMCwwLDAsMCwtMSwtMSwxMzk1NDU4LDY5MjQsMC4wLC0xLC0xLDAuMCwwLjAsMC4wLC0xLC0xLDAuMCwwLjAsLTEsMC4wLDUuOTcsOC45NywwLjg0LDAuNDcsMC4wLDIyNiwyMzE1LDIyNiwyMzE1LDAsMCwwLDEyLDAsMCwwLDAsMCwwLDAsMCwtMSwtMSwtMSwwLDAsMCwwLDEwMC4wLDEwLjAsMTAsQVJFQSAwLDUsNTAsMSw4MCwxMzAsMC41NSwwLjMsc2t5MTMwX2ZkX3NjX2hkLDQsMAorMCwvcHJvamVjdC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlcix1c2VyX3Byb2plY3Rfd3JhcHBlcix1c2VyX3Byb2plY3Rfd3JhcHBlcixmbG93IGNvbXBsZXRlZCwxaDMwbTU1czBtcywwaDRtMzhzMG1zLC0yLjAsLTEsLTEsLTEsNTQxLjU4LDEyLDAsMCwwLDAsMCwwLDAsMCwwLC0xLC0xLDEzOTU0OTAsNjg3MiwwLjAsLTEsLTEsMC4wLDAuMCwwLjAsLTEsLTEsMC4wLDAuMCwtMSwwLjAsNS45Myw5LjAsMC45MywwLjM4LDAuMCwyMjYsMjMxNSwyMjYsMjMxNSwwLDAsMCwxMiwwLDAsMCwwLDAsMCwwLDAsLTEsLTEsLTEsMCwwLDAsMCwxMDAuMCwxMC4wLDEwLEFSRUEgMCw1LDUwLDEsODAsMTMwLDAuNTUsMC4zLHNreTEzMF9mZF9zY19oZCw0LDAKZGlmZiAtLWdpdCBhL3NpZ25vZmYvd2JfaG9zdC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3diX2hvc3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CmluZGV4IGQzZDFmODQuLjBiYmUxNzkgMTAwNjQ0Ci0tLSBhL3NpZ25vZmYvd2JfaG9zdC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKKysrIGIvc2lnbm9mZi93Yl9ob3N0L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMSwyICsxLDIgQEAKICxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKLTAsL3Byb2plY3Qvb3BlbmxhbmUvd2JfaG9zdCx3Yl9ob3N0LHdiX2hvc3QsZmxvdyBjb21wbGV0ZWQsMGg1bTI0czBtcywwaDNtMzVzMG1zLDYwNTE3LjY0NzA1ODgyMzUzLDAuMTQ4NzUsMzAyNTguODIzNTI5NDExNzY2LDM2LjY3LDc1OS4zNCw0NTAxLDAsMCwwLDAsMCwwLDAsOSwwLDAsLTEsMjA2MzUxLDM2NTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTYxODE5MjQuMCwwLjAsNDUuODMsNDguMCw0LjE2LDEyLjY5LC0xLDM0NjEsNjEzNCwxMDA5LDM1MzgsMCwwLDAsMzc3MywzNzIsNTIsNzQsMTg0LDY1MiwxMzAsMjMsNDU4LDEwMTQsOTg5LDExLDI5NiwxOTUwLDAsMjI0NiwxMDAuMCwxMC4wLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjM4LDAuMyxza3kxMzBfZmRfc2NfaGQsNCw0CiswLC9wcm9qZWN0L29wZW5sYW5lL3diX2hvc3Qsd2JfaG9zdCx3Yl9ob3N0LGZsb3cgY29tcGxldGVkLDBoNW05czBtcywwaDNtMjRzMG1zLDYxMjk3LjQ3ODk5MTU5NjY0LDAuMTQ4NzUsMzA2NDguNzM5NDk1Nzk4MzIsMzcuMTUsNzc3LjE1LDQ1NTksMCwwLDAsMCwwLDAsMCwxMiwwLDAsLTEsMjA5MjQ0LDM3MDI3LDAuMCwtMC4yMSwwLjAsMC4wLDAuMCwwLjAsLTE3LjczLDAuMCwwLjAsMC4wLDE1ODYxOTkxMy4wLDAuMCw0Ni4wNiw0OC44Nyw0LjA1LDEyLjI5LC0xLDM1MTMsNjIwNiwxMDA5LDM1NTgsMCwwLDAsMzgzMywzODAsNTIsNzUsMTg2LDY1MCwxNDYsMjMsNDY2LDEwMjIsOTk3LDExLDI5NiwxOTUwLDAsMjI0NiwxMDAuMCwxMC4wLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjM4LDAuMyxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L01ha2VmaWxlIGIvdmVyaWxvZy9kdi9NYWtlZmlsZQppbmRleCA4MzZkMGNkLi5kZGJmN2QwIDEwMDY0NAotLS0gYS92ZXJpbG9nL2R2L01ha2VmaWxlCisrKyBiL3Zlcmlsb2cvZHYvTWFrZWZpbGUKQEAgLTE5LDcgKzE5LDcgQEAKIC5TVUZGSVhFUzoKIC5TSUxFTlQ6IGNsZWFuIGFsbAogCi1QQVRURVJOUyA9IHdiX3BvcnQgcmlzY19ib290IHVzZXJfcmlzY19ib290IHVzZXJfdWFydCB1c2VyX3FzcGkgdXNlcl9pMmNtIHJpc2N2X3JlZ3Jlc3MgdXNlcl9iYXNpYyB1c2VyX3VhcnRfbWFzdGVyIHVhcnRfbWFzdGVyCitQQVRURVJOUyA9IHdiX3BvcnQgcmlzY19ib290IHVzZXJfcmlzY19ib290IHVzZXJfdWFydCB1c2VyX3FzcGkgdXNlcl9pMmNtIHJpc2N2X3JlZ3Jlc3MgdXNlcl9iYXNpYyB1c2VyX3VzYiB1c2VyX3VhcnRfbWFzdGVyIHVhcnRfbWFzdGVyCiAKIGFsbDogICR7UEFUVEVSTlN9CiAJZm9yIGkgaW4gJHtQQVRURVJOU307IGRvIFwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3Rlc3RfY29udHJvbC52IGIvdmVyaWxvZy9kdi9hZ2VudHMvdGVzdF9jb250cm9sLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmViMDY2YQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYWdlbnRzL3Rlc3RfY29udHJvbC52CkBAIC0wLDAgKzEsODIgQEAKKworbW9kdWxlIHRlc3RfY29udHJvbCgpOworICAKKyAgZXZlbnQgICAgICAgIGVycm9yX2RldGVjdGVkOworICBpbnRlZ2VyICAgICAgZXJyb3JfY291bnQ7CisgIHJlZyAgICAgICAgICB2ZXJib3NlX21zZzsKKyAgCisgIC8vIGluaXRpYWxpemUgZGVidWcgdmFyaWFibGVzIAorICBpbml0aWFsCisgICAgYmVnaW4KKyAgICAgIGVycm9yX2NvdW50ID0gMDsKKyAgICAgIHZlcmJvc2VfbXNnID0gMDsKKyAgICBlbmQKKworCisgIC8vIGNvdW50IHRoZSBudW1iZXIgZXJyb3IgCisgIGFsd2F5cyBAKGVycm9yX2RldGVjdGVkKQorICAgIGJlZ2luCisgICAgICBlcnJvcl9jb3VudCA9IGVycm9yX2NvdW50ICsgMTsKKyAgICBlbmQKKyAgCisgIAorICAvLyBlbmFibGluZy9kaXNhYmxpbmcgIG1lc3NhZ2UKKyAgdGFzayBtc2dfZW5hYmxlOworICAgIGlucHV0IFsyMCo4OjFdIG1zZ19zcmM7CisgICAgaW5wdXQgbXNnX2VuYWJsZTsKKyAgICBiZWdpbgorICAgICAgdmVyYm9zZV9tc2cgPSBtc2dfZW5hYmxlOworICAgICAgaWYgKG1zZ19lbmFibGUpCisgICAgICAgICRkaXNwbGF5KCIgICAgICAgICBBdCB0aW1lICV0ICoqICVzOiBlbmFibGluZyBtZXNzYWdlcyIsJHRpbWUsIG1zZ19zcmMpOworICAgICAgZWxzZQorICAgICAgICAkZGlzcGxheSgiICAgICAgICAgQXQgdGltZSAldCAqKiAlczogZGlzYWJsaW5nIG1lc3NhZ2VzIiwkdGltZSwgbXNnX3NyYyk7CisgICAgZW5kCisgIGVuZHRhc2sgLy8gbXNnCisKKyAgLy8gZ2VuZXJhdGluZyBtZXNzYWdlCisgIHRhc2sgbXNnOworICAgIGlucHV0IFsyMCo4OjFdIG1zZ19zcmM7CisgICAgaW5wdXQgWzQwKjg6MV0gbXNnX3RleHQ7CisgICAgYmVnaW4KKyAgICAgIGlmICh2ZXJib3NlX21zZykKKyAgICAgICAgJGRpc3BsYXkoIiAgICAgICAgIEF0IHRpbWUgJXQgKiogJXM6IE1zZzogJXMiLCR0aW1lLCBtc2dfc3JjLCBtc2dfdGV4dCk7CisgICAgZW5kCisgIGVuZHRhc2sgLy8gbXNnCisKKyAgLy8gZ2VuZXJhdGluZyBsb25nIG1lc3NhZ2UKKyAgdGFzayBtc2dsOworICAgIGlucHV0IFs0MCo4OjFdIG1zZ19zcmM7CisgICAgaW5wdXQgWzgwKjg6MV0gbXNnX3RleHQ7CisgICAgYmVnaW4KKyAgICAgIGlmICh2ZXJib3NlX21zZykKKyAgICAgICAgJGRpc3BsYXkoIiAgICAgICAgIEF0IHRpbWUgJXQgKiogJXM6IE1zZzogJXMiLCR0aW1lLCBtc2dfc3JjLCBtc2dfdGV4dCk7CisgICAgZW5kCisgIGVuZHRhc2sgLy8gbXNnCisKKyAgLy8gZ2VuZXJhdGluZyB0aGUgZXJyb3IgbWVzc2FnZQorICB0YXNrIGVycjsKKyAgICBpbnB1dCBbMjAqODoxXSBlcnJfc3JjOworICAgIGlucHV0IFs0MCo4OjFdIGVycl90ZXh0OworICAgIGJlZ2luCisgICAgICAtPiBlcnJvcl9kZXRlY3RlZDsKKyAgICAgICRkaXNwbGF5KCJUaW1lICUwZCwgJXMgRXJyb3I6ICVzIiwkdGltZSwgZXJyX3NyYywgZXJyX3RleHQpOworICAgIGVuZAorICBlbmR0YXNrIC8vIGVycgorCisKK3Rhc2sgZmluaXNoX3Rlc3Q7CitiZWdpbgorCisgICAkZGlzcGxheSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgaWYgKCBlcnJvcl9jb3VudCA9PSAwICkKKyAgICAgICRkaXNwbGF5KCIqIFRFU1Q6IFBBU1NFRCIpOworICAgZWxzZQorICAgICAgJGRpc3BsYXkoIiogVEVTVDogRkFJTEVEXG4qXHRFcnJvcihzKSA9ICVkIiwgZXJyb3JfY291bnQpOworCisgICAkZGlzcGxheSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworZW5kCitlbmR0YXNrCisKKworZW5kbW9kdWxlIC8vIGRlYnVnX3Byb2MKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9hZ2VudHMvdXNiX2FnZW50cy52IGIvdmVyaWxvZy9kdi9hZ2VudHMvdXNiX2FnZW50cy52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjY1NjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2FnZW50cy91c2JfYWdlbnRzLnYKQEAgLTAsMCArMSwxMDEwIEBACisKK2BkZWZpbmUgVE9QIHVzZXJfdXNiX3RiCisKK21vZHVsZSB1c2JfYWdlbnQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlZmluZXM6CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFJlc3BvbnNlIHZhbHVlcworYGRlZmluZSBVU0JfUkVTX09LICAgICAgOCdoMAorYGRlZmluZSBVU0JfUkVTX05BSyAgICAgOCdoRkYKK2BkZWZpbmUgVVNCX1JFU19TVEFMTCAgIDgnaEZFCitgZGVmaW5lIFVTQl9SRVNfVElNRU9VVCA4J2hGRAorCisKKy8vIFVTQiBQSUQgdmFsdWVzCitgZGVmaW5lIFBJRF9PVVQgICAgICAgIDgnaEUxCitgZGVmaW5lIFBJRF9JTiAgICAgICAgIDgnaDY5CitgZGVmaW5lIFBJRF9TT0YgICAgICAgIDgnaEE1CitgZGVmaW5lIFBJRF9TRVRVUCAgICAgIDgnaDJECisKK2BkZWZpbmUgUElEX0RBVEEwICAgICAgOCdoQzMKK2BkZWZpbmUgUElEX0RBVEExICAgICAgOCdoNEIKKworYGRlZmluZSBQSURfQUNLICAgICAgICA4J2hEMgorYGRlZmluZSBQSURfTkFLICAgICAgICA4J2g1QQorYGRlZmluZSBQSURfU1RBTEwgICAgICA4J2gxRQorCisvLyBTdGFuZGFyZCByZXF1ZXN0cyAodmlhIFNFVFVQIHBhY2tldHMpCitgZGVmaW5lIFJFUV9HRVRfU1RBVFVTICAgICAgICA4J2gwMAorYGRlZmluZSBSRVFfQ0xFQVJfRkVBVFVSRSAgICAgOCdoMDEKK2BkZWZpbmUgUkVRX1NFVF9GRUFUVVJFICAgICAgIDgnaDAzCitgZGVmaW5lIFJFUV9TRVRfQUREUkVTUyAgICAgICA4J2gwNQorYGRlZmluZSBSRVFfR0VUX0RFU0NSSVBUT1IgICAgOCdoMDYKK2BkZWZpbmUgUkVRX1NFVF9ERVNDUklQVE9SICAgIDgnaDA3CitgZGVmaW5lIFJFUV9HRVRfQ09ORklHVVJBVElPTiA4J2gwOAorYGRlZmluZSBSRVFfU0VUX0NPTkZJR1VSQVRJT04gOCdoMDkKK2BkZWZpbmUgUkVRX0dFVF9JTlRFUkZBQ0UgICAgIDgnaDBBCitgZGVmaW5lIFJFUV9TRVRfSU5URVJGQUNFICAgICA4J2gwQgorYGRlZmluZSBSRVFfU1lOQ19GUkFNRSAgICAgICAgOCdoMEMKKworLy8gRGVzY3JpcHRvciB0eXBlcworYGRlZmluZSBERVNDX0RFVklDRSAgICAgICAgICAgOCdoMDEKK2BkZWZpbmUgREVTQ19DT05GSUdVUkFUSU9OICAgIDgnaDAyCitgZGVmaW5lIERFU0NfU1RSSU5HICAgICAgICAgICA4J2gwMworYGRlZmluZSBERVNDX0lOVEVSRkFDRSAgICAgICAgOCdoMDQKK2BkZWZpbmUgREVTQ19FTkRQT0lOVCAgICAgICAgIDgnaDA1CitgZGVmaW5lIERFU0NfREVWX1FVQUxJRklFUiAgICA4J2gwNgorYGRlZmluZSBERVNDX09USEVSX1NQRUVEX0NPTkYgOCdoMDcKK2BkZWZpbmUgREVTQ19JRl9QT1dFUiAgICAgICAgIDgnaDA4CisKKy8vIERldmljZSBjbGFzcworYGRlZmluZSBERVZfQ0xBU1NfUkVTRVJWRUQgICAgICA4J2gwMAorYGRlZmluZSBERVZfQ0xBU1NfQVVESU8gICAgICAgICA4J2gwMQorYGRlZmluZSBERVZfQ0xBU1NfQ09NTVMgICAgICAgICA4J2gwMgorYGRlZmluZSBERVZfQ0xBU1NfSElEICAgICAgICAgICA4J2gwMworYGRlZmluZSBERVZfQ0xBU1NfTU9OSVRPUiAgICAgICA4J2gwNAorYGRlZmluZSBERVZfQ0xBU1NfUEhZX0lGICAgICAgICA4J2gwNQorYGRlZmluZSBERVZfQ0xBU1NfUE9XRVIgICAgICAgICA4J2gwNgorYGRlZmluZSBERVZfQ0xBU1NfUFJJTlRFUiAgICAgICA4J2gwNworYGRlZmluZSBERVZfQ0xBU1NfU1RPUkFHRSAgICAgICA4J2gwOAorYGRlZmluZSBERVZfQ0xBU1NfSFVCICAgICAgICAgICA4J2gwOQorYGRlZmluZSBERVZfQ0xBU1NfVE1DICAgICAgICAgICA4J2hGRQorYGRlZmluZSBERVZfQ0xBU1NfVkVORE9SX0NVU1RPTSA4J2hGRgorCisvLyBEZXZpY2UgUmVxdWVzdHMgKGJtUmVxdWVzdFR5cGUpCitgZGVmaW5lIFJFUURJUl9IT1NUVE9ERVZJQ0UgICAgICAgICgwIDw8IDcpCitgZGVmaW5lIFJFUURJUl9ERVZJQ0VUT0hPU1QgICAgICAgICgxIDw8IDcpCitgZGVmaW5lIFJFUVRZUEVfU1RBTkRBUkQgICAgICAgICAgICgwIDw8IDUpCitgZGVmaW5lIFJFUVRZUEVfQ0xBU1MgICAgICAgICAgICAgICgxIDw8IDUpCitgZGVmaW5lIFJFUVRZUEVfVkVORE9SICAgICAgICAgICAgICgyIDw8IDUpCitgZGVmaW5lIFJFUVJFQ19ERVZJQ0UgICAgICAgICAgICAgICgwIDw8IDApCitgZGVmaW5lIFJFUVJFQ19JTlRFUkZBQ0UgICAgICAgICAgICgxIDw8IDApCitgZGVmaW5lIFJFUVJFQ19FTkRQT0lOVCAgICAgICAgICAgICgyIDw8IDApCitgZGVmaW5lIFJFUVJFQ19PVEhFUiAgICAgICAgICAgICAgICgzIDw8IDApCisKKy8vIEVuZHBvaW50cworYGRlZmluZSBFTkRQT0lOVF9ESVJfTUFTSyAgICAgICAgICAoMSA8PCA3KQorYGRlZmluZSBFTkRQT0lOVF9ESVJfSU4gICAgICAgICAgICAoMSA8PCA3KQorYGRlZmluZSBFTkRQT0lOVF9ESVJfT1VUICAgICAgICAgICAoMCA8PCA3KQorYGRlZmluZSBFTkRQT0lOVF9BRERSX01BU0sgICAgICAgICAoOCdoN0YpCitgZGVmaW5lIEVORFBPSU5UX1RZUEVfTUFTSyAgICAgICAgICg4J2gzKQorYGRlZmluZSBFTkRQT0lOVF9UWVBFX0NPTlRST0wgICAgICAoMCkKK2BkZWZpbmUgRU5EUE9JTlRfVFlQRV9JU08gICAgICAgICAgKDEpCitgZGVmaW5lIEVORFBPSU5UX1RZUEVfQlVMSyAgICAgICAgICgyKQorYGRlZmluZSBFTkRQT0lOVF9UWVBFX0lOVEVSUlVQVCAgICAoMykKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWZpbmVzOgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYGRlZmluZSBVU0JfQ1RSTCAgICAgICAgICA4J2gwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9UWF9GTFVTSCAgICAgICAgICAgICAgICAgICAgOAorICAgIGBkZWZpbmUgVVNCX0NUUkxfVFhfRkxVU0hfU0hJRlQgICAgICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1RYX0ZMVVNIX01BU0sgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9ETVBVTExET1dOICAgICAgICAgICAgICA3CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9TSElGVCAgICAgICAgNworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fTUFTSyAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RQUFVMTERPV04gICAgICAgICAgICAgIDYKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX1NISUZUICAgICAgICA2CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9NQVNLICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVCAgICAgICAgICAgICAgNQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfU0hJRlQgICAgICAgIDUKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUX01BU0sgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX1NISUZUICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9NQVNLICAgICAgICAgOCdoMworCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfT1BNT0RFX1NISUZUICAgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX09QTU9ERV9NQVNLICAgICAgICAgICAgIDgnaDMKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfRU5BQkxFX1NPRiAgICAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX0VOQUJMRV9TT0ZfU0hJRlQgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9FTkFCTEVfU09GX01BU0sgICAgICAgICAgICAgOCdoMQorCitgZGVmaW5lIFVTQl9TVEFUVVMgICAgICAgIDgnaDQKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfU09GX1RJTUVfU0hJRlQgICAgICAgICAgICAxNgorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19TT0ZfVElNRV9NQVNLICAgICAgICAgICAgIDE2J2hmZmZmCisKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfUlhfRVJST1IgICAgICAgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1JYX0VSUk9SX1NISUZUICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19SWF9FUlJPUl9NQVNLICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19TSElGVCAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfTElORVNUQVRFX0JJVFNfTUFTSyAgICAgICA4J2gzCisKK2BkZWZpbmUgVVNCX0lSUV9BQ0sgICAgICAgOCdoOAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVCAgICAgICAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfU0hJRlQgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ERVZJQ0VfREVURUNUX01BU0sgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19FUlIgICAgICAgICAgICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRVJSX1NISUZUICAgICAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9NQVNLICAgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RPTkUgICAgICAgICAgICAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ET05FX1NISUZUICAgICAgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRE9ORV9NQVNLICAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX1NPRl9TSElGVCAgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19TT0ZfTUFTSyAgICAgICAgICAgICAgICAgOCdoMQorCitgZGVmaW5lIFVTQl9JUlFfU1RTICAgICAgIDgnaGMKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RFVklDRV9ERVRFQ1QgICAgICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ERVZJQ0VfREVURUNUX1NISUZUICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9NQVNLICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSICAgICAgICAgICAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0VSUl9TSElGVCAgICAgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19FUlJfTUFTSyAgICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ET05FICAgICAgICAgICAgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRE9ORV9TSElGVCAgICAgICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RPTkVfTUFTSyAgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX1NPRiAgICAgICAgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfU0hJRlQgICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfU09GX01BU0sgICAgICAgICAgICAgICAgIDgnaDEKKworYGRlZmluZSBVU0JfSVJRX01BU0sgICAgICA4J2gxMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RFVklDRV9ERVRFQ1QgICAgICAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX1NISUZUICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9NQVNLICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRVJSICAgICAgICAgICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0VSUl9TSElGVCAgICAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19FUlJfTUFTSyAgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ET05FICAgICAgICAgICAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRE9ORV9TSElGVCAgICAgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RPTkVfTUFTSyAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX1NPRiAgICAgICAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19TT0ZfU0hJRlQgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfU09GX01BU0sgICAgICAgICAgICAgICAgOCdoMQorCitgZGVmaW5lIFVTQl9YRkVSX0RBVEEgICAgIDgnaDE0CisgICAgYGRlZmluZSBVU0JfWEZFUl9EQVRBX1RYX0xFTl9TSElGVCAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fTUFTSyAgICAgICAgICAgIDE2J2hmZmZmCisKK2BkZWZpbmUgVVNCX1hGRVJfVE9LRU4gICAgOCdoMTgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1NUQVJUICAgICAgICAgICAgICAgICAzMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fU1RBUlRfU0hJRlQgICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9NQVNLICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTiAgICAgICAgICAgICAgICAgICAgMzAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0lOX1NISUZUICAgICAgICAgICAgICAzMAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fSU5fTUFTSyAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLICAgICAgICAgICAgICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9BQ0tfU0hJRlQgICAgICAgICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0FDS19NQVNLICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWCAgICAgICAgICAgICAyOAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX1NISUZUICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfREFUQVhfTUFTSyAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19TSElGVCAgICAgICAgMTYKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX01BU0sgICAgICAgICA4J2hmZgorCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9TSElGVCAgICAgICAgOQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfTUFTSyAgICAgICAgIDgnaDdmCisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfU0hJRlQgICAgICAgICA1CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX01BU0sgICAgICAgICAgOCdoZgorCitgZGVmaW5lIFVTQl9SWF9TVEFUICAgICAgIDgnaDFjCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EICAgICAgICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfU0hJRlQgICAgICAgICAzMQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfU1RBUlRfUEVORF9NQVNLICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ1JDX0VSUiAgICAgICAgICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX1NISUZUICAgICAgICAgICAgMzAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NSQ19FUlJfTUFTSyAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVCAgICAgICAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1NISUZUICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX1RJTUVPVVRfTUFTSyAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFICAgICAgICAgICAgICAgICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0lETEVfU0hJRlQgICAgICAgICAgICAgICAyOAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfSURMRV9NQVNLICAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX1NISUZUICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfTUFTSyAgICAgICAgICAgOCdoZmYKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19TSElGVCAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NPVU5UX0JJVFNfTUFTSyAgICAgICAgICAxNidoZmZmZgorCitgZGVmaW5lIFVTQl9XUl9EQVRBICAgICAgIDgnaDIwCisgICAgYGRlZmluZSBVU0JfV1JfREFUQV9EQVRBX1NISUZUICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1dSX0RBVEFfREFUQV9NQVNLICAgICAgICAgICAgICAgIDgnaGZmCisKK2BkZWZpbmUgVVNCX1JEX0RBVEEgICAgICAgOCdoMjAKKyAgICBgZGVmaW5lIFVTQl9SRF9EQVRBX0RBVEFfU0hJRlQgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfUkRfREFUQV9EQVRBX01BU0sgICAgICAgICAgICAgICAgOCdoZmYKKworCit0YXNrIHVzYmh3X3JlZ193cml0ZTsKK2lucHV0IFs3OjBdIGFkZHI7CitpbnB1dCBbMzE6MF0gd2RhdGE7CitiZWdpbgorICAgIGBUT1Aud2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX1VTQithZGRyLHdkYXRhKTsKK2VuZAorZW5kdGFzaworCit0YXNrIHVzYmh3X3JlZ19yZWFkOworaW5wdXQgWzc6MF0gYWRkcjsKK291dHB1dCBbMzE6MF0gcmRhdGE7CitiZWdpbgorICAgIGBUT1Aud2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfVVNCK2FkZHIscmRhdGEpOworZW5kCitlbmR0YXNrCisKK3BhcmFtZXRlciAgIFhNSVRfQlVGX1NJWkUgICAgICAgPSA2NDsgICAgLy8gWG1pdGJ1ZmZlciBzaXplCitwYXJhbWV0ZXIgICBSRUNWX0JVRl9TSVpFICAgICAgID0gNjQ7ICAgIC8vIFJlY3ZidWZmZXIgc2l6ZQorCisKK3JlZyBbNzowXSAgIFhtaXRCdWZmZXIgICAgICAgIFswIDogWE1JVF9CVUZfU0laRV07IC8vIFhtaXQgYnVmZmVyCityZWcgWzc6MF0gICBSZWN2QnVmZmVyICAgICAgICBbMCA6IFJFQ1ZfQlVGX1NJWkVdOyAvLyBSZWN2IGJ1ZmZlcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jfc2V0dXBfcGFja2V0OiBDcmVhdGUgJiBzZW5kIFNFVFVQIHBhY2tldAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayB1c2Jfc2V0dXBfcGFja2V0OworaW5wdXQgWzc6MF0gIGRldmljZV9hZGRyZXNzOyAKK2lucHV0IFs3OjBdICByZXF1ZXN0X3R5cGU7CitpbnB1dCBbNzowXSAgcmVxdWVzdDsgCitpbnB1dCBbMTU6MF0gdmFsdWU7IAoraW5wdXQgWzE1OjBdIGluZGV4OyAKK2lucHV0IFsxNTowXSBsZW5ndGg7CitvdXRwdXQgICAgICAgc3RhdHVzOworcmVnICAgWzc6MF0gIHN0YXR1czsKK2ludGVnZXIgaWR4OworYmVnaW4KKworICAgIC8vIGJtUmVxdWVzdFR5cGU6CisgICAgLy8gIEQ3IERhdGEgUGhhc2UgVHJhbnNmZXIgRGlyZWN0aW9uCisgICAgLy8gIDAgPSBIb3N0IHRvIERldmljZQorICAgIC8vICAxID0gRGV2aWNlIHRvIEhvc3QKKyAgICAvLyAgRDYuLjUgVHlwZQorICAgIC8vICAwID0gU3RhbmRhcmQKKyAgICAvLyAgMSA9IENsYXNzCisgICAgLy8gIDIgPSBWZW5kb3IKKyAgICAvLyAgMyA9IFJlc2VydmVkCisgICAgLy8gIEQ0Li4wIFJlY2lwaWVudAorICAgIC8vICAwID0gRGV2aWNlCisgICAgLy8gIDEgPSBJbnRlcmZhY2UKKyAgICAvLyAgMiA9IEVuZHBvaW50CisgICAgLy8gIDMgPSBPdGhlcgorICAgIC8vIAorICAgIGlkeCA9IDA7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gcmVxdWVzdF90eXBlOyAgICAgICAgICAgaWR4ID0gaWR4KzE7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gcmVxdWVzdDsgICAgICAgICAgICAgICAgaWR4ID0gaWR4KzE7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gKHZhbHVlID4+IDApICAmIDgnaEZGOyAgaWR4ID0gaWR4KzE7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gKHZhbHVlID4+IDgpICAmIDgnaEZGOyAgaWR4ID0gaWR4KzE7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gKGluZGV4ID4+IDApICAmIDgnaEZGOyAgaWR4ID0gaWR4KzE7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gKGluZGV4ID4+IDgpICAmIDgnaEZGOyAgaWR4ID0gaWR4KzE7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gKGxlbmd0aCA+PiAwKSAmIDgnaEZGOyAgaWR4ID0gaWR4KzE7CisgICAgWG1pdEJ1ZmZlcltpZHhdID0gKGxlbmd0aCA+PiA4KSAmIDgnaEZGOyAgaWR4ID0gaWR4KzE7CisKKyAgICAvLyBTZW5kIFNFVFVQIHRva2VuICsgREFUQTAgKGFsd2F5cyBEQVRBMCkKKyAgICB1c2Jod190cmFuc2Zlcl9vdXQoYFBJRF9TRVRVUCwgZGV2aWNlX2FkZHJlc3MsIDAsIDEsIGBQSURfREFUQTAsIGlkeCxzdGF0dXMpOworCitlbmQKK2VuZHRhc2sKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2V0QWRkcmVzczogU2V0IGRldmljZSBhZGRyZXNzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHNldHVwOworaW5wdXQgWzc6MF0gZGV2aWNlX2FkZHJlc3M7CitpbnB1dCAgWzM6MF0gZW5kcG9pbnQ7CitvdXRwdXQgWzc6MF1zdGF0dXM7CitiZWdpbgorICAgIC8vJGRpc3BsYXkoIlVTQjogU2V0IGRldmljZSBhZGRyZXNzICVkXG4iLCBkZXZpY2VfYWRkcmVzcyk7CisgICAgLy8gU2VuZCBTRVRVUCB0b2tlbiArIERBVEEwIChhbHdheXMgREFUQTApCisgICAgdXNiaHdfdHJhbnNmZXJfb3V0KGBQSURfU0VUVVAsIGRldmljZV9hZGRyZXNzLCBlbmRwb2ludCwgMSwgYFBJRF9EQVRBMCwgOCxzdGF0dXMpOworICAgIC8vIERldmljZSBoYXMgNTBtUyB0byBhcHBseSB0aGUgYWRkcmVzcworICAgIHVzYmh3X3RpbWVyX3NsZWVwKDUwKTsKK2VuZAorZW5kdGFzaworCit0YXNrIHByaW50c3RhdHVzOworICAgaW5wdXQgWzM6MF0gUmVjdmRTdGF0dXM7CisgICBpbnB1dCBbMzowXSBFeHBTdGF0dXM7CitiZWdpbgorICAkZGlzcGxheSgiIik7CisgICRkaXNwbGF5KCIgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICBpZihSZWN2ZFN0YXR1cyAhPT0gRXhwU3RhdHVzICkgYmVnaW4KKyAgICAgLT4gYFRPUC50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICRkaXNwbGF5KCIgICAgRVJST1I6IEV4cGVjdGVkIFN0YXR1cyBhbmQgT2JzZXJ2ZWQgU3RhdHVzIGRpZG4ndCBtYXRjaCBhdCAlMGQiLCAkdGltZSk7CisgICAgIGlmKEV4cFN0YXR1cz09NCdiMDAwMCkKKyAgICAgICAgJGRpc3BsYXkoIiAgICBFeHBlY3RlZCBTdGF0dXMgaXMgQUNLIGF0ICUwZCIsICR0aW1lKTsKKyAgICAgZWxzZSBpZihFeHBTdGF0dXM9PTQnYjAwMDEpCisgICAgICAgICRkaXNwbGF5KCIgICAgRXhwZWN0ZWQgU3RhdHVzIGlzIE5BQ0sgYXQgJTBkIiwgJHRpbWUpOworICAgICBlbHNlIGlmKEV4cFN0YXR1cz09NCdiMDAxMCkKKyAgICAgICAgJGRpc3BsYXkoIiAgICBFeHBlY3RlZCBTdGF0dXMgaXMgU1RBTEwgYXQgJTBkIiwgJHRpbWUpOworICAgICBlbHNlIGlmKEV4cFN0YXR1cz09NCdiMDAxMSkKKyAgICAgICAgJGRpc3BsYXkoIiAgICBFeHBlY3RlZCBTdGF0dXMgaXMgVElNRU9VVCBhdCAlMGQiLCAkdGltZSk7CisgICAgIGVsc2UgaWYoRXhwU3RhdHVzPT00J2IwMTAwKQorICAgICAgICAkZGlzcGxheSgiICAgIEV4cGVjdGVkIFN0YXR1cyBpcyBJTlZBTElEIFJFU1BPTlNFIGF0ICUwZCIsICR0aW1lKTsKKyAgICAgZWxzZSBpZihFeHBTdGF0dXM9PTQnYjAxMDEpCisgICAgICAgICRkaXNwbGF5KCIgICAgRXhwZWN0ZWQgU3RhdHVzIGlzIENSQyBFUlJPUiBhdCAlMGQiLCAkdGltZSk7CisgIGVuZAorCisgIGlmKFJlY3ZkU3RhdHVzPT00J2IwMDAwKQorICAgICAkZGlzcGxheSgiICAgIFJlY2VpdmVkIFN0YXR1cyBpcyBBQ0sgYXQgJTBkIiwgJHRpbWUpOworICBlbHNlIGlmKFJlY3ZkU3RhdHVzPT00J2IwMDAxKQorICAgICAkZGlzcGxheSgiICAgIFJlY2VpdmVkIFN0YXR1cyBpcyBOQUNLIGF0ICUwZCIsICR0aW1lKTsKKyAgZWxzZSBpZihSZWN2ZFN0YXR1cz09NCdiMDAxMCkKKyAgICAgJGRpc3BsYXkoIiAgICBSZWNlaXZlZCBTdGF0dXMgaXMgU1RBTEwgYXQgJTBkIiwgJHRpbWUpOworICBlbHNlIGlmKFJlY3ZkU3RhdHVzPT00J2IwMTEpCisgICAgICRkaXNwbGF5KCIgICAgUmVjZWl2ZWQgU3RhdHVzIGlzIFRJTUVPVVQgYXQgJTBkIiwgJHRpbWUpOworICBlbHNlIGlmKFJlY3ZkU3RhdHVzPT00J2IwMTAwKQorICAgICAkZGlzcGxheSgiICAgIFJlY2VpdmVkIFN0YXR1cyBpcyBJTlZBTElEIFJFU1BPTlNFIGF0ICUwZCIsICR0aW1lKTsKKyAgZWxzZSBpZihSZWN2ZFN0YXR1cz09NCdiMDEwMSkKKyAgICAgJGRpc3BsYXkoIiAgICBSZWNlaXZlZCBTdGF0dXMgaXMgQ1JDIEVSUk9SIGF0ICUwZCIsICR0aW1lKTsKKyAgJGRpc3BsYXkoIiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICRkaXNwbGF5KCIiKTsKK2VuZAorZW5kdGFzaworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiaHdfcmVzZXQ6IFBlcmZvcm0gVVNCIHJlc2V0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHVzYmh3X3Jlc2V0OworcmVnICBiZmxhZzsKK2JlZ2luCisgICAgJGRpc3BsYXkoIkhXOiBBcHBseWluZyBVU0IgUmVzZXQgXG4iKTsKKyAgICAvLyBBc3NlcnQgU0UwIC8gcmVzZXQKKyAgICB1c2Jod19odWJfcmVzZXQ7CisKKyAgICAkZGlzcGxheSgiSFc6IFJlc2V0IFdhaXQgdGltZSBTdGFydGVkIFxuIik7CisgICAgLy8gV2FpdCBmb3Igc29tZSB0aW1lCisgICAgdXNiaHdfdGltZXJfc2xlZXAoMTEpOworCisgICAgJGRpc3BsYXkoIkhXOiBSZXNldCBXYWl0IHRpbWUgT3ZlciBcbiIpOworCisgICAgLy8gU3RvcCBhc3NlcnRpbmcgU0UwLCBzZXQgZGF0YSBsaW5lcyB0byBIaS1aCisgICAgdXNiaHdfaHViX2VuYWJsZSgwKTsKKyAgICB1c2Jod190aW1lcl9zbGVlcCgzKTsKKworICAgICRkaXNwbGF5KCJIVzogV2FpdGluZyBmb3IgZGV2aWNlIGluc2VydGlvblxuIik7CisKKyAgICAvLyBXYWl0IGZvciBkZXZpY2UgZGV0ZWN0CisgICAgdXNiaHdfaHViX2RldmljZV9kZXRlY3RlZChiZmxhZyk7CisgICAgd2hpbGUgKCFiZmxhZyliZWdpbgorICAgICAgIHVzYmh3X2h1Yl9kZXZpY2VfZGV0ZWN0ZWQoYmZsYWcpOworICAgIGVuZAorCisgICAgJGRpc3BsYXkoIkhXOiBEZXZpY2UgZGV0ZWN0ZWRcbiIpOworCisgICAgLy8gRW5hYmxlIFNPRgorICAgIHVzYmh3X2h1Yl9lbmFibGUoMSk7CitlbmQKK2VuZHRhc2sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYmh3X2h1Yl9yZXNldDogUHV0IGJ1cyBpbnRvIFNFMCBzdGF0ZSAocmVzZXQpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gIFNlbmRSZXNldCA6IGFzc2VydHMgYSBTRTAgb24gdGhlIFVTQiBmb3IgdGhlIG51bWJlciBvZiBiaXQgdGltZXMgc3BlY2lmaWVkCisvLyAgICAgICAgICAgICAgYnkgUmVzZXRUaW1lLgorLy8gIElucHV0ICAgICA6IFJlc2V0VGltZSwgbnVtYmVyIG9mIGJpdCB0aW1lcyBmb3Igd2hpY2ggdG8gZHJpdmUgYSByZXNldCBvbgorLy8gICAgICAgICAgICAgIHRoZSBVU0IKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit0YXNrIHVzYmh3X2h1Yl9yZXNldDsKK3JlZyBbNzowXSB2YWw7CitiZWdpbgorICAgICRkaXNwbGF5KCJIVzogRW50ZXIgVVNCIGJ1cyByZXNldFxuIik7CisKKyAgICAvLyBQb3dlci11cCAvIFNFMAorICAgIHZhbCA9IDA7CisgICAgdmFsID0gdmFsIHwgKDAgPDwgYFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMCA8PCBgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgyIDw8IGBVU0JfQ1RSTF9QSFlfT1BNT0RFX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9TSElGVCk7CisgICAgdXNiaHdfcmVnX3dyaXRlKGBVU0JfQ1RSTCwgdmFsKTsKKworZW5kCitlbmR0YXNrCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiaHdfdGltZXJfc2xlZXA6IFBlcmZvcm0gU2xlZXAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGFzayB1c2Jod190aW1lcl9zbGVlcDsKK2lucHV0IFs3OjBdIFJlc2V0VGltZTsKK3JlZyBbNzowXSB0c2tSZXNldFRpbWU7CityZWcgWzc6MF0gdHNrUmVzZXRUaW1lQ291bnRlcjsKK2JlZ2luCisgICB0c2tSZXNldFRpbWVDb3VudGVyID0gMDsKKyAgIHRza1Jlc2V0VGltZSA9IFJlc2V0VGltZTsKKyAgIGZvcmV2ZXIgQChwb3NlZGdlIGBUT1AudXNiXzQ4bWh6X2NsaykgYmVnaW4KKyAgICAgIHRza1Jlc2V0VGltZUNvdW50ZXIgPSB0c2tSZXNldFRpbWVDb3VudGVyICsgMSdiMTsKKyAgICAgIGlmICh0c2tSZXNldFRpbWVDb3VudGVyID4gdHNrUmVzZXRUaW1lKSBiZWdpbgorICAgICAgICAgICAgQChwb3NlZGdlIGBUT1AudXNiXzQ4bWh6X2Nsayk7CisgICAgICAgICAgICBAKHBvc2VkZ2UgYFRPUC51c2JfNDhtaHpfY2xrKTsKKyAgICAgICAgICAgIGRpc2FibGUgdXNiaHdfdGltZXJfc2xlZXA7CisgICAgICBlbmQKKyAgIGVuZAorZW5kCitlbmR0YXNrIAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYmh3X2h1Yl9lbmFibGU6IEVuYWJsZSByb290IGh1YiAoZHJpdmUgZGF0YSBsaW5lcyB0byBIaVopCisvLyAgICAgICAgICAgICAgICAgICBhbmQgb3B0aW9uYWxseSBzdGFydCBTT0YgcGVyaW9kcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayB1c2Jod19odWJfZW5hYmxlOworaW5wdXQgZW5hYmxlX3NvZjsKK3JlZyBbNzowXSB2YWw7CitiZWdpbgorICAgICRkaXNwbGF5KCJIVzogRW5hYmxlIHJvb3QgaHViXG4iKTsKKworICAgIC8vIEhvc3QgRnVsbCBTcGVlZAorICAgIHZhbCA9IDA7CisgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgwIDw8IGBVU0JfQ1RSTF9QSFlfT1BNT0RFX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX1RYX0ZMVVNIX1NISUZUKTsKKworICAgIC8vIEVuYWJsZSBTT0YKKyAgICBpZiAoZW5hYmxlX3NvZikKKyAgICAgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX0VOQUJMRV9TT0ZfU0hJRlQpOworCisgICAgdXNiaHdfcmVnX3dyaXRlKGBVU0JfQ1RSTCwgdmFsKTsKK2VuZAorZW5kdGFzaworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYmh3X2h1Yl9kZXZpY2VfZGV0ZWN0ZWQ6IERldGVjdCBkZXZpY2UgaW5zZXJ0ZWQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgdXNiaHdfaHViX2RldmljZV9kZXRlY3RlZDsKK291dHB1dCBiZmxhZzsKK3JlZyBfdXNiX2ZzX2RldmljZTsKK3JlZyBbMzE6MF0gc3RhdHVzOworcmVnICAgIGJmbGFnOworYmVnaW4KKyAgICAvLyBHZXQgbGluZSBzdGF0ZQorICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfU1RBVFVTLHN0YXR1cyk7CisgICAgc3RhdHVzID0gc3RhdHVzID4+IGBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX1NISUZUOworICAgIHN0YXR1cyA9IHN0YXR1cyAmIGBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX01BU0s7CisKKyAgICAvLyBGUzogRCsgcHVsbGVkIGhpZ2gKKyAgICAvLyBMUzogRC0gcHVsbGVkIGhpZ2gKKyAgICBfdXNiX2ZzX2RldmljZSA9IChzdGF0dXMgJiAxKTsKKyAgICBpZihzdGF0dXMgIT0gMSkgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiRVJST1I6IFVTQiBQdWxsIFVwIFN0YXR1cyBpcyBub3QgMSwgT25seSBGdWxsIFNlZWQgU3VwcG9ydGVkIik7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiU1RBVFVTOiBVU0IgRnVsbCBTcGVlZCBEZXRlY3RlZCIpOworICAgIGVuZAorCisgICAgYmZsYWcgPSAoc3RhdHVzICE9IDApOworZW5kCitlbmR0YXNrCisKK3Rhc2sgc3RhdHVzX0lOOworaW5wdXQgWzc6MF0gZGV2aWNlX2FkZHI7CitpbnB1dCBbMzowXSBlbmRwb2ludDsKK291dHB1dCBbNzowXSBleGl0X2NvZGU7CityZWcgICAgWzc6MF0gZXhpdF9jb2RlOworcmVnICAgWzc6MF0gc3RhdHVzOworcmVnICAgIFs3OjBdIHJ4X2NvdW50OworYmVnaW4KKyAgdXNiaHdfdHJhbnNmZXJfaW4oYFBJRF9JTiwgZGV2aWNlX2FkZHIsIGVuZHBvaW50LCBzdGF0dXMsZXhpdF9jb2RlLHJ4X2NvdW50KTsKK2VuZAorZW5kdGFzaworCit0YXNrIHN0YXR1c19PVVQ7CitpbnB1dCBbNzowXSBkZXZpY2VfYWRkcjsKK2lucHV0IFszOjBdIGVuZHBvaW50Oworb3V0cHV0IFs3OjBdIHN0YXR1czsKK2JlZ2luCisgIHVzYmh3X3RyYW5zZmVyX291dChgUElEX09VVCwgZGV2aWNlX2FkZHIsIGVuZHBvaW50LCAxLCBgUElEX09VVCwgMCxzdGF0dXMpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgY29udHJvbF9PVVQ7CitpbnB1dCBbNzowXSBkZXZpY2VfYWRkcjsKK2lucHV0IFszOjBdIGVuZHBvaW50OworaW5wdXQgWzc6MF0gQnl0ZUNvdW50Oworb3V0cHV0IFs3OjBdIHN0YXR1czsKK2JlZ2luCisgIHVzYmh3X3RyYW5zZmVyX291dChgUElEX09VVCwgZGV2aWNlX2FkZHIsIGVuZHBvaW50LCAxLCBgUElEX0RBVEExLCBCeXRlQ291bnQsc3RhdHVzKTsKK2VuZAorZW5kdGFzaworCit0YXNrIGNvbnRyb2xfSU47CitpbnB1dCBbNzowXSBkZXZpY2VfYWRkcjsKK2lucHV0IFszOjBdIGVuZHBvaW50OworaW5wdXQgWzc6MF0gQnl0ZUNvdW50Oworb3V0cHV0IFs3OjBdIGV4aXRfY29kZTsKK3JlZyAgICBbNzowXSBleGl0X2NvZGU7CityZWcgICAgWzc6MF0gc3RhdHVzOworcmVnICAgIFs3OjBdIHJ4X2NvdW50OworYmVnaW4KKyAgdXNiaHdfdHJhbnNmZXJfaW4oYFBJRF9JTiwgZGV2aWNlX2FkZHIsIGVuZHBvaW50LCBzdGF0dXMsZXhpdF9jb2RlLHJ4X2NvdW50KTsKK2VuZAorZW5kdGFzaworCit0YXNrIFNldEFkZHJlc3M7CisgIGlucHV0IFs2OjBdIGFkZHJlc3M7CitiZWdpbgorICAgIFhtaXRCdWZmZXJbMF0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlclsxXSA9IDgnYjAwMDBfMDEwMTsgLy8gU2V0QWRkcmVzcworICAgIFhtaXRCdWZmZXJbMl0gPSB7MSdiMCwgYWRkcmVzc307CisgICAgWG1pdEJ1ZmZlclszXSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzRdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbNV0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls2XSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOworZW5kCitlbmR0YXNrCisKKwordGFzayBTZXRDb25maWd1cmF0aW9uOworICBpbnB1dCBbMTowXSBjZmdfdmFsOworYmVnaW4KKyAgICBYbWl0QnVmZmVyWzBdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbMV0gPSA4J2IwMDAwXzEwMDE7IC8vIFNldCBDb25maWd1cmF0aW9uCisgICAgWG1pdEJ1ZmZlclsyXSA9IHs2J2IwMDBfMDAwLCBjZmdfdmFsfTsKKyAgICBYbWl0QnVmZmVyWzNdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbNF0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls1XSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzZdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7CitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdXb3JkV3I7CisgIGlucHV0IFs2OjBdIGFkZHJlc3M7CisgIGlucHV0IFszMTowXSByZWdfYWRkcmVzczsKKyAgaW5wdXQgWzMxOjBdIGRhdGF3b3JkOworICByZWcgICBbNzowXSAgU3RhdHVzOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSA4J2IwMTAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzFdID0gOCdiMDAwMV8wMDAwOworICAgWG1pdEJ1ZmZlclsyXSA9IHJlZ19hZGRyZXNzWzMxOjI0XTsKKyAgIFhtaXRCdWZmZXJbM10gPSByZWdfYWRkcmVzc1syMzoxNl07CisgICBYbWl0QnVmZmVyWzRdID0gcmVnX2FkZHJlc3NbMTU6OF07CisgICBYbWl0QnVmZmVyWzVdID0gcmVnX2FkZHJlc3NbNzowXTsKKyAgIFhtaXRCdWZmZXJbNl0gPSA4J2IwMDAwXzAxMDA7CisgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOworCisgICBzZXR1cCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKKworICAgWG1pdEJ1ZmZlclswXSA9IGRhdGF3b3JkWzMxOjI0XTsKKyAgIFhtaXRCdWZmZXJbMV0gPSBkYXRhd29yZFsyMzoxNl07CisgICBYbWl0QnVmZmVyWzJdID0gZGF0YXdvcmRbMTU6OF07CisgICBYbWl0QnVmZmVyWzNdID0gZGF0YXdvcmRbNzowXTsKKworICBjb250cm9sX09VVChhZGRyZXNzLCA0J2gwLCA0LCBTdGF0dXMpOworICBzdGF0dXNfSU4gKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdXb3JkUmQ7CisgIGlucHV0IFs2OjBdIGFkZHJlc3M7CisgIGlucHV0IFszMTowXSByZWdfYWRkcmVzczsKKyAgb3V0cHV0IFszMTowXSBkYXRhd29yZDsKKyAgcmVnICBbMzE6MF0gQnl0ZUNvdW50OworICByZWcgIFs3OjBdICBTdGF0dXM7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IDgnYjExMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMV0gPSA4J2IwMDAxXzAwMDE7CisgICBYbWl0QnVmZmVyWzJdID0gcmVnX2FkZHJlc3NbMzE6MjRdOworICAgWG1pdEJ1ZmZlclszXSA9IHJlZ19hZGRyZXNzWzIzOjE2XTsKKyAgIFhtaXRCdWZmZXJbNF0gPSByZWdfYWRkcmVzc1sxNTo4XTsKKyAgIFhtaXRCdWZmZXJbNV0gPSByZWdfYWRkcmVzc1s3OjBdOworICAgWG1pdEJ1ZmZlcls2XSA9IDgnYjAwMDBfMDEwMDsKKyAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7CisKKyAgIHNldHVwIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICAgZGF0YXdvcmRbNzowXSAgICAgID0gUmVjdkJ1ZmZlclszXTsKKyAgICBkYXRhd29yZFsxNTo4XSAgICAgPSBSZWN2QnVmZmVyWzJdOworICAgIGRhdGF3b3JkWzIzOjE2XSAgICA9IFJlY3ZCdWZmZXJbMV07CisgICAgZGF0YXdvcmRbMzE6MjRdICAgID0gUmVjdkJ1ZmZlclswXTsKKyAgICBkdW1wX3JlY3ZfYnVmZmVyKEJ5dGVDb3VudCk7CisKKyAgIHN0YXR1c19PVVQgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdXb3JkUmRDbXA7CisgIGlucHV0IFs2OjBdIGFkZHJlc3M7CisgIGlucHV0IFszMTowXSByZWdfYWRkcmVzczsKKyAgaW5wdXQgWzMxOjBdIGRhdGF3b3JkOworICByZWcgICBbMzE6MF0gQnl0ZUNvdW50OworICByZWcgICBbMzE6MF0gUmVhZERhdGE7CisgIHJlZyAgICBbNzowXSBTdGF0dXM7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IDgnYjExMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMV0gPSA4J2IwMDAxXzAwMDE7CisgICBYbWl0QnVmZmVyWzJdID0gcmVnX2FkZHJlc3NbMzE6MjRdOworICAgWG1pdEJ1ZmZlclszXSA9IHJlZ19hZGRyZXNzWzIzOjE2XTsKKyAgIFhtaXRCdWZmZXJbNF0gPSByZWdfYWRkcmVzc1sxNTo4XTsKKyAgIFhtaXRCdWZmZXJbNV0gPSByZWdfYWRkcmVzc1s3OjBdOworICAgWG1pdEJ1ZmZlcls2XSA9IDgnYjAwMDBfMDEwMDsKKyAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7CisKKyAgIHNldHVwIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoKFJlY3ZCdWZmZXJbM10gIT09IGRhdGF3b3JkWzc6MF0pIHx8IChSZWN2QnVmZmVyWzJdICE9PSBkYXRhd29yZFsxNTo4XSkgCisgICAgICAgICB8fCAoUmVjdkJ1ZmZlclsxXSAhPT0gZGF0YXdvcmRbMjM6MTZdKSB8fCAoUmVjdkJ1ZmZlclswXSAhPT0gZGF0YXdvcmRbMzE6MjRdKSkKKyAgICBiZWdpbgorICAgICAgLT4gYFRPUC50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgJGRpc3BsYXkoICJ1c2JfYWdlbnQgY2hlY2s6IEVSUk9SOiBSZWdpc3RlciBSZWFkIEJ5dGUgTWlzbWF0Y2ggISEhIEFkZHJlc3M6ICV4IEV4cDogJXggOyBSeGQ6ICV4IixyZWdfYWRkcmVzcyxkYXRhd29yZFszMTowXSwge1JlY3ZCdWZmZXJbMF0sUmVjdkJ1ZmZlclsxXSwgUmVjdkJ1ZmZlclsyXSxSZWN2QnVmZmVyWzNdfSApOworICAgICAgIGR1bXBfcmVjdl9idWZmZXIoQnl0ZUNvdW50KTsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICRkaXNwbGF5KCAidXNiX2FnZW50IGNoZWNrOiBTVEFUVVM6IFJlZ2lzdGVyIFJlYWQgQnl0ZSBNYXRjaCAhISEgQWRkcmVzczogJXggOyBSeGQ6ICV4IixyZWdfYWRkcmVzcyx7UmVjdkJ1ZmZlclswXSxSZWN2QnVmZmVyWzFdLCBSZWN2QnVmZmVyWzJdLFJlY3ZCdWZmZXJbM119ICk7CisKKyAgICBlbmQKKworICAgc3RhdHVzX09VVCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKK2VuZAorZW5kdGFzawordGFzayBWZW5SZWdIYWxmV29yZFJkOworICBpbnB1dCBbNjowXSBhZGRyZXNzOworICBpbnB1dCBbMjE6MF0gcmVnX2FkZHJlc3M7CisgIGlucHV0IFsxNTowXSBkYXRhd29yZDsKKyAgb3V0cHV0IFszMTowXSBCeXRlQ291bnQ7CisgIHJlZyAgICBbNzowXSAgU3RhdHVzOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSA4J2IxMTAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzFdID0gezInYjAwLHJlZ19hZGRyZXNzWzIxOjE2XX07CisgICBYbWl0QnVmZmVyWzJdID0gcmVnX2FkZHJlc3NbNzowXTsKKyAgIFhtaXRCdWZmZXJbM10gPSByZWdfYWRkcmVzc1sxNTo4XTsKKyAgIFhtaXRCdWZmZXJbNF0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzVdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls2XSA9IDgnYjAwMDBfMDAxMDsKKyAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7CisKKyAgIHNldHVwIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoU3RhdHVzICE9IGBQSURfQUNLKQorICAgICAgICAgY29udHJvbF9JTihhZGRyZXNzLCA0J2gwLCBCeXRlQ291bnQsIFN0YXR1cyk7CisgICBpZiAoKFJlY3ZCdWZmZXJbMF0gIT09IGRhdGF3b3JkWzc6MF0pIHx8IChSZWN2QnVmZmVyWzFdICE9PSBkYXRhd29yZFsxNTo4XSkpIAorICAgIGJlZ2luCisgICAgICAgLT4gYFRPUC50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgJGRpc3BsYXkoICJ1c2JfYWdlbnQgY2hlY2s6IFJlZ2lzdGVyIFJlYWQgQnl0ZSBNaXNtYXRjaCAhISEiKTsKKyAgICAgICBkdW1wX3JlY3ZfYnVmZmVyKEJ5dGVDb3VudCk7CisgICAgZW5kCisgICBzdGF0dXNfT1VUIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnQnl0ZVJkOworICBpbnB1dCBbNjowXSBhZGRyZXNzOworICBpbnB1dCBbMjE6MF0gcmVnX2FkZHJlc3M7CisgIGlucHV0IFs3OjBdIGRhdGF3b3JkOworICBvdXRwdXQgWzMxOjBdIEJ5dGVDb3VudDsKKyAgcmVnICAgICBbNzowXSBTdGF0dXM7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IDgnYjExMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMV0gPSB7MidiMDAscmVnX2FkZHJlc3NbMjE6MTZdfTsKKyAgIFhtaXRCdWZmZXJbMl0gPSByZWdfYWRkcmVzc1s3OjBdOworICAgWG1pdEJ1ZmZlclszXSA9IHJlZ19hZGRyZXNzWzE1OjhdOworICAgWG1pdEJ1ZmZlcls0XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNV0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzZdID0gOCdiMDAwMF8wMDAxOworICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsKKworICAgc2V0dXAgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CisgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmICgoUmVjdkJ1ZmZlclswXSAhPT0gZGF0YXdvcmRbNzowXSkpCisgICAgYmVnaW4KKyAgICAgICAtPiBgVE9QLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAkZGlzcGxheSggInVzYl9hZ2VudCBjaGVjazogUmVnaXN0ZXIgUmVhZCBCeXRlIE1pc21hdGNoICEhISIpOworICAgICAgIGR1bXBfcmVjdl9idWZmZXIoQnl0ZUNvdW50KTsKKyAgICBlbmQKKyAgIHN0YXR1c19PVVQgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdXcjsKKyAgaW5wdXQgWzIxOjBdIHJlZ19hZGRyZXNzOworICBpbnB1dCBbMjowXSAgbGVuZ3RoOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSA4J2IwMTAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzFdID0gezInYjAwLHJlZ19hZGRyZXNzWzIxOjE2XX07CisgICBYbWl0QnVmZmVyWzJdID0gcmVnX2FkZHJlc3NbNzowXTsKKyAgIFhtaXRCdWZmZXJbM10gPSByZWdfYWRkcmVzc1sxNTo4XTsKKyAgIFhtaXRCdWZmZXJbNF0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzVdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls2XSA9IHs1J2IwMDAwXzAsbGVuZ3RofTsKKyAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7ICAgCisKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1JkOworICBpbnB1dCBbMjE6MF0gcmVnX2FkZHJlc3M7CisgIGlucHV0IFsyOjBdICBsZW5ndGg7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IDgnYjExMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMV0gPSB7MidiMDAscmVnX2FkZHJlc3NbMjE6MTZdfTsKKyAgIFhtaXRCdWZmZXJbMl0gPSByZWdfYWRkcmVzc1s3OjBdOworICAgWG1pdEJ1ZmZlclszXSA9IHJlZ19hZGRyZXNzWzE1OjhdOworICAgWG1pdEJ1ZmZlcls0XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNV0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzZdID0gezUnYjAwMDBfMCxsZW5ndGh9OworICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsgICAKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1dyV29yZERhdGE7CisgIGlucHV0IFs3OjBdIEJ5dGUwOworICBpbnB1dCBbNzowXSBCeXRlMTsKKyAgaW5wdXQgWzc6MF0gQnl0ZTI7CisgIGlucHV0IFs3OjBdIEJ5dGUzOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSBCeXRlMDsgICAgICAgIAorICAgWG1pdEJ1ZmZlclsxXSA9IEJ5dGUxOworICAgWG1pdEJ1ZmZlclsyXSA9IEJ5dGUyOworICAgWG1pdEJ1ZmZlclszXSA9IEJ5dGUzOworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnV3JIV29yZERhdGE7CisgIGlucHV0IFs3OjBdIEJ5dGUwOworICBpbnB1dCBbNzowXSBCeXRlMTsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gQnl0ZTA7ICAgICAgICAKKyAgIFhtaXRCdWZmZXJbMV0gPSBCeXRlMTsKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1dyQnl0ZURhdGE7CisgIGlucHV0IFs3OjBdIEJ5dGUwOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSBCeXRlMDsgICAgICAgIAorZW5kCitlbmR0YXNrCisKK3Rhc2sgZHVtcF9yZWN2X2J1ZmZlcjsKKyAgaW5wdXQgWzMxOjBdIE51bUJ5dGVzOworICBpbnRlZ2VyIGk7CitiZWdpbgorICBmb3IoaT0wOyBpIDwgTnVtQnl0ZXM7IGk9aSsxKQorICAgICRkaXNwbGF5KCJSZWN2QnVmZmVyWyUwZF0gID0gJWIgIDogJTBkIiwgaSwgUmVjdkJ1ZmZlcltpXSwgUmVjdkJ1ZmZlcltpXSk7CitlbmQKK2VuZHRhc2sKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jod190cmFuc2Zlcl9vdXQ6IFNlbmQgdG9rZW4gdGhlbiBzb21lIERBVEEgdG8gdGhlIGRldmljZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayB1c2Jod190cmFuc2Zlcl9vdXQ7CitpbnB1dCBbNzowXSAgIHBpZDsKK2lucHV0IFs3OjBdICAgZGV2aWNlX2FkZHI7CitpbnB1dCBbMzowXSAgIGVuZHBvaW50OyAKK2lucHV0ICAgICAgICAgaGFuZHNoYWtlOyAKK2lucHV0IFs3OjBdICAgcmVxdWVzdDsgCitpbnB1dCAgWzc6MF0gIHR4X2xlbmd0aDsKK291dHB1dCBbNzowXSAgZXhpdF9jb2RlOworCityZWcgICAgWzc6MF0gIGV4aXRfY29kZTsKKworcmVnICBbMzE6MF0gdGRhdGE7CitpbnRlZ2VyICAgICBsOworcmVnIFszMTowXSAgdG9rZW47CityZWcgWzMxOjBdICBjdHJsOworcmVnIFszMTowXSAgcmVzcDsKK3JlZyBbMzE6MF0gIHN0YXR1czsKK3JlZyBbMzE6MF0gIHN0YXR1c19jaGs7CitiZWdpbgorICAgIC8vJGRpc3BsYXkoIlVTQiBUT0tFTjogJXMiLCAocGlkID09IGBQSURfU0VUVVApID8gIlNFVFVQIiA6IChwaWQgPT0gYFBJRF9EQVRBMCkgPyAiREFUQTAiOiAocGlkID09IGBQSURfREFUQTEpID8gIkRBVEExIiA6IChwaWQgPT0gYFBJRF9JTikgPyAiSU4iIDogIk9VVCIpOworICAgIC8vJGRpc3BsYXkoIlVTQiBERVYgJWQgRVAgJWRcbiIsIGRldmljZV9hZGRyLCBlbmRwb2ludCk7CisKKyAgICAvLyBMb2FkIERBVEF4IHRyYW5zZmVyIGludG8gYWRkcmVzcyAwKworICAgIC8vJGRpc3BsYXkoIiBVU0IgVHg6ICUwMngiLCByZXF1ZXN0KTsKKyAgICBmb3IgKGw9MDtsPHR4X2xlbmd0aDtsID0gbCArIDEpIGJlZ2luCisgICAgICAgIHRkYXRhID0gWG1pdEJ1ZmZlcltsXTsKKyAgICAgICAgLy8kZGlzcGxheSgiVVNCIFRYIERBVEEgJTAyeCIsIHRkYXRhKTsKKyAgICAgICAgdXNiaHdfcmVnX3dyaXRlKGBVU0JfV1JfREFUQSwgdGRhdGEpOworICAgIGVuZAorCisgICAgLy8gVHJhbnNmZXIgZGF0YSBsZW5ndGgKKyAgICB1c2Jod19yZWdfd3JpdGUoYFVTQl9YRkVSX0RBVEEsIHR4X2xlbmd0aCk7CisKKyAgICAvLyBDb25maWd1cmUgdHJhbnNmZXIgZm9yIERBVEF4IHBvcnRpb24KKyAgICBjdHJsID0gKDEgPDwgYFVTQl9YRkVSX1RPS0VOX1NUQVJUX1NISUZUKTsKKworICAgIC8vIFdhaXQgZm9yIHJlc3BvbnNlIG9yIHRpbWVvdXQKKyAgICBjdHJsPSBjdHJsIHwgKGhhbmRzaGFrZSA/ICgxIDw8IGBVU0JfWEZFUl9UT0tFTl9BQ0tfU0hJRlQpIDogMCk7CisKKyAgICBjdHJsPSBjdHJsIHwgKChyZXF1ZXN0ID09IGBQSURfREFUQTEpID8gKDEgPDwgYFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9TSElGVCkgOiAoMCA8PCBgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX1NISUZUKSk7CisKKyAgICAvLyBTZXR1cCB0b2tlbiBkZXRhaWxzIChkb24ndCBzdGFydCB0cmFuc2ZlciB5ZXQpCisgICAgdG9rZW4gPSAocGlkPDxgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfU0hJRlQpIHwgKGRldmljZV9hZGRyIDw8IGBVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9TSElGVCkgfCAoZW5kcG9pbnQgPDwgYFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfU0hJRlQpOworICAgIHVzYmh3X3JlZ193cml0ZShgVVNCX1hGRVJfVE9LRU4sIHRva2VuIHwgY3RybCk7CisKKyAgICAvLyBXYWl0IGZvciBUeCB0byBzdGFydAorICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUlhfU1RBVCxzdGF0dXMpIDsKKyAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfU0hJRlQpOworICAgIHdoaWxlIChzdGF0dXNfY2hrKSBiZWdpbgorICAgICAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JYX1NUQVQsc3RhdHVzKSA7CisgICAgICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfU1RBUlRfUEVORF9TSElGVCk7CisgICAgZW5kCisKKyAgICAvLyBObyBoYW5kc2hha2luZz8gV2UgYXJlIGRvbmUKKyAgICBpZiAoIWhhbmRzaGFrZSkgYmVnaW4KKwlleGl0X2NvZGUgPSBgVVNCX1JFU19PSzsKKyAgICBlbmQKKworICAgIC8vIFdhaXQgZm9yIGlkbGUKKyAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JYX1NUQVQsc3RhdHVzKSA7CisgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9JRExFX1NISUZUKSA7CisgICAgd2hpbGUgKCEoc3RhdHVzX2NoaykpIGJlZ2luCisgICAgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SWF9TVEFULHN0YXR1cykgOworICAgICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfSURMRV9TSElGVCkgOworICAgIGVuZAorCisgICAgJGRpc3BsYXkoIlVTQiBSRVNQT05TRTogJXgiLHN0YXR1cyk7CisKKyAgICBpZiAoc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9TSElGVCkpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIiAgVVNCIFRJTUVPVVRcbiIpOworICAgICAgICRkaXNwbGF5KCJVU0IgRVJST1I6IE9VVCB0aW1lb3V0XG4iKTsKKyAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19USU1FT1VUOworICAgIGVuZAorCisgICAgLy8gQ2hlY2sgZm9yIE5BSyAvIFNUQUxMCisgICAgcmVzcCA9ICgoc3RhdHVzID4+IGBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfU0hJRlQpICYgYFVTQl9SWF9TVEFUX1JFU1BfQklUU19NQVNLKTsKKyAgICBpZiAocmVzcCA9PSBgUElEX0FDSykgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiVVNCIFNUQVRVUzogQUNLXG4iKTsKKyAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19PSzsKKyAgICBlbmQgZWxzZSBpZiAocmVzcCA9PSBgUElEX05BSykgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiVVNCIFNUQVRVUzogTkFLXG4iKTsKKyAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19OQUs7CisgICAgZW5kIGVsc2UgaWYgKHJlc3AgPT0gYFBJRF9TVEFMTCkgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiVVNCIFNUQVRVUzogIFNUQUxMXG4iKTsKKyAgICAgICAkZGlzcGxheSgiVVNCIEVSUk9SOiAgT1VUIFNUQUxMXG4iKTsKKyAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19TVEFMTDsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJVU0IgRVJST1I6IFVua25vd24gT1VUIHJlc3BvbnNlICglMDJ4KVxuIiwgcmVzcCk7CisKKyAgICAgICAvLyBVbmtub3duCisgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfU1RBTEw7CisgICAgZW5kCitlbmQKK2VuZHRhc2sKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiaHdfdHJhbnNmZXJfaW46IFBlcmZvcm0gSU4gcmVxdWVzdCBhbmQgZXhwZWN0IERBVEEgZnJvbSBkZXZpY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgdXNiaHdfdHJhbnNmZXJfaW47CitpbnB1dCBbNzowXSAgICBwaWQ7IAoraW5wdXQgWzc6MF0gICAgZGV2aWNlX2FkZHI7IAoraW5wdXQgWzc6MF0gICAgZW5kcG9pbnQ7IAorb3V0cHV0IFs3OjBdICAgcmVzcG9uc2U7IAorb3V0cHV0IFs3OjBdICAgZXhpdF9jb2RlOworb3V0cHV0IFs3OjBdICAgcnhfY291bnQ7CisKK3JlZyAgWzc6MF0gICAgIGV4aXRfY29kZTsKK3JlZyAgWzc6MF0gICAgIHJlc3BvbnNlOyAKK3JlZyAgWzc6MF0gICAgIHJ4X2xlbmd0aDsKK2ludGVnZXIgbDsKK3JlZyAgWzc6MF0gICAgIHJ4X2NvdW50OworcmVnIFszMTowXSAgICAgdG9rZW47CityZWcgWzMxOjBdICAgICBkYXRhOworcmVnIFszMTowXSAgICAgc3RhdHVzOworcmVnIFszMTowXSAgICAgc3RhdHVzX2NoazsKK2JlZ2luCisgICAgLy8kZGlzcGxheSgiVVNCIFRPS0VOOiAlcyIsIChwaWQgPT0gYFBJRF9TRVRVUCkgPyAiU0VUVVAiIDogKHBpZCA9PSBgUElEX0RBVEEwKSA/ICJEQVRBMCI6IChwaWQgPT0gYFBJRF9EQVRBMSkgPyAiREFUQTEiIDogKHBpZCA9PSBgUElEX0lOKSA/ICJJTiIgOiAiT1VUIik7CisgICAgLy8kZGlzcGxheSgiVVNCICBERVYgJWQgRVAgJWRcbiIsIGRldmljZV9hZGRyLCBlbmRwb2ludCk7ICAgIAorCisgICAgLy8gTm8gZGF0YSB0byBzZW5kCisgICAgdXNiaHdfcmVnX3dyaXRlKGBVU0JfWEZFUl9EQVRBLCAwKTsKKworICAgIC8vIENvbmZpZ3VyZSB0cmFuc2ZlcgorICAgIHRva2VuID0gKHBpZDw8YFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX1NISUZUKSB8IChkZXZpY2VfYWRkciA8PCBgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfU0hJRlQpIHwgKGVuZHBvaW50IDw8IGBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX1NISUZUKTsKKyAgICB0b2tlbj0gdG9rZW4gfCgxIDw8IGBVU0JfWEZFUl9UT0tFTl9TVEFSVF9TSElGVCk7CisgICAgdG9rZW49IHRva2VuIHwgKDEgPDwgYFVTQl9YRkVSX1RPS0VOX0lOX1NISUZUKTsKKyAgICB0b2tlbj0gdG9rZW4gfCAoMSA8PCBgVVNCX1hGRVJfVE9LRU5fQUNLX1NISUZUKTsKKyAgICAvLyRkaXNwbGF5KCJVU0IgVE9LRU4gQ09ORklHIDogJXgiLHRva2VuKTsKKyAgICB1c2Jod19yZWdfd3JpdGUoYFVTQl9YRkVSX1RPS0VOLCB0b2tlbik7CisKKyAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX1NUQVJUX1BFTkQpOworICAgIHdoaWxlIChzdGF0dXNfY2hrKSBiZWdpbgorICAgICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUlhfU1RBVCxzdGF0dXMpOworICAgICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfU1RBUlRfUEVORCk7CisgICAgZW5kCisKKyAgICAvLyBXYWl0IGZvciByeCBpZGxlCisgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SWF9TVEFULHN0YXR1cyk7IAorICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfSURMRV9TSElGVCk7CisgICAgd2hpbGUgKCEoc3RhdHVzX2NoaykpIGJlZ2luCisgICAgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SWF9TVEFULHN0YXR1cyk7IAorICAgICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfSURMRV9TSElGVCk7CisgICAgZW5kCisKKyAgICBpZiAoc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX0NSQ19FUlJfU0hJRlQpKSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJVU0I6IENSQyBFUlJPUlxuIik7CisgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfVElNRU9VVDsKKyAgICBlbmQgZWxzZSBpZiAoc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9TSElGVCkpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlVTQjogSU4gdGltZW91dFxuIik7CisgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfVElNRU9VVDsKKyAgICBlbmQgZWxzZSBiZWdpbgorCisgICAgICAgIC8vIENoZWNrIGZvciBOQUsgLyBTVEFMTAorICAgICAgICByZXNwb25zZSA9ICgoc3RhdHVzID4+IGBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfU0hJRlQpICYgYFVTQl9SWF9TVEFUX1JFU1BfQklUU19NQVNLKTsKKworICAgICAgICBpZiAocmVzcG9uc2UgPT0gYFBJRF9OQUspIGJlZ2luCisgICAgICAgICAgICRkaXNwbGF5KCJVU0IgTkFLIFJFQ0VJVkVEIFxuIik7CisgICAgICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX05BSzsKKyAgICAgICAgZW5kIGVsc2UgaWYgKHJlc3BvbnNlID09IGBQSURfU1RBTEwpIGJlZ2luCisgICAgICAgICAgICRkaXNwbGF5KCJVU0I6IElOIFNUQUxMXG4iKTsKKyAgICAgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfU1RBTEw7CisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisKKyAgICAgICAgIC8vIENoZWNrIENSQyBpcyBvaworICAgICAgICAgICBpZiAoc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX0NSQ19FUlJfU0hJRlQpKSBiZWdpbgorICAgICAgICAgICAgICAgICRkaXNwbGF5KCJVU0I6IENSQyBFcnJvclxuIik7CisgICAgICAgICAgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfU1RBTEw7CisgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisKKyAgICAgICAgICAgICAgICAvLyBIb3cgbXVjaCBkYXRhIHdhcyBhY3R1YWxseSByZWNlaXZlZD8KKyAgICAgICAgICAgICAgICByeF9jb3VudCA9ICgoc3RhdHVzID4+IGBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX1NISUZUKSAmIGBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX01BU0spOworCisgICAgICAgICAgICAgICAgLy8kZGlzcGxheSgiIFJ4ICVkIChQSUQ9JXgpOlxuIiwgcnhfY291bnQsIHJlc3BvbnNlKTsKKworICAgICAgICAgICAgICAgIC8vIEFzc2VydCB0aGF0IHVzZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2ggZm9yIHRoZSByZXNwb25zZS4KKyAgICAgICAgICAgICAgICAvLyBOT1RFOiBJdCdzIG5vdCBjcml0aWNhbCB0byBkbyB0aGlzLCBidXQgd2UgY2FuJ3QgZWFzaWx5IGNoZWNrIENSQ3Mgd2l0aG91dAorICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgdGhlIHdob2xlIHJlc3BvbnNlIGludG8gYSBidWZmZXIuCisgICAgICAgICAgICAgICAgLy8gSGl0dGluZyB0aGlzIGNvbmRpdGlvbiBtYXkgcG9pbnQgdG93YXJkcyBpc3N1ZXMgd2l0aCBoaWdoZXIgbGV2ZWwgcHJvdG9jb2wKKyAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbi4uLgorICAgICAgICAgICAgICAgIGlmKHJ4X2xlbmd0aCA+PSByeF9jb3VudCkKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlVTQiBFUlJPUiBEaWZmZXJlbmNlIGluIHJ4IGxlbjolZCBhbmQgUnggRGF0YSBDb3VudDogJWQiLHJ4X2xlbmd0aCxyeF9jb3VudCk7CisgICAKKyAgICAgICAgICAgICAgICBmb3IgKGw9MDtsPHJ4X2NvdW50O2w9bCsxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JEX0RBVEEsZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIC8vJGRpc3BsYXkoIiBVU0IgUlggQ250OiAlZCBEYXRhOiAlMDJ4IiwgbCwgZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIFJlY3ZCdWZmZXJbbF0gPSBkYXRhOworICAgICAgICAgICAgICAgIGVuZAorCQlleGl0X2NvZGUgPSBgVVNCX1JFU19PSzsKKwkgICBlbmQKKwllbmQKKyAgICBlbmQKK2VuZAorZW5kdGFzaworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYjFkX2RlZmluZXMudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYjFkX2RlZmluZXMudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzYwZjRjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiMWRfZGVmaW5lcy52CkBAIC0wLDAgKzEsMTQzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVNCIDEuMSBmdW5jdGlvbiBkZWZpbmVzIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxZF9kZWZpbmVzLnYsdiAxLjMgMjAwMi0wOS0yNSAwNjowNjo0OSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTI1IDA2OjA2OjQ5ICQKKy8vICAkUmV2aXNpb246IDEuMyAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMiAgMjAwMi8wOS8yMCAxMTo0Njo1NCAgcnVkaQorLy8gICAgICAgICAgICAgICBmaXhlZCBhIHR5cGUgJ2RlZmluZScgd2FzIG1pc3NpbmcgLi4uCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE5IDEyOjA3OjQwICBydWRpCisvLyAgICAgICAgICAgICAgIEluaXRpYWwgQ2hlY2tpbgorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisKKworLy9gZGVmaW5lIFVTQkZfREVCVUcKKy8vYGRlZmluZSBVU0JGX1ZFUkJPU0VfREVCVUcKKworLy8gRW5hYmxlIG9yIGRpc2FibGUgQmxvY2sgRnJhbWVzCisvL2BkZWZpbmUgVVNCMV9CRl9FTkFCTEUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gSXRlbXMgYmVsb3cgdGhpcyBwb2ludCBzaG91bGQgTk9UIGJlIG1vZGlmaWVkIGJ5IHRoZSBlbmQgdXNlcgorLy8gVU5MRVNTIHlvdSBrbm93IGV4YWN0bHkgd2hhdCB5b3UgYXJlIGRvaW5nICEKKy8vIE1vZGlmeSBhdCB5b3Ugb3duIHJpc2sgISEhCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZpbmUJUk9NX1NJWkUwCTcnZDAxOAkvLyBEZXZpY2UgRGVzY3JpcHRvciBMZW5ndGgKK2BkZWZpbmUJUk9NX1NJWkUxCTcnZDA1MwkvLyBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IgTGVuZ3RoCitgZGVmaW5lCVJPTV9TSVpFMkEJNydkMDA0CS8vIExhbmd1YWdlIElEIERlc2NyaXB0b3IgU3RhcnQgTGVuZ3RoCitgZGVmaW5lCVJPTV9TSVpFMkIJNydkMDEwCS8vIFN0cmluZyBEZXNjcmlwdG9yIExlbmd0aAorYGRlZmluZQlST01fU0laRTJDCTcnZDAxMAkvLyBmb3IgZnV0dXJlIHVzZQorYGRlZmluZQlST01fU0laRTJECTcnZDAxMAkvLyBmb3IgZnV0dXJlIHVzZQorCitgZGVmaW5lCVJPTV9TVEFSVDAJNydoMDAJLy8gRGV2aWNlIERlc2NyaXB0b3IgU3RhcnQgQWRkcmVzcworYGRlZmluZQlST01fU1RBUlQxCTcnaDEyCS8vIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciBTdGFydCBBZGRyZXNzCitgZGVmaW5lCVJPTV9TVEFSVDJBCTcnaDQ3CS8vIExhbmd1YWdlIElEIERlc2NyaXB0b3IgU3RhcnQgQWRkcmVzcworYGRlZmluZQlST01fU1RBUlQyQgk3J2g1MAkvLyBTdHJpbmcgRGVzY3JpcHRvciBTdGFydCBBZGRyZXNzCitgZGVmaW5lCVJPTV9TVEFSVDJDCTcnaDYwCS8vIGZvciBmdXR1cmUgdXNlCitgZGVmaW5lCVJPTV9TVEFSVDJECTcnaDcwCS8vIGZvciBmdXR1cmUgdXNlCisKKy8vIEVuZHBvaW50IENvbmZpZ3VyYXRpb24gQ29uc3RhbnRzCitgZGVmaW5lIElOCTE0J2IwMF8wMDFfMDAwMDAwMDAwCitgZGVmaW5lIE9VVAkxNCdiMDBfMDEwXzAwMDAwMDAwMAorYGRlZmluZSBDVFJMCTE0J2IxMF8xMDBfMDAwMDAwMDAwCitgZGVmaW5lIElTTwkxNCdiMDFfMDAwXzAwMDAwMDAwMAorYGRlZmluZSBCVUxLCTE0J2IxMF8wMDBfMDAwMDAwMDAwCitgZGVmaW5lIElOVAkxNCdiMDBfMDAwXzAwMDAwMDAwMAorCisvLyBQSUQgRW5jb2RpbmdzCitgZGVmaW5lIFVTQkZfVF9QSURfT1VUCQk0J2IwMDAxCitgZGVmaW5lIFVTQkZfVF9QSURfSU4JCTQnYjEwMDEKK2BkZWZpbmUgVVNCRl9UX1BJRF9TT0YJCTQnYjAxMDEKK2BkZWZpbmUgVVNCRl9UX1BJRF9TRVRVUAk0J2IxMTAxCitgZGVmaW5lIFVTQkZfVF9QSURfREFUQTAJNCdiMDAxMQorYGRlZmluZSBVU0JGX1RfUElEX0RBVEExCTQnYjEwMTEKK2BkZWZpbmUgVVNCRl9UX1BJRF9EQVRBMgk0J2IwMTExCitgZGVmaW5lIFVTQkZfVF9QSURfTURBVEEJNCdiMTExMQorYGRlZmluZSBVU0JGX1RfUElEX0FDSwkJNCdiMDAxMAorYGRlZmluZSBVU0JGX1RfUElEX05BQ0sJCTQnYjEwMTAKK2BkZWZpbmUgVVNCRl9UX1BJRF9TVEFMTAk0J2IxMTEwCitgZGVmaW5lIFVTQkZfVF9QSURfTllFVAkJNCdiMDExMAorYGRlZmluZSBVU0JGX1RfUElEX1BSRQkJNCdiMTEwMAorYGRlZmluZSBVU0JGX1RfUElEX0VSUgkJNCdiMTEwMAorYGRlZmluZSBVU0JGX1RfUElEX1NQTElUCTQnYjEwMDAKK2BkZWZpbmUgVVNCRl9UX1BJRF9QSU5HCQk0J2IwMTAwCitgZGVmaW5lIFVTQkZfVF9QSURfUkVTCQk0J2IwMDAwCisKKy8vIFRoZSBITVNfREVMIGlzIGEgY29uc3RhbnQgZm9yIHRoZSAiSGFsZiBNaWNybyBTZWNvbmQiCisvLyBDbG9jayBwdWxzZSBnZW5lcmF0b3IuIFRoaXMgY29uc3RhbnQgc3BlY2lmaWVzIGhvdyBtYW55CisvLyBQaHkgY2xvY2tzIHRoZXJlIGFyZSBiZXR3ZWVuIHR3byBobXNfY2xvY2sgcHVsc2VzLiBUaGlzCisvLyBjb25zdGFudCBwbHVzIDIgcmVwcmVzZW50cyB0aGUgYWN0dWFsIGRlbGF5LgorLy8gRXhhbXBsZTogRm9yIGEgNjAgTWh6ICgxNi42NjcgblMgcGVyaW9kKSBQaHkgQ2xvY2ssIHRoZQorLy8gZGVsYXkgbXVzdCBiZSAzMCBwaHkgY2xvY2s6IDUwMG5zIC8gMTYuNjY3blMgPSAzMCBjbG9ja3MKK2BkZWZpbmUgVVNCRl9ITVNfREVMCQk1J2gxNgorCisvLyBBZnRlciBzZW5kaW5nIERhdGEgaW4gcmVzcG9uc2UgdG8gYW4gSU4gdG9rZW4gZnJvbSBob3N0LCB0aGUKKy8vIGhvc3QgbXVzdCByZXBseSB3aXRoIGFuIGFjay4gVGhlIGhvc3QgaGFzIDYyMm5TIGluIEZ1bGwgU3BlZWQKKy8vIG1vZGUgYW5kIDQwMG5TIGluIEhpZ2ggU3BlZWQgbW9kZSB0byByZXBseS4gUlhfQUNLX1RPX1ZBTF9GUworLy8gYW5kIFJYX0FDS19UT19WQUxfSFMgYXJlIHRoZSBudW1iZXJzIG9mIFVUTUkgY2xvY2sgY3ljbGVzCisvLyBtaW51cyAyIGZvciBGdWxsIGFuZCBIaWdoIFNwZWVkIG1vZGVzLgorLy9gZGVmaW5lIFVTQkZfUlhfQUNLX1RPX1ZBTF9GUwk4J2QzNgorYGRlZmluZSBVU0JGX1JYX0FDS19UT19WQUxfRlMJOCdkMjAwCisKKy8vIEFmdGVyIHNlbmRpbmcgYSBPVVQgdG9rZW4gdGhlIGhvc3QgbXVzdCBzZW5kIGEgZGF0YSBwYWNrZXQuCisvLyBUaGUgaG9zdCBoYXMgNjIyblMgaW4gRnVsbCBTcGVlZCBtb2RlIGFuZCA0MDBuUyBpbiBIaWdoIFNwZWVkCisvLyBtb2RlIHRvIHNlbmQgdGhlIGRhdGEgcGFja2V0LgorLy8gVFhfREFUQV9UT19WQUxfRlMgYW5kIFRYX0RBVEFfVE9fVkFMX0hTIGFyZSBpcyB0aGUgbnVtYmVycyBvZgorLy8gVVRNSSBjbG9jayBjeWNsZXMgbWludXMgMi4KKy8vYGRlZmluZSBVU0JGX1RYX0RBVEFfVE9fVkFMX0ZTCTgnZDM2CitgZGVmaW5lIFVTQkZfVFhfREFUQV9UT19WQUxfRlMJOCdkMjAwCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY29yZS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NvcmUudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43M2Y5ZWExCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NvcmUudgpAQCAtMCwwICsxLDcxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFBvcnRlZCB0byBVU0IyVUFSVCBQcm9qZWN0CisqICBBdXRob3I6ICBEaW5lc2ggQW5uYXl5YQorKiAgICAgICAgICAgRW1haWw6LSBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcKKyoKKyogICAgIERhdGU6IDR0aCBGZWIgMjAxMworKiAgICAgQ2hhbmdlczoKKyogICAgIEEuIFdhcm5pbmcgQ2xlYW4gVXAKKyogICAgIEIuIFVTQjEtcGh5IGlzIG1vdmUgdG8gY29yZSBsZXZlbAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVU0IgMS4xIGZ1bmN0aW9uIElQIGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfY29yZS52LHYgMS4yIDIwMDItMTAtMTEgMDU6NDg6MjAgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0xMC0xMSAwNTo0ODoyMCAkCisvLyAgJFJldmlzaW9uOiAxLjIgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEgIDIwMDIvMDkvMjUgMDY6MDY6NDkgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgLSBBZGRlZCBOZXcgVG9wIExldmVsCisvLyAgICAgICAgICAgICAgIC0gUmVtb3ZlIG9sZCB0b3AgbGV2ZWwgYW5kIGFzc29jaWF0ZWQgZmlsZXMKKy8vICAgICAgICAgICAgICAgLSBNb3ZlZCBGSUZPcyB0byAiR2VuZXJpYyBGSUZPcyIgcHJvamVjdAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworLyoKKworCQkvLyBVU0IgUEhZIEludGVyZmFjZQorCQl0eF9kcCwgdHhfZG4sIHR4X29lLAorCQlyeF9kLCByeF9kcCwgcnhfZG4sCitUaGVzZSBwaW5zIGFyZSBhIHNlbWktc3RhbmRhcmQgaW50ZXJmYWNlIHRvIFVTQiAxLjEgdHJhbnNjZWl2ZXJzLgorSnVzdCBtYXRjaCB1cCB0aGUgc2lnbmFsIG5hbWVzIHdpdGggdGhlIElPcyBvZiB0aGUgdHJhbnNjZWl2ZXIuCisKKwkJLy8gVVNCIE1pc2MKKwkJcGh5X3R4X21vZGUsIHVzYl9yc3QsIAorVGhlIFBIWSBzdXBwb3J0cyBzaW5nbGUgZW5kZWQgYW5kIGRpZmZlcmVudGlhbCBvdXRwdXQgdG8gdGhlCit0cmFuc2NlaXZlciBEZXBlbmRpbmcgb24gd2hpY2ggZGV2aWNlIHlvdSBhcmUgdXNpbmcsIHlvdSBoYXZlCit0byB0aWUgdGhlIHBoeV90eF9tb2RlIGhpZ2ggb3IgbG93LgordXNiX3JzdCBpcyBhc3NlcnRlZCB3aGVuZXZlciB0aGUgaG9zdCBzaWduYWxzIHJlc2V0IG9uIHRoZSBVU0IKK2J1cy4gVGhlIFVTQiBjb3JlIHdpbGwgaW50ZXJuYWxseSByZXNldCBpdHNlbGYgYXV0b21hdGljYWxseS4KK1RoaXMgb3V0cHV0IGlzIHByb3ZpZGVkIGZvciBleHRlcm5hbCBsb2dpYyB0aGF0IG5lZWRzIHRvIGJlCityZXNldCB3aGVuIHRoZSBVU0IgYnVzIGlzIHJlc2V0LgorCisJCS8vIEludGVycnVwdHMKKwkJZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZSwKKwkJY3JjMTZfZXJyLAorZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZSBhcmUgaW50ZXJydXB0IHRvIGluZGljYXRlIGVycm9yCitjb25kaXRpb25zIGluIEJsb2NrIEZyYW1lIG1vZGUuCitjcmMxNl9lcnIsIGluZGljYXRlcyB3aGVuIGEgY3JjIDE2IGVycm9yIHdhcyBkZXRlY3RlZCBvbiB0aGUKK3BheWxvYWQgb2YgYSBVU0IgcGFja2V0LgorCisJCS8vIFZlbmRvciBGZWF0dXJlcworCQl2X3NldF9pbnQsIHZfc2V0X2ZlYXR1cmUsIHdWYWx1ZSwKKwkJd0luZGV4LCB2ZW5kb3JfZGF0YSwKK1RoaXMgc2lnbmFscyBhbGxvdyB0byBjb250cm9sIHZlbmRvciBzcGVjaWZpYyByZWdpc3RlcnMgYW5kIGxvZ2ljCit0aGF0IGNhbiBiZSBtYW5pcHVsYXRlZCBhbmQgbW9uaXRvcmVkIHZpYSB0aGUgY29udHJvbCBlbmRwb2ludAordGhyb3VnaCB2ZW5kb3IgZGVmaW5lZCBjb21tYW5kcy4KKworCQkvLyBVU0IgU3RhdHVzCisJCXVzYl9idXN5LCBlcF9zZWwsCit1c2JfYnVzeSBpcyBhc3NlcnRlZCB3aGVuIHRoZSBVU0IgY29yZSBpcyBidXN5IHRyYW5zZmVycmluZworZGF0YSBlcF9zZWwgaW5kaWNhdGVkIHRoZSBlbmRwb2ludCB0aGF0IGlzIGN1cnJlbnRseSBidXN5LgorVGhpcyBpbmZvcm1hdGlvbiBtaWdodCBiZSB1c2VmdWwgaWYgb25lIGRlc2lyZXMgdG8gcmVzZXQvY2xlYXIKK3RoZSBhdHRhY2hlZCBGSUZPcyBhbmQgd2FudCB0byBkbyB0aGlzIHdoZW4gdGhlIGVuZHBvaW50IGlzIGlkbGUuCisKKwkJLy8gRW5kcG9pbnQgSW50ZXJmYWNlCitUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIDggZW5kcG9pbnRzLiBFbmRwb2ludCAwIGlzIHRoZQorY29udHJvbCBlbmRwb2ludCBhbmQgdXNlZCBpbnRlcm5hbGx5LiBFbmRwb2ludHMgMS03IGFyZSBhdmFpbGFibGUKK3RvIHRoZSB1c2VyLiByZXBsYWNlICdOJyB3aXRoIHRoZSBlbmRwb2ludCBudW1iZXIuCisKKwkJZXBOX2NmZywKK1RoaXMgaXMgYSBjb25zdGFudCBpbnB1dCB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZW5kcG9pbnQgYnkgT1JpbmcKK3RoZXNlIGRlZmluZXMgdG9nZXRoZXIgYW5kIGFkZGluZyB0aGUgbWF4IHBhY2tldCBzaXplIGZvciB0aGlzCitlbmRwb2ludDoKK2BJTiBhbmQgYE9VVCBzZWxlY3QgdGhlIHRyYW5zZmVyIGRpcmVjdGlvbiBmb3IgdGhpcyBlbmRwb2ludAorYElTTywgYEJVTEsgYW5kIGBJTlQgZGV0ZXJtaW5lIHRoZSBlbmRwb2ludCB0eXBlCisKK0V4YW1wbGU6ICJgQlVMSyB8IGBJTiAgfCAxNCdkMDY0IiBkZWZpbmVzIGEgQlVMSyBJTiBlbmRwb2ludCB3aXRoCittYXggcGFja2V0IHNpemUgb2YgNjQgYnl0ZXMKKworCQllcE5fZGluLCAgZXBOX3dlLCBlcE5fZnVsbCwKK1RoaXMgaXMgdGhlIE9VVCBGSUZPIGludGVyZmFjZS4gSWYgdGhpcyBpcyBhIElOIGVuZHBvaW50LCBncm91bmQKK2FsbCB1bnVzZWQgaW5wdXRzIGFuZCBsZWF2ZSBvdXRwdXRzIHVuY29ubmVjdGVkLgorCisJCWVwTl9kb3V0LCBlcE5fcmUsIGVwTl9lbXB0eSwKK3RoaXMgaXMgdGhlIElOIEZJRk8gaW50ZXJmYWNlLiBJZiB0aGlzIGlzIGEgT1VUIGVuZHBvaW50IGdyb3VuZAorYWxsIHVudXNlZCBpbnB1dHMgYW5kIGxlYXZlIG91dHB1dHMgdW5jb25uZWN0ZWQuCisKKwkJZXBOX2JmX2VuLCBlcE5fYmZfc2l6ZSwKK1RoZXNlIHR3byBjb25zdGFudCBjb25maWd1cmUgdGhlIEJsb2NrIEZyYW1lIGZlYXR1cmUuCisKKyovCisKKworbW9kdWxlIHVzYjFkX2NvcmUoY2xrX2ksIHJzdF9pLAorCisJCS8vIFVUTUkgSW50ZXJmYWNlCisJCURhdGFPdXQsIFR4VmFsaWQsIFR4UmVhZHksIFJ4VmFsaWQsCisJCVJ4QWN0aXZlLCBSeEVycm9yLCBEYXRhSW4sIExpbmVTdGF0ZSwKKwkJLy8gVVNCIE1pc2MKKwkJcGh5X3R4X21vZGUsIHVzYl9yc3QsIAorCisJCS8vIEludGVycnVwdHMKKwkJZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZSwKKwkJY3JjMTZfZXJyLAorCisJCS8vIFZlbmRvciBGZWF0dXJlcworCQl2X3NldF9pbnQsIHZfc2V0X2ZlYXR1cmUsIHdWYWx1ZSwKKwkJd0luZGV4LCB2ZW5kb3JfZGF0YSwKKworCQkvLyBVU0IgU3RhdHVzCisJCXVzYl9idXN5LCBlcF9zZWwsCisKKwkJLy8gRW5kcG9pbnQgSW50ZXJmYWNlCisJCWVwMV9jZmcsCisJCWVwMV9kaW4sICBlcDFfd2UsIGVwMV9mdWxsLAorCQllcDFfZG91dCwgZXAxX3JlLCBlcDFfZW1wdHksCisJCWVwMV9iZl9lbiwgZXAxX2JmX3NpemUsCisKKwkJZXAyX2NmZywKKwkJZXAyX2RpbiwgIGVwMl93ZSwgZXAyX2Z1bGwsCisJCWVwMl9kb3V0LCBlcDJfcmUsIGVwMl9lbXB0eSwKKwkJZXAyX2JmX2VuLCBlcDJfYmZfc2l6ZSwKKworCQllcDNfY2ZnLAorCQllcDNfZGluLCAgZXAzX3dlLCBlcDNfZnVsbCwKKwkJZXAzX2RvdXQsIGVwM19yZSwgZXAzX2VtcHR5LAorCQllcDNfYmZfZW4sIGVwM19iZl9zaXplLAorCisJCWVwNF9jZmcsCisJCWVwNF9kaW4sICBlcDRfd2UsIGVwNF9mdWxsLAorCQllcDRfZG91dCwgZXA0X3JlLCBlcDRfZW1wdHksCisJCWVwNF9iZl9lbiwgZXA0X2JmX3NpemUsCisKKwkJZXA1X2NmZywKKwkJZXA1X2RpbiwgIGVwNV93ZSwgZXA1X2Z1bGwsCisJCWVwNV9kb3V0LCBlcDVfcmUsIGVwNV9lbXB0eSwKKwkJZXA1X2JmX2VuLCBlcDVfYmZfc2l6ZSwKKworCQllcDZfY2ZnLAorCQllcDZfZGluLCAgZXA2X3dlLCBlcDZfZnVsbCwKKwkJZXA2X2RvdXQsIGVwNl9yZSwgZXA2X2VtcHR5LAorCQllcDZfYmZfZW4sIGVwNl9iZl9zaXplLAorCisJCWVwN19jZmcsCisJCWVwN19kaW4sICBlcDdfd2UsIGVwN19mdWxsLAorCQllcDdfZG91dCwgZXA3X3JlLCBlcDdfZW1wdHksCisJCWVwN19iZl9lbiwgZXA3X2JmX3NpemUsCisKKwkJLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisJCXJlZ19hZGRyLAorCQlyZWdfcmR3cm4sCisJCXJlZ19yZXEsCisJCXJlZ193ZGF0YSwKKwkJcmVnX3JkYXRhLAorCQlyZWdfYWNrCisKKwkJKTsgCQkKKworaW5wdXQJCWNsa19pOworaW5wdXQJCXJzdF9pOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVUTUkgSW50ZXJmYWNlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0CVs3OjBdCURhdGFPdXQ7CitvdXRwdXQJCVR4VmFsaWQ7CitpbnB1dAkJVHhSZWFkeTsKK2lucHV0CVs3OjBdCURhdGFJbjsKK2lucHV0CQlSeFZhbGlkOworaW5wdXQJCVJ4QWN0aXZlOworaW5wdXQJCVJ4RXJyb3I7CitpbnB1dAlbMTowXQlMaW5lU3RhdGU7CisKK2lucHV0CQlwaHlfdHhfbW9kZTsKK2lucHV0CQl1c2JfcnN0Oworb3V0cHV0CQlkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lOworb3V0cHV0CQljcmMxNl9lcnI7CisKK291dHB1dAkJdl9zZXRfaW50Oworb3V0cHV0CQl2X3NldF9mZWF0dXJlOworb3V0cHV0CVsxNTowXQl3VmFsdWU7CitvdXRwdXQJWzE1OjBdCXdJbmRleDsKK2lucHV0CVsxNTowXQl2ZW5kb3JfZGF0YTsKKworb3V0cHV0CQl1c2JfYnVzeTsKK291dHB1dAlbMzowXQllcF9zZWw7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVyIEludGVyZmFjZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0IFszMTowXSAgIHJlZ19hZGRyOyAgIC8vIFJlZ2lzdGVyIEFkZHJlc3MKK291dHB1dAkJcmVnX3Jkd3JuOyAgLy8gMCAtPiB3cml0ZSwgMS0+IHJlYWQKK291dHB1dAkJcmVnX3JlcTsgICAgLy8gIFJlZ2lzdGVyIFJlcQorb3V0cHV0IFszMTowXSAgIHJlZ193ZGF0YTsgIC8vIFJlZ2lzdGVyIHdyaXRlIGRhdGEKK2lucHV0ICBbMzE6MF0gICByZWdfcmRhdGE7ICAvLyBSZWdpc3RlciBSZWFkIERhdGEKK2lucHV0CQlyZWdfYWNrOyAgICAvLyBSZWdpc3RlciBBY2sKKworLy8gRW5kcG9pbnQgSW50ZXJmYWNlcworaW5wdXQJWzEzOjBdCWVwMV9jZmc7CitpbnB1dAlbNzowXQllcDFfZGluOworb3V0cHV0CVs3OjBdCWVwMV9kb3V0Oworb3V0cHV0CQllcDFfd2UsIGVwMV9yZTsKK2lucHV0CQllcDFfZW1wdHksIGVwMV9mdWxsOworaW5wdXQJCWVwMV9iZl9lbjsKK2lucHV0CVs2OjBdCWVwMV9iZl9zaXplOworCitpbnB1dAlbMTM6MF0JZXAyX2NmZzsKK2lucHV0CVs3OjBdCWVwMl9kaW47CitvdXRwdXQJWzc6MF0JZXAyX2RvdXQ7CitvdXRwdXQJCWVwMl93ZSwgZXAyX3JlOworaW5wdXQJCWVwMl9lbXB0eSwgZXAyX2Z1bGw7CitpbnB1dAkJZXAyX2JmX2VuOworaW5wdXQJWzY6MF0JZXAyX2JmX3NpemU7CisKK2lucHV0CVsxMzowXQllcDNfY2ZnOworaW5wdXQJWzc6MF0JZXAzX2RpbjsKK291dHB1dAlbNzowXQllcDNfZG91dDsKK291dHB1dAkJZXAzX3dlLCBlcDNfcmU7CitpbnB1dAkJZXAzX2VtcHR5LCBlcDNfZnVsbDsKK2lucHV0CQllcDNfYmZfZW47CitpbnB1dAlbNjowXQllcDNfYmZfc2l6ZTsKKworaW5wdXQJWzEzOjBdCWVwNF9jZmc7CitpbnB1dAlbNzowXQllcDRfZGluOworb3V0cHV0CVs3OjBdCWVwNF9kb3V0Oworb3V0cHV0CQllcDRfd2UsIGVwNF9yZTsKK2lucHV0CQllcDRfZW1wdHksIGVwNF9mdWxsOworaW5wdXQJCWVwNF9iZl9lbjsKK2lucHV0CVs2OjBdCWVwNF9iZl9zaXplOworCitpbnB1dAlbMTM6MF0JZXA1X2NmZzsKK2lucHV0CVs3OjBdCWVwNV9kaW47CitvdXRwdXQJWzc6MF0JZXA1X2RvdXQ7CitvdXRwdXQJCWVwNV93ZSwgZXA1X3JlOworaW5wdXQJCWVwNV9lbXB0eSwgZXA1X2Z1bGw7CitpbnB1dAkJZXA1X2JmX2VuOworaW5wdXQJWzY6MF0JZXA1X2JmX3NpemU7CisKK2lucHV0CVsxMzowXQllcDZfY2ZnOworaW5wdXQJWzc6MF0JZXA2X2RpbjsKK291dHB1dAlbNzowXQllcDZfZG91dDsKK291dHB1dAkJZXA2X3dlLCBlcDZfcmU7CitpbnB1dAkJZXA2X2VtcHR5LCBlcDZfZnVsbDsKK2lucHV0CQllcDZfYmZfZW47CitpbnB1dAlbNjowXQllcDZfYmZfc2l6ZTsKKworaW5wdXQJWzEzOjBdCWVwN19jZmc7CitpbnB1dAlbNzowXQllcDdfZGluOworb3V0cHV0CVs3OjBdCWVwN19kb3V0Oworb3V0cHV0CQllcDdfd2UsIGVwN19yZTsKK2lucHV0CQllcDdfZW1wdHksIGVwN19mdWxsOworaW5wdXQJCWVwN19iZl9lbjsKK2lucHV0CVs2OjBdCWVwN19iZl9zaXplOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKword2lyZQlbNzowXQlyeF9kYXRhOword2lyZQkJcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyOword2lyZQlbNzowXQl0eF9kYXRhOword2lyZQkJdHhfdmFsaWQ7Cit3aXJlCQl0eF9yZWFkeTsKK3dpcmUJCXR4X2ZpcnN0Oword2lyZQkJdHhfdmFsaWRfbGFzdDsKKworLy8gSW50ZXJuYWwgUmVnaXN0ZXIgRmlsZSBJbnRlcmZhY2UKK3dpcmUJWzY6MF0JZnVuY3RfYWRyOwkvLyBUaGlzIGZ1bmN0aW9ucyBhZGRyZXNzIChzZXQgYnkgY29udHJvbGxlcikKK3dpcmUJWzM6MF0JZXBfc2VsOwkJLy8gRW5kcG9pbnQgTnVtYmVyIElucHV0Cit3aXJlCQljcmMxNl9lcnI7CS8vIFNldCBDUkMxNiBlcnJvciBpbnRlcnJ1cHQKK3dpcmUJCWludF90b19zZXQ7CS8vIFNldCB0aW1lIG91dCBpbnRlcnJ1cHQKK3dpcmUJCWludF9zZXFlcnJfc2V0OwkvLyBTZXQgUElEIHNlcXVlbmNlIGVycm9yIGludGVycnVwdAord2lyZQlbMzE6MF0JZnJtX25hdDsJLy8gRnJhbWUgTnVtYmVyIGFuZCBUaW1lIFJlZ2lzdGVyCit3aXJlCQluc2VfZXJyOwkvLyBObyBTdWNoIEVuZHBvaW50IEVycm9yCit3aXJlCQlwaWRfY3NfZXJyOwkvLyBQSUQgQ1MgZXJyb3IKK3dpcmUJCWNyYzVfZXJyOwkvLyBDUkM1IEVycm9yCisKK3JlZwlbNzowXQl0eF9kYXRhX3N0Oword2lyZQlbNzowXQlyeF9jdHJsX2RhdGE7Cit3aXJlCVs3OjBdCXJ4X2N0cmxfZGF0YV9kOworcmVnCVsxMzowXQljZmc7Cit3aXJlICAgICAgICAgICAgcnhfY3RybF9kdmFsaWQ7Cit3aXJlICAgICAgICAgICAgcnhfY3RybF9kZG9uZTsKK3dpcmUgICAgICAgICAgICBpZG1hX3JlOword2lyZSAgICAgICAgICAgIGlkbWFfd2U7CityZWcJCWVwX2VtcHR5OworcmVnCQllcF9mdWxsOword2lyZQlbNzowXQlyeF9zaXplOword2lyZQkJcnhfZG9uZTsKKword2lyZQlbNzowXQllcDBfZGluOword2lyZQlbNzowXQllcDBfZG91dDsKK3dpcmUJCWVwMF9yZSwgZXAwX3dlOword2lyZQlbMTM6MF0JZXAwX2NmZzsKK3dpcmUJWzc6MF0JZXAwX3NpemU7Cit3aXJlCVs3OjBdCWVwMF9jdHJsX2RvdXQsIGVwMF9jdHJsX2RpbjsKK3dpcmUJCWVwMF9jdHJsX3JlLCBlcDBfY3RybF93ZTsKK3dpcmUJWzM6MF0JZXAwX2N0cmxfc3RhdDsKKword2lyZQkJY3RybF9zZXR1cCwgY3RybF9pbiwgY3RybF9vdXQ7Cit3aXJlCQlzZW5kX3N0YWxsOword2lyZQkJdG9rZW5fdmFsaWQ7CityZWcJCXJzdF9sb2NhbDsJCS8vIGludGVybmFsIHJlc2V0Cit3aXJlCQlkcm9wcGVkX2ZyYW1lOword2lyZQkJbWlzYWxpZ25lZF9mcmFtZTsKK3dpcmUJCXZfc2V0X2ludDsKK3dpcmUJCXZfc2V0X2ZlYXR1cmU7Cit3aXJlCVsxNTowXQl3VmFsdWU7Cit3aXJlCVsxNTowXQl3SW5kZXg7CisKK3JlZwkJZXBfYmZfZW47CityZWcJWzY6MF0JZXBfYmZfc2l6ZTsKK3dpcmUJWzY6MF0Jcm9tX2FkcjsKK3dpcmUJWzc6MF0Jcm9tX2RhdGE7CisKK3dpcmUgICAgICAgICAgICBlcDBfZnVsbDsKK3dpcmUgICAgICAgICAgICBlcDBfZW1wdHk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCisvLyBFbmRwb2ludCB0eXBlIGFuZCBNYXggdHJhbnNmZXIgc2l6ZQorYXNzaWduIGVwMF9jZmcgPSBgQ1RSTCB8IGVwMF9zaXplOworCithbHdheXMgQChwb3NlZGdlIGNsa19pKQorCXJzdF9sb2NhbCA8PSAjMSByc3RfaSAmIH51c2JfcnN0OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTW9kdWxlIEluc3RhbnRpYXRpb25zCisvLworLyoqKioqKiogTW92ZSB0byBwaHkgbG9naWMgaXMgbW92ZSB0byBjb3JlIGxldmVsCit1c2JfcGh5IHBoeSgKKwkJLmNsaygJCQljbGtfaQkJCSksCisJCS5yc3QoCQkJcnN0X2kJCQkpLAkvLyBPTkxZIGV4dGVybmFsIHJlc2V0CisJCS5waHlfdHhfbW9kZSgJCXBoeV90eF9tb2RlCQkpLAorCQkudXNiX3JzdCgJCXVzYl9yc3QJCQkpLAorCisJCS8vIFRyYW5zY2VpdmVyIEludGVyZmFjZQorCQkucnhkKAkJCXJ4X2QJCQkpLAorCQkucnhkcCgJCQlyeF9kcAkJCSksCisJCS5yeGRuKAkJCXJ4X2RuCQkJKSwKKwkJLnR4ZHAoCQkJdHhfZHAJCQkpLAorCQkudHhkbigJCQl0eF9kbgkJCSksCisJCS50eG9lKAkJCXR4X29lCQkJKSwKKworCQkvLyBVVE1JIEludGVyZmFjZQorCQkuRGF0YUluX28oCQlEYXRhSW4JCQkpLAorCQkuUnhWYWxpZF9vKAkJUnhWYWxpZAkJCSksCisJCS5SeEFjdGl2ZV9vKAkJUnhBY3RpdmUJCSksCisJCS5SeEVycm9yX28oCQlSeEVycm9yCQkJKSwKKwkJLkRhdGFPdXRfaSgJCURhdGFPdXQJCQkpLAorCQkuVHhWYWxpZF9pKAkJVHhWYWxpZAkJCSksCisJCS5UeFJlYWR5X28oCQlUeFJlYWR5CQkJKSwKKwkJLkxpbmVTdGF0ZV9vKAkJTGluZVN0YXRlCQkpCisJCSk7CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gVVRNSSBJbnRlcmZhY2UKK3VzYjFkX3V0bWlfaWYJdTAoCisJCS5waHlfY2xrKAkJY2xrX2kJCQkpLAorCQkucnN0KAkJCXJzdF9sb2NhbAkJKSwKKwkJLy8gSW50ZXJmYWNlIHRvd2FyZHMgUGh5LVR4CisJCS5EYXRhT3V0KAkJRGF0YU91dAkJCSksCisJCS5UeFZhbGlkKAkJVHhWYWxpZAkJCSksCisJCS5UeFJlYWR5KAkJVHhSZWFkeQkJCSksCisKKwkJLy8gSW50ZXJmYWNlIHRvd2FyZHMgUGh5LXJ4CisJCS5SeFZhbGlkKAkJUnhWYWxpZAkJCSksCisJCS5SeEFjdGl2ZSgJCVJ4QWN0aXZlCQkpLAorCQkuUnhFcnJvcigJCVJ4RXJyb3IJCQkpLAorCQkuRGF0YUluKAkJRGF0YUluCQkJKSwKKworCQkvLyBJbnRlcmZjYWUgdG93YXJkcyBwcm90b2NvbCBsYXllci1yeAorCQkucnhfZGF0YSgJCXJ4X2RhdGEJCQkpLAorCQkucnhfdmFsaWQoCQlyeF92YWxpZAkJKSwKKwkJLnJ4X2FjdGl2ZSgJCXJ4X2FjdGl2ZQkJKSwKKwkJLnJ4X2VycigJCXJ4X2VycgkJCSksCisKKwkJLy8gSW50ZXJmY2FlIHRvd2FyZHMgcHJvdG9jb2wgbGF5ZXItdHgKKwkJLnR4X2RhdGEoCQl0eF9kYXRhCQkJKSwKKwkJLnR4X3ZhbGlkKAkJdHhfdmFsaWQJCSksCisJCS50eF92YWxpZF9sYXN0KAkJdHhfdmFsaWRfbGFzdAkJKSwKKwkJLnR4X3JlYWR5KAkJdHhfcmVhZHkJCSksCisJCS50eF9maXJzdCgJCXR4X2ZpcnN0CQkpCisJCSk7CisKKy8vIFByb3RvY29sIExheWVyCit1c2IxZF9wbCAgdTEoCS5jbGsoCQkJY2xrX2kJCQkpLAorCQkucnN0KAkJCXJzdF9sb2NhbAkJKSwKKwkJLy8gSW50ZXJmYWNlIHRvd2FyZHMgdXRtaS1yeAorCQkucnhfZGF0YSgJCXJ4X2RhdGEJCQkpLAorCQkucnhfdmFsaWQoCQlyeF92YWxpZAkJKSwKKwkJLnJ4X2FjdGl2ZSgJCXJ4X2FjdGl2ZQkJKSwKKwkJLnJ4X2VycigJCXJ4X2VycgkJCSksCisKKwkJLy8gSW50ZXJmYWNlIHRvd2FyZHMgdXRtaS10eAorCQkudHhfZGF0YSgJCXR4X2RhdGEJCQkpLAorCQkudHhfdmFsaWQoCQl0eF92YWxpZAkJKSwKKwkJLnR4X3ZhbGlkX2xhc3QoCQl0eF92YWxpZF9sYXN0CQkpLAorCQkudHhfcmVhZHkoCQl0eF9yZWFkeQkJKSwKKwkJLnR4X2ZpcnN0KAkJdHhfZmlyc3QJCSksCisgICAgICAgICAgICAgICAgIAorCQkvLyBJbnRlcmZhY2UgdG93YXJkcyB1c2ItcGh5LXR4CisJCS50eF92YWxpZF9vdXQoCQlUeFZhbGlkCQkJKSwKKworCQkvLyB1bnVzZWQgb3V0cHV0cworCQkudG9rZW5fdmFsaWQoCQl0b2tlbl92YWxpZAkJKSwKKwkJLmludF90b19zZXQoCQlpbnRfdG9fc2V0CQkpLAorCQkuaW50X3NlcWVycl9zZXQoCWludF9zZXFlcnJfc2V0CQkpLAorCQkucGlkX2NzX2VycigJCXBpZF9jc19lcnIJCSksCisJCS5uc2VfZXJyKAkJbnNlX2VycgkJCSksCisJCS5jcmM1X2VycigJCWNyYzVfZXJyCQkpLAorCQkucnhfc2l6ZSgJCXJ4X3NpemUJCQkpLAorCQkucnhfZG9uZSgJCXJ4X2RvbmUJCQkpLAorCisJCS8vIEludGVyZmFjZSB0b3dhcmRzIHVzYi1jdHJsCisJCS5mYSgJCQlmdW5jdF9hZHIJCSksCisJCS5mcm1fbmF0KAkJZnJtX25hdAkJCSksCisJCS5jdHJsX3NldHVwKAkJY3RybF9zZXR1cAkJKSwKKwkJLmN0cmxfaW4oCQljdHJsX2luCQkJKSwKKwkJLmN0cmxfb3V0KAkJY3RybF9vdXQJCSksCisJCS5zZW5kX3N0YWxsKAkJc2VuZF9zdGFsbAkJKSwKKworCQkvLyB1c2Itc3RhdHVzIAorCQkuZXBfc2VsKAkJZXBfc2VsCQkJKSwKKwkJLnhfYnVzeSgJCXVzYl9idXN5CQkpLAorCQkuaW50X2NyYzE2X3NldCgJCWNyYzE2X2VycgkJKSwKKwkJLmRyb3BwZWRfZnJhbWUoCQlkcm9wcGVkX2ZyYW1lCQkpLAorCQkubWlzYWxpZ25lZF9mcmFtZSgJbWlzYWxpZ25lZF9mcmFtZQkpLAorCisJCS5lcF9iZl9lbigJCWVwX2JmX2VuCQkpLAorCQkuZXBfYmZfc2l6ZSgJCWVwX2JmX3NpemUJCSksCisJCS5jc3IoCQkJY2ZnCQkJKSwKKwkJLnR4X2RhdGFfc3QoCQl0eF9kYXRhX3N0CQkpLAorCisJCS5yeF9jdHJsX2RhdGEgICAgICAgICAgKHJ4X2N0cmxfZGF0YQkJKSwKKwkJLnJ4X2N0cmxfZGF0YV9kICAgICAgICAocnhfY3RybF9kYXRhX2QJCSksCisJCS5yeF9jdHJsX2R2YWxpZCAgICAgICAgKHJ4X2N0cmxfZHZhbGlkICAgICAgICAgICksCisJCS5yeF9jdHJsX2Rkb25lICAgICAgICAgKHJ4X2N0cmxfZGRvbmUgICAgICAgICAgICksCisKKwkJLmlkbWFfcmUoCQlpZG1hX3JlCQkJKSwKKwkJLmlkbWFfd2UoCQlpZG1hX3dlCQkJKSwKKwkJLmVwX2VtcHR5KAkJZXBfZW1wdHkJCSksCisJCS5lcF9mdWxsKAkJZXBfZnVsbAkJCSkKKwkJKTsKKwordXNiMWRfY3RybCAgdTQoCS5jbGsoCQkJY2xrX2kJCQkpLAorCQkucnN0KAkJCXJzdF9sb2NhbAkJKSwKKworCQkucm9tX2FkcigJCXJvbV9hZHIJCQkpLAorCQkucm9tX2RhdGEoCQlyb21fZGF0YQkJKSwKKworCQkuY3RybF9zZXR1cCgJCWN0cmxfc2V0dXAJCSksCisJCS5jdHJsX2luKAkJY3RybF9pbgkJCSksCisJCS5jdHJsX291dCgJCWN0cmxfb3V0CQkpLAorCisJCS5yeF9jdHJsX2RhdGEgICAgICAgICAgKHJ4X2N0cmxfZGF0YSAgICAgICAgICAgICksCisJCS5yeF9jdHJsX2R2YWxpZCAgICAgICAgKHJ4X2N0cmxfZHZhbGlkICAgICAgICAgICksCisJCS5yeF9jdHJsX2Rkb25lICAgICAgICAgKHJ4X2N0cmxfZGRvbmUgICAgICAgICAgICksCisKKworCQkuZXAwX2RpbigJCWVwMF9jdHJsX2RvdXQJCSksCisJCS5lcDBfZG91dCgJCWVwMF9jdHJsX2RpbgkJKSwKKwkJLmVwMF9yZSgJCWVwMF9jdHJsX3JlCQkpLAorCQkuZXAwX3dlKAkJZXAwX2N0cmxfd2UJCSksCisJCS5lcDBfc3RhdCgJCWVwMF9jdHJsX3N0YXQJCSksCisJCS5lcDBfc2l6ZSgJCWVwMF9zaXplCQkpLAorCisJCS5zZW5kX3N0YWxsKAkJc2VuZF9zdGFsbAkJKSwKKwkJLmZyYW1lX25vKAkJZnJtX25hdFsyNjoxNl0JCSksCisJCS5mdW5jdF9hZHIoCQlmdW5jdF9hZHIgCQkpLAorCQkuY29uZmlndXJlZCgJCQkJCSksCisJCS5oYWx0KAkJCQkJCSksCisKKwkJLnZfc2V0X2ludCgJCXZfc2V0X2ludAkJKSwKKwkJLnZfc2V0X2ZlYXR1cmUoCQl2X3NldF9mZWF0dXJlCQkpLAorCQkud1ZhbHVlKAkJd1ZhbHVlCQkJKSwKKwkJLndJbmRleCgJCXdJbmRleAkJCSksCisJCS52ZW5kb3JfZGF0YSgJCXZlbmRvcl9kYXRhCQkpLAorCisgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisJICAgICAgICAucmVnX2FkZHIgICAgKHJlZ19hZGRyKSwKKwkgICAgICAgIC5yZWdfcmR3cm4gICAocmVnX3Jkd3JuKSwKKwkgICAgICAgIC5yZWdfcmVxICAgICAocmVnX3JlcSksCisJICAgICAgICAucmVnX3dkYXRhICAgKHJlZ193ZGF0YSksCisJICAgICAgICAucmVnX3JkYXRhICAgKHJlZ19yZGF0YSksCisJICAgICAgICAucmVnX2FjayAgICAgKHJlZ19hY2spCisKKwkJKTsKKworCit1c2IxZF9yb20xIHJvbTEoCS5jbGsoCQljbGtfaQkJKSwKKwkJLmFkcigJCXJvbV9hZHIJCSksCisJCS5kb3V0KAkJcm9tX2RhdGEJKQorCQkpOworCisvLyBDVFJMIEVuZHBvaW50IEZJRk8KKy8qKioqKioqKioqKioqCit1c2IxZF9nZW5lcmljX2ZpZm8gIyg4LDYsMCkgdTEwKAorCQkuY2xrKAkJCWNsa19pCQkJKSwKKwkJLnJzdCgJCQlyc3RfaQkJCSksCisJCS5jbHIoCQkJdXNiX3JzdAkJCSksCisJCS5kaW4oCQkJcnhfY3RybF9kYXRhX2QJCSksCisJCS53ZSgJCQllcDBfd2UJCQkpLAorCQkuZG91dCgJCQllcDBfY3RybF9kb3V0CQkpLAorCQkucmUoCQkJZXAwX2N0cmxfcmUJCSksCisJCS5mdWxsX3IoCQkJCQkpLAorCQkuZW1wdHlfcigJCQkJCSksCisJCS5mdWxsKAkJCWVwMF9mdWxsCQkpLAorCQkuZW1wdHkoCQkJZXAwX2N0cmxfc3RhdFsxXQkpLAorCQkuZnVsbF9uKAkJCQkJKSwKKwkJLmVtcHR5X24oCQkJCQkpLAorCQkuZnVsbF9uX3IoCQkJCQkpLAorCQkuZW1wdHlfbl9yKAkJCQkJKSwKKwkJLmxldmVsKAkJCQkJCSkKKwkJKTsKKworKioqKioqKioqKioqKi8KKy8vIENUUkwgRW5kcG9pbnQgRklGTwordXNiMWRfc3luY19maWZvICAjKDgsOCkgdTEwKAorCSAgICAgICAgICAuY2xrICAgICAgICAgIChjbGtfaSksCisJICAgICAgICAgIC5yZXNldF9uICAgICAgKHJzdF9pKSwKKwkJICAuY2xyICAgICAgICAgICh1c2JfcnN0KSwKKwkJICAud3JfZW4gICAgICAgIChlcDBfd2UpLAorCQkgIC53cl9kYXRhICAgICAgKHJ4X2N0cmxfZGF0YV9kKSwKKwkJICAuZnVsbCAgICAgICAgIChlcDBfZnVsbCksCisJCSAgLmVtcHR5ICAgICAgICAoZXAwX2N0cmxfc3RhdFsxXSksCisJCSAgLnJkX2VuICAgICAgICAoZXAwX2N0cmxfcmUpLAorCQkgIC5yZF9kYXRhICAgICAgKGVwMF9jdHJsX2RvdXQpCisJICApOwordXNiMWRfZ2VuZXJpY19maWZvICMoOCw2LDApIHUxMSgKKwkJLmNsaygJCQljbGtfaQkJCSksCisJCS5yc3QoCQkJcnN0X2kJCQkpLAorCQkuY2xyKAkJCXVzYl9yc3QJCQkpLAorCQkuZGluKAkJCWVwMF9jdHJsX2RpbgkJKSwKKwkJLndlKAkJCWVwMF9jdHJsX3dlCQkpLAorCQkuZG91dCgJCQllcDBfZG91dAkJKSwKKwkJLnJlKAkJCWVwMF9yZQkJCSksCisJCS5mdWxsX3IoCQkJCQkpLAorCQkuZW1wdHlfcigJCQkJCSksCisJCS5mdWxsKAkJCWVwMF9jdHJsX3N0YXRbMl0JKSwKKwkJLmVtcHR5KAkJCWVwMF9lbXB0eQkJKSwKKwkJLmZ1bGxfbigJCQkJCSksCisJCS5lbXB0eV9uKAkJCQkJKSwKKwkJLmZ1bGxfbl9yKAkJCQkJKSwKKwkJLmVtcHR5X25fcigJCQkJCSksCisJCS5sZXZlbCgJCQkJCQkpCisJCSk7CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEVuZHBvaW50IEZJRk8gSW50ZXJmYWNlcworLy8KKworYWx3YXlzIEAoZXBfc2VsIG9yIGVwMF9jZmcgb3IgZXAxX2NmZyBvciBlcDJfY2ZnIG9yIGVwM19jZmcgb3IKKwkJZXA0X2NmZyBvciBlcDVfY2ZnIG9yIGVwNl9jZmcgb3IgZXA3X2NmZykKKwljYXNlKGVwX3NlbCkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gwOgljZmcgPSBlcDBfY2ZnOworCSAgIDQnaDE6CWNmZyA9IGVwMV9jZmc7CisJICAgNCdoMjoJY2ZnID0gZXAyX2NmZzsKKwkgICA0J2gzOgljZmcgPSBlcDNfY2ZnOworCSAgIDQnaDQ6CWNmZyA9IGVwNF9jZmc7CisJICAgNCdoNToJY2ZnID0gZXA1X2NmZzsKKwkgICA0J2g2OgljZmcgPSBlcDZfY2ZnOworCSAgIDQnaDc6CWNmZyA9IGVwN19jZmc7CisJZW5kY2FzZQorCisvLyBJbiBlbmRwb2ludHMgb25seQorYWx3YXlzIEAocG9zZWRnZSBjbGtfaSkKKwljYXNlKGVwX3NlbCkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gwOgl0eF9kYXRhX3N0IDw9ICMxIGVwMF9kb3V0OworCSAgIDQnaDE6CXR4X2RhdGFfc3QgPD0gIzEgZXAxX2RpbjsKKwkgICA0J2gyOgl0eF9kYXRhX3N0IDw9ICMxIGVwMl9kaW47CisJICAgNCdoMzoJdHhfZGF0YV9zdCA8PSAjMSBlcDNfZGluOworCSAgIDQnaDQ6CXR4X2RhdGFfc3QgPD0gIzEgZXA0X2RpbjsKKwkgICA0J2g1Ogl0eF9kYXRhX3N0IDw9ICMxIGVwNV9kaW47CisJICAgNCdoNjoJdHhfZGF0YV9zdCA8PSAjMSBlcDZfZGluOworCSAgIDQnaDc6CXR4X2RhdGFfc3QgPD0gIzEgZXA3X2RpbjsKKwllbmRjYXNlCisKKy8vIEluIGVuZHBvaW50cyBvbmx5CithbHdheXMgQChwb3NlZGdlIGNsa19pKQorCWNhc2UoZXBfc2VsKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDA6CWVwX2VtcHR5IDw9ICMxIGVwMF9lbXB0eTsKKwkgICA0J2gxOgllcF9lbXB0eSA8PSAjMSBlcDFfZW1wdHk7CisJICAgNCdoMjoJZXBfZW1wdHkgPD0gIzEgZXAyX2VtcHR5OworCSAgIDQnaDM6CWVwX2VtcHR5IDw9ICMxIGVwM19lbXB0eTsKKwkgICA0J2g0OgllcF9lbXB0eSA8PSAjMSBlcDRfZW1wdHk7CisJICAgNCdoNToJZXBfZW1wdHkgPD0gIzEgZXA1X2VtcHR5OworCSAgIDQnaDY6CWVwX2VtcHR5IDw9ICMxIGVwNl9lbXB0eTsKKwkgICA0J2g3OgllcF9lbXB0eSA8PSAjMSBlcDdfZW1wdHk7CisJZW5kY2FzZQorCisvLyBPVVQgZW5kcG9pbnRzIG9ubHkKK2Fsd2F5cyBAKGVwX3NlbCBvciBlcDBfZnVsbCBvciBlcDFfZnVsbCBvciBlcDJfZnVsbCBvciBlcDNfZnVsbCBvcgorCQllcDRfZnVsbCBvciBlcDVfZnVsbCBvciBlcDZfZnVsbCBvciBlcDdfZnVsbCkKKwljYXNlKGVwX3NlbCkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gwOgllcF9mdWxsID0gZXAwX2Z1bGw7CisJICAgNCdoMToJZXBfZnVsbCA9IGVwMV9mdWxsOworCSAgIDQnaDI6CWVwX2Z1bGwgPSBlcDJfZnVsbDsKKwkgICA0J2gzOgllcF9mdWxsID0gZXAzX2Z1bGw7CisJICAgNCdoNDoJZXBfZnVsbCA9IGVwNF9mdWxsOworCSAgIDQnaDU6CWVwX2Z1bGwgPSBlcDVfZnVsbDsKKwkgICA0J2g2OgllcF9mdWxsID0gZXA2X2Z1bGw7CisJICAgNCdoNzoJZXBfZnVsbCA9IGVwN19mdWxsOworCWVuZGNhc2UKKworYWx3YXlzIEAocG9zZWRnZSBjbGtfaSkKKwljYXNlKGVwX3NlbCkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gwOgllcF9iZl9lbiA9IDEnYjA7CisJICAgNCdoMToJZXBfYmZfZW4gPSBlcDFfYmZfZW47CisJICAgNCdoMjoJZXBfYmZfZW4gPSBlcDJfYmZfZW47CisJICAgNCdoMzoJZXBfYmZfZW4gPSBlcDNfYmZfZW47CisJICAgNCdoNDoJZXBfYmZfZW4gPSBlcDRfYmZfZW47CisJICAgNCdoNToJZXBfYmZfZW4gPSBlcDVfYmZfZW47CisJICAgNCdoNjoJZXBfYmZfZW4gPSBlcDZfYmZfZW47CisJICAgNCdoNzoJZXBfYmZfZW4gPSBlcDdfYmZfZW47CisJZW5kY2FzZQorCithbHdheXMgQChwb3NlZGdlIGNsa19pKQorCWNhc2UoZXBfc2VsKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDE6CWVwX2JmX3NpemUgPSBlcDFfYmZfc2l6ZTsKKwkgICA0J2gyOgllcF9iZl9zaXplID0gZXAyX2JmX3NpemU7CisJICAgNCdoMzoJZXBfYmZfc2l6ZSA9IGVwM19iZl9zaXplOworCSAgIDQnaDQ6CWVwX2JmX3NpemUgPSBlcDRfYmZfc2l6ZTsKKwkgICA0J2g1OgllcF9iZl9zaXplID0gZXA1X2JmX3NpemU7CisJICAgNCdoNjoJZXBfYmZfc2l6ZSA9IGVwNl9iZl9zaXplOworCSAgIDQnaDc6CWVwX2JmX3NpemUgPSBlcDdfYmZfc2l6ZTsKKwllbmRjYXNlCisKK2Fzc2lnbiBlcDFfZG91dCA9IHJ4X2N0cmxfZGF0YV9kOworYXNzaWduIGVwMl9kb3V0ID0gcnhfY3RybF9kYXRhX2Q7Cithc3NpZ24gZXAzX2RvdXQgPSByeF9jdHJsX2RhdGFfZDsKK2Fzc2lnbiBlcDRfZG91dCA9IHJ4X2N0cmxfZGF0YV9kOworYXNzaWduIGVwNV9kb3V0ID0gcnhfY3RybF9kYXRhX2Q7Cithc3NpZ24gZXA2X2RvdXQgPSByeF9jdHJsX2RhdGFfZDsKK2Fzc2lnbiBlcDdfZG91dCA9IHJ4X2N0cmxfZGF0YV9kOworCithc3NpZ24gZXAwX3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoMCk7Cithc3NpZ24gZXAxX3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoMSkgJiAhZXAxX2VtcHR5OworYXNzaWduIGVwMl9yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDIpICYgIWVwMl9lbXB0eTsKK2Fzc2lnbiBlcDNfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2gzKSAmICFlcDNfZW1wdHk7Cithc3NpZ24gZXA0X3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoNCkgJiAhZXA0X2VtcHR5OworYXNzaWduIGVwNV9yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDUpICYgIWVwNV9lbXB0eTsKK2Fzc2lnbiBlcDZfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2g2KSAmICFlcDZfZW1wdHk7Cithc3NpZ24gZXA3X3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoNykgJiAhZXA3X2VtcHR5OworCithc3NpZ24gZXAwX3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoMCk7Cithc3NpZ24gZXAxX3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoMSkgJiAhZXAxX2Z1bGw7Cithc3NpZ24gZXAyX3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoMikgJiAhZXAyX2Z1bGw7Cithc3NpZ24gZXAzX3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoMykgJiAhZXAzX2Z1bGw7Cithc3NpZ24gZXA0X3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoNCkgJiAhZXA0X2Z1bGw7Cithc3NpZ24gZXA1X3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoNSkgJiAhZXA1X2Z1bGw7Cithc3NpZ24gZXA2X3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoNikgJiAhZXA2X2Z1bGw7Cithc3NpZ24gZXA3X3dlID0gaWRtYV93ZSAmIChlcF9zZWwgPT0gNCdoNykgJiAhZXA3X2Z1bGw7CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzE2LnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjMTYudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hY2VlNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzE2LnYKQEAgLTAsMCArMSw5OCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQiBDUkMxNiBNb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9jcmMxNi52LHYgMS4xLjEuMSAyMDAyLTA5LTE5IDEyOjA3OjM5IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMTkgMTI6MDc6MzkgJAorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIENSQzE2CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgdXNiMWRfY3JjMTYoY3JjX2luLCBkaW4sIGNyY19vdXQpOworaW5wdXQJWzE1OjBdCWNyY19pbjsKK2lucHV0CVs3OjBdCWRpbjsKK291dHB1dAlbMTU6MF0JY3JjX291dDsKKworYXNzaWduIGNyY19vdXRbMF0gPQlkaW5bN10gXiBkaW5bNl0gXiBkaW5bNV0gXiBkaW5bNF0gXiBkaW5bM10gXgorCQkJZGluWzJdIF4gZGluWzFdIF4gZGluWzBdIF4gY3JjX2luWzhdIF4gY3JjX2luWzldIF4KKwkJCWNyY19pblsxMF0gXiBjcmNfaW5bMTFdIF4gY3JjX2luWzEyXSBeIGNyY19pblsxM10gXgorCQkJY3JjX2luWzE0XSBeIGNyY19pblsxNV07Cithc3NpZ24gY3JjX291dFsxXSA9CWRpbls3XSBeIGRpbls2XSBeIGRpbls1XSBeIGRpbls0XSBeIGRpblszXSBeIGRpblsyXSBeCisJCQlkaW5bMV0gXiBjcmNfaW5bOV0gXiBjcmNfaW5bMTBdIF4gY3JjX2luWzExXSBeCisJCQljcmNfaW5bMTJdIF4gY3JjX2luWzEzXSBeIGNyY19pblsxNF0gXiBjcmNfaW5bMTVdOworYXNzaWduIGNyY19vdXRbMl0gPQlkaW5bMV0gXiBkaW5bMF0gXiBjcmNfaW5bOF0gXiBjcmNfaW5bOV07Cithc3NpZ24gY3JjX291dFszXSA9CWRpblsyXSBeIGRpblsxXSBeIGNyY19pbls5XSBeIGNyY19pblsxMF07Cithc3NpZ24gY3JjX291dFs0XSA9CWRpblszXSBeIGRpblsyXSBeIGNyY19pblsxMF0gXiBjcmNfaW5bMTFdOworYXNzaWduIGNyY19vdXRbNV0gPQlkaW5bNF0gXiBkaW5bM10gXiBjcmNfaW5bMTFdIF4gY3JjX2luWzEyXTsKK2Fzc2lnbiBjcmNfb3V0WzZdID0JZGluWzVdIF4gZGluWzRdIF4gY3JjX2luWzEyXSBeIGNyY19pblsxM107Cithc3NpZ24gY3JjX291dFs3XSA9CWRpbls2XSBeIGRpbls1XSBeIGNyY19pblsxM10gXiBjcmNfaW5bMTRdOworYXNzaWduIGNyY19vdXRbOF0gPQlkaW5bN10gXiBkaW5bNl0gXiBjcmNfaW5bMF0gXiBjcmNfaW5bMTRdIF4gY3JjX2luWzE1XTsKK2Fzc2lnbiBjcmNfb3V0WzldID0JZGluWzddIF4gY3JjX2luWzFdIF4gY3JjX2luWzE1XTsKK2Fzc2lnbiBjcmNfb3V0WzEwXSA9CWNyY19pblsyXTsKK2Fzc2lnbiBjcmNfb3V0WzExXSA9CWNyY19pblszXTsKK2Fzc2lnbiBjcmNfb3V0WzEyXSA9CWNyY19pbls0XTsKK2Fzc2lnbiBjcmNfb3V0WzEzXSA9CWNyY19pbls1XTsKK2Fzc2lnbiBjcmNfb3V0WzE0XSA9CWNyY19pbls2XTsKK2Fzc2lnbiBjcmNfb3V0WzE1XSA9CWRpbls3XSBeIGRpbls2XSBeIGRpbls1XSBeIGRpbls0XSBeIGRpblszXSBeIGRpblsyXSBeCisJCQlkaW5bMV0gXiBkaW5bMF0gXiBjcmNfaW5bN10gXiBjcmNfaW5bOF0gXiBjcmNfaW5bOV0gXgorCQkJY3JjX2luWzEwXSBeIGNyY19pblsxMV0gXiBjcmNfaW5bMTJdIF4gY3JjX2luWzEzXSBeCisJCQljcmNfaW5bMTRdIF4gY3JjX2luWzE1XTsKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jcmM1LnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjNS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhZWMwZDIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjNS52CkBAIC0wLDAgKzEsODkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVU0IgQ1JDNSBNb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfY3JjNS52LHYgMS4xLjEuMSAyMDAyLTA5LTE5IDEyOjA3OjA1IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMTkgMTI6MDc6MDUgJAorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIENSQzUKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSB1c2IxZF9jcmM1KGNyY19pbiwgZGluLCBjcmNfb3V0KTsKK2lucHV0CVs0OjBdCWNyY19pbjsKK2lucHV0CVsxMDowXQlkaW47CitvdXRwdXQJWzQ6MF0JY3JjX291dDsKKworYXNzaWduIGNyY19vdXRbMF0gPQlkaW5bMTBdIF4gZGluWzldIF4gZGluWzZdIF4gZGluWzVdIF4gZGluWzNdIF4KKwkJCWRpblswXSBeIGNyY19pblswXSBeIGNyY19pblszXSBeIGNyY19pbls0XTsKKworYXNzaWduIGNyY19vdXRbMV0gPQlkaW5bMTBdIF4gZGluWzddIF4gZGluWzZdIF4gZGluWzRdIF4gZGluWzFdIF4KKwkJCWNyY19pblswXSBeIGNyY19pblsxXSBeIGNyY19pbls0XTsKKworYXNzaWduIGNyY19vdXRbMl0gPQlkaW5bMTBdIF4gZGluWzldIF4gZGluWzhdIF4gZGluWzddIF4gZGluWzZdIF4KKwkJCWRpblszXSBeIGRpblsyXSBeIGRpblswXSBeIGNyY19pblswXSBeIGNyY19pblsxXSBeCisJCQljcmNfaW5bMl0gXiBjcmNfaW5bM10gXiBjcmNfaW5bNF07CisKK2Fzc2lnbiBjcmNfb3V0WzNdID0JZGluWzEwXSBeIGRpbls5XSBeIGRpbls4XSBeIGRpbls3XSBeIGRpbls0XSBeIGRpblszXSBeCisJCQlkaW5bMV0gXiBjcmNfaW5bMV0gXiBjcmNfaW5bMl0gXiBjcmNfaW5bM10gXiBjcmNfaW5bNF07CisKK2Fzc2lnbiBjcmNfb3V0WzRdID0JZGluWzEwXSBeIGRpbls5XSBeIGRpbls4XSBeIGRpbls1XSBeIGRpbls0XSBeIGRpblsyXSBeCisJCQljcmNfaW5bMl0gXiBjcmNfaW5bM10gXiBjcmNfaW5bNF07CisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3RybC52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2N0cmwudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjFhNjZjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2N0cmwudgpAQCAtMCwwICsxLDg0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFBvcnRlZCB0byBVU0IyVUFSVCBwcm9qZWN0CisqICBBdXRob3I6ICBEaW5lc2ggQW5uYXl5YQorKiAgICAgICAgICAgRW1haWw6LSBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcKKyoKKyogICAgIERhdGU6IDR0aCBGZWIgMjAxMworKiAgICAgQ2hhbmdlczoKKyogICAgIEEuIFdhcm5pbmcgQ2xlYW4gVXAKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgSW50ZXJuYWwgU2V0dXAgRW5naW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX2N0cmwudix2IDEuMiAyMDAyLTA5LTI1IDA2OjA2OjQ5IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMjUgMDY6MDY6NDkgJAorLy8gICRSZXZpc2lvbjogMS4yICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xOSAxMjowNzowOSAgcnVkaQorLy8gICAgICAgICAgICAgICBJbml0aWFsIENoZWNraW4KKy8vCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX2N0cmwoCWNsaywgcnN0LAorCisJCQlyb21fYWRyLCByb21fZGF0YSwKKworCQkJY3RybF9zZXR1cCwgY3RybF9pbiwgY3RybF9vdXQsCisKKwkJCXJ4X2N0cmxfZGF0YSwgcnhfY3RybF9kdmFsaWQscnhfY3RybF9kZG9uZSwKKworCQkJZXAwX2RpbiwgZXAwX2RvdXQsIGVwMF9yZSwgZXAwX3dlLCBlcDBfc3RhdCwKKwkJCWVwMF9zaXplLAorCisJCQlzZW5kX3N0YWxsLCBmcmFtZV9ubywKKwkJCWZ1bmN0X2FkciwgY29uZmlndXJlZCwgaGFsdCwKKworCQkJdl9zZXRfaW50LCB2X3NldF9mZWF0dXJlLCB3VmFsdWUsIHdJbmRleCwgdmVuZG9yX2RhdGEsCisKKwkgICAgICAgLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisJCXJlZ19hZGRyLAorCQlyZWdfcmR3cm4sCisJCXJlZ19yZXEsCisJCXJlZ193ZGF0YSwKKwkJcmVnX3JkYXRhLAorCQlyZWdfYWNrCisKKworCQkpOworCitpbnB1dAkJY2xrLCByc3Q7CisKK291dHB1dAlbNjowXQlyb21fYWRyOworaW5wdXQJWzc6MF0Jcm9tX2RhdGE7CisKK2lucHV0CQljdHJsX3NldHVwOworaW5wdXQJCWN0cmxfaW47CitpbnB1dAkJY3RybF9vdXQ7CisKKworaW5wdXQgWzc6MF0gICAgIHJ4X2N0cmxfZGF0YTsgCitpbnB1dCAgICAgICAgICAgcnhfY3RybF9kdmFsaWQ7CitpbnB1dCAgICAgICAgICAgcnhfY3RybF9kZG9uZTsKKworaW5wdXQJWzc6MF0JZXAwX2RpbjsKK291dHB1dAlbNzowXQllcDBfZG91dDsKK291dHB1dAkJZXAwX3JlLCBlcDBfd2U7CitpbnB1dAlbMzowXQllcDBfc3RhdDsKK291dHB1dAlbNzowXQllcDBfc2l6ZTsKKworb3V0cHV0CQlzZW5kX3N0YWxsOworaW5wdXQJWzEwOjBdCWZyYW1lX25vOworb3V0cHV0CVs2OjBdCWZ1bmN0X2FkcjsKK291dHB1dAkJY29uZmlndXJlZCwgaGFsdDsKKworb3V0cHV0CQl2X3NldF9pbnQ7CitvdXRwdXQJCXZfc2V0X2ZlYXR1cmU7CitvdXRwdXQJWzE1OjBdCXdWYWx1ZTsKK291dHB1dAlbMTU6MF0Jd0luZGV4OworaW5wdXQJWzE1OjBdCXZlbmRvcl9kYXRhOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciBJbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291dHB1dCBbMzE6MF0gICByZWdfYWRkcjsgICAvLyBSZWdpc3RlciBBZGRyZXNzCitvdXRwdXQJCXJlZ19yZHdybjsgIC8vIDAgLT4gd3JpdGUsIDEtPiByZWFkCitvdXRwdXQJCXJlZ19yZXE7ICAgIC8vICBSZWdpc3RlciBSZXEKK291dHB1dCBbMzE6MF0JcmVnX3dkYXRhOyAgLy8gUmVnaXN0ZXIgd3JpdGUgZGF0YQoraW5wdXQgIFszMTowXQlyZWdfcmRhdGE7ICAvLyBSZWdpc3RlciBSZWFkIERhdGEKK2lucHV0CQlyZWdfYWNrOyAgICAvLyBSZWdpc3RlciBBY2sKKworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCitwYXJhbWV0ZXIJSURMRQkJCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzAwMDBfMDAwMSwKKwkJR0VUX0hEUgkJCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzAwMDBfMDAxMCwKKwkJR0VUX1NUQVRVU19TCQk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8wMDAwXzAxMDAsCisJCUNMRUFSX0ZFQVRVUkVfUwkJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMDAwMF8xMDAwLAorCQlTRVRfRkVBVFVSRV9TCQk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8wMDAxXzAwMDAsCisJCVNFVF9BRERSRVNTX1MJCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzAwMTBfMDAwMCwKKwkJR0VUX0RFU0NSSVBUT1JfUwk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8wMTAwXzAwMDAsCisJCVNFVF9ERVNDUklQVE9SX1MJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMTAwMF8wMDAwLAorCQlHRVRfQ09ORklHX1MJCT0JMjAnYjAwMDBfMDAwMF8wMDAxXzAwMDBfMDAwMCwKKwkJU0VUX0NPTkZJR19TCQk9CTIwJ2IwMDAwXzAwMDBfMDAxMF8wMDAwXzAwMDAsCisJCUdFVF9JTlRFUkZBQ0VfUwkJPQkyMCdiMDAwMF8wMDAwXzAxMDBfMDAwMF8wMDAwLAorCQlTRVRfSU5URVJGQUNFX1MJCT0JMjAnYjAwMDBfMDAwMF8xMDAwXzAwMDBfMDAwMCwKKwkJU1lOQ0hfRlJBTUVfUwkJPQkyMCdiMDAwMF8wMDAxXzAwMDBfMDAwMF8wMDAwLAorCQlXQUlUX0lOX0RBVEEJCT0JMjAnYjAwMDBfMDAxMF8wMDAwXzAwMDBfMDAwMCwKKwkJU1RBVFVTX0lOCQk9CTIwJ2IwMDAwXzAxMDBfMDAwMF8wMDAwXzAwMDAsCisJCVNUQVRVU19PVVQJCT0JMjAnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMCwKKwkJVl9TRVRfSU5UX1MJCT0JMjAnYjAwMDFfMDAwMF8wMDAwXzAwMDBfMDAwMCwKKwkJVl9HRVRfU1RBVFVTX1MJCT0JMjAnYjAwMTBfMDAwMF8wMDAwXzAwMDBfMDAwMCwKKwkJVl9HRVRfUkVHX1JEQVRBX1MJPQkyMCdiMDEwMF8wMDAwXzAwMDBfMDAwMF8wMDAwLAorCQlWX1dBSVRfUkRBVEFfRE9ORV9TICAgICA9CTIwJ2IxMDAwXzAwMDBfMDAwMF8wMDAwXzAwMDA7CisKKword2lyZQlbNzowXQlibVJlcVR5cGUsIGJSZXF1ZXN0Oword2lyZQlbMTU6MF0Jd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGg7Cit3aXJlCQlibV9yZXFfZGlyOword2lyZQlbMTowXQlibV9yZXFfdHlwZTsKK3dpcmUJWzQ6MF0JYm1fcmVxX3JlY3A7CisKK3JlZwkJZ2V0X3N0YXR1cywgY2xlYXJfZmVhdHVyZSwgc2V0X2ZlYXR1cmUsIHNldF9hZGRyZXNzOworcmVnCQlnZXRfZGVzY3JpcHRvciwgc2V0X2Rlc2NyaXB0b3IsIGdldF9jb25maWcsIHNldF9jb25maWc7CityZWcJCWdldF9pbnRlcmZhY2UsIHNldF9pbnRlcmZhY2UsIHN5bmNoX2ZyYW1lOworcmVnCQloZHJfZG9uZV9yLCBjb25maWdfZXJyOworcmVnCQl2X3NldF9pbnQsIHZfc2V0X2ZlYXR1cmUsIHZfZ2V0X3N0YXR1czsKKworcmVnICAgICAgICAgICAgIHZfc2V0X3JlZ193YWRkcjsgLy8gU2V0IHRoZSBSZWcgQnVzIEFkZHJlc3MKK3JlZyAgICAgICAgICAgICB2X3NldF9yZWdfcmFkZHI7IC8vIFNldCB0aGUgUmVnIEJ1cyBBZGRyZXNzCisKK3dpcmUJCWZpZm9fcmUxLCBmaWZvX2Z1bGwsIGZpZm9fZW1wdHk7CityZWcJCWZpZm9fd2VfZDsKK3JlZwlbNTowXQlkYXRhX3NlbDsKK3JlZwkJZXAwX3dlOworcmVnCVs3OjBdCWVwMF9kb3V0OworcmVnCVs3OjBdCWVwMF9zaXplOworcmVnCQlzZW5kX3N0YWxsOworcmVnCVsxOTowXQlzdGF0ZSwgbmV4dF9zdGF0ZTsKK3JlZwkJZ2V0X2hkcjsKK3JlZwlbNzowXQlsZTsKK3dpcmUJCWhkcl9kb25lOworcmVnCQlhZHY7CityZWcJWzc6MF0JaGRyMCwgaGRyMSwgaGRyMiwgaGRyMywgaGRyNCwgaGRyNSwgaGRyNiwgaGRyNzsKK3JlZwlbNjowXQlmdW5jdF9hZHI7CityZWcJCXNldF9hZHJfcGVuZGluZzsKK3JlZwlbNjowXQlmdW5jdF9hZHJfdG1wOworCityZWcJCWluX3NpemVfMDsKK3JlZwkJaW5fc2l6ZV8xOworcmVnCQlpbl9zaXplXzI7CityZWcJCWluX3NpemVfNDsKK3dpcmUJCWhpZ2hfc2VsOworcmVnCQl3cml0ZV9kb25lOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVyIEludGVyZmFjZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnICAgWzMxOjBdICAgIHJlZ19hZGRyOworcmVnICAgWzMxOjBdICAgIHJlZ193ZGF0YTsKK3JlZyAgIFszMTowXSAgICByZWdfcmRhdGFfcjsKK3JlZyAgICAgICAgICAgICByZWdfcmVxOworcmVnICAgICAgICAgICAgIHJlZ19yZHdybjsgLy8gMCAtIHdyaXRlLCAxIC0+IHJlYWQKK3JlZyAgICAgICAgICAgICByZWdfd3BoYXNlOyAvLyByZWdpc3RlciB3cml0ZSBwaGFzZQorcmVnICAgICAgICAgICAgIHJlZ19ycGhhc2U7IC8vIHJlZ2lzdGVyIHJlYWQgcGhhc2UKK3JlZyBbMzowXSAgICAgICB0eF9iY250OyAvLyB0cmFuc21pdCBieXRlIGNvdW50CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRklGTyBpbnRlcmZhY2UKKy8vCisKK2Fzc2lnbiBlcDBfcmUgPSBmaWZvX3JlMTsKK2Fzc2lnbiBmaWZvX2VtcHR5ID0gZXAwX3N0YXRbMV07Cithc3NpZ24gZmlmb19mdWxsID0gZXAwX3N0YXRbMl07CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBDdXJyZW50IFN0YXRlcworLy8KK3JlZwlhZGRyZXNzZWQ7CityZWcJY29uZmlndXJlZDsKK3JlZwloYWx0Oword2lyZQljbHJfaGFsdDsKK3dpcmUJc2V0X2hhbHQ9MDsJLy8gRklYX01FCisKKy8vIEZvciB0aGlzIGltcGxlbWVudGF0aW9uIHdlIGRvIG5vdCBpbXBsZW1lbnQgSEFMVCBmb3IgdGhlCisvLyBkZXZpY2Ugbm9yIGZvciBhbnkgb2YgdGhlIGVuZHBvaW50cy4gVGhpcyBpcyB1c2VsZXNzIGZvcgorLy8gdGhpcyBkZXZpY2UsIGJ1dCBjYW4gYmUgYWRkZWQgaGVyZSBsYXRlciAuLi4KKy8vIEZZSSwgd2UgcmVwb3J0IGRldmljZS9lbmRwb2ludCBlcnJvcnMgdmlhIGludGVycnVwdHMsCisvLyBpbnN0ZWFkIG9mIGhhbHRpbmcgdGhlIGVudGlyZSBvciBwYXJ0IG9mIHRoZSBkZXZpY2UsIG11Y2gKKy8vIG5pY2VyIGZvciBub24tY3JpdGljYWwgZXJyb3JzLgorCithc3NpZ24gY2xyX2hhbHQgPSBjdHJsX3NldHVwOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQlhZGRyZXNzZWQgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoc2V0X2FkZHJlc3MpCWFkZHJlc3NlZCA8PSAjMSAxJ2IxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQljb25maWd1cmVkIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHNldF9jb25maWcpCWNvbmZpZ3VyZWQgPD0gIzEgMSdiMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJaGFsdCA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihjbHJfaGFsdCkJaGFsdCA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihzZXRfaGFsdCkJaGFsdCA8PSAjMSAxJ2IxOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRGVzY3JpcHRvciBST00KKy8vCityZWcJWzY6MF0Jcm9tX2FkcjsKK3JlZwkJcm9tX3NlbCwgcm9tX3NlbF9yOword2lyZQkJcm9tX2RvbmU7CityZWcJWzY6MF0Jcm9tX3NpemU7CityZWcJCWZpZm9fd2Vfcm9tX3I7CityZWcJCWZpZm9fd2Vfcm9tX3IyOword2lyZQkJZmlmb193ZV9yb207CityZWcJWzc6MF0Jcm9tX3N0YXJ0X2Q7CityZWcJWzY6MF0Jcm9tX3NpemVfZGQ7Cit3aXJlCVs2OjBdCXJvbV9zaXplX2Q7CisKK2Fsd2F5cyBAKHdWYWx1ZSkKKwljYXNlKHdWYWx1ZVsxMTo4XSkJCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMToJcm9tX3N0YXJ0X2QgPSBgUk9NX1NUQVJUMDsKKwkgICA0J2gyOglyb21fc3RhcnRfZCA9IGBST01fU1RBUlQxOworCSAgIDQnaDM6CisJCWNhc2Uod1ZhbHVlWzM6MF0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCSAgIDQnaDA6CXJvbV9zdGFydF9kID0gYFJPTV9TVEFSVDJBOworCQkgICA0J2gxOglyb21fc3RhcnRfZCA9IGBST01fU1RBUlQyQjsKKwkJICAgNCdoMjoJcm9tX3N0YXJ0X2QgPSBgUk9NX1NUQVJUMkM7CisJCSAgIDQnaDM6CXJvbV9zdGFydF9kID0gYFJPTV9TVEFSVDJEOworCQkgICBkZWZhdWx0Oglyb21fc3RhcnRfZCA9IGBST01fU1RBUlQyQTsKKwkJZW5kY2FzZQorCSAgIGRlZmF1bHQ6CXJvbV9zdGFydF9kID0gNydoMDA7CisJZW5kY2FzZQorCithbHdheXMgQCh3VmFsdWUpCisJY2FzZSh3VmFsdWVbMTE6OF0pCQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDE6CXJvbV9zaXplX2RkID0gYFJPTV9TSVpFMDsKKwkgICA0J2gyOglyb21fc2l6ZV9kZCA9IGBST01fU0laRTE7CisJICAgNCdoMzoKKwkJY2FzZSh3VmFsdWVbMzowXSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJICAgNCdoMDoJcm9tX3NpemVfZGQgPSBgUk9NX1NJWkUyQTsKKwkJICAgNCdoMToJcm9tX3NpemVfZGQgPSBgUk9NX1NJWkUyQjsKKwkJICAgNCdoMjoJcm9tX3NpemVfZGQgPSBgUk9NX1NJWkUyQzsKKwkJICAgNCdoMzoJcm9tX3NpemVfZGQgPSBgUk9NX1NJWkUyRDsKKwkJICAgZGVmYXVsdDoJcm9tX3NpemVfZGQgPSBgUk9NX1NJWkUyQTsKKwkJZW5kY2FzZQorCSAgIGRlZmF1bHQ6CXJvbV9zaXplX2RkID0gNydoMDE7CisJZW5kY2FzZQorCithc3NpZ24gcm9tX3NpemVfZCA9IChyb21fc2l6ZV9kZCA+IHdMZW5ndGhbNjowXSkgPyB3TGVuZ3RoWzY6MF0gOiByb21fc2l6ZV9kZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcm9tX3NlbF9yIDw9ICMxIHJvbV9zZWw7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCQkJcm9tX2FkciA8PSAjMSA3J2gwOworCWVsc2UKKwlpZihyb21fc2VsICYgIXJvbV9zZWxfcikJcm9tX2FkciA8PSAjMSByb21fc3RhcnRfZDsKKwllbHNlCisJaWYocm9tX3NlbCAmICFmaWZvX2Z1bGwpCXJvbV9hZHIgPD0gIzEgcm9tX2FkciArIDcnaDE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCQkJcm9tX3NpemUgPD0gIzEgNydoMDsKKwllbHNlCisJaWYocm9tX3NlbCAmICFyb21fc2VsX3IpCXJvbV9zaXplIDw9ICMxIHJvbV9zaXplX2Q7CisJZWxzZQorCWlmKHJvbV9zZWwgJiAhZmlmb19mdWxsKQlyb21fc2l6ZSA8PSAjMSByb21fc2l6ZSAtIDcnaDAxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlmaWZvX3dlX3JvbV9yIDw9ICMxIHJvbV9zZWw7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWZpZm9fd2Vfcm9tX3IyIDw9ICMxIGZpZm9fd2Vfcm9tX3I7CisKK2Fzc2lnbiBmaWZvX3dlX3JvbSA9IHJvbV9zZWwgJiBmaWZvX3dlX3JvbV9yMjsKKworYXNzaWduIHJvbV9kb25lID0gKHJvbV9zaXplID09IDcnaDApICYgIShyb21fc2VsICYgIXJvbV9zZWxfcik7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZXQgSGVhZGVyCisvLworCithc3NpZ24gZmlmb19yZTEgPSAoZ2V0X2hkciB8IHJlZ193cGhhc2UpICYgIWZpZm9fZW1wdHk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWFkdiA8PSAjMSBnZXRfaGRyICYgIWZpZm9fZW1wdHkgJiAhYWR2OworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQlsZSA8PSAjMSA4J2gwOworCWVsc2UKKwlpZighZ2V0X2hkcikJbGUgPD0gIzEgOCdoMDsKKwllbHNlCisJaWYoISh8bGUpKQlsZSA8PSAjMSA4J2gxOworCWVsc2UKKwlpZihmaWZvX3JlMSAmJiBnZXRfaGRyKQlsZSA8PSAjMSB7bGVbNjowXSwgMSdiMH07CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzBdKQloZHIwIDw9ICMxIGVwMF9kaW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzFdKQloZHIxIDw9ICMxIGVwMF9kaW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzJdKQloZHIyIDw9ICMxIGVwMF9kaW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzNdKQloZHIzIDw9ICMxIGVwMF9kaW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzRdKQloZHI0IDw9ICMxIGVwMF9kaW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzVdKQloZHI1IDw9ICMxIGVwMF9kaW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzZdKQloZHI2IDw9ICMxIGVwMF9kaW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxlWzddKQloZHI3IDw9ICMxIGVwMF9kaW47CisKK2Fzc2lnbiBoZHJfZG9uZSA9IGxlWzddICYgZmlmb19yZTEgJiBnZXRfaGRyOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gU2VuZCBEYXRhIHRvIEhvc3QKKy8vCitwYXJhbWV0ZXIJWkVST19EQVRBCT0JNidiMDAwMDAxLAorCQlaRVJPX09ORV9EQVRBCT0JNidiMDAwMDEwLAorCQlDT05GSUdfREFUQQk9CTYnYjAwMDEwMCwKKwkJU1lOQ19GUkFNRV9EQVRBCT0JNidiMDAxMDAwLAorCQlWRU5EX0RBVEEJPQk2J2IwMTAwMDAsCisJCVJFR19SREFUQQk9CTYnYjEwMDAwMDsKKworYXNzaWduIGhpZ2hfc2VsID0gd3JpdGVfZG9uZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY2FzZShkYXRhX3NlbCkJCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgWkVST19EQVRBOgkJZXAwX2RvdXQgPD0gIzEgcm9tX3NlbCA/IHJvbV9kYXRhIDogOCdoMDsKKwkgICBaRVJPX09ORV9EQVRBOgllcDBfZG91dCA8PSAjMSBoaWdoX3NlbCA/IDgnaDEgOiA4J2gwOworCSAgIENPTkZJR19EQVRBOgkJZXAwX2RvdXQgPD0gIzEgezcnaDAsIGNvbmZpZ3VyZWR9OwkvLyByZXR1cm4gY29uZmlndXJhdGlvbgorCSAgIFNZTkNfRlJBTUVfREFUQToJZXAwX2RvdXQgPD0gIzEgaGlnaF9zZWwgPyB7NSdoMCwgZnJhbWVfbm9bMTA6OF19IDogZnJhbWVfbm9bNzowXTsKKwkgICBWRU5EX0RBVEE6CQllcDBfZG91dCA8PSAjMSBoaWdoX3NlbCA/IHZlbmRvcl9kYXRhWzE1OjhdIDogdmVuZG9yX2RhdGFbNzowXTsKKwkgICBSRUdfUkRBVEE6CQllcDBfZG91dCA8PSAjMSAodHhfYmNudD09MCkgPyByZWdfcmRhdGFfclszMToyNF0gOiAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eF9iY250PT0xKSA/IHJlZ19yZGF0YV9yWzIzOjE2XSA6CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHhfYmNudD09MikgPyByZWdfcmRhdGFfclsxNTo4XSA6IHJlZ19yZGF0YV9yWzc6MF07CisJZW5kY2FzZQorCithbHdheXMgQChwb3NlZGdlIGNsaykKKwllcDBfd2UgPD0gIzEgKGZpZm9fd2VfZCAmICF3cml0ZV9kb25lKSB8IGZpZm9fd2Vfcm9tOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihpbl9zaXplXzApCSAgICAgICAgZXAwX3NpemUgPD0gIzEgOCdoMDsKKwllbHNlIGlmKGluX3NpemVfMSkJZXAwX3NpemUgPD0gIzEgOCdoMTsKKwllbHNlIGlmKGluX3NpemVfMikJZXAwX3NpemUgPD0gIzEgOCdoMjsKKwllbHNlIGlmKGluX3NpemVfNCkJZXAwX3NpemUgPD0gIzEgOCdoNDsKKwllbHNlCisJaWYocm9tX3NlbCkJZXAwX3NpemUgPD0gIzEgezEnYjAsIHJvbV9zaXplX2R9OworCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgaWYoIXJzdCkgYmVnaW4KKyAgICAgICB0eF9iY250ICAgIDw9IDA7CisgICAgICAgd3JpdGVfZG9uZSA8PSAwOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgaWYoc3RhdGUgPT0gSURMRSkgIGJlZ2luCisJICB0eF9iY250IDw9IDA7CisJICB3cml0ZV9kb25lIDw9IDA7IAorICAgICAgZW5kIGVsc2UgaWYoKGVwMF9zaXplID09ICh0eF9iY250KzEpKSAgJiYgKCFmaWZvX2Z1bGwgJiYgZmlmb193ZV9kKSkKKwkgIHdyaXRlX2RvbmUgPD0gMTsKKyAgICAgIGVsc2UgaWYoIWZpZm9fZnVsbCAmJiBmaWZvX3dlX2QgKSAKKwkgIHR4X2JjbnQgPD0gdHhfYmNudCsxOworICAgICAgZWxzZSAKKwkgIHdyaXRlX2RvbmUgPD0gMDsKKyAgIGVuZAorZW5kCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEZWNvZGUgSGVhZGVyCisvLworCisvLyBWYWxpZCBiUmVxdWVzdCBDb2RlcworcGFyYW1ldGVyCUdFVF9TVEFUVVMJPQk4J2gwMCwKKwkJQ0xFQVJfRkVBVFVSRQk9CTgnaDAxLAorCQlTRVRfRkVBVFVSRQk9CTgnaDAzLAorCQlTRVRfQUREUkVTUwk9CTgnaDA1LAorCQlHRVRfREVTQ1JJUFRPUgk9CTgnaDA2LAorCQlTRVRfREVTQ1JJUFRPUgk9CTgnaDA3LAorCQlHRVRfQ09ORklHCT0JOCdoMDgsCisJCVNFVF9DT05GSUcJPQk4J2gwOSwKKwkJR0VUX0lOVEVSRkFDRQk9CTgnaDBhLAorCQlTRVRfSU5URVJGQUNFCT0JOCdoMGIsCisJCVNZTkNIX0ZSQU1FCT0JOCdoMGMsCisJCUNVU1RPTV9SRUdfV0FERFI9CTgnaDEwLCAvLyBBZGRlZCBieSBEaW5lc2gtQSwgMTl0aCBGZWIgMjAxMworCQlDVVNUT01fUkVHX1JBRERSPQk4J2gxMTsgLy8gQWRkZWQgYnkgRGluZXNoLUEsIDE5dGggRmViIDIwMTMKKworcGFyYW1ldGVyCVZfU0VUX0lOVAk9CTgnaDBmOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQXV0aG9yOiBEaW5lc2gtQTogMTh0aCBGZWIgMjAxMyAgCisqICBTZXR1cCBCeXRlIERldGFpbHMKK0J5dGUJRmllbGQJRGVzY3JpcHRpb24KKzAJYm1SZXF1ZXN0IFR5cGUJIAorICAgICAgICAgICBCaXQgNzogUmVxdWVzdCBkaXJlY3Rpb24gKDA9SG9zdCB0byBkZXZpY2UgliBPdXQsIDE9RGV2aWNlIHRvIGhvc3QgliBJbikuCisgICAgICAgICAgIEJpdHMgNS02OiBSZXF1ZXN0IHR5cGUgKDA9c3RhbmRhcmQsIDE9Y2xhc3MsIDI9dmVuZG9yLCAzPXJlc2VydmVkKS4KKyAgICAgICAgICAgQml0cyAwLTQ6IFJlY2lwaWVudCAoMD1kZXZpY2UsIDE9aW50ZXJmYWNlLCAyPWVuZHBvaW50LDM9b3RoZXIpLgorMQliUmVxdWVzdAkgVGhlIGFjdHVhbCByZXF1ZXN0IChzZWUgdGhlIFN0YW5kYXJkIERldmljZSBSZXF1ZXN0IENvZGVzIHRhYmxlIFs5LjIuMS41XS4KKzIJd1ZhbHVlTAkgQSB3b3JkLXNpemUgdmFsdWUgdGhhdCB2YXJpZXMgYWNjb3JkaW5nIHRvIHRoZSByZXF1ZXN0LiBGb3IgZXhhbXBsZSwgCisgICAgICAgIGluIHRoZSBDTEVBUl9GRUFUVVJFIHJlcXVlc3QgdGhlIHZhbHVlIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBmZWF0dXJlLCAKKwlpbiB0aGUgR0VUX0RFU0NSSVBUT1IgcmVxdWVzdCB0aGUgdmFsdWUgaW5kaWNhdGVzIHRoZSBkZXNjcmlwdG9yIHR5cGUgYW5kIGluIHRoZSAKKwlTRVRfQUREUkVTUyByZXF1ZXN0IHRoZSB2YWx1ZSBjb250YWlucyB0aGUgZGV2aWNlIGFkZHJlc3MuCiszCXdWYWx1ZUgJVGhlIHVwcGVyIGJ5dGUgb2YgdGhlIFZhbHVlIHdvcmQuCis0CXdJbmRleEwJIEEgd29yZC1zaXplIHZhbHVlIHRoYXQgdmFyaWVzIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdC4gCisgICAgICAgIFRoZSBpbmRleCBpcyBnZW5lcmFsbHkgdXNlZCB0byBzcGVjaWZ5IGFuIGVuZHBvaW50IG9yIGFuIGludGVyZmFjZS4KKzUJd0luZGV4SAlUaGUgdXBwZXIgYnl0ZSBvZiB0aGUgSW5kZXggd29yZC4KKzYJd0xlbmd0aEwgIEEgd29yZC1zaXplIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQgaWYgdGhlcmUgaXMgYSBkYXRhIHN0YWdlLgorNwl3TGVuZ3RoSCAgVGhlIHVwcGVyIGJ5dGUgb2YgdGhlIExlbmd0aCB3b3JkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKgorYlJlcXVlc3QJICAgICAgICAgICAgICAgVmFsdWUKK0dFVF9TVEFUVVMJICAgICAgICAgICAgICAgMAorQ0xFQVJfRkVBVFVSRQkgICAgICAgICAgICAgICAxCitSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQkgICAgICAgMgorU0VUX0ZFQVRVUkUJICAgICAgICAgICAgICAgMworUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UJICAgICAgIDQKK1NFVF9BRERSRVNTCSAgICAgICAgICAgICAgIDUKK0dFVF9ERVNDUklQVE9SCSAgICAgICAgICAgICAgIDYKK1NFVF9ERVNDUklQVE9SCSAgICAgICAgICAgICAgIDcKK0dFVF9DT05GSUdVUkFUSU9OCSAgICAgICA4CitTRVRfQ09ORklHVVJBVElPTgkgICAgICAgOQorR0VUX0lOVEVSRkFDRQkgICAgICAgICAgICAgICAxMAorU0VUX0lOVEVSRkFDRQkgICAgICAgICAgICAgICAxMQorU1lOQ0hfRlJBTUUJICAgICAgICAgICAgICAgMTIKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYXNzaWduIGJtUmVxVHlwZSA9IGhkcjA7Cithc3NpZ24gYm1fcmVxX2RpciA9IGJtUmVxVHlwZVs3XTsJLy8gMC1Ib3N0IHRvIGRldmljZTsgMS1kZXZpY2UgdG8gaG9zdCAKK2Fzc2lnbiBibV9yZXFfdHlwZSA9IGJtUmVxVHlwZVs2OjVdOwkvLyAwLXN0YW5kYXJkOyAxLWNsYXNzOyAyLXZlbmRvcjsgMy1SRVNFUlZFRAorYXNzaWduIGJtX3JlcV9yZWNwID0gYm1SZXFUeXBlWzQ6MF07CS8vIDAtZGV2aWNlOyAxLWludGVyZmFjZTsgMi1lbmRwb2ludDsgMy1vdGhlcgorCQkJCQkvLyA0Li4zMS1yZXNlcnZlZAorYXNzaWduIGJSZXF1ZXN0ID0gIGhkcjE7Cithc3NpZ24gd1ZhbHVlICAgPSB7aGRyMywgaGRyMn07Cithc3NpZ24gd0luZGV4ICAgPSB7aGRyNSwgaGRyNH07Cithc3NpZ24gd0xlbmd0aCAgPSB7aGRyNywgaGRyNn07CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWhkcl9kb25lX3IgPD0gIzEgaGRyX2RvbmU7CisKKy8vIFN0YW5kYXJkIGNvbW1hbmRzIHRoYXQgTVVTVCBzdXBwb3J0CithbHdheXMgQChwb3NlZGdlIGNsaykKKwlnZXRfc3RhdHVzIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IEdFVF9TVEFUVVMpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY2xlYXJfZmVhdHVyZSA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBDTEVBUl9GRUFUVVJFKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNldF9mZWF0dXJlIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFNFVF9GRUFUVVJFKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNldF9hZGRyZXNzIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFNFVF9BRERSRVNTKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWdldF9kZXNjcmlwdG9yIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IEdFVF9ERVNDUklQVE9SKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNldF9kZXNjcmlwdG9yIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFNFVF9ERVNDUklQVE9SKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWdldF9jb25maWcgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gR0VUX0NPTkZJRykgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZXRfY29uZmlnIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFNFVF9DT05GSUcpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZ2V0X2ludGVyZmFjZSA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBHRVRfSU5URVJGQUNFKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNldF9pbnRlcmZhY2UgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gU0VUX0lOVEVSRkFDRSkgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzeW5jaF9mcmFtZSA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBTWU5DSF9GUkFNRSkgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl2X3NldF9pbnQgPD0gIzEJCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFZfU0VUX0lOVCkgJiAoYm1fcmVxX3R5cGU9PTInaDIpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl2X3NldF9mZWF0dXJlIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFNFVF9GRUFUVVJFKSAmIChibV9yZXFfdHlwZT09MidoMik7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXZfZ2V0X3N0YXR1cyA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBHRVRfU1RBVFVTKSAmIChibV9yZXFfdHlwZT09MidoMik7CithbHdheXMgQChwb3NlZGdlIGNsaykKKwl2X3NldF9yZWdfd2FkZHIgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gQ1VTVE9NX1JFR19XQUREUikgJiAoYm1fcmVxX3R5cGU9PTInaDIpOworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdl9zZXRfcmVnX3JhZGRyIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IENVU1RPTV9SRUdfUkFERFIpICYgKGJtX3JlcV90eXBlPT0yJ2gyKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYodl9zZXRfcmVnX3dhZGRyIHx8IHZfc2V0X3JlZ19yYWRkcikgcmVnX2FkZHIgIDw9IHtoZHIyLGhkcjMsaGRyNCxoZHI1fTsgCisKK3JlZyBbMTowXSByZWdfYnl0ZV9jbnQ7CithbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgIGlmKCFyc3QpIGJlZ2luCisgICAgICAgcmVnX2J5dGVfY250IDw9IDInYjA7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgaWYodl9zZXRfcmVnX3dhZGRyKSBiZWdpbiAKKwkgIHJlZ193cGhhc2UgICAgICA8PSAxOyAKKwkgIHJlZ19ieXRlX2NudCAgICA8PSAwOworICAgICAgZW5kIGVsc2UgaWYocmVnX2J5dGVfY250ID09IDInYjExICYmIGZpZm9fcmUxKSBiZWdpbgorCSAgcmVnX3dwaGFzZSAgPD0gMDsgCisJICByZWdfYnl0ZV9jbnQgICAgPD0gMDsKKyAgICAgIGVuZCBlbHNlIGlmKHJlZ193cGhhc2UgJiYgZmlmb19yZTEpIGJlZ2luCisJIHJlZ19ieXRlX2NudCA8PSByZWdfYnl0ZV9jbnQrMTsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKKworCithbHdheXMgQChwb3NlZGdlIGNsaykKKyAgICAgIGlmKHJlZ193cGhhc2UgJiYgZmlmb19yZTEpIHJlZ193ZGF0YSAgPD0ge3JlZ193ZGF0YVsyMzowXSxlcDBfZGluWzc6MF19OyAKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisgICAgICBpZihyZWdfcmR3cm4gJiYgcmVnX2FjaykgcmVnX3JkYXRhX3IgIDw9IHtyZWdfcmRhdGF9OyAKKworYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICBpZighcnN0KSBiZWdpbgorICAgICAgcmVnX3JlcSAgPD0gMDsgCisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgaWYoZmlmb19yZTEgJiYgcmVnX3dwaGFzZSAmJiByZWdfYnl0ZV9jbnQ9PSAyJ2IxMSkgcmVnX3JlcSAgPD0gMTsgCisgICAgICBlbHNlIGlmKHZfc2V0X3JlZ19yYWRkcikgICAgICAgICByZWdfcmVxICA8PSAxOyAKKyAgICAgIGVsc2UgcmVnX3JlcSA8PSAwOworICAgZW5kCitlbmQKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYodl9zZXRfcmVnX3JhZGRyKSAgICAgIHJlZ19yZHdybiA8PSAxJ2IxIDsKKwllbHNlIGlmKHZfc2V0X3JlZ193YWRkcikgcmVnX3Jkd3JuIDw9IDEnYjAgOworCisvLyBBIGNvbmZpZyBlcnIgbXVzdCBjYXVzZSB0aGUgZGV2aWNlIHRvIHNlbmQgYSBTVEFMTCBmb3IgYW4gQUNLCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljb25maWdfZXJyIDw9ICMxIGhkcl9kb25lX3IgJiAhKGdldF9zdGF0dXMgfCBjbGVhcl9mZWF0dXJlIHwKKwkJCXNldF9mZWF0dXJlIHwgc2V0X2FkZHJlc3MgfCBnZXRfZGVzY3JpcHRvciB8CisJCQlzZXRfZGVzY3JpcHRvciB8IGdldF9jb25maWcgfCBzZXRfY29uZmlnIHwKKwkJCWdldF9pbnRlcmZhY2UgfCBzZXRfaW50ZXJmYWNlIHwgc3luY2hfZnJhbWUgfAorCQkJdl9zZXRfaW50IHwgdl9zZXRfZmVhdHVyZSB8IHZfZ2V0X3N0YXR1cyB8IHZfc2V0X3JlZ193YWRkciB8IHZfc2V0X3JlZ19yYWRkcik7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNlbmRfc3RhbGwgPD0gIzEgY29uZmlnX2VycjsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFNldCBhZGRyZXNzCisvLworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQkJCQlzZXRfYWRyX3BlbmRpbmcgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoY3RybF9pbiB8IGN0cmxfb3V0IHwgY3RybF9zZXR1cCkJc2V0X2Fkcl9wZW5kaW5nIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHNldF9hZGRyZXNzKQkJCQlzZXRfYWRyX3BlbmRpbmcgPD0gIzEgMSdiMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJCQlmdW5jdF9hZHJfdG1wIDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKHNldF9hZGRyZXNzKQkJCWZ1bmN0X2Fkcl90bXAgPD0gIzEgd1ZhbHVlWzY6MF07CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCQkJZnVuY3RfYWRyIDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKHNldF9hZHJfcGVuZGluZyAmIGN0cmxfaW4pCWZ1bmN0X2FkciA8PSAjMSBmdW5jdF9hZHJfdG1wOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWFpbiBGU00KKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCXN0YXRlIDw9ICMxIElETEU7CisJZWxzZQkJc3RhdGUgPD0gbmV4dF9zdGF0ZTsKKworYWx3YXlzIEAoc3RhdGUgb3IgY3RybF9zZXR1cCBvciBjdHJsX2luIG9yIGN0cmxfb3V0IG9yIGhkcl9kb25lIG9yCisJZmlmb19mdWxsIG9yIHJvbV9kb25lIG9yIHdyaXRlX2RvbmUgb3Igd1ZhbHVlIG9yIGJtX3JlcV9yZWNwIG9yCisJZ2V0X3N0YXR1cyBvciBjbGVhcl9mZWF0dXJlIG9yIHNldF9mZWF0dXJlIG9yIHNldF9hZGRyZXNzIG9yCisJZ2V0X2Rlc2NyaXB0b3Igb3Igc2V0X2Rlc2NyaXB0b3Igb3IgZ2V0X2NvbmZpZyBvciBzZXRfY29uZmlnIG9yCisJZ2V0X2ludGVyZmFjZSBvciBzZXRfaW50ZXJmYWNlIG9yIHN5bmNoX2ZyYW1lIG9yIHZfc2V0X2ludCBvcgorCXZfc2V0X2ZlYXR1cmUgb3Igdl9nZXRfc3RhdHVzIG9yIHZfc2V0X3JlZ193YWRkciBvciB2X3NldF9yZWdfcmFkZHIsIHJlZ19hY2sKKwkpCisgICBiZWdpbgorCW5leHRfc3RhdGUgPSBzdGF0ZTsKKwlnZXRfaGRyICA9IDEnYjA7CisJZGF0YV9zZWwgPSBaRVJPX0RBVEE7CisJZmlmb193ZV9kID0gMSdiMDsKKwlpbl9zaXplXzAgPSAxJ2IwOworCWluX3NpemVfMSA9IDEnYjA7CisJaW5fc2l6ZV8yID0gMSdiMDsKKwlpbl9zaXplXzQgPSAxJ2IwOworCXJvbV9zZWwgPSAxJ2IwOworCisJY2FzZShzdGF0ZSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKworCQkvLyBXYWl0IGZvciBTZXR1cCB0b2tlbgorCSAgIElETEU6CisJCSAgIGJlZ2luCisJCQlpZihjdHJsX3NldHVwKQkJbmV4dF9zdGF0ZSA9IEdFVF9IRFI7CisJCQlpZihnZXRfc3RhdHVzKQkJbmV4dF9zdGF0ZSA9IEdFVF9TVEFUVVNfUzsKKwkJCWlmKGNsZWFyX2ZlYXR1cmUpCW5leHRfc3RhdGUgPSBDTEVBUl9GRUFUVVJFX1M7CisJCQlpZihzZXRfZmVhdHVyZSkJCW5leHRfc3RhdGUgPSBTRVRfRkVBVFVSRV9TOworCQkJaWYoc2V0X2FkZHJlc3MpCQluZXh0X3N0YXRlID0gU0VUX0FERFJFU1NfUzsKKwkJCWlmKGdldF9kZXNjcmlwdG9yKQluZXh0X3N0YXRlID0gR0VUX0RFU0NSSVBUT1JfUzsKKwkJCWlmKHNldF9kZXNjcmlwdG9yKQluZXh0X3N0YXRlID0gU0VUX0RFU0NSSVBUT1JfUzsKKwkJCWlmKGdldF9jb25maWcpCQluZXh0X3N0YXRlID0gR0VUX0NPTkZJR19TOworCQkJaWYoc2V0X2NvbmZpZykJCW5leHRfc3RhdGUgPSBTRVRfQ09ORklHX1M7CisJCQlpZihnZXRfaW50ZXJmYWNlKQluZXh0X3N0YXRlID0gR0VUX0lOVEVSRkFDRV9TOworCQkJaWYoc2V0X2ludGVyZmFjZSkJbmV4dF9zdGF0ZSA9IFNFVF9JTlRFUkZBQ0VfUzsKKwkJCWlmKHN5bmNoX2ZyYW1lKQkJbmV4dF9zdGF0ZSA9IFNZTkNIX0ZSQU1FX1M7CisJCQlpZih2X3NldF9pbnQpCQluZXh0X3N0YXRlID0gVl9TRVRfSU5UX1M7CisJCQlpZih2X3NldF9mZWF0dXJlKQluZXh0X3N0YXRlID0gVl9TRVRfSU5UX1M7CisJCQlpZih2X2dldF9zdGF0dXMpCW5leHRfc3RhdGUgPSBWX0dFVF9TVEFUVVNfUzsKKwkJCWlmKHZfc2V0X3JlZ193YWRkcikJbmV4dF9zdGF0ZSA9IFNUQVRVU19JTjsKKwkJCWlmKHZfc2V0X3JlZ19yYWRkcikJbmV4dF9zdGF0ZSA9IFZfV0FJVF9SREFUQV9ET05FX1M7CisJCSAgIGVuZAorCisJCS8vIFJldHJpZXZlIFNldHVwIEhlYWRlcgorCSAgIEdFVF9IRFI6CisJCSAgIGJlZ2luCisJCQlnZXRfaGRyID0gMSdiMTsKKwkJCWlmKGhkcl9kb25lKQluZXh0X3N0YXRlID0gSURMRTsKKwkJICAgZW5kCisKKworCQkvLyBBY3Rpb25zIGZvciBzdXBwb3J0ZWQgY29tbWFuZHMKKwkgICBHRVRfU1RBVFVTX1M6CisJCSAgIGJlZ2luCisJCQkvLyBSZXR1cm5zIHRvIGhvc3QKKwkJCS8vIDE2J2gwMDAxIGZvciBkZXZpY2UKKwkJCS8vIDE2J2gwMDAwIGZvciBpbnRlcmZhY2UKKwkJCS8vIDE2J2gwMDAwIGZvciBlbmRwb2ludAorCQkJaWYoYm1fcmVxX3JlY3AgPT0gNSdoMDApCWRhdGFfc2VsID0gWkVST19PTkVfREFUQTsKKwkJCWVsc2UJCQkJZGF0YV9zZWwgPSBaRVJPX0RBVEE7CisKKwkJCWluX3NpemVfMiA9IDEnYjE7CisJCQlpZighZmlmb19mdWxsKQorCQkJICAgYmVnaW4KKwkJCQlmaWZvX3dlX2QgPSAxJ2IxOworCQkJCWlmKHdyaXRlX2RvbmUpCW5leHRfc3RhdGUgPSBXQUlUX0lOX0RBVEE7CisJCQkgICBlbmQKKworCQkgICBlbmQKKwkgICBWX0dFVF9TVEFUVVNfUzoKKwkJICAgYmVnaW4KKwkJCWRhdGFfc2VsID0gVkVORF9EQVRBOworCQkJaW5fc2l6ZV8yID0gMSdiMTsKKwkJCWlmKCFmaWZvX2Z1bGwpCisJCQkgICBiZWdpbgorCQkJCWZpZm9fd2VfZCA9IDEnYjE7CisJCQkJaWYod3JpdGVfZG9uZSkJbmV4dF9zdGF0ZSA9IFdBSVRfSU5fREFUQTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCVZfV0FJVF9SREFUQV9ET05FX1M6IGJlZ2luIC8vIFdhaXQgZm9yIFJlZ2lzdGVyIFJlYWQgQWNjZXNzIENvbXBsZXRpb24KKwkJICAgICBpZihyZWdfYWNrKQorCQkJbmV4dF9zdGF0ZSA9IFZfR0VUX1JFR19SREFUQV9TOworCQkgICBlbmQKKworCSAgIFZfR0VUX1JFR19SREFUQV9TOiAvLyBSZWdpc3RlciBBY2Nlc3MgUmVhZCBEYXRhCisJCSAgIGJlZ2luCisJCQlkYXRhX3NlbCA9IFJFR19SREFUQTsKKwkJCWluX3NpemVfNCA9IDEnYjE7CisJCQlpZighZmlmb19mdWxsKQorCQkJICAgYmVnaW4KKwkJCQlmaWZvX3dlX2QgPSAxJ2IxOworCQkJCWlmKHdyaXRlX2RvbmUpCW5leHRfc3RhdGUgPSBXQUlUX0lOX0RBVEE7CisJCQkgICBlbmQKKwkJICAgZW5kCQkgICAKKwkgICBDTEVBUl9GRUFUVVJFX1M6CisJCSAgIGJlZ2luCisJCQkvLyBqdXN0IGlnbm9yZSB0aGlzIGZvciBub3cKKwkJCW5leHRfc3RhdGUgPSBTVEFUVVNfSU47CisJCSAgIGVuZAorCisJICAgU0VUX0ZFQVRVUkVfUzoKKwkJICAgYmVnaW4KKwkJCS8vIGp1c3QgaWdub3JlIHRoaXMgZm9yIG5vdworCQkJbmV4dF9zdGF0ZSA9IFNUQVRVU19JTjsKKwkJICAgZW5kCisKKwkgICBTRVRfQUREUkVTU19TOgorCQkgICBiZWdpbgorCQkJLy8gZG9uZSBlbHNld2hlcmUgLi4uLgorCQkJbmV4dF9zdGF0ZSA9IFNUQVRVU19JTjsKKwkJICAgZW5kCisKKwkgICBHRVRfREVTQ1JJUFRPUl9TOgorCQkgICBiZWdpbgorCQkJaWYoCXdWYWx1ZVsxNTo4XSA9PSA4J2gwMSB8CisJCQkJd1ZhbHVlWzE1OjhdID09IDgnaDAyIHwgCisJCQkJd1ZhbHVlWzE1OjhdID09IDgnaDAzCSkKKwkJCQlyb21fc2VsID0gMSdiMTsKKwkJCWVsc2UKKwkJCQluZXh0X3N0YXRlID0gSURMRTsKKworCQkJaWYocm9tX2RvbmUpCisJCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCSAgIGVuZAorCisJICAgU0VUX0RFU0NSSVBUT1JfUzoKKwkJICAgYmVnaW4KKwkJCS8vIFRoaXMgZG9lc24ndCBkbyBhbnl0aGluZyBzaW5jZSB3ZSBkbyBub3Qgc3VwcG9ydAorCQkJLy8gc2V0dGluZyB0aGUgZGVzY3JpcHRvcgorCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCSAgIGVuZAorCisJICAgR0VUX0NPTkZJR19TOgorCQkgICBiZWdpbgorCQkJLy8gU2VuZCBvbmUgYnl0ZSBiYWNrIHRoYXQgaW5kaWNhdGVzIGN1cnJlbnQgc3RhdHVzCisJCQlpbl9zaXplXzEgPSAxJ2IxOworCQkJZGF0YV9zZWwgPSBDT05GSUdfREFUQTsKKwkJCWlmKCFmaWZvX2Z1bGwpCisJCQkgICBiZWdpbgorCQkJCWZpZm9fd2VfZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IFdBSVRfSU5fREFUQTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCSAgIFNFVF9DT05GSUdfUzoKKwkJICAgYmVnaW4KKwkJCS8vIGRvbmUgZWxzZXdoZXJlIC4uLi4KKwkJCW5leHRfc3RhdGUgPSBTVEFUVVNfSU47CisJCSAgIGVuZAorCisJICAgR0VUX0lOVEVSRkFDRV9TOgorCQkgICBiZWdpbgorCQkJLy8gUmV0dXJuIGludGVyZmFjZSAnMCcKKwkJCWluX3NpemVfMSA9IDEnYjE7CisJCQlpZighZmlmb19mdWxsKQorCQkJICAgYmVnaW4KKwkJCQlmaWZvX3dlX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBXQUlUX0lOX0RBVEE7CisJCQkgICBlbmQKKwkJICAgZW5kCisKKwkgICBTRVRfSU5URVJGQUNFX1M6CisJCSAgIGJlZ2luCisJCQkvLyBqdXN0IGlnbm9yZSB0aGlzIGZvciBub3cKKwkJCW5leHRfc3RhdGUgPSBTVEFUVVNfSU47CisJCSAgIGVuZAorCisJICAgU1lOQ0hfRlJBTUVfUzoKKwkJICAgYmVnaW4KKwkJCS8vIFJldHVybiBGcmFtZSBjdXJyZW50IGZyYW1lIG51bWJlcgorCQkJZGF0YV9zZWwgPSBTWU5DX0ZSQU1FX0RBVEE7CisJCQlpbl9zaXplXzIgPSAxJ2IxOworCQkJaWYoIWZpZm9fZnVsbCkKKwkJCSAgIGJlZ2luCisJCQkJZmlmb193ZV9kID0gMSdiMTsKKwkJCQlpZih3cml0ZV9kb25lKQluZXh0X3N0YXRlID0gV0FJVF9JTl9EQVRBOworCQkJICAgZW5kCisJCSAgIGVuZAorCisJICAgVl9TRVRfSU5UX1M6CisJCSAgIGJlZ2luCisJCQkvLyBkb25lIGVsc2V3aGVyZSAuLi4uCisJCQluZXh0X3N0YXRlID0gU1RBVFVTX0lOOworCQkgICBlbmQKKworCSAgIFdBSVRfSU5fREFUQToKKwkJICAgYmVnaW4KKwkJCWlmKGN0cmxfaW4pCW5leHRfc3RhdGUgPSBTVEFUVVNfT1VUOworCQkgICBlbmQKKworCSAgIFNUQVRVU19JTjoKKwkJICAgYmVnaW4KKwkJCWluX3NpemVfMCA9IDEnYjE7CisJCQlpZihjdHJsX2luKQluZXh0X3N0YXRlID0gSURMRTsKKwkJICAgZW5kCisKKwkgICBTVEFUVVNfT1VUOgorCQkgICBiZWdpbgorCQkJaWYoY3RybF9vdXQpCW5leHRfc3RhdGUgPSBJRExFOworCQkgICBlbmQKKwllbmRjYXNlCisgICBlbmQKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9maWZvMi52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2ZpZm8yLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjMxYWNiNAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9maWZvMi52CkBAIC0wLDAgKzEsMTA0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRmFzdCBGSUZPIDIgZW50cmllcyBkZWVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX2ZpZm8yLnYsdiAxLjEuMS4xIDIwMDItMDktMTkgMTI6MDc6MzEgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0xOSAxMjowNzozMSAkCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vCisvLworLy8KKy8vCisvLworCisKK21vZHVsZSB1c2IxZF9maWZvMihjbGssIHJzdCwgY2xyLCAgZGluLCB3ZSwgZG91dCwgcmUpOworCitpbnB1dAkJY2xrLCByc3Q7CitpbnB1dAkJY2xyOworaW5wdXQgICBbNzowXQlkaW47CitpbnB1dAkJd2U7CitvdXRwdXQgIFs3OjBdCWRvdXQ7CitpbnB1dAkJcmU7CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcworLy8KKworcmVnICAgICBbNzowXQltZW1bMDoxXTsKK3JlZwkJd3A7CityZWcJCXJwOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorICAgICAgICBpZighcnN0KQl3cCA8PSAjMSAxJ2gwOworICAgICAgICBlbHNlCisgICAgICAgIGlmKGNscikJCXdwIDw9ICMxIDEnaDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgaWYod2UpCQl3cCA8PSAjMSB+d3A7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorICAgICAgICBpZighcnN0KQlycCA8PSAjMSAxJ2gwOworICAgICAgICBlbHNlCisgICAgICAgIGlmKGNscikJCXJwIDw9ICMxIDEnaDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgaWYocmUpCQlycCA8PSAjMSB+cnA7CisKKy8vIEZpZm8gT3V0cHV0Cithc3NpZ24gIGRvdXQgPSBtZW1bIHJwIF07CisKKy8vIEZpZm8gSW5wdXQgCithbHdheXMgQChwb3NlZGdlIGNsaykKKyAgICAgICAgaWYod2UpICAgICBtZW1bIHdwIF0gPD0gIzEgZGluOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZHByYW0udiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2RwcmFtLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDMxYTQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2RwcmFtLnYKQEAgLTAsMCArMSw1MDIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgR2VuZXJpYyBEdWFsLVBvcnQgU3luY2hyb25vdXMgUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiBtZW1vcnkgbGlicmFyeSBhdmFpbGFibGUgZnJvbSAgICAgICAgICAvLy8vDQorLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2N2c3dlYi5zaHRtbC9nZW5lcmljX21lbW9yaWVzLyAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVGhpcyBibG9jayBpcyBhIHdyYXBwZXIgd2l0aCBjb21tb24gZHVhbC1wb3J0ICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIHN5bmNocm9ub3VzIG1lbW9yeSBpbnRlcmZhY2UgZm9yIGRpZmZlcmVudCAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICB0eXBlcyBvZiBBU0lDIGFuZCBGUEdBIFJBTXMuIEJlc2lkZSB1bml2ZXJzYWwgbWVtb3J5ICAgICAgICAvLy8vDQorLy8vLyAgaW50ZXJmYWNlIGl0IGFsc28gcHJvdmlkZXMgYmVoYXZpb3JhbCBtb2RlbCBvZiBnZW5lcmljICAgICAgLy8vLw0KKy8vLy8gIGR1YWwtcG9ydCBzeW5jaHJvbm91cyBSQU0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBJdCBhbHNvIGNvbnRhaW5zIGEgZnVsbHkgc3ludGhlc2l6ZWFibGUgbW9kZWwgZm9yIEZQR0FzLiAgICAvLy8vDQorLy8vLyAgSXQgc2hvdWxkIGJlIHVzZWQgaW4gYWxsIE9QRU5DT1JFUyBkZXNpZ25zIHRoYXQgd2FudCB0byBiZSAgLy8vLw0KKy8vLy8gIHBvcnRhYmxlIGFjY3Jvc3MgZGlmZmVyZW50IHRhcmdldCB0ZWNobm9sb2dpZXMgYW5kICAgICAgICAgIC8vLy8NCisvLy8vICBpbmRlcGVuZGVudCBvZiB0YXJnZXQgbWVtb3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFN1cHBvcnRlZCBBU0lDIFJBTXMgYXJlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAtIEFydGlzYW4gRHVhbC1Qb3J0IFN5bmMgUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgLSBBdmFudCEgVHdvLVBvcnQgU3luYyBSQU0gKCopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIC0gVmlyYWdlIDItcG9ydCBTeW5jIFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgU3VwcG9ydGVkIEZQR0EgUkFNcyBhcmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIC0gR2VuZXJpYyBGUEdBIChWRU5ET1JfRlBHQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgIFRlc3RlZCBSQU1zOiBBbHRlcmEsIFhpbGlueCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICBTeW50aGVzaXMgdG9vbHM6IExlb25hcmRvU3BlY3RydW0sIFN5bnBsaWNpdHkgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIC0gWGlsaW54IChWRU5ET1JfWElMSU5YKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAtIEFsdGVyYSAoVkVORE9SX0FMVEVSQSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgLSBmaXggQXZhbnQhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgIC0gYWRkIGFkZGl0aW9uYWwgUkFNcyAoVlMgZXRjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIC0gUmljaGFyZCBIZXJ2ZWlsbGUsIHJpY2hhcmRAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAtIERhbWphbiBMYW1wcmV0LCBsYW1wcmV0QG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8NCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vDQorLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLw0KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLw0KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vDQorLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLw0KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLw0KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8NCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vDQorLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLw0KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLw0KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8NCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIENWUyBSZXZpc2lvbiBIaXN0b3J5DQorLy8NCisvLyAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJA0KKy8vIFJldmlzaW9uIDEuMiAgMjAwMS8xMS8wOCAxOToxMTozMSAgc2FtZw0KKy8vIGFkZGVkIHZhbGlkIGNoZWNrcyB0byBiZWh2aW9yYWwgbW9kZWwNCisvLw0KKy8vIFJldmlzaW9uIDEuMS4xLjEgIDIwMDEvMDkvMTQgMDk6NTc6MTAgIHJoZXJ2ZWlsbGUNCisvLyBNYWpvciBjbGVhbnVwLg0KKy8vIEZpbGVzIGFyZSBub3cgY29tcGxpYW50IHRvIEFsdGVyYSAmIFhpbGlueCBtZW1vcmllcy4NCisvLyBNZW1vcmllcyBhcmUgbm93IGNvbXBhdGlibGUsIGkuZS4gZHJvcC1pbiByZXBsYWNlbWVudHMuDQorLy8gQWRkZWQgc3ludGhlc2l6ZWFibGUgZ2VuZXJpYyBGUEdBIGRlc2NyaXB0aW9uLg0KKy8vIENyZWF0ZWQgImdlbmVyaWNfbWVtb3JpZXMiIGN2cyBlbnRyeS4NCisvLw0KKy8vIFJldmlzaW9uIDEuMS4xLjIgIDIwMDEvMDgvMjEgMTM6MDk6MjcgIGRhbWphbg0KKy8vICoqKiBlbXB0eSBsb2cgbWVzc2FnZSAqKioNCisvLw0KKy8vIFJldmlzaW9uIDEuMSAgMjAwMS8wOC8yMCAxODoyMzoyMCAgZGFtamFuDQorLy8gSW5pdGlhbCByZXZpc2lvbg0KKy8vDQorLy8gUmV2aXNpb24gMS4xICAyMDAxLzA4LzA5IDEzOjM5OjMzICBsYW1wcmV0DQorLy8gTWFqb3IgY2xlYW4tdXAuDQorLy8NCisvLyBSZXZpc2lvbiAxLjIgIDIwMDEvMDcvMzAgMDU6Mzg6MDIgIGxhbXByZXQNCisvLyBBZGRpbmcgZW1wdHkgZGlyZWN0b3JpZXMgcmVxdWlyZWQgYnkgSERMIGNvZGluZyBndWlkZWxpbmVzDQorLy8NCisvLw0KKyANCisgDQorLy9gZGVmaW5lIFZFTkRPUl9GUEdBDQorLy9gZGVmaW5lIFZFTkRPUl9YSUxJTlgNCisvL2BkZWZpbmUgVkVORE9SX0FMVEVSQQ0KKyANCittb2R1bGUgdXNiMWRfZ2VuZXJpY19kcHJhbSgNCisJLy8gR2VuZXJpYyBzeW5jaHJvbm91cyBkdWFsLXBvcnQgUkFNIGludGVyZmFjZQ0KKwlyY2xrLCBycnN0LCByY2UsIG9lLCByYWRkciwgZG91dCwNCisJd2Nsaywgd3JzdCwgd2NlLCB3ZSwgd2FkZHIsIGRpDQorKTsNCisgDQorCS8vDQorCS8vIERlZmF1bHQgYWRkcmVzcyBhbmQgZGF0YSBidXNlcyB3aWR0aA0KKwkvLw0KKwlwYXJhbWV0ZXIgYXcgPSA1OyAgLy8gbnVtYmVyIG9mIGJpdHMgaW4gYWRkcmVzcy1idXMNCisJcGFyYW1ldGVyIGR3ID0gMTY7IC8vIG51bWJlciBvZiBiaXRzIGluIGRhdGEtYnVzDQorIA0KKwkvLw0KKwkvLyBHZW5lcmljIHN5bmNocm9ub3VzIGRvdWJsZS1wb3J0IFJBTSBpbnRlcmZhY2UNCisJLy8NCisJLy8gcmVhZCBwb3J0DQorCWlucHV0ICAgICAgICAgICByY2xrOyAgLy8gcmVhZCBjbG9jaywgcmlzaW5nIGVkZ2UgdHJpZ2dlcg0KKwlpbnB1dCAgICAgICAgICAgcnJzdDsgIC8vIHJlYWQgcG9ydCByZXNldCwgYWN0aXZlIGhpZ2gNCisJaW5wdXQgICAgICAgICAgIHJjZTsgICAvLyByZWFkIHBvcnQgY2hpcCBlbmFibGUsIGFjdGl2ZSBoaWdoDQorCWlucHV0ICAgICAgICAgICBvZTsJICAgLy8gb3V0cHV0IGVuYWJsZSwgYWN0aXZlIGhpZ2gNCisJaW5wdXQgIFthdy0xOjBdIHJhZGRyOyAvLyByZWFkIGFkZHJlc3MNCisJb3V0cHV0IFtkdy0xOjBdIGRvdXQ7ICAgIC8vIGRhdGEgb3V0cHV0DQorIA0KKwkvLyB3cml0ZSBwb3J0DQorCWlucHV0ICAgICAgICAgIHdjbGs7ICAvLyB3cml0ZSBjbG9jaywgcmlzaW5nIGVkZ2UgdHJpZ2dlcg0KKwlpbnB1dCAgICAgICAgICB3cnN0OyAgLy8gd3JpdGUgcG9ydCByZXNldCwgYWN0aXZlIGhpZ2gNCisJaW5wdXQgICAgICAgICAgd2NlOyAgIC8vIHdyaXRlIHBvcnQgY2hpcCBlbmFibGUsIGFjdGl2ZSBoaWdoDQorCWlucHV0ICAgICAgICAgIHdlOyAgICAvLyB3cml0ZSBlbmFibGUsIGFjdGl2ZSBoaWdoDQorCWlucHV0IFthdy0xOjBdIHdhZGRyOyAvLyB3cml0ZSBhZGRyZXNzDQorCWlucHV0IFtkdy0xOjBdIGRpOyAgICAvLyBkYXRhIGlucHV0DQorIA0KKwkvLw0KKwkvLyBNb2R1bGUgYm9keQ0KKwkvLw0KKyANCitgaWZkZWYgVkVORE9SX0ZQR0ENCisJLy8NCisJLy8gSW5zdGFudGlhdGlvbiBzeW50aGVzaXplYWJsZSBGUEdBIG1lbW9yeQ0KKwkvLw0KKwkvLyBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIHVzaW5nIExlb25hcmRvU3BlY3RydW0gYW5kIFN5bnBsaWNpdHkuDQorCS8vIFRoZSBjb2RlIGNvcnJlY3RseSBpbnN0YW50aWF0ZXMgQWx0ZXJhIEVBQnMgYW5kIFhpbGlueCBCbG9ja1JBTXMuDQorCS8vDQorIA0KKwlyZWcgW2R3LTEgOjBdIG1lbSBbKDE8PGF3KSAtMTowXTsgLy8gaW5zdGFudGlhdGUgbWVtb3J5DQorCXJlZyBbZHctMTowXSBkb3V0OyAgICAgICAgICAgICAgICAgIC8vIGRhdGEgb3V0cHV0IHJlZ2lzdGVycw0KKyANCisJLy8gcmVhZCBvcGVyYXRpb24NCisgDQorCS8qDQorCWFsd2F5c0AocG9zZWRnZSByY2xrKQ0KKwkJaWYgKHJjZSkgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvY2sgZW5hYmxlIGluc3RydWN0cyBYaWxpbnggdG9vbHMgdG8gdXNlIFNlbGVjdFJBTSAoTFVUUykgaW5zdGVhZCBvZiBCbG9ja1JBTQ0KKwkJCWRvIDw9ICMxIG1lbVtyYWRkcl07DQorCSovDQorIA0KKwlhbHdheXNAKHBvc2VkZ2UgcmNsaykNCisJCWRvdXQgPD0gIzEgbWVtW3JhZGRyXTsNCisgDQorCS8vIHdyaXRlIG9wZXJhdGlvbg0KKwlhbHdheXNAKHBvc2VkZ2Ugd2NsaykNCisJCWlmICh3ZSAmJiB3Y2UpDQorCQkJbWVtW3dhZGRyXSA8PSAjMSBkaTsNCisgDQorYGVsc2UNCisgDQorYGlmZGVmIFZFTkRPUl9YSUxJTlgNCisJLy8NCisJLy8gSW5zdGFudGlhdGlvbiBvZiBGUEdBIG1lbW9yeToNCisJLy8NCisJLy8gVmlydGV4L1NwYXJ0YW4yIEJsb2NrUkFNcw0KKwkvLw0KKwl4aWxpbnhfcmFtX2RwIHhpbGlueF9yYW0oDQorCQkvLyByZWFkIHBvcnQNCisJCS5DTEtBKHJjbGspLA0KKwkJLlJTVEEocnJzdCksDQorCQkuRU5BKHJjZSksDQorCQkuQUREUkEocmFkZHIpLA0KKwkJLkRJQSgge2R3ezEnYjB9fSApLA0KKwkJLldFQSgxJ2IwKSwNCisJCS5ET0EoZG91dCksDQorIA0KKwkJLy8gd3JpdGUgcG9ydA0KKwkJLkNMS0Iod2NsayksDQorCQkuUlNUQih3cnN0KSwNCisJCS5FTkIod2NlKSwNCisJCS5BRERSQih3YWRkciksDQorCQkuRElCKGRpKSwNCisJCS5XRUIod2UpLA0KKwkJLkRPQigpDQorCSk7DQorIA0KKwlkZWZwYXJhbQ0KKwkJeGlsaW54X3JhbS5kd2lkdGggPSBkdywNCisJCXhpbGlueF9yYW0uYXdpZHRoID0gYXc7DQorIA0KK2BlbHNlDQorIA0KK2BpZmRlZiBWRU5ET1JfQUxURVJBDQorCS8vDQorCS8vIEluc3RhbnRpYXRpb24gb2YgRlBHQSBtZW1vcnk6DQorCS8vDQorCS8vIEFsdGVyYSBGTEVYL0FQRVggRUFCcw0KKwkvLw0KKwlhbHRlcmFfcmFtX2RwIGFsdGVyYV9yYW0oDQorCQkvLyByZWFkIHBvcnQNCisJCS5yZGNsb2NrKHJjbGspLA0KKwkJLnJkY2xvY2tlbihyY2UpLA0KKwkJLnJkYWRkcmVzcyhyYWRkciksDQorCQkucShkb3V0KSwNCisgDQorCQkvLyB3cml0ZSBwb3J0DQorCQkud3JjbG9jayh3Y2xrKSwNCisJCS53cmNsb2NrZW4od2NlKSwNCisJCS53cmVuKHdlKSwNCisJCS53cmFkZHJlc3Mod2FkZHIpLA0KKwkJLmRhdGEoZGkpDQorCSk7DQorIA0KKwlkZWZwYXJhbQ0KKwkJYWx0ZXJhX3JhbS5kd2lkdGggPSBkdywNCisJCWFsdGVyYV9yYW0uYXdpZHRoID0gYXc7DQorIA0KK2BlbHNlDQorIA0KK2BpZmRlZiBWRU5ET1JfQVJUSVNBTg0KKyANCisJLy8NCisJLy8gSW5zdGFudGlhdGlvbiBvZiBBU0lDIG1lbW9yeToNCisJLy8NCisJLy8gQXJ0aXNhbiBTeW5jaHJvbm91cyBEb3VibGUtUG9ydCBSQU0gKHJhMnNoKQ0KKwkvLw0KKwlhcnRfaHNkcCAjKGR3LCAxPDxhdywgYXcpIGFydGlzYW5fc2RwKA0KKwkJLy8gcmVhZCBwb3J0DQorCQkucWEoZG91dCksDQorCQkuY2xrYShyY2xrKSwNCisJCS5jZW5hKH5yY2UpLA0KKwkJLndlbmEoMSdiMSksDQorCQkuYWEocmFkZHIpLA0KKwkJLmRhKCB7ZHd7MSdiMH19ICksDQorCQkub2VuYSh+b2UpLA0KKyANCisJCS8vIHdyaXRlIHBvcnQNCisJCS5xYigpLA0KKwkJLmNsa2Iod2NsayksDQorCQkuY2VuYih+d2NlKSwNCisJCS53ZW5iKH53ZSksDQorCQkuYWIod2FkZHIpLA0KKwkJLmRiKGRpKSwNCisJCS5vZW5iKDEnYjEpDQorCSk7DQorIA0KK2BlbHNlDQorIA0KK2BpZmRlZiBWRU5ET1JfQVZBTlQNCisgDQorCS8vDQorCS8vIEluc3RhbnRpYXRpb24gb2YgQVNJQyBtZW1vcnk6DQorCS8vDQorCS8vIEF2YW50ISBBc3luY2hyb25vdXMgVHdvLVBvcnQgUkFNDQorCS8vDQorCWF2YW50X2F0cCBhdmFudF9hdHAoDQorCQkud2ViKH53ZSksDQorCQkucmViKCksDQorCQkub2ViKH5vZSksDQorCQkucmNzYigpLA0KKwkJLndjc2IoKSwNCisJCS5yYShyYWRkciksDQorCQkud2Eod2FkZHIpLA0KKwkJLmRpKGRpKSwNCisJCS5kbyhkb3V0KQ0KKwkpOw0KKyANCitgZWxzZQ0KKyANCitgaWZkZWYgVkVORE9SX1ZJUkFHRQ0KKyANCisJLy8NCisJLy8gSW5zdGFudGlhdGlvbiBvZiBBU0lDIG1lbW9yeToNCisJLy8NCisJLy8gVmlyYWdlIFN5bmNocm9ub3VzIDItcG9ydCBSL1cgUkFNDQorCS8vDQorCXZpcmFnZV9zdHAgdmlyYWdlX3N0cCgNCisJCS8vIHJlYWQgcG9ydA0KKwkJLkNMS0EocmNsayksDQorCQkuTUVBKHJjZV9hKSwNCisJCS5BRFJBKHJhZGRyKSwNCisJCS5EQSgge2R3ezEnYjB9fSApLA0KKwkJLldFQSgxJ2IwKSwNCisJCS5PRUEob2UpLA0KKwkJLlFBKGRvdXQpLA0KKyANCisJCS8vIHdyaXRlIHBvcnQNCisJCS5DTEtCKHdjbGspLA0KKwkJLk1FQih3Y2UpLA0KKwkJLkFEUkIod2FkZHIpLA0KKwkJLkRCKGRpKSwNCisJCS5XRUIod2UpLA0KKwkJLk9FQigxJ2IxKSwNCisJCS5RQigpDQorCSk7DQorIA0KK2BlbHNlDQorIA0KKwkvLw0KKwkvLyBHZW5lcmljIGR1YWwtcG9ydCBzeW5jaHJvbm91cyBSQU0gbW9kZWwNCisJLy8NCisgDQorCS8vDQorCS8vIEdlbmVyaWMgUkFNJ3MgcmVnaXN0ZXJzIGFuZCB3aXJlcw0KKwkvLw0KKwlyZWcJW2R3LTE6MF0JbWVtIFsoMTw8YXcpLTE6MF07CS8vIFJBTSBjb250ZW50DQorCXJlZwlbZHctMTowXQlkb19yZWc7ICAgICAgICAgICAgLy8gUkFNIGRhdGEgb3V0cHV0IHJlZ2lzdGVyDQorIA0KKwkvLw0KKwkvLyBEYXRhIG91dHB1dCBkcml2ZXJzDQorCS8vDQorCWFzc2lnbiBkb3V0ID0gKG9lICYgcmNlKSA/IGRvX3JlZyA6IHtkd3sxJ2J6fX07DQorIA0KKwkvLyByZWFkIG9wZXJhdGlvbg0KKwlhbHdheXMgQChwb3NlZGdlIHJjbGspDQorCQlpZiAocmNlKQ0KKyAgICAgICAgICAJCWRvX3JlZyA8PSAjMSAod2UgJiYgKHdhZGRyPT1yYWRkcikpID8ge2R3ezEnYiB4fX0gOiBtZW1bcmFkZHJdOw0KKyANCisJLy8gd3JpdGUgb3BlcmF0aW9uDQorCWFsd2F5cyBAKHBvc2VkZ2Ugd2NsaykNCisJCWlmICh3Y2UgJiYgd2UpDQorCQkJbWVtW3dhZGRyXSA8PSAjMSBkaTsNCisgDQorIA0KKwkvLyBUYXNrIHByaW50cyByYW5nZSBvZiBtZW1vcnkNCisJLy8gKioqIFJlbWVtYmVyIHRoYXQgdGFza3MgYXJlIG5vbiByZWVudHJhbnQsIGRvbid0IGNhbGwgdGhpcyB0YXNrIGluIHBhcmFsbGVsIGZvciBtdWx0aXBsZSBpbnN0YW50aWF0aW9ucy4gDQorCXRhc2sgcHJpbnRfcmFtOw0KKwlpbnB1dCBbYXctMTowXSBzdGFydDsNCisJaW5wdXQgW2F3LTE6MF0gZmluaXNoOw0KKwlpbnRlZ2VyIHJudW07DQorICAJYmVnaW4NCisgICAgCQlmb3IgKHJudW09c3RhcnQ7cm51bTw9ZmluaXNoO3JudW09cm51bSsxKQ0KKyAgICAgIAkJCSRkaXNwbGF5KCJBZGRyICVoID0gJWgiLHJudW0sbWVtW3JudW1dKTsNCisgIAllbmQNCisJZW5kdGFzaw0KKyANCitgZW5kaWYgLy8gIVZFTkRPUl9WSVJBR0UNCitgZW5kaWYgLy8gIVZFTkRPUl9BVkFOVA0KK2BlbmRpZiAvLyAhVkVORE9SX0FSVElTQU4NCitgZW5kaWYgLy8gIVZFTkRPUl9BTFRFUkENCitgZW5kaWYgLy8gIVZFTkRPUl9YSUxJTlgNCitgZW5kaWYgLy8gIVZFTkRPUl9GUEdBDQorIA0KK2VuZG1vZHVsZQ0KKyANCisvLw0KKy8vIEJsYWNrLWJveCBtb2R1bGVzDQorLy8NCisgDQorYGlmZGVmIFZFTkRPUl9BTFRFUkENCisJbW9kdWxlIGFsdGVyYV9yYW1fZHAoDQorCQlkYXRhLA0KKwkJd3JhZGRyZXNzLA0KKwkJcmRhZGRyZXNzLA0KKwkJd3JlbiwNCisJCXdyY2xvY2ssDQorCQl3cmNsb2NrZW4sDQorCQlyZGNsb2NrLA0KKwkJcmRjbG9ja2VuLA0KKwkJcSkgLyogc3ludGhlc2lzIGJsYWNrX2JveCAqLzsNCisgDQorCQlwYXJhbWV0ZXIgYXdpZHRoID0gNzsNCisJCXBhcmFtZXRlciBkd2lkdGggPSA4Ow0KKyANCisJCWlucHV0IFtkd2lkdGggLTE6MF0gZGF0YTsNCisJCWlucHV0IFthd2lkdGggLTE6MF0gd3JhZGRyZXNzOw0KKwkJaW5wdXQgW2F3aWR0aCAtMTowXSByZGFkZHJlc3M7DQorCQlpbnB1dCAgICAgICAgICAgICAgIHdyZW47DQorCQlpbnB1dCAgICAgICAgICAgICAgIHdyY2xvY2s7DQorCQlpbnB1dCAgICAgICAgICAgICAgIHdyY2xvY2tlbjsNCisJCWlucHV0ICAgICAgICAgICAgICAgcmRjbG9jazsNCisJCWlucHV0ICAgICAgICAgICAgICAgcmRjbG9ja2VuOw0KKwkJb3V0cHV0IFtkd2lkdGggLTE6MF0gcTsNCisgDQorCQkvLyBzeW5vcHNpcyB0cmFuc2xhdGVfb2ZmDQorCQkvLyBleGVtcGxhciB0cmFuc2xhdGVfb2ZmDQorIA0KKwkJc3luX2RwcmFtX3Jvd3IgIygNCisJCQkiVU5VU0VEIiwNCisJCQlkd2lkdGgsDQorCQkJYXdpZHRoLA0KKwkJCTEgPDwgYXdpZHRoDQorCQkpDQorCQlhbHRlcmFfZHByYW1fbW9kZWwgKA0KKwkJCS8vIHJlYWQgcG9ydA0KKwkJCS5SZENsb2NrKHJkY2xvY2spLA0KKwkJCS5SZENsa2VuKHJkY2xvY2tlbiksDQorCQkJLlJkQWRkcmVzcyhyZGFkZHJlc3MpLA0KKwkJCS5SZEVuKDEnYjEpLA0KKwkJCS5RKHEpLA0KKyANCisJCQkvLyB3cml0ZSBwb3J0DQorCQkJLldyQ2xvY2sod3JjbG9jayksDQorCQkJLldyQ2xrZW4od3JjbG9ja2VuKSwNCisJCQkuV3JBZGRyZXNzKHdyYWRkcmVzcyksDQorCQkJLldyRW4od3JlbiksDQorCQkJLkRhdGEoZGF0YSkNCisJCSk7DQorIA0KKwkJLy8gZXhlbXBsYXIgdHJhbnNsYXRlX29uDQorCQkvLyBzeW5vcHNpcyB0cmFuc2xhdGVfb24NCisgDQorCWVuZG1vZHVsZQ0KK2BlbmRpZiAvLyBWRU5ET1JfQUxURVJBDQorIA0KK2BpZmRlZiBWRU5ET1JfWElMSU5YDQorCW1vZHVsZSB4aWxpbnhfcmFtX2RwICgNCisJCUFERFJBLA0KKwkJQ0xLQSwNCisJCUFERFJCLA0KKwkJQ0xLQiwNCisJCURJQSwNCisJCVdFQSwNCisJCURJQiwNCisJCVdFQiwNCisJCUVOQSwNCisJCUVOQiwNCisJCVJTVEEsDQorCQlSU1RCLA0KKwkJRE9BLA0KKwkJRE9CKSAvKiBzeW50aGVzaXMgYmxhY2tfYm94ICovIDsNCisgDQorCXBhcmFtZXRlciBhd2lkdGggPSA3Ow0KKwlwYXJhbWV0ZXIgZHdpZHRoID0gODsNCisgDQorCS8vIHBvcnRfYQ0KKwlpbnB1dCAgICAgICAgICAgICAgIENMS0E7DQorCWlucHV0ICAgICAgICAgICAgICAgUlNUQTsNCisJaW5wdXQgICAgICAgICAgICAgICBFTkE7DQorCWlucHV0IFthd2lkdGgtMTowXSAgQUREUkE7DQorCWlucHV0IFtkd2lkdGgtMTowXSAgRElBOw0KKwlpbnB1dCAgICAgICAgICAgICAgIFdFQTsNCisJb3V0cHV0IFtkd2lkdGgtMTowXSBET0E7DQorIA0KKwkvLyBwb3J0X2INCisJaW5wdXQgICAgICAgICAgICAgICBDTEtCOw0KKwlpbnB1dCAgICAgICAgICAgICAgIFJTVEI7DQorCWlucHV0ICAgICAgICAgICAgICAgRU5COw0KKwlpbnB1dCBbYXdpZHRoLTE6MF0gIEFERFJCOw0KKwlpbnB1dCBbZHdpZHRoLTE6MF0gIERJQjsNCisJaW5wdXQgICAgICAgICAgICAgICBXRUI7DQorCW91dHB1dCBbZHdpZHRoLTE6MF0gRE9COw0KKyANCisJLy8gaW5zZXJ0IHNpbXVsYXRpb24gbW9kZWwNCisgDQorIA0KKwkvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmDQorCS8vIGV4ZW1wbGFyIHRyYW5zbGF0ZV9vZmYNCisgDQorCUNfTUVNX0RQX0JMT0NLX1YxXzAgIygNCisJCWF3aWR0aCwNCisJCWF3aWR0aCwNCisJCTEsDQorCQkxLA0KKwkJIjAiLA0KKwkJMSA8PCBhd2lkdGgsDQorCQkxIDw8IGF3aWR0aCwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkiIiwNCisJCTE2LA0KKwkJMCwNCisJCTAsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJZHdpZHRoLA0KKwkJZHdpZHRoKQ0KKwl4aWxpbnhfZHByYW1fbW9kZWwgKA0KKwkJLkFERFJBKEFERFJBKSwNCisJCS5DTEtBKENMS0EpLA0KKwkJLkFERFJCKEFERFJCKSwNCisJCS5DTEtCKENMS0IpLA0KKwkJLkRJQShESUEpLA0KKwkJLldFQShXRUEpLA0KKwkJLkRJQihESUIpLA0KKwkJLldFQihXRUIpLA0KKwkJLkVOQShFTkEpLA0KKwkJLkVOQihFTkIpLA0KKwkJLlJTVEEoUlNUQSksDQorCQkuUlNUQihSU1RCKSwNCisJCS5ET0EoRE9BKSwNCisJCS5ET0IoRE9CKSk7DQorIA0KKwkJLy8gZXhlbXBsYXIgdHJhbnNsYXRlX29uDQorCQkvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24NCisgDQorCWVuZG1vZHVsZQ0KK2BlbmRpZiAvLyBWRU5ET1JfWElMSU5YDQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZmlmby52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZmlmby52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5YzY3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19maWZvLnYKQEAgLTAsMCArMSwzMzQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFVuaXZlcnNhbCBGSUZPIFNpbmdsZSBDbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEQvTCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvZ2VuZXJpY19maWZvcy8gICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLw0KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLw0KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLw0KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLw0KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLw0KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLw0KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLw0KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLw0KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLw0KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLw0KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLw0KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLw0KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLw0KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLw0KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLw0KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKyANCisvLyAgQ1ZTIExvZw0KKy8vDQorLy8gICRJZDogZ2VuZXJpY19maWZvX3NjX2Eudix2IDEuMS4xLjEgMjAwMi0wOS0yNSAwNTo0MjowNiBydWRpIEV4cCAkDQorLy8NCisvLyAgJERhdGU6IDIwMDItMDktMjUgMDU6NDI6MDYgJA0KKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJA0KKy8vICAkQXV0aG9yOiBydWRpICQNCisvLyAgJExvY2tlcjogICQNCisvLyAgJFN0YXRlOiBFeHAgJA0KKy8vDQorLy8gQ2hhbmdlIEhpc3Rvcnk6DQorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJA0KKy8vDQorLy8NCisvLw0KKy8vDQorLy8NCisvLw0KKy8vDQorLy8NCisvLw0KKy8vDQorIA0KKyANCisvKg0KKyANCitEZXNjcmlwdGlvbg0KKz09PT09PT09PT09DQorIA0KK0kvT3MNCistLS0tDQorcnN0CWxvdyBhY3RpdmUsIGVpdGhlciBzeW5jLiBvciBhc3luYy4gbWFzdGVyIHJlc2V0IChzZWUgYmVsb3cgaG93IHRvIHNlbGVjdCkNCitjbHIJc3luY2hyb25vdXMgY2xlYXIgKGp1c3QgbGlrZSByZXNldCBidXQgYWx3YXlzIHN5bmNocm9ub3VzKSwgaGlnaCBhY3RpdmUNCityZQlyZWFkIGVuYWJsZSwgc3luY2hyb25vdXMsIGhpZ2ggYWN0aXZlDQord2UJcmVhZCBlbmFibGUsIHN5bmNocm9ub3VzLCBoaWdoIGFjdGl2ZQ0KK2RpbglEYXRhIElucHV0DQorZG91dAlEYXRhIE91dHB1dA0KKyANCitmdWxsCUluZGljYXRlcyB0aGUgRklGTyBpcyBmdWxsIChjb21iaW5hdG9yaWFsIG91dHB1dCkNCitmdWxsX3IJc2FtZSBhcyBhYm92ZSwgYnV0IHJlZ2lzdGVyZWQgb3V0cHV0IChzZWUgbm90ZSBiZWxvdykNCitlbXB0eQlJbmRpY2F0ZXMgdGhlIEZJRk8gaXMgZW1wdHkNCitlbXB0eV9yCXNhbWUgYXMgYWJvdmUsIGJ1dCByZWdpc3RlcmVkIG91dHB1dCAoc2VlIG5vdGUgYmVsb3cpDQorIA0KK2Z1bGxfbgkJSW5kaWNhdGVzIGlmIHRoZSBGSUZPIGhhcyBzcGFjZSBmb3IgTiBlbnRyaWVzIChjb21iaW5hdG9yaWFsIG91dHB1dCkNCitmdWxsX25fcglzYW1lIGFzIGFib3ZlLCBidXQgcmVnaXN0ZXJlZCBvdXRwdXQgKHNlZSBub3RlIGJlbG93KQ0KK2VtcHR5X24JCUluZGljYXRlcyB0aGUgRklGTyBoYXMgYXQgbGVhc3QgTiBlbnRyaWVzIChjb21iaW5hdG9yaWFsIG91dHB1dCkNCitlbXB0eV9uX3IJc2FtZSBhcyBhYm92ZSwgYnV0IHJlZ2lzdGVyZWQgb3V0cHV0IChzZWUgbm90ZSBiZWxvdykNCisgDQorbGV2ZWwJCWluZGljYXRlcyB0aGUgRklGTyBsZXZlbDoNCisJCTInYjAwCTAtMjUlCSBmdWxsDQorCQkyJ2IwMQkyNS01MCUJIGZ1bGwNCisJCTInYjEwCTUwLTc1JQkgZnVsbA0KKwkJMidiMTEJJTc1LTEwMCUgZnVsbA0KKyANCitjb21iaW5hdG9yaWFsIHZzLiByZWdpc3RlcmVkIHN0YXR1cyBvdXRwdXRzDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK0JvdGggdGhlIGNvbWJpbmF0b3JpYWwgYW5kIHJlZ2lzdGVyZWQgc3RhdHVzIG91dHB1dHMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lDQorc3luY2hyb25vdXMgdGltaW5nLiBNZWFuaW5nIHRoZXkgYXJlIGJlaW5nIGFzc2VydGVkIGltbWVkaWF0ZWx5IGF0IHRoZSBjbG9jaw0KK2VkZ2UgYWZ0ZXIgdGhlIGxhc3QgcmVhZCBvciB3cml0ZS4gVGhlIGNvbWJpbmF0b3JpYWwgb3V0cHV0cyBob3dldmVyLCBwYXNzDQordGhyb3VnaCBzZXZlcmFsIGxldmVscyBvZiBsb2dpYyBiZWZvcmUgdGhleSBhcmUgb3V0cHV0LiBUaGUgcmVnaXN0ZXJlZCBzdGF0dXMNCitvdXRwdXRzIGFyZSBkaXJlY3Qgb3V0cHV0cyBvZiBhIGZsaXAtZmxvcC4gVGhlIHJlYXNvbiBib3RoIGFyZSBwcm92aWRlZCwgaXMNCit0aGF0IHRoZSByZWdpc3RlcmVkIG91dHB1dHMgcmVxdWlyZSBxdWl0ZSBhIGJpdCBvZiBhZGRpdGlvbmFsIGxvZ2ljIGluc2lkZQ0KK3RoZSBGSUZPLiBJZiB5b3UgY2FuIG1lZXQgdGltaW5nIG9mIHlvdXIgZGV2aWNlIHdpdGggdGhlIGNvbWJpbmF0b3JpYWwNCitvdXRwdXRzLCB1c2UgdGhlbSAhIFRoZSBGSUZPIHdpbGwgYmUgc21hbGxlci4gSWYgdGhlIHN0YXR1cyBzaWduYWxzIGFyZQ0KK2luIHRoZSBjcml0aWNhbCBwYXNzLCB1c2UgdGhlIHJlZ2lzdGVyZWQgb3V0cHV0cywgdGhleSBoYXZlIGEgbXVjaCBzbWFsbGVyDQorb3V0cHV0IGRlbGF5IChhY3R1YWxseSBvbmx5IFRjcSkuDQorIA0KK1BhcmFtZXRlcnMNCistLS0tLS0tLS0tDQorVGhlIEZJRk8gdGFrZXMgMyBwYXJhbWV0ZXJzOg0KK2R3CURhdGEgYnVzIHdpZHRoDQorYXcJQWRkcmVzcyBidXMgd2lkdGggKERldGVybWluZXMgdGhlIEZJRk8gc2l6ZSBieSBldmFsdWF0aW5nIDJeYXcpDQorbglOIGlzIGEgc2Vjb25kIHN0YXR1cyB0aHJlc2hvbGQgY29uc3RhbnQgZm9yIGZ1bGxfbiBhbmQgZW1wdHlfbg0KKwlJZiB5b3UgaGF2ZSBubyBuZWVkIGZvciB0aGUgc2Vjb25kIHN0YXR1cyB0aHJlc2hvbGQsIGRvIG5vdA0KKwljb25uZWN0IHRoZSBvdXRwdXRzIGFuZCB0aGUgbG9naWMgc2hvdWxkIGJlIHJlbW92ZWQgYnkgeW91cg0KKwlzeW50aGVzaXMgdG9vbC4NCisgDQorU3ludGhlc2lzIFJlc3VsdHMNCistLS0tLS0tLS0tLS0tLS0tLQ0KK0luIGEgU3BhcnRhbiAyZSBhIDggYml0IHdpZGUsIDggZW50cmllcyBkZWVwIEZJRk8sIHRha2VzIDg1IExVVHMgYW5kIHJ1bnMNCithdCBhYm91dCAxMTYgTUh6IChJTyBpbnNlcnRpb24gZGlzYWJsZWQpLiBUaGUgcmVnaXN0ZXJlZCBzdGF0dXMgb3V0cHV0cw0KK2FyZSB2YWxpZCBhZnRlciAyLjFOUywgdGhlIGNvbWJpbmF0b3JpYWwgb25jZSB0YWtlIG91dCB0byA2LjUgTlMgdG8gYmUNCithdmFpbGFibGUuDQorIA0KKyANCitNaXNjDQorLS0tLQ0KK1RoaXMgZGVzaWduIGFzc3VtZXMgeW91IHdpbGwgZG8gYXBwcm9wcmlhdGUgc3RhdHVzIGNoZWNraW5nIGV4dGVybmFsbHkuDQorIA0KK0lNUE9SVEFOVCAhIHdyaXRpbmcgd2hpbGUgdGhlIEZJRk8gaXMgZnVsbCBvciByZWFkaW5nIHdoaWxlIHRoZSBGSUZPIGlzDQorZW1wdHkgd2lsbCBwbGFjZSB0aGUgRklGTyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuDQorIA0KKyovDQorIA0KKyANCisvLyBTZWxlY3RpbmcgU3luYy4gb3IgQXN5bmMgUmVzZXQNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBVbmNvbW1lbnQgb25lIG9mIHRoZSB0d28gbGluZXMgYmVsb3cuIFRoZSBmaXJzdCBsaW5lIGZvcg0KKy8vIHN5bmNocm9ub3VzIHJlc2V0LCB0aGUgc2Vjb25kIGZvciBhc3luY2hyb25vdXMgcmVzZXQNCisgDQorYGRlZmluZSBTQ19GSUZPX0FTWU5DX1JFU0VUCQkJCS8vIFVuY29tbWVudCBmb3IgU3luY3IuIHJlc2V0DQorLy9gZGVmaW5lIFNDX0ZJRk9fQVNZTkNfUkVTRVQJb3IgbmVnZWRnZSByc3QJCS8vIFVuY29tbWVudCBmb3IgQXN5bmMuIHJlc2V0DQorIA0KKyANCittb2R1bGUgdXNiMWRfZ2VuZXJpY19maWZvKGNsaywgcnN0LCBjbHIsIGRpbiwgd2UsIGRvdXQsIHJlLA0KKwkJCWZ1bGwsIGVtcHR5LCBmdWxsX3IsIGVtcHR5X3IsDQorCQkJZnVsbF9uLCBlbXB0eV9uLCBmdWxsX25fciwgZW1wdHlfbl9yLA0KKwkJCWxldmVsKTsNCisgDQorcGFyYW1ldGVyIGR3PTg7DQorcGFyYW1ldGVyIGF3PTg7DQorcGFyYW1ldGVyIG49MzI7DQorcGFyYW1ldGVyIG1heF9zaXplID0gMTw8YXc7DQorIA0KK2lucHV0CQkJY2xrLCByc3QsIGNscjsNCitpbnB1dAlbZHctMTowXQlkaW47DQoraW5wdXQJCQl3ZTsNCitvdXRwdXQJW2R3LTE6MF0JZG91dDsNCitpbnB1dAkJCXJlOw0KK291dHB1dAkJCWZ1bGwsIGZ1bGxfcjsNCitvdXRwdXQJCQllbXB0eSwgZW1wdHlfcjsNCitvdXRwdXQJCQlmdWxsX24sIGZ1bGxfbl9yOw0KK291dHB1dAkJCWVtcHR5X24sIGVtcHR5X25fcjsNCitvdXRwdXQJWzE6MF0JCWxldmVsOw0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gTG9jYWwgV2lyZXMNCisvLw0KKyANCityZWcJW2F3LTE6MF0Jd3A7DQord2lyZQlbYXctMTowXQl3cF9wbDE7DQord2lyZQlbYXctMTowXQl3cF9wbDI7DQorcmVnCVthdy0xOjBdCXJwOw0KK3dpcmUJW2F3LTE6MF0JcnBfcGwxOw0KK3JlZwkJCWZ1bGxfcjsNCityZWcJCQllbXB0eV9yOw0KK3JlZwkJCWdiOw0KK3JlZwkJCWdiMjsNCityZWcJW2F3OjBdCQljbnQ7DQord2lyZQkJCWZ1bGxfbiwgZW1wdHlfbjsNCityZWcJCQlmdWxsX25fciwgZW1wdHlfbl9yOw0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gTWVtb3J5IEJsb2NrDQorLy8NCisgDQordXNiMWRfZ2VuZXJpY19kcHJhbSAgIyhhdyxkdykgdTAoDQorCS5yY2xrKAkJY2xrCQkpLA0KKwkucnJzdCgJCSFyc3QJCSksDQorCS5yY2UoCQkxJ2IxCQkpLA0KKwkub2UoCQkxJ2IxCQkpLA0KKwkucmFkZHIoCQlycAkJKSwNCisJLmRvdXQoCQlkb3V0CQkpLA0KKwkud2NsaygJCWNsawkJKSwNCisJLndyc3QoCQkhcnN0CQkpLA0KKwkud2NlKAkJMSdiMQkJKSwNCisJLndlKAkJd2UJCSksDQorCS53YWRkcigJCXdwCQkpLA0KKwkuZGkoCQlkaW4JCSkNCisJKTsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIE1pc2MgTG9naWMNCisvLw0KKyANCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJd3AgPD0gIzEge2F3ezEnYjB9fTsNCisJZWxzZQ0KKwlpZihjbHIpCQl3cCA8PSAjMSB7YXd7MSdiMH19Ow0KKwllbHNlDQorCWlmKHdlKQkJd3AgPD0gIzEgd3BfcGwxOw0KKyANCithc3NpZ24gd3BfcGwxID0gd3AgKyB7IHthdy0xezEnYjB9fSwgMSdiMX07DQorYXNzaWduIHdwX3BsMiA9IHdwICsgeyB7YXctMnsxJ2IwfX0sIDInYjEwfTsNCisgDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCXJwIDw9ICMxIHthd3sxJ2IwfX07DQorCWVsc2UNCisJaWYoY2xyKQkJcnAgPD0gIzEge2F3ezEnYjB9fTsNCisJZWxzZQ0KKwlpZihyZSkJCXJwIDw9ICMxIHJwX3BsMTsNCisgDQorYXNzaWduIHJwX3BsMSA9IHJwICsgeyB7YXctMXsxJ2IwfX0sIDEnYjF9Ow0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gQ29tYmluYXRvcmlhbCBGdWxsICYgRW1wdHkgRmxhZ3MNCisvLw0KKyANCithc3NpZ24gZW1wdHkgPSAoKHdwID09IHJwKSAmICFnYik7DQorYXNzaWduIGZ1bGwgID0gKCh3cCA9PSBycCkgJiAgZ2IpOw0KKyANCisvLyBHdWFyZCBCaXQgLi4uDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCQkJZ2IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZihjbHIpCQkJCWdiIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYoKHdwX3BsMSA9PSBycCkgJiB3ZSkJCWdiIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYocmUpCQkJCWdiIDw9ICMxIDEnYjA7DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBSZWdpc3RlcmVkIEZ1bGwgJiBFbXB0eSBGbGFncw0KKy8vDQorIA0KKy8vIEd1YXJkIEJpdCAuLi4NCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJCQlnYjIgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZihjbHIpCQkJCWdiMiA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKCh3cF9wbDIgPT0gcnApICYgd2UpCQlnYjIgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZigod3AgIT0gcnApICYgcmUpCQlnYjIgPD0gIzEgMSdiMDsNCisgDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCQkJCWZ1bGxfciA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKGNscikJCQkJCWZ1bGxfciA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKHdlICYgKCh3cF9wbDEgPT0gcnApICYgZ2IyKSAmICFyZSkJZnVsbF9yIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYocmUgJiAoKHdwX3BsMSAhPSBycCkgfCAhZ2IyKSAmICF3ZSkJZnVsbF9yIDw9ICMxIDEnYjA7DQorIA0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQkJCQllbXB0eV9yIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYoY2xyKQkJCQkJZW1wdHlfciA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKHdlICYgKCh3cCAhPSBycF9wbDEpIHwgZ2IyKSAmICFyZSkJZW1wdHlfciA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKHJlICYgKCh3cCA9PSBycF9wbDEpICYgIWdiMikgJiAhd2UpCWVtcHR5X3IgPD0gIzEgMSdiMTsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIENvbWJpbmF0b3JpYWwgRnVsbF9uICYgRW1wdHlfbiBGbGFncw0KKy8vDQorIA0KK2Fzc2lnbiBlbXB0eV9uID0gY250IDwgbjsNCithc3NpZ24gZnVsbF9uICA9ICEoY250IDwgKG1heF9zaXplLW4rMSkpOw0KK2Fzc2lnbiBsZXZlbCA9IHsye2NudFthd119fSB8IGNudFthdy0xOmF3LTJdOw0KKyANCisvLyBOIGVudHJpZXMgc3RhdHVzDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCWNudCA8PSAjMSB7YXcrMXsxJ2IwfX07DQorCWVsc2UNCisJaWYoY2xyKQkJY250IDw9ICMxIHthdysxezEnYjB9fTsNCisJZWxzZQ0KKwlpZiggcmUgJiAhd2UpCWNudCA8PSAjMSBjbnQgKyB7IHthd3sxJ2IxfX0sIDEnYjF9Ow0KKwllbHNlDQorCWlmKCFyZSAmICB3ZSkJY250IDw9ICMxIGNudCArIHsge2F3ezEnYjB9fSwgMSdiMX07DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBSZWdpc3RlcmVkIEZ1bGxfbiAmIEVtcHR5X24gRmxhZ3MNCisvLw0KKyANCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJCQkJZW1wdHlfbl9yIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYoY2xyKQkJCQkJZW1wdHlfbl9yIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYod2UgJiAoY250ID49IChuLTEpICkgJiAhcmUpCQllbXB0eV9uX3IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZihyZSAmIChjbnQgPD0gbiApICYgIXdlKQkJZW1wdHlfbl9yIDw9ICMxIDEnYjE7DQorIA0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQkJCQlmdWxsX25fciA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKGNscikJCQkJCWZ1bGxfbl9yIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYod2UgJiAoY250ID49IChtYXhfc2l6ZS1uKSApICYgIXJlKQlmdWxsX25fciA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKHJlICYgKGNudCA8PSAobWF4X3NpemUtbisxKSkgJiAhd2UpCWZ1bGxfbl9yIDw9ICMxIDEnYjA7DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBTYW5pdHkgQ2hlY2sNCisvLw0KKyANCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmDQorYWx3YXlzIEAocG9zZWRnZSBjbGspDQorCWlmKHdlICYgZnVsbCkNCisJCSRkaXNwbGF5KCIlbSBXQVJOSU5HOiBXcml0aW5nIHdoaWxlIGZpZm8gaXMgRlVMTCAoJXQpIiwkdGltZSk7DQorIA0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQ0KKwlpZihyZSAmIGVtcHR5KQ0KKwkJJGRpc3BsYXkoIiVtIFdBUk5JTkc6IFJlYWRpbmcgd2hpbGUgZmlmbyBpcyBFTVBUWSAoJXQpIiwkdGltZSk7DQorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uDQorIA0KK2VuZG1vZHVsZQ0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9pZG1hLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfaWRtYS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhNjIwN2MKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfaWRtYS52CkBAIC0wLDAgKzEsMzg3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgSW50ZXJuYWwgRE1BIEVuZ2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX2lkbWEudix2IDEuMiAyMDAyLTA5LTI1IDA2OjA2OjQ5IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMjUgMDY6MDY6NDkgJAorLy8gICRSZXZpc2lvbjogMS4yICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xOSAxMjowNzozOCAgcnVkaQorLy8gICAgICAgICAgICAgICBJbml0aWFsIENoZWNraW4KKy8vCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX2lkbWEoCWNsaywgcnN0LAorCisJCS8vIFBhY2tldCBEaXNhc3NlbWJsZXIvQXNzZW1ibGVyIGludGVyZmFjZQorCQlyeF9kYXRhX3ZhbGlkLAorCQlyeF9kYXRhX2RvbmUsIAorCQlzZW5kX2RhdGEsCisJCXJkX25leHQsCisKKwkJdHhfdmFsaWQsCisJCXR4X2RhdGFfc3RfaSwKKwkJdHhfZGF0YV9zdF9vLAorCisJCS8vIFByb3RvY29sIEVuZ2luZQorCQl0eF9kbWFfZW4sIHJ4X2RtYV9lbiwgaWRtYV9kb25lLAorCQllcF9zZWwsCisKKwkJLy8gUmVnaXN0ZXIgRmlsZSBNYW5hZ2VyIEludGVyZmFjZQorCQlzaXplLAorCQlyeF9jbnQsIHJ4X2RvbmUsCisJCXR4X2J1c3ksCisKKwkJLy8gQmxvY2sgRnJhbWVzCisJCWVwX2JmX2VuLCBlcF9iZl9zaXplLAorCQlkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lLAorCisJCS8vIE1lbW9yeSBBcmIgaW50ZXJmYWNlCisJCW13ZSwgbXJlLCBlcF9lbXB0eSwgZXBfZW1wdHlfaW50LCBlcF9mdWxsCisJCSk7CisKKworLy8gUGFja2V0IERpc2Fzc2VtYmxlci9Bc3NlbWJsZXIgaW50ZXJmYWNlCitpbnB1dAkJY2xrLCByc3Q7CitpbnB1dAkJcnhfZGF0YV92YWxpZDsKK2lucHV0CQlyeF9kYXRhX2RvbmU7CitvdXRwdXQJCXNlbmRfZGF0YTsKK2lucHV0CQlyZF9uZXh0OworCitpbnB1dAkJdHhfdmFsaWQ7CitpbnB1dAlbNzowXQl0eF9kYXRhX3N0X2k7CitvdXRwdXQJWzc6MF0JdHhfZGF0YV9zdF9vOworCisvLyBQcm90b2NvbCBFbmdpbmUKK2lucHV0CQl0eF9kbWFfZW47CitpbnB1dAkJcnhfZG1hX2VuOworb3V0cHV0CQlpZG1hX2RvbmU7CS8vIERNQSBpcyBkb25lCitpbnB1dAlbMzowXQllcF9zZWw7CisKKy8vIFJlZ2lzdGVyIEZpbGUgTWFuYWdlciBJbnRlcmZhY2UKK2lucHV0CVs4OjBdCXNpemU7CQkvLyBNQVggUEwgU2l6ZSBpbiBieXRlcworb3V0cHV0CVs3OjBdCXJ4X2NudDsKK291dHB1dAkJcnhfZG9uZTsKK291dHB1dAkJdHhfYnVzeTsKKworaW5wdXQJCWVwX2JmX2VuOworaW5wdXQJWzY6MF0JZXBfYmZfc2l6ZTsKK291dHB1dAkJZHJvcHBlZF9mcmFtZTsKK291dHB1dAkJbWlzYWxpZ25lZF9mcmFtZTsKKworLy8gTWVtb3J5IEFyYiBpbnRlcmZhY2UKK291dHB1dAkJbXdlOworb3V0cHV0CQltcmU7CitpbnB1dAkJZXBfZW1wdHk7CitvdXRwdXQJCWVwX2VtcHR5X2ludDsKK2lucHV0CQllcF9mdWxsOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworcmVnCQl0eF9kbWFfZW5fcjsKK3JlZwlbODowXQlzaXpkX2M7CQkJLy8gSW50ZXJuYWwgc2l6ZSBjb3VudGVyCit3aXJlCQlhZHJfaW5jdzsKK3dpcmUJCWFkcl9pbmNiOword2lyZQkJc2l6X2RlYzsKK3dpcmUJCW13ZTsJCQkvLyBNZW1vcnkgV3JpdGUgZW5hYmxlCit3aXJlCQltcmU7CQkJLy8gTWVtb3J5IFJlYWQgZW5hYmxlCityZWcJCW13ZV9yOworcmVnCQlzaXpkX2lzX3plcm87CQkvLyBJbmRpY2F0ZXMgd2hlbiBhbGwgYnl0ZXMgaGF2ZSBiZWVuCisJCQkJCS8vIHRyYW5zZmVycmVkCit3aXJlCQlzaXpkX2lzX3plcm9fZDsKK3JlZwkJaWRtYV9kb25lOwkJLy8gRE1BIHRyYW5zZmVyIGlzIGRvbmUKK3dpcmUJCXNlbmRfZGF0YTsJCS8vIEVuYWJsZSBVVE1JIFRyYW5zbWl0dGVyCityZWcJCXJ4X2RhdGFfZG9uZV9yOworcmVnCQlyeF9kYXRhX3ZhbGlkX3I7Cit3aXJlCQlmZl9yZSwgZmZfZnVsbCwgZmZfZW1wdHk7CityZWcJCWZmX3dlLCBmZl93ZTE7CityZWcJCXR4X2RtYV9lbl9yMTsKK3JlZwkJdHhfZG1hX2VuX3IyOworcmVnCQl0eF9kbWFfZW5fcjM7CityZWcJCXNlbmRfZGF0YV9yOword2lyZQkJZmZfY2xyOworcmVnCVs3OjBdCXJ4X2NudDsKK3JlZwlbNzowXQlyeF9jbnRfcjsKK3JlZwkJZXBfZW1wdHlfcjsKK3JlZwkJZXBfZW1wdHlfbGF0Y2hlZDsKK3dpcmUJCWVwX2VtcHR5X2ludDsKK3JlZwlbNjowXQllYzsKK3dpcmUJCWVjX2NscjsKK3JlZwkJZHJvcHBlZF9mcmFtZTsKK3JlZwlbNjowXQlyY19jbnQ7Cit3aXJlCQlyY19jbHI7CityZWcJCWVwX2Z1bGxfbGF0Y2hlZDsKK3dpcmUJCWVwX2Z1bGxfaW50OworcmVnCQltaXNhbGlnbmVkX2ZyYW1lOworcmVnCQl0eF92YWxpZF9yOword2lyZQkJdHhfdmFsaWRfZTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEZvciBJTiBCbG9jayBGcmFtZXMgdHJhbnNtaXQgZnJhbWVzIGluIFtlcF9iZl9zaXplXSBieXRlIHF1YW50aXRpZXMKKy8vCisKK2BpZmRlZiBVU0IxX0JGX0VOQUJMRQorCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQkJZWMgPD0gIzEgNydoMDsKKwllbHNlCisJaWYoIWVwX2JmX2VuIHwgZWNfY2xyKQllYyA8PSAjMSA3J2gwOworCWVsc2UKKwlpZihtcmUpCQkJZWMgPD0gIzEgZWMgKyA3J2gxOworCithc3NpZ24gZWNfY2xyID0gKGVjID09IGVwX2JmX3NpemUpIHwgdHhfZG1hX2VuOyAKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJZXBfZW1wdHlfbGF0Y2hlZCA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihlY19jbHIpCWVwX2VtcHR5X2xhdGNoZWQgPD0gIzEgZXBfZW1wdHk7CisKK2Fzc2lnbiBlcF9lbXB0eV9pbnQgPSBlcF9iZl9lbiA/IGVwX2VtcHR5X2xhdGNoZWQgOiBlcF9lbXB0eTsKK2BlbHNlCithc3NpZ24gZXBfZW1wdHlfaW50ID0gZXBfZW1wdHk7CitgZW5kaWYKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGb3IgT1VUIEJsb2NrIEZyYW1lcyBhbHdheXMgc3RvcmUgaW4gW2VwX2JmX3NpemVdIGJ5dGUgY2h1bmtzCisvLyBpZiBmaWZvIGNhbid0IGFjY2VwdCBbZXBfYmZfc2l6ZV0gYnl0ZXMganVuayB0aGUgZW50aXJlIFtlcF9iZl9zaXplXQorLy8gYnl0ZSBmcmFtZQorLy8KKworYGlmZGVmIFVTQjFfQkZfRU5BQkxFCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQkJcmNfY250IDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKCFlcF9iZl9lbiB8IHJjX2NscikJcmNfY250IDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKG13ZV9yKQkJcmNfY250IDw9ICMxIHJjX2NudCArIDcnaDE7CisKK2Fzc2lnbiByY19jbHIgPSAoKHJjX2NudCA9PSBlcF9iZl9zaXplKSAmIG13ZV9yKSB8IHJ4X2RtYV9lbjsgCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCWVwX2Z1bGxfbGF0Y2hlZCA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihyY19jbHIpCWVwX2Z1bGxfbGF0Y2hlZCA8PSAjMSBlcF9mdWxsOworCithc3NpZ24gZXBfZnVsbF9pbnQgPSBlcF9iZl9lbiA/IGVwX2Z1bGxfbGF0Y2hlZCA6IGVwX2Z1bGw7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWRyb3BwZWRfZnJhbWUgPD0gIzEgcmNfY2xyICYgZXBfZnVsbCAmIGVwX2JmX2VuOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwltaXNhbGlnbmVkX2ZyYW1lIDw9ICMxIHJ4X2RhdGFfZG9uZV9yICYgZXBfYmZfZW4gJiAocmNfY250IT03J2QwMCk7CitgZWxzZQorYXNzaWduIGVwX2Z1bGxfaW50ID0gZXBfZnVsbDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZHJvcHBlZF9mcmFtZSA8PSAjMSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwltaXNhbGlnbmVkX2ZyYW1lIDw9ICMxIDEnYjA7CisKK2BlbmRpZgorCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCithbHdheXMgQChwb3NlZGdlIGRyb3BwZWRfZnJhbWUpCisJJGRpc3BsYXkoIldBUk5JTkc6IEJGOiBEcm9wZWQgb25lIE9VVCBmcmFtZSAobm8gc3BhY2UgaW4gRklGTykgKCV0KSIsJHRpbWUpOworCithbHdheXMgQChwb3NlZGdlIG1pc2FsaWduZWRfZnJhbWUpCisJJGRpc3BsYXkoIldBUk5JTkc6IEJGOiBSZWNlaXZlZCBtaXNhbGlnbmVkIGZyYW1lICgldCkiLCR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGSUZPIGludGVyZmFjZQorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJbXdlX3IgPD0gIzEgcnhfZGF0YV92YWxpZDsKKworYXNzaWduIG13ZSA9IG13ZV9yICYgIWVwX2Z1bGxfaW50OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcnhfZGF0YV92YWxpZF9yIDw9ICMxIHJ4X2RhdGFfdmFsaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJ4X2RhdGFfZG9uZV9yIDw9ICMxIHJ4X2RhdGFfZG9uZTsKKworLy8gR2VuZXJhdGUgb25lIGN5Y2xlIHB1bHNlcyBmb3IgdHggYW5kIHJ4IGRtYSBlbmFibGUKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X2RtYV9lbl9yIDw9ICMxIHR4X2RtYV9lbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfZG1hX2VuX3IxIDw9IHR4X2RtYV9lbl9yOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF9kbWFfZW5fcjIgPD0gdHhfZG1hX2VuX3IxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF9kbWFfZW5fcjMgPD0gdHhfZG1hX2VuX3IyOworCisvLyBETUEgRG9uZSBJbmRpY2F0b3IKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlkbWFfZG9uZSA8PSAjMSAocnhfZGF0YV9kb25lX3IgfCBzaXpkX2lzX3plcm9fZCB8IGVwX2VtcHR5X2ludCk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBSWCBTaXplIENvdW50ZXIKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJcnhfY250X3IgPD0gIzEgOCdoMDA7CisJZWxzZQorCWlmKHJ4X2RhdGFfZG9uZV9yKQkJcnhfY250X3IgPD0gIzEgOCdoMDA7CisJZWxzZQorCWlmKHJ4X2RhdGFfdmFsaWQpCQlyeF9jbnRfciA8PSAjMSByeF9jbnRfciArIDgnaDAxOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJcnhfY250IDw9ICMxIDgnaDAwOworCWVsc2UKKwlpZihyeF9kYXRhX2RvbmVfcikJcnhfY250IDw9ICMxIHJ4X2NudF9yOworCithc3NpZ24gcnhfZG9uZSA9IHJ4X2RhdGFfZG9uZV9yOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVHJhbnNtaXQgU2l6ZSBDb3VudGVyIChjb3VudGluZyBiYWNrd2FyZCBmcm9tIGlucHV0IHNpemUpCisvLyBGb3IgTUFYIHBhY2tldCBzaXplCisvLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCXNpemRfYyA8PSAjMSA5J2gxZmY7CisJZWxzZQorCWlmKHR4X2RtYV9lbikJCQlzaXpkX2MgPD0gIzEgc2l6ZTsKKwllbHNlCisJaWYoc2l6X2RlYykJCQlzaXpkX2MgPD0gIzEgc2l6ZF9jIC0gOSdoMTsKKworYXNzaWduIHNpel9kZWMgPSAodHhfZG1hX2VuX3IgfCB0eF9kbWFfZW5fcjEgfCByZF9uZXh0KSAmICFzaXpkX2lzX3plcm9fZDsKKworYXNzaWduIHNpemRfaXNfemVyb19kID0gc2l6ZF9jID09IDknaDA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNpemRfaXNfemVybyA8PSAjMSBzaXpkX2lzX3plcm9fZDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRYIExvZ2ljCisvLworCithc3NpZ24gdHhfYnVzeSA9IHNlbmRfZGF0YSB8IHR4X2RtYV9lbl9yIHwgdHhfZG1hX2VuOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF92YWxpZF9yIDw9ICMxIHR4X3ZhbGlkOworCithc3NpZ24gdHhfdmFsaWRfZSA9IHR4X3ZhbGlkX3IgJiAhdHhfdmFsaWQ7CisKKy8vIFNpbmNlIHdlIGFyZSBwcmVmZXRjaGluZyB0d28gZW50cmllcyBpbiB0byBvdXIgZmFzdCBmaWZvLCB3ZQorLy8gbmVlZCB0byBrbm93IHdoZW4gZXhhY3RseSBlcF9lbXB0eSB3YXMgYXNzZXJ0ZWQsIGFzIHdlIG1pZ2h0CisvLyBvbmx5IG5lZWQgMSBvciAyIGJ5dGVzLiBUaGlzIGlzIGZvciBlcF9lbXB0eV9yCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwX2VtcHR5X3IgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoIXR4X3ZhbGlkKQkJCQllcF9lbXB0eV9yIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHR4X2RtYV9lbl9yMikJCQllcF9lbXB0eV9yIDw9ICMxIGVwX2VtcHR5X2ludDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJc2VuZF9kYXRhX3IgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoKHR4X2RtYV9lbl9yICYgIWVwX2VtcHR5X2ludCkpCQlzZW5kX2RhdGFfciA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZihyZF9uZXh0ICYgKHNpemRfaXNfemVyb19kIHwgKGVwX2VtcHR5X2ludCAmICFzaXpkX2lzX3plcm9fZCkpICkKKwkJCQkJCXNlbmRfZGF0YV9yIDw9ICMxIDEnYjA7CisKK2Fzc2lnbiBzZW5kX2RhdGEgPSAoc2VuZF9kYXRhX3IgJiAhZXBfZW1wdHlfciAmIAorCQkhKHNpemRfaXNfemVybyAmIHNpemU9PTknaDAxKSkgfCB0eF9kbWFfZW5fcjE7CisKK2Fzc2lnbiBtcmUgPSAodHhfZG1hX2VuX3IxIHwgdHhfZG1hX2VuX3IgfCByZF9uZXh0KSAmCisJCSFzaXpkX2lzX3plcm9fZCAmICFlcF9lbXB0eV9pbnQgJiAoc2VuZF9kYXRhIHwgdHhfZG1hX2VuX3IxIHwgdHhfZG1hX2VuX3IpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlmZl93ZTEgPD0gbXJlOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlmZl93ZSA8PSBmZl93ZTE7CisKK2Fzc2lnbiBmZl9yZSA9IHJkX25leHQ7CisKK2Fzc2lnbiBmZl9jbHIgPSAhdHhfdmFsaWQ7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBJRE1BIGZhc3QgcHJlZmV0Y2ggZmlmbworLy8KKworLy8gdHggZmlmbwordXNiMWRfZmlmbzIgZmYoCisJLmNsaygJCWNsawkJKSwKKwkucnN0KAkJcnN0CQkpLAorCS5jbHIoCQlmZl9jbHIJCSksCisJLmRpbigJCXR4X2RhdGFfc3RfaQkpLAorCS53ZSgJCWZmX3dlCQkpLAorCS5kb3V0KAkJdHhfZGF0YV9zdF9vCSksCisJLnJlKAkJZmZfcmUJCSkKKwkpOworCitlbmRtb2R1bGUKKworCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGEudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wYS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiYjcwZGUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGEudgpAQCAtMCwwICsxLDMzMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFBhY2tldCBBc3NlbWJsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXNzZW1ibGVzIFRva2VuIGFuZCBEYXRhIFVTQiBwYWNrZXRzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9wYS52LHYgMS4xLjEuMSAyMDAyLTA5LTE5IDEyOjA3OjEzIHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMTkgMTI6MDc6MTMgJAorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLworLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF9wYSgJY2xrLCByc3QsCisKKwkJLy8gVVRNSSBUWCBJL0YKKwkJdHhfZGF0YSwgdHhfdmFsaWQsIHR4X3ZhbGlkX2xhc3QsIHR4X3JlYWR5LAorCQl0eF9maXJzdCwKKworCQkvLyBQcm90b2NvbCBFbmdpbmUgSW50ZXJmYWNlCisJCXNlbmRfdG9rZW4sIHRva2VuX3BpZF9zZWwsCisJCXNlbmRfZGF0YSwgZGF0YV9waWRfc2VsLAorCisJCS8vIElETUEgSW50ZXJmYWNlCisJCXR4X2RhdGFfc3QsIHJkX25leHQsCisKKwkJZXBfZW1wdHkKKwkJKTsKKworaW5wdXQJCWNsaywgcnN0OworCisvLyBVVE1JIFRYIEludGVyZmFjZQorb3V0cHV0CVs3OjBdCXR4X2RhdGE7CitvdXRwdXQJCXR4X3ZhbGlkOworb3V0cHV0CQl0eF92YWxpZF9sYXN0OworaW5wdXQJCXR4X3JlYWR5Oworb3V0cHV0CQl0eF9maXJzdDsKKworLy8gUHJvdG9jb2wgRW5naW5lIEludGVyZmFjZQoraW5wdXQJCXNlbmRfdG9rZW47CitpbnB1dAlbMTowXQl0b2tlbl9waWRfc2VsOworaW5wdXQJCXNlbmRfZGF0YTsKK2lucHV0CVsxOjBdCWRhdGFfcGlkX3NlbDsKKworLy8gSURNQSBJbnRlcmZhY2UKK2lucHV0CVs3OjBdCXR4X2RhdGFfc3Q7CitvdXRwdXQJCXJkX25leHQ7CisKK2lucHV0CQllcF9lbXB0eTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3BhcmFtZXRlcglbMzowXQkvLyBzeW5vcHN5cyBlbnVtIHN0YXRlCisJCUlETEUgICA9IDQnYjAwMDEsCisJCURBVEEgICA9IDQnYjAwMTAsCisJCUNSQzEgICA9IDQnYjAxMDAsCisJCUNSQzIgICA9IDQnYjEwMDA7CisKK3JlZwlbMzowXQkvKiBzeW5vcHN5cyBlbnVtIHN0YXRlICovIHN0YXRlLCBuZXh0X3N0YXRlOworLy8gc3lub3BzeXMgc3RhdGVfdmVjdG9yIHN0YXRlCisKK3JlZwkJbGFzdDsKK3JlZwkJcmRfbmV4dDsKKworcmVnCVs3OjBdCXRva2VuX3BpZCwgZGF0YV9waWQ7CS8vIFBJRHMgZnJvbSBzZWxlY3RvcnMKK3JlZwlbNzowXQl0eF9kYXRhX2Q7CityZWcJWzc6MF0JdHhfZGF0YV9kYXRhOworcmVnCQlkc2VsOworcmVnCQl0eF92YWxpZF9kOworcmVnCQlzZW5kX3Rva2VuX3I7CityZWcJWzc6MF0JdHhfc3BlY19kYXRhOworcmVnCQljcmNfc2VsMSwgY3JjX3NlbDI7CityZWcJCXR4X2ZpcnN0X3I7CityZWcJCXNlbmRfZGF0YV9yOword2lyZQkJY3JjMTZfY2xyOworcmVnCVsxNTowXQljcmMxNjsKK3dpcmUJWzE1OjBdCWNyYzE2X25leHQ7Cit3aXJlCVsxNTowXQljcmMxNl9yZXY7CityZWcJCWNyYzE2X2FkZDsKK3JlZwkJc2VuZF9kYXRhX3IyOworcmVnCQl0eF92YWxpZF9yOworcmVnCQl0eF92YWxpZF9yMTsKKword2lyZQkJemVyb19sZW5ndGg7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworcmVnCQl6ZXJvX2xlbmd0aF9yOworYXNzaWduCQl6ZXJvX2xlbmd0aCA9IGVwX2VtcHR5OworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQl6ZXJvX2xlbmd0aF9yIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKGxhc3QpCXplcm9fbGVuZ3RoX3IgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoY3JjMTZfY2xyKQl6ZXJvX2xlbmd0aF9yIDw9ICMxIHplcm9fbGVuZ3RoOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF92YWxpZF9yMSA8PSAjMSB0eF92YWxpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfdmFsaWRfciA8PSAjMSB0eF92YWxpZF9yMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJc2VuZF90b2tlbl9yIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHNlbmRfdG9rZW4pCXNlbmRfdG9rZW5fciA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZih0eF9yZWFkeSkJc2VuZF90b2tlbl9yIDw9ICMxIDEnYjA7CisKKy8vIFBJRCBTZWxlY3QKK2Fsd2F5cyBAKHRva2VuX3BpZF9zZWwpCisJY2FzZSh0b2tlbl9waWRfc2VsKQkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICAyJ2QwOiB0b2tlbl9waWQgPSB7ICB+YFVTQkZfVF9QSURfQUNLLCAgIGBVU0JGX1RfUElEX0FDS307CisJICAgMidkMTogdG9rZW5fcGlkID0geyB+YFVTQkZfVF9QSURfTkFDSywgIGBVU0JGX1RfUElEX05BQ0t9OworCSAgIDInZDI6IHRva2VuX3BpZCA9IHt+YFVTQkZfVF9QSURfU1RBTEwsIGBVU0JGX1RfUElEX1NUQUxMfTsKKwkgICAyJ2QzOiB0b2tlbl9waWQgPSB7IH5gVVNCRl9UX1BJRF9OWUVULCAgYFVTQkZfVF9QSURfTllFVH07CisJZW5kY2FzZQorCithbHdheXMgQChkYXRhX3BpZF9zZWwpCisJY2FzZShkYXRhX3BpZF9zZWwpCQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDInZDA6IGRhdGFfcGlkID0geyB+YFVTQkZfVF9QSURfREFUQTAsIGBVU0JGX1RfUElEX0RBVEEwfTsKKwkgICAyJ2QxOiBkYXRhX3BpZCA9IHsgfmBVU0JGX1RfUElEX0RBVEExLCBgVVNCRl9UX1BJRF9EQVRBMX07CisJICAgMidkMjogZGF0YV9waWQgPSB7IH5gVVNCRl9UX1BJRF9EQVRBMiwgYFVTQkZfVF9QSURfREFUQTJ9OworCSAgIDInZDM6IGRhdGFfcGlkID0geyB+YFVTQkZfVF9QSURfTURBVEEsIGBVU0JGX1RfUElEX01EQVRBfTsKKwllbmRjYXNlCisKKy8vIERhdGEgcGF0aCBNdXhlcworCithbHdheXMgQChzZW5kX3Rva2VuIG9yIHNlbmRfdG9rZW5fciBvciB0b2tlbl9waWQgb3IgdHhfZGF0YV9kYXRhKQorCWlmKHNlbmRfdG9rZW4gfCBzZW5kX3Rva2VuX3IpCXR4X2RhdGFfZCA9IHRva2VuX3BpZDsKKwllbHNlCQkJCXR4X2RhdGFfZCA9IHR4X2RhdGFfZGF0YTsKKworYWx3YXlzIEAoZHNlbCBvciB0eF9kYXRhX3N0IG9yIHR4X3NwZWNfZGF0YSkKKwlpZihkc2VsKQl0eF9kYXRhX2RhdGEgPSB0eF9zcGVjX2RhdGE7CisJZWxzZQkJdHhfZGF0YV9kYXRhID0gdHhfZGF0YV9zdDsKKworYWx3YXlzIEAoY3JjX3NlbDEgb3IgY3JjX3NlbDIgb3IgZGF0YV9waWQgb3IgY3JjMTZfcmV2KQorCWlmKCFjcmNfc2VsMSAmICFjcmNfc2VsMikJdHhfc3BlY19kYXRhID0gZGF0YV9waWQ7CisJZWxzZQorCWlmKGNyY19zZWwxKQkJCXR4X3NwZWNfZGF0YSA9IGNyYzE2X3JldlsxNTo4XTsJLy8gQ1JDIDEKKwllbHNlCQkJCXR4X3NwZWNfZGF0YSA9IGNyYzE2X3Jldls3OjBdOwkvLyBDUkMgMgorCithc3NpZ24gdHhfZGF0YSA9IHR4X2RhdGFfZDsKKworLy8gVFggVmFsaWQgYXNzaWdubWVudAorYXNzaWduIHR4X3ZhbGlkX2xhc3QgPSBzZW5kX3Rva2VuIHwgbGFzdDsKK2Fzc2lnbiB0eF92YWxpZCA9IHR4X3ZhbGlkX2Q7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X2ZpcnN0X3IgPD0gIzEgc2VuZF90b2tlbiB8IHNlbmRfZGF0YTsKKworYXNzaWduIHR4X2ZpcnN0ID0gKHNlbmRfdG9rZW4gfCBzZW5kX2RhdGEpICYgISB0eF9maXJzdF9yOworCisvLyBDUkMgTG9naWMKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNlbmRfZGF0YV9yIDw9ICMxIHNlbmRfZGF0YTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2VuZF9kYXRhX3IyIDw9ICMxIHNlbmRfZGF0YV9yOworCithc3NpZ24gY3JjMTZfY2xyID0gc2VuZF9kYXRhICYgIXNlbmRfZGF0YV9yOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljcmMxNl9hZGQgPD0gIzEgIXplcm9fbGVuZ3RoX3IgJgorCQkJKChzZW5kX2RhdGFfciAmICFzZW5kX2RhdGFfcjIpIHwgKHJkX25leHQgJiAhY3JjX3NlbDEpKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoY3JjMTZfY2xyKQkJY3JjMTYgPD0gIzEgMTYnaGZmZmY7CisJZWxzZQorCWlmKGNyYzE2X2FkZCkJCWNyYzE2IDw9ICMxIGNyYzE2X25leHQ7CisKK3VzYjFkX2NyYzE2IHUxKAorCS5jcmNfaW4oCWNyYzE2CQkpLAorCS5kaW4oCXt0eF9kYXRhX3N0WzBdLCB0eF9kYXRhX3N0WzFdLAorCQl0eF9kYXRhX3N0WzJdLCB0eF9kYXRhX3N0WzNdLAorCQl0eF9kYXRhX3N0WzRdLCB0eF9kYXRhX3N0WzVdLAorCQl0eF9kYXRhX3N0WzZdLCB0eF9kYXRhX3N0WzddfQkpLAorCS5jcmNfb3V0KAljcmMxNl9uZXh0CQkpICk7CisKK2Fzc2lnbiBjcmMxNl9yZXZbMTVdID0gfmNyYzE2WzhdOworYXNzaWduIGNyYzE2X3JldlsxNF0gPSB+Y3JjMTZbOV07Cithc3NpZ24gY3JjMTZfcmV2WzEzXSA9IH5jcmMxNlsxMF07Cithc3NpZ24gY3JjMTZfcmV2WzEyXSA9IH5jcmMxNlsxMV07Cithc3NpZ24gY3JjMTZfcmV2WzExXSA9IH5jcmMxNlsxMl07Cithc3NpZ24gY3JjMTZfcmV2WzEwXSA9IH5jcmMxNlsxM107Cithc3NpZ24gY3JjMTZfcmV2WzldICA9IH5jcmMxNlsxNF07Cithc3NpZ24gY3JjMTZfcmV2WzhdICA9IH5jcmMxNlsxNV07Cithc3NpZ24gY3JjMTZfcmV2WzddICA9IH5jcmMxNlswXTsKK2Fzc2lnbiBjcmMxNl9yZXZbNl0gID0gfmNyYzE2WzFdOworYXNzaWduIGNyYzE2X3Jldls1XSAgPSB+Y3JjMTZbMl07Cithc3NpZ24gY3JjMTZfcmV2WzRdICA9IH5jcmMxNlszXTsKK2Fzc2lnbiBjcmMxNl9yZXZbM10gID0gfmNyYzE2WzRdOworYXNzaWduIGNyYzE2X3JldlsyXSAgPSB+Y3JjMTZbNV07Cithc3NpZ24gY3JjMTZfcmV2WzFdICA9IH5jcmMxNls2XTsKK2Fzc2lnbiBjcmMxNl9yZXZbMF0gID0gfmNyYzE2WzddOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVHJhbnNtaXQvRW5jb2RlIHN0YXRlIG1hY2hpbmUKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXN0YXRlIDw9ICMxIElETEU7CisJZWxzZQkJc3RhdGUgPD0gIzEgbmV4dF9zdGF0ZTsKKworYWx3YXlzIEAoc3RhdGUgb3Igc2VuZF9kYXRhIG9yIHR4X3JlYWR5IG9yIHR4X3ZhbGlkX3Igb3IgemVyb19sZW5ndGgpCisgICBiZWdpbgorCW5leHRfc3RhdGUgPSBzdGF0ZTsJLy8gRGVmYXVsdCBkb24ndCBjaGFuZ2UgY3VycmVudCBzdGF0ZQorCXR4X3ZhbGlkX2QgPSAxJ2IwOworCWRzZWwgPSAxJ2IwOworCXJkX25leHQgPSAxJ2IwOworCWxhc3QgPSAxJ2IwOworCWNyY19zZWwxID0gMSdiMDsKKwljcmNfc2VsMiA9IDEnYjA7CisJY2FzZShzdGF0ZSkJCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgSURMRToKKwkJICAgYmVnaW4KKwkJCWlmKHplcm9fbGVuZ3RoICYgc2VuZF9kYXRhKQorCQkJICAgYmVnaW4KKwkJCQl0eF92YWxpZF9kID0gMSdiMTsKKwkJCQlkc2VsID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gQ1JDMTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJaWYoc2VuZF9kYXRhKQkJLy8gU2VuZCBEQVRBIHBhY2tldAorCQkJICAgYmVnaW4KKwkJCQl0eF92YWxpZF9kID0gMSdiMTsKKwkJCQlkc2VsID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gREFUQTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKwkgICBEQVRBOgorCQkgICBiZWdpbgorCQkJaWYodHhfcmVhZHkgJiB0eF92YWxpZF9yKQorCQkJCXJkX25leHQgPSAxJ2IxOworCisJCQl0eF92YWxpZF9kID0gMSdiMTsKKwkJCWlmKCFzZW5kX2RhdGEgJiB0eF9yZWFkeSAmIHR4X3ZhbGlkX3IpCisJCQkgICBiZWdpbgorCQkJCWRzZWwgPSAxJ2IxOworCQkJCWNyY19zZWwxID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gQ1JDMTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKwkgICBDUkMxOgorCQkgICBiZWdpbgorCQkJZHNlbCA9IDEnYjE7CisJCQl0eF92YWxpZF9kID0gMSdiMTsKKwkJCWlmKHR4X3JlYWR5KQorCQkJICAgYmVnaW4KKwkJCQlsYXN0ID0gMSdiMTsKKwkJCQljcmNfc2VsMiA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IENSQzI7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJdHhfdmFsaWRfZCA9IDEnYjE7CisJCQkJY3JjX3NlbDEgPSAxJ2IxOworCQkJICAgZW5kCisKKwkJICAgZW5kCisJICAgQ1JDMjoKKwkJICAgYmVnaW4KKwkJCWRzZWwgPSAxJ2IxOworCQkJY3JjX3NlbDIgPSAxJ2IxOworCQkJaWYodHhfcmVhZHkpCisJCQkgICBiZWdpbgorCQkJCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCWxhc3QgPSAxJ2IxOworCQkJICAgZW5kCisKKwkJICAgZW5kCisJZW5kY2FzZQorICAgZW5kCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGQudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wZC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiMjU3MmIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGQudgpAQCAtMCwwICsxLDM5OCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFBhY2tldCBEaXNhc3NlbWJsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGlzYXNzZW1ibGVzIFRva2VuIGFuZCBEYXRhIFVTQiBwYWNrZXRzICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9wZC52LHYgMS4yIDIwMDItMDktMjUgMDY6MDY6NDkgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0yNSAwNjowNjo0OSAkCisvLyAgJFJldmlzaW9uOiAxLjIgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE5IDEyOjA3OjE3ICBydWRpCisvLyAgICAgICAgICAgICAgIEluaXRpYWwgQ2hlY2tpbgorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF9wZCgJY2xrLCByc3QsCisKKwkJLy8gVVRNSSBSWCBJL0YKKwkJcnhfZGF0YSwgcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyLAorCisJCS8vIFBJRCBJbmZvcm1hdGlvbgorCQlwaWRfT1VULCBwaWRfSU4sIHBpZF9TT0YsIHBpZF9TRVRVUCwKKwkJcGlkX0RBVEEwLCBwaWRfREFUQTEsIHBpZF9EQVRBMiwgcGlkX01EQVRBLAorCQlwaWRfQUNLLCBwaWRfTkFDSywgcGlkX1NUQUxMLCBwaWRfTllFVCwKKwkJcGlkX1BSRSwgcGlkX0VSUiwgcGlkX1NQTElULCBwaWRfUElORywKKwkJcGlkX2Nrc19lcnIsCisKKwkJLy8gVG9rZW4gSW5mb3JtYXRpb24KKwkJdG9rZW5fZmFkciwgdG9rZW5fZW5kcCwgdG9rZW5fdmFsaWQsIGNyYzVfZXJyLAorCQlmcmFtZV9ubywKKworCQkvLyBSZWNlaXZlIERhdGEgT3V0cHV0CisJCXJ4X2RhdGFfc3QsIHJ4X2RhdGFfdmFsaWQsIHJ4X2RhdGFfZG9uZSwgY3JjMTZfZXJyLAorCisJCS8vIE1pc2MuCisJCXNlcV9lcnIsIHJ4X2J1c3kKKwkJKTsKKworaW5wdXQJCWNsaywgcnN0OworCisJCS8vVVRNSSBSWCBJbnRlcmZhY2UKK2lucHV0CVs3OjBdCXJ4X2RhdGE7CitpbnB1dAkJcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyOworCisJCS8vIERlY29kZWQgUElEcyAodXNlZCB3aGVuIHRva2VuX3ZhbGlkIGlzIGFzc2VydGVkKQorb3V0cHV0CQlwaWRfT1VULCBwaWRfSU4sIHBpZF9TT0YsIHBpZF9TRVRVUDsKK291dHB1dAkJcGlkX0RBVEEwLCBwaWRfREFUQTEsIHBpZF9EQVRBMiwgcGlkX01EQVRBOworb3V0cHV0CQlwaWRfQUNLLCBwaWRfTkFDSywgcGlkX1NUQUxMLCBwaWRfTllFVDsKK291dHB1dAkJcGlkX1BSRSwgcGlkX0VSUiwgcGlkX1NQTElULCBwaWRfUElORzsKK291dHB1dAkJcGlkX2Nrc19lcnI7CQkvLyBJbmRpY2F0ZXMgYSBQSUQgY2hlY2tzdW0gZXJyb3IKKworCitvdXRwdXQJWzY6MF0JdG9rZW5fZmFkcjsJCS8vIEZ1bmN0aW9uIGFkZHJlc3MgZnJvbSB0b2tlbgorb3V0cHV0CVszOjBdCXRva2VuX2VuZHA7CQkvLyBFbmRwb2ludCBudW1iZXIgZnJvbSB0b2tlbgorb3V0cHV0CQl0b2tlbl92YWxpZDsJCS8vIFRva2VuIGlzIHZhbGlkCitvdXRwdXQJCWNyYzVfZXJyOwkJLy8gVG9rZW4gY3JjNSBlcnJvcgorb3V0cHV0CVsxMDowXQlmcmFtZV9ubzsJCS8vIEZyYW1lIG51bWJlciBmb3IgU09GIHRva2VucworCitvdXRwdXQJWzc6MF0JcnhfZGF0YV9zdDsJCS8vIERhdGEgdG8gbWVtb3J5IHN0b3JlIHVuaXQKK291dHB1dAkJcnhfZGF0YV92YWxpZDsJCS8vIERhdGEgb24gcnhfZGF0YV9zdCBpcyB2YWxpZAorb3V0cHV0CQlyeF9kYXRhX2RvbmU7CQkvLyBJbmRpY2F0ZXMgZW5kIG9mIGEgdHJhbnNmZXIKK291dHB1dAkJY3JjMTZfZXJyOwkJLy8gRGF0YSBwYWNrZXQgQ1JDIDE2IGVycm9yCisKK291dHB1dAkJc2VxX2VycjsJCS8vIFN0YXRlIE1hY2hpbmUgU2VxdWVuY2UgRXJyb3IKK291dHB1dAkJcnhfYnVzeTsJCS8vIFJlY2VpdmlnIERhdGEgUGFja2V0CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCitwYXJhbWV0ZXIJWzM6MF0JLy8gc3lub3BzeXMgZW51bSBzdGF0ZQorCQlJRExFICAgPSA0J2IwMDAxLAorCQlBQ1RJVkUgPSA0J2IwMDEwLAorCQlUT0tFTiAgPSA0J2IwMTAwLAorCQlEQVRBICAgPSA0J2IxMDAwOworCityZWcJWzM6MF0JLyogc3lub3BzeXMgZW51bSBzdGF0ZSAqLyBzdGF0ZSwgbmV4dF9zdGF0ZTsKKy8vIHN5bm9wc3lzIHN0YXRlX3ZlY3RvciBzdGF0ZQorCityZWcJWzc6MF0JcGlkOwkJCS8vIFBhY2tldCBQREkKK3JlZwkJcGlkX2xlX3NtOwkJLy8gUElEIExvYWQgZW5hYmxlIGZyb20gU3RhdGUgTWFjaGluZQord2lyZQkJcGlkX2xkX2VuOwkJLy8gRW5hYmxlIGxvYWRpbmcgb2YgUElEIChhbGwgY29uZGl0aW9ucykKK3dpcmUJCXBpZF9ja3NfZXJyOwkJLy8gSW5kaWNhdGVzIGEgcGlkIGNoZWNrc3VtIGVycgorCisJCS8vIERlY29kZWQgUElEIHZhbHVlcword2lyZQkJcGlkX09VVCwgcGlkX0lOLCBwaWRfU09GLCBwaWRfU0VUVVA7Cit3aXJlCQlwaWRfREFUQTAsIHBpZF9EQVRBMSwgcGlkX0RBVEEyLCBwaWRfTURBVEE7Cit3aXJlCQlwaWRfQUNLLCBwaWRfTkFDSywgcGlkX1NUQUxMLCBwaWRfTllFVDsKK3dpcmUJCXBpZF9QUkUsIHBpZF9FUlIsIHBpZF9TUExJVCwgcGlkX1BJTkcsIHBpZF9SRVM7Cit3aXJlCQlwaWRfVE9LRU47CQkvLyBBbGwgVE9LRU4gcGFja2V0IHRoYXQgd2UgcmVjb2duaXplCit3aXJlCQlwaWRfREFUQTsJCS8vIEFsbCBEQVRBIHBhY2tldHMgdGhhdCB3ZSByZWNvZ25pemUKKworcmVnCVs3OjBdCXRva2VuMCwgdG9rZW4xOwkJLy8gVG9rZW4gUmVnaXN0ZXJzCityZWcJCXRva2VuX2xlXzEsIHRva2VuX2xlXzI7CS8vIExhdGNoIGVuYWJsZXMgZm9yIHRva2VuIHN0b3JhZ2UgcmVnaXN0ZXJzCit3aXJlCVs0OjBdCXRva2VuX2NyYzU7CisKK3JlZwlbNzowXQlkMCwgZDEsIGQyOwkJLy8gRGF0YSBwYXRoIGRlbGF5IGxpbmUgKHVzZWQgdG8gZmlsdGVyIG91dCBjcmNzKQorcmVnCQlkYXRhX3ZhbGlkX2Q7CQkvLyBEYXRhIFZhbGlkIG91dHB1dCBmcm9tIFN0YXRlIE1hY2hpbmUKK3JlZwkJZGF0YV9kb25lOwkJLy8gRGF0YSBjeWNsZSBjb21wbGV0ZSBvdXRwdXQgZnJvbSBTdGF0ZSBNYWNoaW5lCityZWcJCWRhdGFfdmFsaWQwOyAJCS8vIERhdGEgdmFsaWQgZGVsYXkgbGluZQorcmVnCQlyeHYxOworcmVnCQlyeHYyOworCityZWcJCXNlcV9lcnI7CQkvLyBTdGF0ZSBtYWNoaW5lIHNlcXVlbmNlIGVycm9yCisKK3JlZwkJcGlkX2FjazsKKworcmVnCQl0b2tlbl92YWxpZF9yMTsKK3JlZwkJdG9rZW5fdmFsaWRfc3RyMSwgdG9rZW5fdmFsaWRfc3RyMjsKKworcmVnCQlyeF9hY3RpdmVfcjsKKword2lyZQlbNDowXQljcmM1X291dDsKK3dpcmUJWzQ6MF0JY3JjNV9vdXQyOword2lyZQkJY3JjMTZfY2xyOworcmVnCVsxNTowXQljcmMxNl9zdW07Cit3aXJlCVsxNTowXQljcmMxNl9vdXQ7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCityZWcJcnhfYnVzeSwgcnhfYnVzeV9kOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCXJ4X2J1c3lfZCA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihyeF92YWxpZCAmIChzdGF0ZSA9PSBEQVRBKSkJcnhfYnVzeV9kIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKHN0YXRlICE9IERBVEEpCQlyeF9idXN5X2QgPD0gIzEgMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcnhfYnVzeSA8PSAjMSByeF9idXN5X2Q7CisKKy8vIFBJRCBEZWNvZGluZyBMb2dpYworYXNzaWduIHBpZF9sZF9lbiA9IHBpZF9sZV9zbSAmIHJ4X2FjdGl2ZSAmIHJ4X3ZhbGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJcGlkIDw9ICMxIDgnaGYwOworCWVsc2UKKwlpZihwaWRfbGRfZW4pCQlwaWQgPD0gIzEgcnhfZGF0YTsKKworYXNzaWduCXBpZF9ja3NfZXJyID0gKHBpZFszOjBdICE9IH5waWRbNzo0XSk7CisKK2Fzc2lnbglwaWRfT1VUICAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9PVVQ7Cithc3NpZ24JcGlkX0lOICAgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfSU47Cithc3NpZ24JcGlkX1NPRiAgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfU09GOworYXNzaWduCXBpZF9TRVRVUCA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX1NFVFVQOworYXNzaWduCXBpZF9EQVRBMCA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX0RBVEEwOworYXNzaWduCXBpZF9EQVRBMSA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX0RBVEExOworYXNzaWduCXBpZF9EQVRBMiA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX0RBVEEyOworYXNzaWduCXBpZF9NREFUQSA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX01EQVRBOworYXNzaWduCXBpZF9BQ0sgICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX0FDSzsKK2Fzc2lnbglwaWRfTkFDSyAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9OQUNLOworYXNzaWduCXBpZF9TVEFMTCA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX1NUQUxMOworYXNzaWduCXBpZF9OWUVUICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX05ZRVQ7Cithc3NpZ24JcGlkX1BSRSAgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfUFJFOworYXNzaWduCXBpZF9FUlIgICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX0VSUjsKK2Fzc2lnbglwaWRfU1BMSVQgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9TUExJVDsKK2Fzc2lnbglwaWRfUElORyAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9QSU5HOworYXNzaWduCXBpZF9SRVMgICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX1JFUzsKKworYXNzaWduCXBpZF9UT0tFTiA9IHBpZF9PVVQgfCBwaWRfSU4gfCBwaWRfU09GIHwgcGlkX1NFVFVQIHwgcGlkX1BJTkc7Cithc3NpZ24JcGlkX0RBVEEgPSBwaWRfREFUQTAgfCBwaWRfREFUQTEgfCBwaWRfREFUQTIgfCBwaWRfTURBVEE7CisKKy8vIFRva2VuIERlY29kaW5nIExPR0lDCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZih0b2tlbl9sZV8xKQl0b2tlbjAgPD0gIzEgcnhfZGF0YTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYodG9rZW5fbGVfMikJdG9rZW4xIDw9ICMxIHJ4X2RhdGE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXRva2VuX3ZhbGlkX3IxIDw9ICMxIHRva2VuX2xlXzI7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXRva2VuX3ZhbGlkX3N0cjEgPD0gIzEgdG9rZW5fdmFsaWRfcjEgfCBwaWRfYWNrOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0b2tlbl92YWxpZF9zdHIyIDw9ICMxIHRva2VuX3ZhbGlkX3N0cjE7CisKK2Fzc2lnbiB0b2tlbl92YWxpZCA9IHRva2VuX3ZhbGlkX3N0cjE7CisKKy8vIENSQyA1IHNob3VsZCBwZXJmb3JtIHRoZSBjaGVjayBpbiBvbmUgY3ljbGUgKGZsb3cgdGhyb3VnaCBsb2dpYykKKy8vIDExIGJpdHMgYW5kIGNyYzUgaW5wdXQsIDEgYml0IG91dHB1dAorYXNzaWduIGNyYzVfZXJyID0gdG9rZW5fdmFsaWQgJiAoY3JjNV9vdXQyICE9IHRva2VuX2NyYzUpOworCit1c2IxZF9jcmM1IHUwKAorCS5jcmNfaW4oCTUnaDFmCQkJKSwKKwkuZGluKAl7CXRva2VuX2ZhZHJbMF0sCisJCQl0b2tlbl9mYWRyWzFdLAorCQkJdG9rZW5fZmFkclsyXSwKKwkJCXRva2VuX2ZhZHJbM10sCisJCQl0b2tlbl9mYWRyWzRdLAorCQkJdG9rZW5fZmFkcls1XSwKKwkJCXRva2VuX2ZhZHJbNl0sCisJCQl0b2tlbl9lbmRwWzBdLAorCQkJdG9rZW5fZW5kcFsxXSwKKwkJCXRva2VuX2VuZHBbMl0sCisJCQl0b2tlbl9lbmRwWzNdICAgfQkpLAorCS5jcmNfb3V0KAljcmM1X291dAkJKSApOworCisvLyBJbnZlcnQgYW5kIHJldmVyc2UgcmVzdWx0IGJpdHMKK2Fzc2lnbgljcmM1X291dDIgPSB+e2NyYzVfb3V0WzBdLCBjcmM1X291dFsxXSwgY3JjNV9vdXRbMl0sIGNyYzVfb3V0WzNdLAorCQkJY3JjNV9vdXRbNF19OworCithc3NpZ24gZnJhbWVfbm8gPSB7IHRva2VuMVsyOjBdLCB0b2tlbjB9OworYXNzaWduIHRva2VuX2ZhZHIgPSB0b2tlbjBbNjowXTsKK2Fzc2lnbiB0b2tlbl9lbmRwID0ge3Rva2VuMVsyOjBdLCB0b2tlbjBbN119OworYXNzaWduIHRva2VuX2NyYzUgPSB0b2tlbjFbNzozXTsKKworLy8gRGF0YSByZWNlaXZpbmcgbG9naWMKKy8vIGJ1aWxkIGEgZGVsYXkgbGluZSBhbmQgc3RvcCB3aGVuIHdlIGFyZSBhYm91dCB0byBnZXQgY3JjCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJcnh2MSA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihkYXRhX3ZhbGlkX2QpCXJ4djEgPD0gIzEgMSdiMTsKKwllbHNlCisJaWYoZGF0YV9kb25lKQkJcnh2MSA8PSAjMSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJcnh2MiA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihyeHYxICYgZGF0YV92YWxpZF9kKQlyeHYyIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKGRhdGFfZG9uZSkJCXJ4djIgPD0gIzEgMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZGF0YV92YWxpZDAgPD0gIzEgcnh2MiAmIGRhdGFfdmFsaWRfZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisgICBiZWdpbgorCWlmKGRhdGFfdmFsaWRfZCkJZDAgPD0gIzEgcnhfZGF0YTsKKwlpZihkYXRhX3ZhbGlkX2QpCWQxIDw9ICMxIGQwOworCWlmKGRhdGFfdmFsaWRfZCkJZDIgPD0gIzEgZDE7CisgICBlbmQKKworYXNzaWduIHJ4X2RhdGFfc3QgPSBkMjsKK2Fzc2lnbiByeF9kYXRhX3ZhbGlkID0gZGF0YV92YWxpZDA7Cithc3NpZ24gcnhfZGF0YV9kb25lID0gZGF0YV9kb25lOworCisvLyBjcmMxNiBhY2N1bXVsYXRlcyByeF9kYXRhIGFzIGxvbmcgYXMgZGF0YV92YWxpZF9kIGlzIGFzc2VydGVkLgorLy8gd2hlbiBkYXRhX2RvbmUgaXMgYXNzZXJ0ZWQsIGNyYzE2IHJlcG9ydHMgc3RhdHVzLCBhbmQgcmVzZXRzIGl0c2VsZgorLy8gbmV4dCBjeWNsZS4KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJ4X2FjdGl2ZV9yIDw9ICMxIHJ4X2FjdGl2ZTsKKworYXNzaWduIGNyYzE2X2NsciA9IHJ4X2FjdGl2ZSAmICFyeF9hY3RpdmVfcjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoY3JjMTZfY2xyKQkJY3JjMTZfc3VtIDw9ICMxIDE2J2hmZmZmOworCWVsc2UKKwlpZihkYXRhX3ZhbGlkX2QpCWNyYzE2X3N1bSA8PSAjMSBjcmMxNl9vdXQ7CisKK3VzYjFkX2NyYzE2IHUxKAorCS5jcmNfaW4oCWNyYzE2X3N1bQkJKSwKKwkuZGluKAl7cnhfZGF0YVswXSwgcnhfZGF0YVsxXSwgcnhfZGF0YVsyXSwgcnhfZGF0YVszXSwKKwkJcnhfZGF0YVs0XSwgcnhfZGF0YVs1XSwgcnhfZGF0YVs2XSwgcnhfZGF0YVs3XX0JKSwKKwkuY3JjX291dCgJY3JjMTZfb3V0CQkpICk7CisKKy8vIFZlcmlmeSBhZ2FpbnN0IHBvbHlub21pYWwgCithc3NpZ24gY3JjMTZfZXJyID0gZGF0YV9kb25lICYgKGNyYzE2X3N1bSAhPSAxNidoODAwZCk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBSZWNlaXZlL0RlY29kZSBTdGF0ZSBtYWNoaW5lCisvLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlzdGF0ZSA8PSAjMSBJRExFOworCWVsc2UJCXN0YXRlIDw9ICMxIG5leHRfc3RhdGU7CisKK2Fsd2F5cyBAKHN0YXRlIG9yIHJ4X3ZhbGlkIG9yIHJ4X2FjdGl2ZSBvciByeF9lcnIgb3IgcGlkX0FDSyBvciBwaWRfVE9LRU4KKwlvciBwaWRfREFUQSkKKyAgIGJlZ2luCisJbmV4dF9zdGF0ZSA9IHN0YXRlOwkvLyBEZWZhdWx0IGRvbid0IGNoYW5nZSBjdXJyZW50IHN0YXRlCisJcGlkX2xlX3NtID0gMSdiMDsKKwl0b2tlbl9sZV8xID0gMSdiMDsKKwl0b2tlbl9sZV8yID0gMSdiMDsKKwlkYXRhX3ZhbGlkX2QgPSAxJ2IwOworCWRhdGFfZG9uZSA9IDEnYjA7CisJc2VxX2VyciA9IDEnYjA7CisJcGlkX2FjayA9IDEnYjA7CisJY2FzZShzdGF0ZSkJCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgSURMRToKKwkJICAgYmVnaW4KKwkJCXBpZF9sZV9zbSA9IDEnYjE7CisJCQlpZihyeF92YWxpZCAmIHJ4X2FjdGl2ZSkJbmV4dF9zdGF0ZSA9IEFDVElWRTsKKwkJICAgZW5kCisJICAgQUNUSVZFOgorCQkgICBiZWdpbgorCQkJLy8gUmVjZWl2ZWQgYSBBQ0sgZnJvbSBIb3N0CisJCQlpZihwaWRfQUNLICYgIXJ4X2VycikKKwkJCSAgIGJlZ2luCisJCQkJcGlkX2FjayA9IDEnYjE7CisJCQkJaWYoIXJ4X2FjdGl2ZSkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCS8vIFJlY2VpdmluZyBhIFRPS0VOCisJCQlpZihwaWRfVE9LRU4gJiByeF92YWxpZCAmIHJ4X2FjdGl2ZSAmICFyeF9lcnIpCisJCQkgICBiZWdpbgorCQkJCXRva2VuX2xlXzEgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBUT0tFTjsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJLy8gUmVjZWl2aW5nIERBVEEKKwkJCWlmKHBpZF9EQVRBICYgcnhfdmFsaWQgJiByeF9hY3RpdmUgJiAhcnhfZXJyKQorCQkJICAgYmVnaW4KKwkJCQlkYXRhX3ZhbGlkX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBEQVRBOworCQkJICAgZW5kCisJCQllbHNlCisJCQlpZigJIXJ4X2FjdGl2ZSB8IHJ4X2VyciB8CisJCQkJKHJ4X3ZhbGlkICYgIShwaWRfVE9LRU4gfCBwaWRfREFUQSkpICkJLy8gRVJST1IKKwkJCSAgIGJlZ2luCisJCQkJc2VxX2VyciA9ICFyeF9lcnI7CisJCQkJaWYoIXJ4X2FjdGl2ZSkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJICAgZW5kCisJICAgVE9LRU46CisJCSAgIGJlZ2luCisJCQlpZihyeF92YWxpZCAmIHJ4X2FjdGl2ZSAmICFyeF9lcnIpCisJCQkgICBiZWdpbgorCQkJCXRva2VuX2xlXzIgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCQllbHNlCisJCQlpZighcnhfYWN0aXZlIHwgcnhfZXJyKQkvLyBFUlJPUgorCQkJICAgYmVnaW4KKwkJCQlzZXFfZXJyID0gIXJ4X2VycjsKKwkJCQlpZighcnhfYWN0aXZlKQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKwkgICBEQVRBOgorCQkgICBiZWdpbgorCQkJaWYocnhfdmFsaWQgJiByeF9hY3RpdmUgJiAhcnhfZXJyKQlkYXRhX3ZhbGlkX2QgPSAxJ2IxOworCQkJaWYoIXJ4X2FjdGl2ZSB8IHJ4X2VycikKKwkJCSAgIGJlZ2luCisJCQkJZGF0YV9kb25lID0gMSdiMTsKKwkJCQlpZighcnhfYWN0aXZlKQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKwkJCisJZW5kY2FzZQorICAgZW5kCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGUudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wZS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwZGFhZmYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGUudgpAQCAtMCwwICsxLDgzNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFByb3RvY29sIEVuZ2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUGVyZm9ybXMgYXV0b21hdGljIHByb3RvY29sIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9wZS52LHYgMS4xLjEuMSAyMDAyLTA5LTE5IDEyOjA3OjI0IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMTkgMTI6MDc6MjQgJAorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLworLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF9wZSgJY2xrLCByc3QsCisKKwkJLy8gVVRNSSBJbnRlcmZhY2VzCisJCXR4X3ZhbGlkLCByeF9hY3RpdmUsCisKKwkJLy8gUElEIEluZm9ybWF0aW9uCisJCXBpZF9PVVQsIHBpZF9JTiwgcGlkX1NPRiwgcGlkX1NFVFVQLAorCQlwaWRfREFUQTAsIHBpZF9EQVRBMSwgcGlkX0RBVEEyLCBwaWRfTURBVEEsCisJCXBpZF9BQ0ssIHBpZF9QSU5HLAorCisJCS8vIFRva2VuIEluZm9ybWF0aW9uCisJCXRva2VuX3ZhbGlkLCAKKworCQkvLyBSZWNlaXZlIERhdGEgT3V0cHV0CisJCXJ4X2RhdGFfZG9uZSwgY3JjMTZfZXJyLAorCisJCS8vIFBhY2tldCBBc3NlbWJsZXIgSW50ZXJmYWNlCisJCXNlbmRfdG9rZW4sIHRva2VuX3BpZF9zZWwsCisJCWRhdGFfcGlkX3NlbCwKKworCQkvLyBJRE1BIEludGVyZmFjZQorCQlyeF9kbWFfZW4sIHR4X2RtYV9lbiwKKwkJYWJvcnQsCisJCWlkbWFfZG9uZSwKKworCQkvLyBSZWdpc3RlciBGaWxlIEludGVyZmFjZQorCisJCWZzZWwsCisJCWVwX3NlbCwgbWF0Y2gsIG5zZV9lcnIsCisJCWVwX2Z1bGwsIGVwX2VtcHR5LAorCisJCWludF91cGlkX3NldCwgaW50X2NyYzE2X3NldCwgaW50X3RvX3NldCwgaW50X3NlcWVycl9zZXQsCisJCWNzciwKKwkJc2VuZF9zdGFsbAorCisJCSk7CisKK2lucHV0CQljbGssIHJzdDsKK2lucHV0CQl0eF92YWxpZCwgcnhfYWN0aXZlOworCisvLyBQYWNrZXQgRGlzYXNzZW1ibGVyIEludGVyZmFjZQorCQkvLyBEZWNvZGVkIFBJRHMgKHVzZWQgd2hlbiB0b2tlbl92YWxpZCBpcyBhc3NlcnRlZCkKK2lucHV0CQlwaWRfT1VULCBwaWRfSU4sIHBpZF9TT0YsIHBpZF9TRVRVUDsKK2lucHV0CQlwaWRfREFUQTAsIHBpZF9EQVRBMSwgcGlkX0RBVEEyLCBwaWRfTURBVEE7CitpbnB1dAkJcGlkX0FDSywgcGlkX1BJTkc7CisKK2lucHV0CQl0b2tlbl92YWxpZDsJCS8vIFRva2VuIGlzIHZhbGlkCisKK2lucHV0CQlyeF9kYXRhX2RvbmU7CQkvLyBJbmRpY2F0ZXMgZW5kIG9mIGEgdHJhbnNmZXIKK2lucHV0CQljcmMxNl9lcnI7CQkvLyBEYXRhIHBhY2tldCBDUkMgMTYgZXJyb3IKKworLy8gUGFja2V0IEFzc2VtYmxlciBJbnRlcmZhY2UKK291dHB1dAkJc2VuZF90b2tlbjsKK291dHB1dAlbMTowXQl0b2tlbl9waWRfc2VsOworb3V0cHV0CVsxOjBdCWRhdGFfcGlkX3NlbDsKKworLy8gSURNQSBJbnRlcmZhY2UKK291dHB1dAkJcnhfZG1hX2VuOwkvLyBBbGxvd3MgdGhlIGRhdGEgdG8gYmUgc3RvcmVkCitvdXRwdXQJCXR4X2RtYV9lbjsJLy8gQWxsb3dzIGZvciBkYXRhIHRvIGJlIHJldHJpZXZlZAorb3V0cHV0CQlhYm9ydDsJCS8vIEFib3J0IFRyYW5zZmVyICh0aW1lX291dCwgY3JjX2VyciBvciByeF9lcnJvcikKK2lucHV0CQlpZG1hX2RvbmU7CS8vIERNQSBpcyBkb25lIGluZGljYXRvcgorCitpbnB1dAkJZXBfZnVsbDsJLy8gSW5kaWNhdGVzIHRoZSBlbmRwb2ludHMgZmlmbyBpcyBmdWxsCitpbnB1dAkJZXBfZW1wdHk7CS8vIEluZGljYXRlcyB0aGUgZW5kcG9pbnRzIGZpZm8gaXMgZW1wdHkKKworLy8gUmVnaXN0ZXIgRmlsZSBpbnRlcmZhY2UKK2lucHV0CQlmc2VsOwkJLy8gVGhpcyBmdW5jdGlvbiBpcyBzZWxlY3RlZAoraW5wdXQJWzM6MF0JZXBfc2VsOwkJLy8gRW5kcG9pbnQgTnVtYmVyIElucHV0CitpbnB1dAkJbWF0Y2g7CQkvLyBFbmRwb2ludCBNYXRjaGVkCitvdXRwdXQJCW5zZV9lcnI7CS8vIG5vIHN1Y2ggZW5kcG9pbnQgZXJyb3IKKworb3V0cHV0CQlpbnRfdXBpZF9zZXQ7CS8vIFNldCB1bnN1cHBvcnRlZCBQSUQgaW50ZXJydXB0CitvdXRwdXQJCWludF9jcmMxNl9zZXQ7CS8vIFNldCBDUkMxNiBlcnJvciBpbnRlcnJ1cHQKK291dHB1dAkJaW50X3RvX3NldDsJLy8gU2V0IHRpbWUgb3V0IGludGVycnVwdAorb3V0cHV0CQlpbnRfc2VxZXJyX3NldDsJLy8gU2V0IFBJRCBzZXF1ZW5jZSBlcnJvciBpbnRlcnJ1cHQKKworaW5wdXQJWzEzOjBdCWNzcjsJCS8vIEludGVybmFsIENTUiBPdXRwdXQKKworaW5wdXQJCXNlbmRfc3RhbGw7CS8vIEZvcmNlIHNlbmRpbmcgYSBTVEFMTCBkdXJpbmcgc2V0dXAKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworLy8gdHggdG9rZW4gZGVjb2RpbmcKK3BhcmFtZXRlcglBQ0sgICA9IDAsCisJCU5BQ0sgID0gMSwKKwkJU1RBTEwgPSAyLAorCQlOWUVUICA9IDM7CisKKy8vIFN0YXRlIGRlY29kaW5nCitwYXJhbWV0ZXIJWzk6MF0JLy8gc3lub3BzeXMgZW51bSBzdGF0ZQorCQlJRExFCT0gMTAnYjAwMDAwMF8wMDAxLAorCQlUT0tFTgk9IDEwJ2IwMDAwMDBfMDAxMCwKKwkJSU4JPSAxMCdiMDAwMDAwXzAxMDAsCisJCUlOMgk9IDEwJ2IwMDAwMDBfMTAwMCwKKwkJT1VUCT0gMTAnYjAwMDAwMV8wMDAwLAorCQlPVVQyQQk9IDEwJ2IwMDAwMTBfMDAwMCwKKwkJT1VUMkIJPSAxMCdiMDAwMTAwXzAwMDAsCisJCVVQREFURVcJPSAxMCdiMDAxMDAwXzAwMDAsCisJCVVQREFURQk9IDEwJ2IwMTAwMDBfMDAwMCwKKwkJVVBEQVRFMgk9IDEwJ2IxMDAwMDBfMDAwMDsKKworcmVnCVsxOjBdCXRva2VuX3BpZF9zZWw7CityZWcJWzE6MF0JdG9rZW5fcGlkX3NlbF9kOworcmVnCQlzZW5kX3Rva2VuOworcmVnCQlzZW5kX3Rva2VuX2Q7CityZWcJCXJ4X2RtYV9lbiwgdHhfZG1hX2VuOworcmVnCQlpbnRfc2VxZXJyX3NldF9kOworcmVnCQlpbnRfc2VxZXJyX3NldDsKK3JlZwkJaW50X3VwaWRfc2V0OworCityZWcJCW1hdGNoX3I7CisKKy8vIEVuZHBvaW50IERlY29kaW5nCit3aXJlCQlJTl9lcCwgT1VUX2VwLCBDVFJMX2VwOwkJLy8gRW5kcG9pbnQgVHlwZXMKK3dpcmUJCXR4ZnJfaXNvLCB0eGZyX2J1bGssIHR4ZnJfaW50OwkvLyBUcmFuc2ZlciBUeXBlcworCityZWcJWzE6MF0JdWNfZHBkOworCisvLyBCdWZmZXIgY2hlY2tzCityZWcJWzk6MF0JLyogc3lub3BzeXMgZW51bSBzdGF0ZSAqLyBzdGF0ZSwgbmV4dF9zdGF0ZTsKKy8vIHN5bm9wc3lzIHN0YXRlX3ZlY3RvciBzdGF0ZQorCisvLyBQSUQgbmV4dCBhbmQgY3VycmVudCBkZWNvZGVycworcmVnCVsxOjBdCW5leHRfZHBpZDsKK3JlZwlbMTowXQl0aGlzX2RwaWQ7CityZWcJCXBpZF9zZXFfZXJyOword2lyZQlbMTowXQl0cl9mcl9kOworCit3aXJlCVsxMzowXQlzaXplX25leHQ7Cit3aXJlCQlidWZfc21hbGxlcjsKKworLy8gQWZ0ZXIgc2VuZGluZyBEYXRhIGluIHJlc3BvbnNlIHRvIGFuIElOIHRva2VuIGZyb20gaG9zdCwgdGhlCisvLyBob3N0IG11c3QgcmVwbHkgd2l0aCBhbiBhY2suIFRoZSBob3N0IGhhcyBYWFhuUyB0byByZXBseS4KKy8vICJyeF9hY2tfdG8iIGluZGljYXRlcyB3aGVuIHRoaXMgdGltZSBoYXMgZXhwaXJlZC4KKy8vIHJ4X2Fja190b19jbHIsIGNsZWFycyB0aGUgdGltZXIKK3JlZwkJcnhfYWNrX3RvX2NscjsKK3JlZwkJcnhfYWNrX3RvX2Nscl9kOworcmVnCQlyeF9hY2tfdG87CityZWcJWzc6MF0JcnhfYWNrX3RvX2NudDsKKworLy8gQWZ0ZXIgc2VuZGluZyBhIE9VVCB0b2tlbiB0aGUgaG9zdCBtdXN0IHNlbmQgYSBkYXRhIHBhY2tldC4KKy8vIFRoZSBob3N0IGhhcyBYWCBuUyB0byBzZW5kIHRoZSBwYWNrZXQuICJ0eF9kYXRhX3RvIiBpbmRpY2F0ZXMKKy8vIHdoZW4gdGhpcyB0aW1lIGhhcyBleHBpcmVkLgorLy8gdHhfZGF0YV90b19jbHIsIGNsZWFycyB0aGUgdGltZXIKK3dpcmUJCXR4X2RhdGFfdG9fY2xyOworcmVnCQl0eF9kYXRhX3RvOworcmVnCVs3OjBdCXR4X2RhdGFfdG9fY250OworCit3aXJlCVs3OjBdCXJ4X2Fja190b192YWwsIHR4X2RhdGFfdG9fdmFsOworCisKK3dpcmUJWzE6MF0JbmV4dF9ic2VsOworcmVnCQl1Y19zdGF0X3NldF9kOworcmVnCQl1Y19kcGRfc2V0OworCityZWcJCWluX3Rva2VuOworcmVnCQlvdXRfdG9rZW47CityZWcJCXNldHVwX3Rva2VuOworCit3aXJlCQlpbl9vcCwgb3V0X29wOwkvLyBJbmRpY2F0ZSBhIElOIG9yIE9VVCBvcGVyYXRpb24KKworcmVnCVsxOjBdCWFsbG93X3BpZDsKKworcmVnCQluc2VfZXJyOworcmVnCQlhYm9ydDsKKword2lyZQlbMTowXQllcF90eXBlLCB0eGZyX3R5cGU7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCisvLyBFbmRwb2ludC9DU1IgRGVjb2RpbmcKK2Fzc2lnbiBJTl9lcCAgID0gY3NyWzldOworYXNzaWduIE9VVF9lcCAgPSBjc3JbMTBdOworYXNzaWduIENUUkxfZXAgPSBjc3JbMTFdOworCithc3NpZ24gdHhmcl9pc28gID0gY3NyWzEyXTsKK2Fzc2lnbiB0eGZyX2J1bGsgPSBjc3JbMTNdOworYXNzaWduIHR4ZnJfaW50ID0gIWNzclsxMl0gJiAhY3NyWzEzXTsKKworYXNzaWduIGVwX3R5cGUgPSBjc3JbMTA6OV07Cithc3NpZ24gdHhmcl90eXBlID0gY3NyWzEzOjEyXTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJbWF0Y2hfciA8PSAjMSBtYXRjaCAgJiBmc2VsOworCisvLyBObyBTdWNoIEVuZHBvaW50IEluZGljYXRvcgorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJbnNlX2VyciA8PSAjMSB0b2tlbl92YWxpZCAmIChwaWRfT1VUIHwgcGlkX0lOIHwgcGlkX1NFVFVQKSAmICFtYXRjaDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2VuZF90b2tlbiA8PSAjMSBzZW5kX3Rva2VuX2Q7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXRva2VuX3BpZF9zZWwgPD0gIzEgdG9rZW5fcGlkX3NlbF9kOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRGF0YSBQaWQgU3RvcmFnZQorLy8KKworcmVnCVsxOjBdCWVwMF9kcGlkLCBlcDFfZHBpZCwgZXAyX2RwaWQsIGVwM19kcGlkOworcmVnCVsxOjBdCWVwNF9kcGlkLCBlcDVfZHBpZCwgZXA2X2RwaWQsIGVwN19kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDBfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoMCkpCWVwMF9kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXAxX2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDEpKQllcDFfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwMl9kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2gyKSkJZXAyX2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDNfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoMykpCWVwM19kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXA0X2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDQpKQllcDRfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwNV9kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2g1KSkJZXA1X2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDZfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoNikpCWVwNl9kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXA3X2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDcpKQllcDdfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWNhc2UoZXBfc2VsKQorCSAgIDQnaDA6IHVjX2RwZCA8PSBlcDBfZHBpZDsKKwkgICA0J2gxOiB1Y19kcGQgPD0gZXAxX2RwaWQ7CisJICAgNCdoMjogdWNfZHBkIDw9IGVwMl9kcGlkOworCSAgIDQnaDM6IHVjX2RwZCA8PSBlcDNfZHBpZDsKKwkgICA0J2g0OiB1Y19kcGQgPD0gZXA0X2RwaWQ7CisJICAgNCdoNTogdWNfZHBkIDw9IGVwNV9kcGlkOworCSAgIDQnaDY6IHVjX2RwZCA8PSBlcDZfZHBpZDsKKwkgICA0J2g3OiB1Y19kcGQgPD0gZXA3X2RwaWQ7CisJZW5kY2FzZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRGF0YSBQaWQgU2VxdWVuY2VyCisvLworCithc3NpZ24gdHJfZnJfZCA9IDInaDA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQkvLyB0ci9tZjplcC90eXBlOnRyL3R5cGU6bGFzdCBkcGQKKwljYXNleCh7dHJfZnJfZCxlcF90eXBlLHR4ZnJfdHlwZSx1Y19kcGR9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDgnYjA/XzAxXzAxXz8/OiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBJTiwgMSB0ci9tZgorCisJICAgOCdiMTBfMDFfMDFfPzA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSVNPIHR4ZnIuIElOLCAyIHRyL21mCisJICAgOCdiMTBfMDFfMDFfPzE6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIElOLCAyIHRyL21mCisKKwkgICA4J2IxMV8wMV8wMV8wMDogbmV4dF9kcGlkIDw9ICMxIDInYjAxOwkvLyBJU08gdHhmci4gSU4sIDMgdHIvbWYKKwkgICA4J2IxMV8wMV8wMV8wMTogbmV4dF9kcGlkIDw9ICMxIDInYjEwOwkvLyBJU08gdHhmci4gSU4sIDMgdHIvbWYKKwkgICA4J2IxMV8wMV8wMV8xMDogbmV4dF9kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gSU4sIDMgdHIvbWYKKworCSAgIDgnYjA/XzEwXzAxXz8/OiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBPVVQsIDEgdHIvbWYKKworCSAgIDgnYjEwXzEwXzAxXz8/OiAJCQkJLy8gSVNPIHR4ZnIuIE9VVCwgMiB0ci9tZgorCQkJICAgYmVnaW4JLy8gUmVzeW5jaHJvbml6ZSBpbiBjYXNlIG9mIFBJRCBlcnJvcgorCQkJCWNhc2Uoe3BpZF9NREFUQSwgcGlkX0RBVEExfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJCQkgIDInYjEwOiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CisJCQkJICAyJ2IwMTogbmV4dF9kcGlkIDw9ICMxIDInYjAwOworCQkJCWVuZGNhc2UKKwkJCSAgIGVuZAorCisJICAgOCdiMTFfMTBfMDFfMDA6IAkJCQkvLyBJU08gdHhmci4gT1VULCAzIHRyL21mCisJCQkgICBiZWdpbgkvLyBSZXN5bmNocm9uaXplIGluIGNhc2Ugb2YgUElEIGVycm9yCisJCQkJY2FzZSh7cGlkX01EQVRBLCBwaWRfREFUQTJ9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkJCSAgMidiMTA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsKKwkJCQkgIDInYjAxOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CisJCQkJZW5kY2FzZQorCQkJICAgZW5kCisJICAgOCdiMTFfMTBfMDFfMDE6IAkJCQkvLyBJU08gdHhmci4gT1VULCAzIHRyL21mCisJCQkgICBiZWdpbgkvLyBSZXN5bmNocm9uaXplIGluIGNhc2Ugb2YgUElEIGVycm9yCisJCQkJY2FzZSh7cGlkX01EQVRBLCBwaWRfREFUQTJ9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkJCSAgMidiMTA6IG5leHRfZHBpZCA8PSAjMSAyJ2IxMDsKKwkJCQkgIDInYjAxOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CisJCQkJZW5kY2FzZQorCQkJICAgZW5kCisJICAgOCdiMTFfMTBfMDFfMTA6IAkJCQkvLyBJU08gdHhmci4gT1VULCAzIHRyL21mCisJCQkgICBiZWdpbgkvLyBSZXN5bmNocm9uaXplIGluIGNhc2Ugb2YgUElEIGVycm9yCisJCQkJY2FzZSh7cGlkX01EQVRBLCBwaWRfREFUQTJ9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkJCSAgMidiMTA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsKKwkJCQkgIDInYjAxOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CisJCQkJZW5kY2FzZQorCQkJICAgZW5kCisKKwkgICA4J2I/P18wMV8wMF8/MCwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8wMF8/MDogbmV4dF9kcGlkIDw9ICMxIDInYjAxOwkvLyBJTlQgdHJhbnNmZXJzCisKKwkgICA4J2I/P18wMV8wMF8/MSwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8wMF8/MTogbmV4dF9kcGlkIDw9ICMxIDInYjAwOwkvLyBJTlQgdHJhbnNmZXJzCisKKwkgICA4J2I/P18wMV8xMF8/MCwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8xMF8/MDogbmV4dF9kcGlkIDw9ICMxIDInYjAxOwkvLyBCVUxLIHRyYW5zZmVycworCisJICAgOCdiPz9fMDFfMTBfPzEsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMTBfPzE6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gQlVMSyB0cmFuc2ZlcnMKKworCSAgIDgnYj8/XzAwXz8/Xz8/OgkJCQkvLyBDVFJMIEVuZHBvaW50CisJCWNhc2V4KHtzZXR1cF90b2tlbiwgaW5fb3AsIG91dF9vcCwgdWNfZHBkfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJICAgNSdiMV8/P18/PzogbmV4dF9kcGlkIDw9ICMxIDInYjExOwkvLyBTRVRVUCBvcGVyYXRpb24KKwkJICAgNSdiMF8xMF8wPzogbmV4dF9kcGlkIDw9ICMxIDInYjExOwkvLyBJTiBvcGVyYXRpb24KKwkJICAgNSdiMF8xMF8xPzogbmV4dF9kcGlkIDw9ICMxIDInYjAxOwkvLyBJTiBvcGVyYXRpb24KKwkJICAgNSdiMF8wMV8/MDogbmV4dF9kcGlkIDw9ICMxIDInYjExOwkvLyBPVVQgb3BlcmF0aW9uCisJCSAgIDUnYjBfMDFfPzE6IG5leHRfZHBpZCA8PSAjMSAyJ2IxMDsJLy8gT1VUIG9wZXJhdGlvbgorCQllbmRjYXNlCisKKwllbmRjYXNlCisKKy8vIEN1cnJlbnQgUElEIGRlY29kZXIKKworLy8gQWxsb3cgYW55IFBJRCBmb3IgSVNPLiB0cmFuc2ZlcnMgd2hlbiBtb2RlIGZ1bGwgc3BlZWQgb3IgdHJfZnIgaXMgemVybworYWx3YXlzIEAocGlkX0RBVEEwIG9yIHBpZF9EQVRBMSBvciBwaWRfREFUQTIgb3IgcGlkX01EQVRBKQorCWNhc2Uoe3BpZF9EQVRBMCwgcGlkX0RBVEExLCBwaWRfREFUQTIsIHBpZF9NREFUQX0gKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnYjEwMDA6IGFsbG93X3BpZCA9IDInYjAwOworCSAgIDQnYjAxMDA6IGFsbG93X3BpZCA9IDInYjAxOworCSAgIDQnYjAwMTA6IGFsbG93X3BpZCA9IDInYjEwOworCSAgIDQnYjAwMDE6IGFsbG93X3BpZCA9IDInYjExOworCWVuZGNhc2UKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCS8vIHRmL21mOmVwL3R5cGU6dHIvdHlwZTpsYXN0IGRwZAorCWNhc2V4KHt0cl9mcl9kLGVwX3R5cGUsdHhmcl90eXBlLHVjX2RwZH0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgOCdiMD9fMDFfMDFfPz86IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIElOLCAxIHRyL21mCisKKwkgICA4J2IxMF8wMV8wMV8/MDogdGhpc19kcGlkIDw9ICMxIDInYjAxOwkvLyBJU08gdHhmci4gSU4sIDIgdHIvbWYKKwkgICA4J2IxMF8wMV8wMV8/MTogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gSU4sIDIgdHIvbWYKKworCSAgIDgnYjExXzAxXzAxXzAwOiB0aGlzX2RwaWQgPD0gIzEgMidiMTA7CS8vIElTTyB0eGZyLiBJTiwgMyB0ci9tZgorCSAgIDgnYjExXzAxXzAxXzAxOiB0aGlzX2RwaWQgPD0gIzEgMidiMDE7CS8vIElTTyB0eGZyLiBJTiwgMyB0ci9tZgorCSAgIDgnYjExXzAxXzAxXzEwOiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBJTiwgMyB0ci9tZgorCisJICAgOCdiMDBfMTBfMDFfPz86IHRoaXNfZHBpZCA8PSAjMSBhbGxvd19waWQ7CS8vIElTTyB0eGZyLiBPVVQsIDAgdHIvbWYKKwkgICA4J2IwMV8xMF8wMV8/PzogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gT1VULCAxIHRyL21mCisKKwkgICA4J2IxMF8xMF8wMV8/MDogdGhpc19kcGlkIDw9ICMxIDInYjExOwkvLyBJU08gdHhmci4gT1VULCAyIHRyL21mCisJICAgOCdiMTBfMTBfMDFfPzE6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSVNPIHR4ZnIuIE9VVCwgMiB0ci9tZgorCisJICAgOCdiMTFfMTBfMDFfMDA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IxMTsJLy8gSVNPIHR4ZnIuIE9VVCwgMyB0ci9tZgorCSAgIDgnYjExXzEwXzAxXzAxOiB0aGlzX2RwaWQgPD0gIzEgMidiMTE7CS8vIElTTyB0eGZyLiBPVVQsIDMgdHIvbWYKKwkgICA4J2IxMV8xMF8wMV8xMDogdGhpc19kcGlkIDw9ICMxIDInYjEwOwkvLyBJU08gdHhmci4gT1VULCAzIHRyL21mCisKKwkgICA4J2I/P18wMV8wMF8/MCwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8wMF8/MDogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBJTlQgdHJhbnNmZXJzCisJICAgOCdiPz9fMDFfMDBfPzEsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMDBfPzE6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSU5UIHRyYW5zZmVycworCisJICAgOCdiPz9fMDFfMTBfPzAsCQkJCS8vIElOL09VVCBlbmRwb2ludCBvbmx5CisJICAgOCdiPz9fMTBfMTBfPzA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gQlVMSyB0cmFuc2ZlcnMKKwkgICA4J2I/P18wMV8xMF8/MSwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8xMF8/MTogdGhpc19kcGlkIDw9ICMxIDInYjAxOwkvLyBCVUxLIHRyYW5zZmVycworCisJICAgOCdiPz9fMDBfPz9fPz86CQkJCS8vIENUUkwgRW5kcG9pbnQKKwkJY2FzZXgoe3NldHVwX3Rva2VuLGluX29wLCBvdXRfb3AsIHVjX2RwZH0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCSAgIDUnYjFfPz9fPz86IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gU0VUVVAgb3BlcmF0aW9uCisJCSAgIDUnYjBfMTBfMD86IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSU4gb3BlcmF0aW9uCisJCSAgIDUnYjBfMTBfMT86IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSU4gb3BlcmF0aW9uCisJCSAgIDUnYjBfMDFfPzA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gT1VUIG9wZXJhdGlvbgorCQkgICA1J2IwXzAxXz8xOiB0aGlzX2RwaWQgPD0gIzEgMidiMDE7CS8vIE9VVCBvcGVyYXRpb24KKwkJZW5kY2FzZQorCWVuZGNhc2UKKworLy8gQXNzaWduIFBJRCBmb3Igb3V0Z29pbmcgcGFja2V0cworYXNzaWduIGRhdGFfcGlkX3NlbCA9IHRoaXNfZHBpZDsKKworLy8gVmVyaWZ5IFBJRCBmb3IgaW5jb21pbmcgZGF0YSBwYWNrZXRzCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlwaWRfc2VxX2VyciA8PSAjMSAhKAkodGhpc19kcGlkPT0yJ2IwMCAmIHBpZF9EQVRBMCkgfAorCQkJCSh0aGlzX2RwaWQ9PTInYjAxICYgcGlkX0RBVEExKSB8CisJCQkJKHRoaXNfZHBpZD09MidiMTAgJiBwaWRfREFUQTIpIHwKKwkJCQkodGhpc19kcGlkPT0yJ2IxMSAmIHBpZF9NREFUQSkJKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIElETUEgU2V0dXAgJiBzcmMvZHN0IGJ1ZmZlciBzZWxlY3QKKy8vCisKKy8vIEZvciBDb250cm9sIGVuZHBvaW50cyB0aGluZ3MgYXJlIGRpZmZlcmVudDoKKy8vIGJ1ZmZlcjAgaXMgdXNlZCBmb3IgT1VUIChpbmNvbWluZykgZGF0YSBwYWNrZXRzCisvLyBidWZmZXIxIGlzIHVzZWQgZm9yIElOIChvdXRnb2luZykgZGF0YSBwYWNrZXRzCisKKy8vIEtlZXAgdHJhY2sgb2YgbGFzdCB0b2tlbiBmb3IgY29udHJvbCBlbmRwb2ludHMKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlpbl90b2tlbiA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihwaWRfSU4pCQlpbl90b2tlbiA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZihwaWRfT1VUIHwgcGlkX1NFVFVQKQlpbl90b2tlbiA8PSAjMSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJb3V0X3Rva2VuIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHBpZF9PVVQgfCBwaWRfU0VUVVApCW91dF90b2tlbiA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZihwaWRfSU4pCQlvdXRfdG9rZW4gPD0gIzEgMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCXNldHVwX3Rva2VuIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHBpZF9TRVRVUCkJCXNldHVwX3Rva2VuIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKHBpZF9PVVQgfCBwaWRfSU4pCXNldHVwX3Rva2VuIDw9ICMxIDEnYjA7CisKKy8vIEluZGljYXRlcyBpZiB3ZSBhcmUgcGVyZm9ybWluZyBhbiBJTiBvcGVyYXRpb24KK2Fzc2lnbglpbl9vcCA9IElOX2VwIHwgKENUUkxfZXAgJiBpbl90b2tlbik7CisKKy8vIEluZGljYXRlcyBpZiB3ZSBhcmUgcGVyZm9ybWluZyBhbiBPVVQgb3BlcmF0aW9uCithc3NpZ24Jb3V0X29wID0gT1VUX2VwIHwgKENUUkxfZXAgJiBvdXRfdG9rZW4pOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEZXRlcm1pbmUgaWYgcGFja2V0IGlzIHRvIHNtYWxsIG9yIHRvIGxhcmdlCisvLyBUaGlzIGlzIHVzZWQgdG8gTkFDSyBhbmQgaWdub3JlIHBhY2tldCBmb3IgT1VUIGVuZHBvaW50cworLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUmVnaXN0ZXIgRmlsZSBVcGRhdGUgTG9naWMKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXVjX2RwZF9zZXQgPD0gIzEgdWNfc3RhdF9zZXRfZDsKKworLy8gQWJvcnQgc2lnbmFsCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlhYm9ydCA8PSAjMSBtYXRjaCAmIGZzZWwgJiAoc3RhdGUgIT0gSURMRSk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUSU1FIE9VVCBUSU1FUlMKKy8vCisKKy8vIEFmdGVyIHNlbmRpbmcgRGF0YSBpbiByZXNwb25zZSB0byBhbiBJTiB0b2tlbiBmcm9tIGhvc3QsIHRoZQorLy8gaG9zdCBtdXN0IHJlcGx5IHdpdGggYW4gYWNrLiBUaGUgaG9zdCBoYXMgNjIyblMgaW4gRnVsbCBTcGVlZAorLy8gbW9kZSBhbmQgNDAwblMgaW4gSGlnaCBTcGVlZCBtb2RlIHRvIHJlcGx5LgorLy8gInJ4X2Fja190byIgaW5kaWNhdGVzIHdoZW4gdGhpcyB0aW1lIGhhcyBleHBpcmVkLgorLy8gcnhfYWNrX3RvX2NsciwgY2xlYXJzIHRoZSB0aW1lcgorCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyeF9hY2tfdG9fY2xyIDw9ICMxIHR4X3ZhbGlkIHwgcnhfYWNrX3RvX2Nscl9kOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihyeF9hY2tfdG9fY2xyKQlyeF9hY2tfdG9fY250IDw9ICMxIDgnaDA7CisJZWxzZQkJCXJ4X2Fja190b19jbnQgPD0gIzEgcnhfYWNrX3RvX2NudCArIDgnaDE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJ4X2Fja190byA8PSAjMSAocnhfYWNrX3RvX2NudCA9PSByeF9hY2tfdG9fdmFsKTsKKworYXNzaWduIHJ4X2Fja190b192YWwgPSBgVVNCRl9SWF9BQ0tfVE9fVkFMX0ZTOworCisvLyBBZnRlciBzZW5kaW5nIGEgT1VUIHRva2VuIHRoZSBob3N0IG11c3Qgc2VuZCBhIGRhdGEgcGFja2V0LgorLy8gVGhlIGhvc3QgaGFzIDYyMm5TIGluIEZ1bGwgU3BlZWQgbW9kZSBhbmQgNDAwblMgaW4gSGlnaCBTcGVlZAorLy8gbW9kZSB0byBzZW5kIHRoZSBkYXRhIHBhY2tldC4KKy8vICJ0eF9kYXRhX3RvIiBpbmRpY2F0ZXMgd2hlbiB0aGlzIHRpbWUgaGFzIGV4cGlyZWQuCisvLyAidHhfZGF0YV90b19jbHIiIGNsZWFycyB0aGUgdGltZXIKKworYXNzaWduCXR4X2RhdGFfdG9fY2xyID0gcnhfYWN0aXZlOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZih0eF9kYXRhX3RvX2NscikJdHhfZGF0YV90b19jbnQgPD0gIzEgOCdoMDsKKwllbHNlCQkJdHhfZGF0YV90b19jbnQgPD0gIzEgdHhfZGF0YV90b19jbnQgKyA4J2gxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF9kYXRhX3RvIDw9ICMxICh0eF9kYXRhX3RvX2NudCA9PSB0eF9kYXRhX3RvX3ZhbCk7CisKK2Fzc2lnbiB0eF9kYXRhX3RvX3ZhbCA9IGBVU0JGX1RYX0RBVEFfVE9fVkFMX0ZTOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gSW50ZXJydXB0cworLy8KK3JlZwlwaWRfT1VUX3IsIHBpZF9JTl9yLCBwaWRfUElOR19yLCBwaWRfU0VUVVBfcjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcGlkX09VVF9yIDw9ICMxIHBpZF9PVVQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXBpZF9JTl9yIDw9ICMxIHBpZF9JTjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcGlkX1BJTkdfciA8PSAjMSBwaWRfUElORzsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcGlkX1NFVFVQX3IgPD0gIzEgcGlkX1NFVFVQOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpbnRfdXBpZF9zZXQgPD0gIzEgbWF0Y2hfciAmICFwaWRfU09GICYgKAorCQkJCSggT1VUX2VwICYgIShwaWRfT1VUX3IgfCBwaWRfUElOR19yKSkJCXwKKwkJCQkoICBJTl9lcCAmICAhcGlkX0lOX3IpCQkJCXwKKwkJCQkoQ1RSTF9lcCAmICEocGlkX0lOX3IgfCBwaWRfT1VUX3IgfCBwaWRfUElOR19yIHwgcGlkX1NFVFVQX3IpKQorCQkJCQkpOworCisKK2Fzc2lnbiBpbnRfdG9fc2V0ICA9ICgoc3RhdGUgPT0gSU4yKSAmIHJ4X2Fja190bykgfCAoKHN0YXRlID09IE9VVCkgJiB0eF9kYXRhX3RvKTsKKworYXNzaWduIGludF9jcmMxNl9zZXQgPSByeF9kYXRhX2RvbmUgJiBjcmMxNl9lcnI7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWludF9zZXFlcnJfc2V0IDw9ICMxIGludF9zZXFlcnJfc2V0X2Q7CisKK3JlZwlzZW5kX3N0YWxsX3I7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXNlbmRfc3RhbGxfciA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihzZW5kX3N0YWxsKQlzZW5kX3N0YWxsX3IgPD0gIzEgMSdiMTsKKwllbHNlCQorCWlmKHNlbmRfdG9rZW4pCXNlbmRfc3RhbGxfciA8PSAjMSAxJ2IwOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWFpbiBQcm90b2NvbCBTdGF0ZSBNYWNoaW5lCisvLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlzdGF0ZSA8PSAjMSBJRExFOworCWVsc2UKKwlpZihtYXRjaCkJc3RhdGUgPD0gIzEgSURMRTsKKwllbHNlCQlzdGF0ZSA8PSAjMSBuZXh0X3N0YXRlOworCithbHdheXMgQChzdGF0ZSBvciAKKwlwaWRfc2VxX2VyciBvciBpZG1hX2RvbmUgb3IgZXBfZnVsbCBvciBlcF9lbXB0eSBvcgorCXRva2VuX3ZhbGlkIG9yIHBpZF9BQ0sgb3IgcnhfZGF0YV9kb25lIG9yCisJdHhfZGF0YV90byBvciBjcmMxNl9lcnIgb3IgCisJcnhfYWNrX3RvIG9yIHBpZF9QSU5HIG9yIHR4ZnJfaXNvIG9yIHR4ZnJfaW50IG9yCisJQ1RSTF9lcCBvciBwaWRfSU4gb3IgcGlkX09VVCBvciBJTl9lcCBvciBPVVRfZXAgb3IgcGlkX1NFVFVQIG9yIHBpZF9TT0YKKwlvciBtYXRjaF9yIG9yIGFib3J0IG9yIHNlbmRfc3RhbGxfcgorCSkKKyAgIGJlZ2luCisJbmV4dF9zdGF0ZSA9IHN0YXRlOworCXRva2VuX3BpZF9zZWxfZCA9IEFDSzsKKwlzZW5kX3Rva2VuX2QgPSAxJ2IwOworCXJ4X2RtYV9lbiA9IDEnYjA7CisJdHhfZG1hX2VuID0gMSdiMDsKKwl1Y19zdGF0X3NldF9kID0gMSdiMDsKKwlyeF9hY2tfdG9fY2xyX2QgPSAxJ2IxOworCWludF9zZXFlcnJfc2V0X2QgPSAxJ2IwOworCisJY2FzZShzdGF0ZSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICBJRExFOgorCQkgICBiZWdpbgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgSURMRSAoJXQpIiwgJHRpbWUpOworYGVuZGlmCitgaWZkZWYgVVNCRl9ERUJVRworCQlpZihyc3QgJiBtYXRjaF9yICYgIXBpZF9TT0YpCisJCWJlZ2luCisJCWlmKG1hdGNoX3IgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogbWF0Y2hfciBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfU09GID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IHBpZF9TT0YgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYoQ1RSTF9lcCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBDVFJMX2VwIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9JTiA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBwaWRfSU4gaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX09VVCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBwaWRfT1VUIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9TRVRVUCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBwaWRfU0VUVVAgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX1BJTkcgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogcGlkX1BJTkcgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYoSU5fZXAgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogSU5fZXAgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYoT1VUX2VwID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IE9VVF9lcCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQllbmQKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisKKwkJCWlmKG1hdGNoX3IgJiAhcGlkX1NPRikKKwkJCSAgIGJlZ2luCisvKgorCQkJCWlmKGVwX3N0YWxsKQkJLy8gSGFsdCBGb3JjZWQgc2VuZCBTVEFMTAorCQkJCSAgIGJlZ2luCisJCQkJCXRva2VuX3BpZF9zZWxfZCA9IFNUQUxMOworCQkJCQlzZW5kX3Rva2VuX2QgPSAxJ2IxOworCQkJCQluZXh0X3N0YXRlID0gVE9LRU47CisJCQkJICAgZW5kCisJCQkJZWxzZQorKi8KKwkJCQlpZihJTl9lcCB8IChDVFJMX2VwICYgcGlkX0lOKSkKKwkJCQkgICBiZWdpbgorCQkJCQlpZih0eGZyX2ludCAmIGVwX2VtcHR5KQorCQkJCQkgICBiZWdpbgorCQkJCQkJdG9rZW5fcGlkX3NlbF9kID0gTkFDSzsKKwkJCQkJCXNlbmRfdG9rZW5fZCA9IDEnYjE7CisJCQkJCQluZXh0X3N0YXRlID0gVE9LRU47CisJCQkJCSAgIGVuZAorCQkJCQllbHNlCisJCQkJCSAgIGJlZ2luCisJCQkJCQl0eF9kbWFfZW4gPSAxJ2IxOworCQkJCQkJbmV4dF9zdGF0ZSA9IElOOworCQkJCQkgICBlbmQKKwkJCQkgICBlbmQKKwkJCQllbHNlCisJCQkJaWYoT1VUX2VwIHwgKENUUkxfZXAgJiAocGlkX09VVCB8IHBpZF9TRVRVUCkpKQorCQkJCSAgIGJlZ2luCisJCQkJCXJ4X2RtYV9lbiA9IDEnYjE7CisJCQkJCW5leHRfc3RhdGUgPSBPVVQ7CisJCQkJICAgZW5kCisJCQkgICBlbmQKKwkJICAgZW5kCisKKwkgICBUT0tFTjoKKwkJICAgYmVnaW4KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIFRPS0VOICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCSAgIGVuZAorCisJICAgSU46CisJCSAgIGJlZ2luCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBJTiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCitgaWZkZWYgVVNCRl9ERUJVRworCQlpZihpZG1hX2RvbmUgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSU46IGlkbWFfZG9uZSBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZih0eGZyX2lzbyA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJTjogdHhmcl9pc28gaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQlyeF9hY2tfdG9fY2xyX2QgPSAxJ2IwOworCQkJaWYoaWRtYV9kb25lKQorCQkJICAgYmVnaW4KKwkJCQlpZih0eGZyX2lzbykJbmV4dF9zdGF0ZSA9IFVQREFURTsKKwkJCQllbHNlCQluZXh0X3N0YXRlID0gSU4yOworCQkJICAgZW5kCisKKwkJICAgZW5kCisJICAgSU4yOgorCQkgICBiZWdpbgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgSU4yICgldCkiLCAkdGltZSk7CitgZW5kaWYKK2BpZmRlZiBVU0JGX0RFQlVHCisJCWlmKHJ4X2Fja190byA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJTjI6IHJ4X2Fja190byBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZih0b2tlbl92YWxpZCA9PT0gMSdieCkkZGlzcGxheSgiRVJST1I6IElOMjogdG9rZW5fdmFsaWQgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX0FDSyA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJTjI6IHBpZF9BQ0sgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQlyeF9hY2tfdG9fY2xyX2QgPSAxJ2IwOworCQkJLy8gV2FpdCBmb3IgQUNLIGZyb20gSE9TVCBvciBUaW1lb3V0CisJCQlpZihyeF9hY2tfdG8pCW5leHRfc3RhdGUgPSBJRExFOworCQkJZWxzZQorCQkJaWYodG9rZW5fdmFsaWQgJiBwaWRfQUNLKQorCQkJICAgYmVnaW4KKwkJCQluZXh0X3N0YXRlID0gVVBEQVRFOworCQkJICAgZW5kCisJCSAgIGVuZAorCisJICAgT1VUOgorCQkgICBiZWdpbgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgT1VUICgldCkiLCAkdGltZSk7CitgZW5kaWYKK2BpZmRlZiBVU0JGX0RFQlVHCisJCWlmKHR4X2RhdGFfdG8gPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogT1VUOiB0eF9kYXRhX3RvIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKGNyYzE2X2VyciA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBPVVQ6IGNyYzE2X2VyciBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihhYm9ydCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBPVVQ6IGFib3J0IGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHJ4X2RhdGFfZG9uZSA9PT0gMSdieCkkZGlzcGxheSgiRVJST1I6IE9VVDogcnhfZGF0YV9kb25lIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHR4ZnJfaXNvID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IE9VVDogdHhmcl9pc28gaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX3NlcV9lcnIgPT09IDEnYngpJGRpc3BsYXkoIkVSUk9SOiBPVVQ6IHJ4X2RhdGFfZG9uZSBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCWlmKHR4X2RhdGFfdG8gfCBjcmMxNl9lcnIgfCBhYm9ydCApCisJCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQllbHNlCisJCQlpZihyeF9kYXRhX2RvbmUpCisJCQkgICBiZWdpbgkJLy8gU2VuZCBBY2sKKwkJCQlpZih0eGZyX2lzbykKKwkJCQkgICBiZWdpbgorCQkJCQlpZihwaWRfc2VxX2VycikJCWludF9zZXFlcnJfc2V0X2QgPSAxJ2IxOworCQkJCQluZXh0X3N0YXRlID0gVVBEQVRFVzsKKwkJCQkgICBlbmQKKwkJCQllbHNlCQluZXh0X3N0YXRlID0gT1VUMkE7CisJCQkgICBlbmQKKwkJICAgZW5kCisKKwkgICBPVVQyQjoKKwkJICAgYmVnaW4JLy8gVGhpcyBpcyBhIGRlbGF5IFN0YXRlIHRvIE5BQ0sgdG8gc21hbGwgb3IgdG8KKwkJCQkvLyBsYXJnZSBwYWNrZXRzLiB0aGlzIHN0YXRlIGNvdWxkIGJlIHNraXBwZWQKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIE9VVDJCICgldCkiLCAkdGltZSk7CitgZW5kaWYKK2BpZmRlZiBVU0JGX0RFQlVHCisJCWlmKGFib3J0ID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IE9VVDJBOiBhYm9ydCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCWlmKGFib3J0KQluZXh0X3N0YXRlID0gSURMRTsKKwkJCWVsc2UJCW5leHRfc3RhdGUgPSBPVVQyQjsKKwkJICAgZW5kCisJICAgT1VUMkE6CisJCSAgIGJlZ2luCS8vIFNlbmQgQUNLL05BQ0svTllFVAorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgT1VUMkEgKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorYGlmZGVmIFVTQkZfREVCVUcKKwkJaWYoYWJvcnQgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogT1VUMkE6IGFib3J0IGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9zZXFfZXJyID09PSAxJ2J4KSRkaXNwbGF5KCJFUlJPUjogT1VUMkE6IHJ4X2RhdGFfZG9uZSBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCWlmKGFib3J0KQluZXh0X3N0YXRlID0gSURMRTsKKwkJCWVsc2UKKworCQkJaWYoc2VuZF9zdGFsbF9yKQorCQkJICAgYmVnaW4KKwkJCQl0b2tlbl9waWRfc2VsX2QgPSBTVEFMTDsKKwkJCQlzZW5kX3Rva2VuX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCQllbHNlCisJCQlpZihlcF9mdWxsKQorCQkJICAgYmVnaW4KKwkJCQl0b2tlbl9waWRfc2VsX2QgPSBOQUNLOworCQkJCXNlbmRfdG9rZW5fZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJdG9rZW5fcGlkX3NlbF9kID0gQUNLOworCQkJCXNlbmRfdG9rZW5fZCA9IDEnYjE7CisJCQkJaWYocGlkX3NlcV9lcnIpCW5leHRfc3RhdGUgPSBJRExFOworCQkJCWVsc2UJCW5leHRfc3RhdGUgPSBVUERBVEU7CisJCQkgICBlbmQKKwkJICAgZW5kCisKKwkgICBVUERBVEVXOgorCQkgICBiZWdpbgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgVVBEQVRFVyAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCW5leHRfc3RhdGUgPSBVUERBVEU7CisJCSAgIGVuZAorCisJICAgVVBEQVRFOgorCQkgICBiZWdpbgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgVVBEQVRFICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJdWNfc3RhdF9zZXRfZCA9IDEnYjE7CisJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJICAgZW5kCisJZW5kY2FzZQorICAgZW5kCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGwudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wbC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4YTI4MWMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcGwudgpAQCAtMCwwICsxLDQxOSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFByb3RvY29sIExheWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBibG9jayBpcyB0eXBpY2FsbHkgcmVmZXJyZWQgdG8gYXMgdGhlIFNFSSBpbiBVU0IgICAgICAvLy8vCisvLy8vICBTcGVjaWZpY2F0aW9uLiBJdCBlbmNhcHN1bGF0ZXMgdGhlIFBhY2tldCBBc3NlbWJsZXIsICAgICAgIC8vLy8KKy8vLy8gIGRpc2Fzc2VtYmxlciwgcHJvdG9jb2wgZW5naW5lIGFuZCBpbnRlcm5hbCBETUEgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVjbnQvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfcGwudix2IDEuMiAyMDAyLTA5LTI1IDA2OjA2OjQ5IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMjUgMDY6MDY6NDkgJAorLy8gICRSZXZpc2lvbjogMS4yICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xOSAxMjowNzoyOCAgcnVkaQorLy8gICAgICAgICAgICAgICBJbml0aWFsIENoZWNraW4KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF9wbCgJY2xrLCByc3QsCisKKwkJLy8gVVRNSSBJbnRlcmZhY2UKKwkJcnhfZGF0YSwgcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyLAorCQl0eF9kYXRhLCB0eF92YWxpZCwgdHhfdmFsaWRfbGFzdCwgdHhfcmVhZHksCisJCXR4X2ZpcnN0LCB0eF92YWxpZF9vdXQsCisKKwkJdG9rZW5fdmFsaWQsCisKKwkJLy8gUmVnaXN0ZXIgRmlsZSBJbnRlcmZhY2UKKwkJZmEsCisJCWVwX3NlbCwgCisJCXhfYnVzeSwKKwkJaW50X2NyYzE2X3NldCwgaW50X3RvX3NldCwgaW50X3NlcWVycl9zZXQsCisKKwkJLy8gTWlzYworCQlmcm1fbmF0LAorCQlwaWRfY3NfZXJyLCBuc2VfZXJyLAorCQljcmM1X2VyciwKKwkJcnhfc2l6ZSwgcnhfZG9uZSwKKwkJY3RybF9zZXR1cCwgY3RybF9pbiwgY3RybF9vdXQsCisKKwkJLy8gQmxvY2sgRnJhbWVzCisJCWVwX2JmX2VuLCBlcF9iZl9zaXplLAorCQlkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lLAorCisJCS8vIEVQIEludGVyZmFjZQorCQljc3IsCisJCXR4X2RhdGFfc3QsIAorCQlyeF9jdHJsX2RhdGEsIAorCQlyeF9jdHJsX2RhdGFfZCwgCisJCXJ4X2N0cmxfZHZhbGlkLAorCQlyeF9jdHJsX2Rkb25lLAorCQlpZG1hX3JlLCBpZG1hX3dlLAorCQllcF9lbXB0eSwgZXBfZnVsbCwgc2VuZF9zdGFsbAorCisJCSk7CisKKy8vIFVUTUkgSW50ZXJmYWNlCitpbnB1dAkJY2xrLCByc3Q7CitpbnB1dAlbNzowXQlyeF9kYXRhOworaW5wdXQJCXJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VycjsKK291dHB1dAlbNzowXQl0eF9kYXRhOworb3V0cHV0CQl0eF92YWxpZDsKK291dHB1dAkJdHhfdmFsaWRfbGFzdDsKK2lucHV0CQl0eF9yZWFkeTsKK291dHB1dAkJdHhfZmlyc3Q7CitpbnB1dAkJdHhfdmFsaWRfb3V0OworCitvdXRwdXQJCXRva2VuX3ZhbGlkOworCisvLyBSZWdpc3RlciBGaWxlIGludGVyZmFjZQoraW5wdXQJWzY6MF0JZmE7CQkvLyBGdW5jdGlvbiBBZGRyZXNzIChhcyBzZXQgYnkgdGhlIGNvbnRyb2xsZXIpCitvdXRwdXQJWzM6MF0JZXBfc2VsOwkJLy8gRW5kcG9pbnQgTnVtYmVyIElucHV0CitvdXRwdXQJCXhfYnVzeTsJCS8vIEluZGljYXRlcyBVU0IgaXMgYnVzeQorCitvdXRwdXQJCWludF9jcmMxNl9zZXQ7CS8vIFNldCBDUkMxNiBlcnJvciBpbnRlcnJ1cHQKK291dHB1dAkJaW50X3RvX3NldDsJLy8gU2V0IHRpbWUgb3V0IGludGVycnVwdAorb3V0cHV0CQlpbnRfc2VxZXJyX3NldDsJLy8gU2V0IFBJRCBzZXF1ZW5jZSBlcnJvciBpbnRlcnJ1cHQKKworLy8gTWlzYworb3V0cHV0CQlwaWRfY3NfZXJyOwkvLyBwaWQgY2hlY2tzdW0gZXJyb3IKK291dHB1dAkJY3JjNV9lcnI7CS8vIGNyYzUgZXJyb3IKK291dHB1dAlbMzE6MF0JZnJtX25hdDsKK291dHB1dAkJbnNlX2VycjsJLy8gbm8gc3VjaCBlbmRwb2ludCBlcnJvcgorb3V0cHV0CVs3OjBdCXJ4X3NpemU7CitvdXRwdXQJCXJ4X2RvbmU7CitvdXRwdXQJCWN0cmxfc2V0dXA7CitvdXRwdXQJCWN0cmxfaW47CitvdXRwdXQJCWN0cmxfb3V0OworaW5wdXQJCWVwX2JmX2VuOworaW5wdXQJWzY6MF0JZXBfYmZfc2l6ZTsKK291dHB1dAkJZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZTsKKworLy8gRW5kcG9pbnQgSW50ZXJmYWNlcworaW5wdXQJWzEzOjBdCWNzcjsJCitpbnB1dAlbNzowXQl0eF9kYXRhX3N0Oworb3V0cHV0CVs3OjBdCXJ4X2N0cmxfZGF0YTsKK291dHB1dAlbNzowXQlyeF9jdHJsX2RhdGFfZDsKK291dHB1dAkJcnhfY3RybF9kdmFsaWQ7CitvdXRwdXQJCXJ4X2N0cmxfZGRvbmU7CitvdXRwdXQJCWlkbWFfcmUsIGlkbWFfd2U7CitpbnB1dAkJZXBfZW1wdHk7CitpbnB1dAkJZXBfZnVsbDsKKworaW5wdXQJCXNlbmRfc3RhbGw7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCisvLyBQYWNrZXQgRGlzYXNzZW1ibGVyIEludGVyZmFjZQord2lyZQkJY2xrLCByc3Q7Cit3aXJlCVs3OjBdCXJ4X2RhdGE7Cit3aXJlCQlwaWRfT1VULCBwaWRfSU4sIHBpZF9TT0YsIHBpZF9TRVRVUDsKK3dpcmUJCXBpZF9EQVRBMCwgcGlkX0RBVEExLCBwaWRfREFUQTIsIHBpZF9NREFUQTsKK3dpcmUJCXBpZF9BQ0ssIHBpZF9OQUNLLCBwaWRfU1RBTEwsIHBpZF9OWUVUOword2lyZQkJcGlkX1BSRSwgcGlkX0VSUiwgcGlkX1NQTElULCBwaWRfUElORzsKK3dpcmUJWzY6MF0JdG9rZW5fZmFkcjsKK3dpcmUJCXRva2VuX3ZhbGlkOword2lyZQkJY3JjNV9lcnI7Cit3aXJlCVsxMDowXQlmcmFtZV9ubzsKK3dpcmUJWzc6MF0JcnhfY3RybF9kYXRhOworcmVnCVs3OjBdCXJ4X2N0cmxfZGF0YV9kOword2lyZQkJcnhfY3RybF9kdmFsaWQ7Cit3aXJlCQlyeF9jdHJsX2Rkb25lOword2lyZQkJY3JjMTZfZXJyOword2lyZQkJcnhfc2VxX2VycjsKKworLy8gUGFja2V0IEFzc2VtYmxlciBJbnRlcmZhY2UKK3dpcmUJCXNlbmRfdG9rZW47Cit3aXJlCVsxOjBdCXRva2VuX3BpZF9zZWw7Cit3aXJlCQlzZW5kX2RhdGE7Cit3aXJlCVsxOjBdCWRhdGFfcGlkX3NlbDsKK3dpcmUJWzc6MF0JdHhfZGF0YV9zdDsKK3dpcmUJWzc6MF0JdHhfZGF0YV9zdF9vOword2lyZQkJcmRfbmV4dDsKKworLy8gSURNQSBJbnRlcmZhY2UKK3dpcmUJCXJ4X2RtYV9lbjsJLy8gQWxsb3dzIHRoZSBkYXRhIHRvIGJlIHN0b3JlZAord2lyZQkJdHhfZG1hX2VuOwkvLyBBbGxvd3MgZm9yIGRhdGEgdG8gYmUgcmV0cmlldmVkCit3aXJlCQlhYm9ydDsJCS8vIEFib3J0IFRyYW5zZmVyICh0aW1lX291dCwgY3JjX2VyciBvciByeF9lcnJvcikKK3dpcmUJCWlkbWFfZG9uZTsJLy8gRE1BIGlzIGRvbmUKKworLy8gTWVtb3J5IEFyYml0ZXIgSW50ZXJmYWNlCit3aXJlCQlpZG1hX3dlOword2lyZQkJaWRtYV9yZTsKKworLy8gTG9jYWwgc2lnbmFscword2lyZQkJcGlkX2JhZDsKKworcmVnCQlobXNfY2xrOwkvLyAwLjUgTWljcm8gU2Vjb25kIENsb2NrCityZWcJWzQ6MF0JaG1zX2NudDsKK3JlZwlbMTA6MF0JZnJhbWVfbm9fcjsJLy8gQ3VycmVudCBGcmFtZSBOdW1iZXIgcmVnaXN0ZXIKK3dpcmUJCWZyYW1lX25vX3dlOworcmVnCVsxMTowXQlzb2ZfdGltZTsJLy8gVGltZSBzaW5jZSBsYXN0IHNvZgorcmVnCQljbHJfc29mX3RpbWU7Cit3aXJlCQlmc2VsOwkJLy8gVGhpcyBGdW5jdGlvbiBpcyBzZWxlY3RlZAord2lyZQkJbWF0Y2hfbzsKKworcmVnCQlmcmFtZV9ub193ZV9yOworcmVnCQljdHJsX3NldHVwOworcmVnCQljdHJsX2luOworcmVnCQljdHJsX291dDsKKword2lyZQkJaWRtYV93ZV9kOword2lyZQkJZXBfZW1wdHlfaW50Oword2lyZQkJcnhfYnVzeTsKK3dpcmUJCXR4X2J1c3k7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCithc3NpZ24geF9idXN5ID0gdHhfYnVzeSB8IHJ4X2J1c3k7CisKKy8vIFBJRHMgd2Ugc2hvdWxkIG5ldmVyIHJlY2VpdmUKK2Fzc2lnbiBwaWRfYmFkID0gcGlkX0FDSyB8IHBpZF9OQUNLIHwgcGlkX1NUQUxMIHwgcGlkX05ZRVQgfCBwaWRfUFJFIHwKKwkJCXBpZF9FUlIgfCBwaWRfU1BMSVQgfCAgcGlkX1BJTkc7CisKK2Fzc2lnbiBtYXRjaF9vID0gIXBpZF9iYWQgJiB0b2tlbl92YWxpZCAmICFjcmM1X2VycjsKKworLy8gUmVjZWl2aW5nIFNldHVwCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljdHJsX3NldHVwIDw9ICMxIHRva2VuX3ZhbGlkICYgcGlkX1NFVFVQICYgKGVwX3NlbD09NCdoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWN0cmxfaW4gPD0gIzEgdG9rZW5fdmFsaWQgJiBwaWRfSU4gJiAoZXBfc2VsPT00J2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY3RybF9vdXQgPD0gIzEgdG9rZW5fdmFsaWQgJiBwaWRfT1VUICYgKGVwX3NlbD09NCdoMCk7CisKKy8vIEZyYW1lIE51bWJlciAoZnJvbSBTT0YgdG9rZW4pCithc3NpZ24gZnJhbWVfbm9fd2UgPSB0b2tlbl92YWxpZCAmICFjcmM1X2VyciAmIHBpZF9TT0Y7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWZyYW1lX25vX3dlX3IgPD0gIzEgZnJhbWVfbm9fd2U7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlmcmFtZV9ub19yIDw9ICMxIDExJ2gwOworCWVsc2UKKwlpZihmcmFtZV9ub193ZV9yKQlmcmFtZV9ub19yIDw9ICMxIGZyYW1lX25vOworCisvL1NPRiBkZWxheSBjb3VudGVyCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljbHJfc29mX3RpbWUgPD0gIzEgZnJhbWVfbm9fd2U7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGNscl9zb2ZfdGltZSkJc29mX3RpbWUgPD0gIzEgMTInaDA7CisJZWxzZQorCWlmKGhtc19jbGspCQlzb2ZfdGltZSA8PSAjMSBzb2ZfdGltZSArIDEyJ2gxOworCithc3NpZ24gZnJtX25hdCA9IHs0J2gwLCAxJ2IwLCBmcmFtZV9ub19yLCA0J2gwLCBzb2ZfdGltZX07CisKKy8vIDAuNSBNaWNybyBTZWNvbmRzIENsb2NrIEdlbmVyYXRvcgorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJaG1zX2NudCA8PSAjMSA1J2gwOworCWVsc2UKKwlpZihobXNfY2xrIHwgZnJhbWVfbm9fd2VfcikJCWhtc19jbnQgPD0gIzEgNSdoMDsKKwllbHNlCQkJCQlobXNfY250IDw9ICMxIGhtc19jbnQgKyA1J2gxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlobXNfY2xrIDw9ICMxIChobXNfY250ID09IGBVU0JGX0hNU19ERUwpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyeF9jdHJsX2RhdGFfZCA8PSByeF9jdHJsX2RhdGE7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gVGhpcyBmdW5jdGlvbiBpcyBhZGRyZXNzZWQKK2Fzc2lnbiBmc2VsID0gKHRva2VuX2ZhZHIgPT0gZmEpOworCisvLyBPbmx5IHdyaXRlIHdoZW4gd2UgYXJlIGFkZHJlc3NlZCAhISEKK2Fzc2lnbiBpZG1hX3dlID0gaWRtYV93ZV9kICYgZnNlbDsgLy8gbW92ZWQgZnVsbCBjaGVjayB0byBpZG1hIC4uLiAgJiAhZXBfZnVsbDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1vZHVsZSBJbnN0YW50aWF0aW9ucworLy8KKworLy9QYWNrZXQgRGVjb2RlcgordXNiMWRfcGQJdTAoCS5jbGsoCQljbGsJCSksCisJCS5yc3QoCQlyc3QJCSksCisKKwkJLnJ4X2RhdGEoCXJ4X2RhdGEJCSksCisJCS5yeF92YWxpZCgJcnhfdmFsaWQJKSwKKwkJLnJ4X2FjdGl2ZSgJcnhfYWN0aXZlCSksCisJCS5yeF9lcnIoCXJ4X2VycgkJKSwKKwkJLnBpZF9PVVQoCXBpZF9PVVQJCSksCisJCS5waWRfSU4oCXBpZF9JTgkJKSwKKwkJLnBpZF9TT0YoCXBpZF9TT0YJCSksCisJCS5waWRfU0VUVVAoCXBpZF9TRVRVUAkpLAorCQkucGlkX0RBVEEwKAlwaWRfREFUQTAJKSwKKwkJLnBpZF9EQVRBMSgJcGlkX0RBVEExCSksCisJCS5waWRfREFUQTIoCXBpZF9EQVRBMgkpLAorCQkucGlkX01EQVRBKAlwaWRfTURBVEEJKSwKKwkJLnBpZF9BQ0soCXBpZF9BQ0sJCSksCisJCS5waWRfTkFDSygJcGlkX05BQ0sJKSwKKwkJLnBpZF9TVEFMTCgJcGlkX1NUQUxMCSksCisJCS5waWRfTllFVCgJcGlkX05ZRVQJKSwKKwkJLnBpZF9QUkUoCXBpZF9QUkUJCSksCisJCS5waWRfRVJSKAlwaWRfRVJSCQkpLAorCQkucGlkX1NQTElUKAlwaWRfU1BMSVQJKSwKKwkJLnBpZF9QSU5HKAlwaWRfUElORwkpLAorCQkucGlkX2Nrc19lcnIoCXBpZF9jc19lcnIJKSwKKwkJLnRva2VuX2ZhZHIoCXRva2VuX2ZhZHIJKSwKKwkJLnRva2VuX2VuZHAoCWVwX3NlbAkJKSwKKwkJLnRva2VuX3ZhbGlkKAl0b2tlbl92YWxpZAkpLAorCQkuY3JjNV9lcnIoCWNyYzVfZXJyCSksCisJCS5mcmFtZV9ubygJZnJhbWVfbm8JKSwKKwkJLnJ4X2RhdGFfc3QoCXJ4X2N0cmxfZGF0YQkpLAorCQkucnhfZGF0YV92YWxpZCgJcnhfY3RybF9kdmFsaWQJKSwKKwkJLnJ4X2RhdGFfZG9uZSgJcnhfY3RybF9kZG9uZQkpLAorCQkuY3JjMTZfZXJyKAljcmMxNl9lcnIJKSwKKwkJLnNlcV9lcnIoCXJ4X3NlcV9lcnIJKSwKKwkJLnJ4X2J1c3koCXJ4X2J1c3kJCSkKKwkJKTsKKworLy8gUGFja2V0IEFzc2VtYmxlcgordXNiMWRfcGEJdTEoCS5jbGsoCQljbGsJCSksCisJCS5yc3QoCQlyc3QJCSksCisJCS50eF9kYXRhKAl0eF9kYXRhCQkpLAorCQkudHhfdmFsaWQoCXR4X3ZhbGlkCSksCisJCS50eF92YWxpZF9sYXN0KAl0eF92YWxpZF9sYXN0CSksCisJCS50eF9yZWFkeSgJdHhfcmVhZHkJKSwKKwkJLnR4X2ZpcnN0KAl0eF9maXJzdAkpLAorCQkuc2VuZF90b2tlbigJc2VuZF90b2tlbgkpLAorCQkudG9rZW5fcGlkX3NlbCgJdG9rZW5fcGlkX3NlbAkpLAorCQkuc2VuZF9kYXRhKAlzZW5kX2RhdGEJKSwKKwkJLmRhdGFfcGlkX3NlbCgJZGF0YV9waWRfc2VsCSksCisJCS50eF9kYXRhX3N0KAl0eF9kYXRhX3N0X28JKSwKKwkJLnJkX25leHQoCXJkX25leHQJCSksCisJCS5lcF9lbXB0eSgJZXBfZW1wdHlfaW50KQorCQkpOworCisvLyBJbnRlcm5hbCBETUEgLyBNZW1vcnkgQXJiaXRlciBJbnRlcmZhY2UKK3VzYjFkX2lkbWEKKwl1MigJLmNsaygJCWNsawkJKSwKKwkJLnJzdCgJCXJzdAkJKSwKKworCQkudHhfdmFsaWQoCXR4X3ZhbGlkCSksCisJCS5yeF9kYXRhX3ZhbGlkKAlyeF9jdHJsX2R2YWxpZAkpLAorCQkucnhfZGF0YV9kb25lKAlyeF9jdHJsX2Rkb25lCSksCisJCS5zZW5kX2RhdGEoCXNlbmRfZGF0YQkpLAorCQkucmRfbmV4dCgJcmRfbmV4dAkJKSwKKworCQkudHhfZGF0YV9zdF9pKAl0eF9kYXRhX3N0CSksCisJCS50eF9kYXRhX3N0X28oCXR4X2RhdGFfc3RfbwkpLAorCQkuZXBfc2VsKAllcF9zZWwJCSksCisKKwkJLmVwX2JmX2VuKAllcF9iZl9lbgkpLAorCQkuZXBfYmZfc2l6ZSgJZXBfYmZfc2l6ZQkpLAorCQkuZHJvcHBlZF9mcmFtZShkcm9wcGVkX2ZyYW1lCSksCisJCS5taXNhbGlnbmVkX2ZyYW1lKG1pc2FsaWduZWRfZnJhbWUpLAorCisJCS50eF9idXN5KAl0eF9idXN5CQkpLAorCisJCS50eF9kbWFfZW4oCXR4X2RtYV9lbgkpLAorCQkucnhfZG1hX2VuKAlyeF9kbWFfZW4JKSwKKwkJLmlkbWFfZG9uZSgJaWRtYV9kb25lCSksCisJCS5zaXplKAkJY3NyWzg6MF0JKSwKKwkJLnJ4X2NudCgJcnhfc2l6ZQkJKSwKKwkJLnJ4X2RvbmUoCXJ4X2RvbmUJCSksCisJCS5td2UoCQlpZG1hX3dlX2QJKSwKKwkJLm1yZSgJCWlkbWFfcmUJCSksCisJCS5lcF9lbXB0eSgJZXBfZW1wdHkJKSwKKwkJLmVwX2VtcHR5X2ludCgJZXBfZW1wdHlfaW50CSksCisJCS5lcF9mdWxsKAllcF9mdWxsCQkpCisJCSk7CisKKy8vIFByb3RvY29sIEVuZ2luZQordXNiMWRfcGUKKwl1MygJLmNsaygJCQljbGsJCQkpLAorCQkucnN0KAkJCXJzdAkJCSksCisKKwkJLnR4X3ZhbGlkKAkJdHhfdmFsaWRfb3V0CQkpLAorCQkucnhfYWN0aXZlKAkJcnhfYWN0aXZlCQkpLAorCQkucGlkX09VVCgJCXBpZF9PVVQJCQkpLAorCQkucGlkX0lOKAkJcGlkX0lOCQkJKSwKKwkJLnBpZF9TT0YoCQlwaWRfU09GCQkJKSwKKwkJLnBpZF9TRVRVUCgJCXBpZF9TRVRVUAkJKSwKKwkJLnBpZF9EQVRBMCgJCXBpZF9EQVRBMAkJKSwKKwkJLnBpZF9EQVRBMSgJCXBpZF9EQVRBMQkJKSwKKwkJLnBpZF9EQVRBMigJCXBpZF9EQVRBMgkJKSwKKwkJLnBpZF9NREFUQSgJCXBpZF9NREFUQQkJKSwKKwkJLnBpZF9BQ0soCQlwaWRfQUNLCQkJKSwKKwkJLnBpZF9QSU5HKAkJcGlkX1BJTkcJCSksCisJCS50b2tlbl92YWxpZCgJCXRva2VuX3ZhbGlkCQkpLAorCQkucnhfZGF0YV9kb25lKAkJcnhfY3RybF9kZG9uZQkJKSwKKwkJLmNyYzE2X2VycigJCWNyYzE2X2VycgkJKSwKKwkJLnNlbmRfdG9rZW4oCQlzZW5kX3Rva2VuCQkpLAorCQkudG9rZW5fcGlkX3NlbCgJCXRva2VuX3BpZF9zZWwJCSksCisJCS5kYXRhX3BpZF9zZWwoCQlkYXRhX3BpZF9zZWwJCSksCisJCS5yeF9kbWFfZW4oCQlyeF9kbWFfZW4JCSksCisJCS50eF9kbWFfZW4oCQl0eF9kbWFfZW4JCSksCisJCS5hYm9ydCgJCQlhYm9ydAkJCSksCisJCS5pZG1hX2RvbmUoCQlpZG1hX2RvbmUJCSksCisJCS5mc2VsKAkJCWZzZWwJCQkpLAorCQkuZXBfc2VsKAkJZXBfc2VsCQkJKSwKKwkJLmVwX2Z1bGwoCQllcF9mdWxsCQkJKSwKKwkJLmVwX2VtcHR5KAkJZXBfZW1wdHkJCSksCisJCS5tYXRjaCgJCQltYXRjaF9vCQkJKSwKKwkJLm5zZV9lcnIoCQluc2VfZXJyCQkJKSwKKwkJLmludF91cGlkX3NldCgJCSAgICAgICAgIAkJKSwKKwkJLmludF9jcmMxNl9zZXQoCQlpbnRfY3JjMTZfc2V0CQkpLAorCQkuaW50X3RvX3NldCgJCWludF90b19zZXQJCSksCisJCS5pbnRfc2VxZXJyX3NldCgJaW50X3NlcWVycl9zZXQJCSksCisJCS5jc3IoCQkJY3NyCQkJKSwKKwkJLnNlbmRfc3RhbGwoCQlzZW5kX3N0YWxsCQkpCisJCSk7CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3JvbTEudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9yb20xLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWU3NTNmNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9yb20xLnYKQEAgLTAsMCArMSwyNDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdG9yIFJPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfcm9tMS52LHYgMS4xLjEuMSAyMDAyLTA5LTE5IDEyOjA3OjI5IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMTkgMTI6MDc6MjkgJAorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX3JvbTEoY2xrLCBhZHIsIGRvdXQpOworaW5wdXQJCWNsazsKK2lucHV0CVs2OjBdCWFkcjsKK291dHB1dAlbNzowXQlkb3V0OworCityZWcJWzc6MF0JZG91dDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY2FzZShhZHIpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgIERFVklDRSBEZXNjcmlwdG9yICAgICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgIDcnaDAwOglkb3V0IDw9ICMxIDgnZDE4OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoMDE6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDAyOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBVU0IgdmVyc2lvbiBsb3cgYnl0ZQorCSAgIDcnaDAzOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBVU0IgdmVyc2lvbiBoaWdoIGJ5dGUKKwkgICA3J2gwNDoJZG91dCA8PSAjMSA4J2hmZjsJLy8gZGV2aWNlIGNsYXNzCisJICAgNydoMDU6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIGRldmljZSBzdWIgY2xhc3MKKwkgICA3J2gwNjoJZG91dCA8PSAjMSA4J2hmZjsJLy8gZGV2aWNlIHByb3RvY29sCisJICAgNydoMDc6CWRvdXQgPD0gIzEgOCdkNjQ7CS8vIG1heCBwYWNrZXQgc2l6ZQorCSAgIDcnaDA4Oglkb3V0IDw9ICMxIDgnaDM0OwkvLyB2ZW5kb3IgSUQgbG93IGJ5dGUKKwkgICA3J2gwOToJZG91dCA8PSAjMSA4J2gxMjsJLy8gdmVuZG9yIElEIGhpZ2ggYnl0ZQorCSAgIDcnaDBhOglkb3V0IDw9ICMxIDgnaDc4OwkvLyBwcm9kdWN0IElEIGxvdyBieXRlCisJICAgNydoMGI6CWRvdXQgPD0gIzEgOCdoNTY7CS8vIHByb2R1Y3QgSUQgaGlnaCBieXRlCisJICAgNydoMGM6CWRvdXQgPD0gIzEgOCdoMTA7CS8vIGRldmljZSByZWwuIG51bWJlciBsb3cgYnl0ZQorCSAgIDcnaDBkOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBkZXZpY2UgcmVsLiBudW1iZXIgaGlnaCBieXRlCisJICAgNydoMGU6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIE1hbnVmYWN0dXJlciBTdHJpbmcgSW5kZXgKKwkgICA3J2gwZjoJZG91dCA8PSAjMSA4J2gwMDsJLy8gUHJvZHVjdCBEZXNjci4gU3RyaW5nIEluZGV4CisJICAgNydoMTA6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIFMvTiBTdHJpbmcgSW5kZXgKKwkgICA3J2gxMToJZG91dCA8PSAjMSA4J2gwMTsJLy8gTnVtYmVyIG9mIHBvc3NpYmxlIGNvbmZpZy4KKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgIDcnaDEyOglkb3V0IDw9ICMxIDgnaDA5OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoMTM6CWRvdXQgPD0gIzEgOCdoMDI7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDE0Oglkb3V0IDw9ICMxIDgnZDUzOwkvLyB0b3RhbCBkYXRhIGxlbmd0aCBsb3cgYnl0ZQorCSAgIDcnaDE1Oglkb3V0IDw9ICMxIDgnZDAwOwkvLyB0b3RhbCBkYXRhIGxlbmd0aCBoaWdoIGJ5dGUKKwkgICA3J2gxNjoJZG91dCA8PSAjMSA4J2gwMTsJLy8gbnVtYmVyIG9mIGludGVyZmFjZXMKKwkgICA3J2gxNzoJZG91dCA8PSAjMSA4J2gwMTsJLy8gbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb25zCisJICAgNydoMTg6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIENvbmYuIFN0cmluZyBJbmRleAorCSAgIDcnaDE5Oglkb3V0IDw9ICMxIDgnaDQwOwkvLyBDb25maWcuIENoYXJhY3RlcmlzdGljcworCSAgIDcnaDFhOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBNYXguIFBvd2VyIENvbnN1bXB0aW9uCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgSW50ZXJmYWNlIERlc2NyaXB0b3IgICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICA3J2gxYjoJZG91dCA8PSAjMSA4J2gwOTsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDFjOglkb3V0IDw9ICMxIDgnaDA0OwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2gxZDoJZG91dCA8PSAjMSA4J2gwMDsJLy8gaW50ZXJmYWNlIG51bWJlcgorCSAgIDcnaDFlOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBhbHRlcm5hdGUgc2V0dGluZworCSAgIDcnaDFmOglkb3V0IDw9ICMxIDgnaDA1OwkvLyBudW1iZXIgb2YgZW5kcG9pbnRzCisJICAgNydoMjA6CWRvdXQgPD0gIzEgOCdoZmY7CS8vIGludGVyZmFjZSBjbGFzcworCSAgIDcnaDIxOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBpbnRlcmZhY2Ugc3ViIGNsYXNzCisJICAgNydoMjI6CWRvdXQgPD0gIzEgOCdoZmY7CS8vIGludGVyZmFjZSBwcm90b2NvbAorCSAgIDcnaDIzOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBpbnRlcmZhY2Ugc3RyaW5nIGluZGV4CisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgRW5kcG9pbnQgMSBEZXNjcmlwdG9yICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICA3J2gyNDoJZG91dCA8PSAjMSA4J2gwNzsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDI1Oglkb3V0IDw9ICMxIDgnaDA1OwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2gyNjoJZG91dCA8PSAjMSA4J2g4MTsJLy8gZW5kcG9pbnQgYWRkcmVzcworCSAgIDcnaDI3Oglkb3V0IDw9ICMxIDgnaDAxOwkvLyBlbmRwb2ludCBhdHRyaWJ1dGVzCisJICAgNydoMjg6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIG1heCBwYWNrZXQgc2l6ZSBsb3cgYnl0ZQorCSAgIDcnaDI5Oglkb3V0IDw9ICMxIDgnaDAxOwkvLyBtYXggcGFja2V0IHNpemUgaGlnaCBieXRlCisJICAgNydoMmE6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIHBvbGxpbmcgaW50ZXJ2YWwKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBFbmRwb2ludCAyIERlc2NyaXB0b3IgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgIDcnaDJiOglkb3V0IDw9ICMxIDgnaDA3OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoMmM6CWRvdXQgPD0gIzEgOCdoMDU7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDJkOglkb3V0IDw9ICMxIDgnaDAyOwkvLyBlbmRwb2ludCBhZGRyZXNzCisJICAgNydoMmU6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIGVuZHBvaW50IGF0dHJpYnV0ZXMKKwkgICA3J2gyZjoJZG91dCA8PSAjMSA4J2gwMDsJLy8gbWF4IHBhY2tldCBzaXplIGxvdyBieXRlCisJICAgNydoMzA6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIG1heCBwYWNrZXQgc2l6ZSBoaWdoIGJ5dGUKKwkgICA3J2gzMToJZG91dCA8PSAjMSA4J2gwMTsJLy8gcG9sbGluZyBpbnRlcnZhbAorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIEVuZHBvaW50IDMgRGVzY3JpcHRvciAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgNydoMzI6CWRvdXQgPD0gIzEgOCdoMDc7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2gzMzoJZG91dCA8PSAjMSA4J2gwNTsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoMzQ6CWRvdXQgPD0gIzEgOCdoODM7CS8vIGVuZHBvaW50IGFkZHJlc3MKKwkgICA3J2gzNToJZG91dCA8PSAjMSA4J2gwMjsJLy8gZW5kcG9pbnQgYXR0cmlidXRlcworCSAgIDcnaDM2Oglkb3V0IDw9ICMxIDgnZDY0OwkvLyBtYXggcGFja2V0IHNpemUgbG93IGJ5dGUKKwkgICA3J2gzNzoJZG91dCA8PSAjMSA4J2QwMDsJLy8gbWF4IHBhY2tldCBzaXplIGhpZ2ggYnl0ZQorCSAgIDcnaDM4Oglkb3V0IDw9ICMxIDgnaDAxOwkvLyBwb2xsaW5nIGludGVydmFsCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgRW5kcG9pbnQgNCBEZXNjcmlwdG9yICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICA3J2gzOToJZG91dCA8PSAjMSA4J2gwNzsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDNhOglkb3V0IDw9ICMxIDgnaDA1OwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2gzYjoJZG91dCA8PSAjMSA4J2gwNDsJLy8gZW5kcG9pbnQgYWRkcmVzcworCSAgIDcnaDNjOglkb3V0IDw9ICMxIDgnaDAyOwkvLyBlbmRwb2ludCBhdHRyaWJ1dGVzCisJICAgNydoM2Q6CWRvdXQgPD0gIzEgOCdkNjQ7CS8vIG1heCBwYWNrZXQgc2l6ZSBsb3cgYnl0ZQorCSAgIDcnaDNlOglkb3V0IDw9ICMxIDgnZDAwOwkvLyBtYXggcGFja2V0IHNpemUgaGlnaCBieXRlCisJICAgNydoM2Y6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIHBvbGxpbmcgaW50ZXJ2YWwKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBFbmRwb2ludCA1IERlc2NyaXB0b3IgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgIDcnaDQwOglkb3V0IDw9ICMxIDgnaDA3OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoNDE6CWRvdXQgPD0gIzEgOCdoMDU7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDQyOglkb3V0IDw9ICMxIDgnaDg1OwkvLyBlbmRwb2ludCBhZGRyZXNzCisJICAgNydoNDM6CWRvdXQgPD0gIzEgOCdoMDM7CS8vIGVuZHBvaW50IGF0dHJpYnV0ZXMKKwkgICA3J2g0NDoJZG91dCA8PSAjMSA4J2Q2NDsJLy8gbWF4IHBhY2tldCBzaXplIGxvdyBieXRlCisJICAgNydoNDU6CWRvdXQgPD0gIzEgOCdkMDA7CS8vIG1heCBwYWNrZXQgc2l6ZSBoaWdoIGJ5dGUKKwkgICA3J2g0NjoJZG91dCA8PSAjMSA4J2gwMTsJLy8gcG9sbGluZyBpbnRlcnZhbAorCisvKgorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gU3RyaW5nIERlc2NyaXB0b3IgTGFuZyBJRD09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJICAgNydoNDc6CWRvdXQgPD0gIzEgOCdkMDY7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2g0ODoJZG91dCA8PSAjMSA4J2QwMzsJLy8gZGVzY3JpcHRvciB0eXBlCisKKwkgICA3J2g0OToJZG91dCA8PSAjMSA4J2QwOTsJLy8gTGFuZ3VhZ2UgSUQgMCBsb3cgYnl0ZQorCSAgIDcnaDRhOglkb3V0IDw9ICMxIDgnZDA0OwkvLyBMYW5ndWFnZSBJRCAwIGhpZ2ggYnl0ZQorCisJICAgNydoNGI6CWRvdXQgPD0gIzEgOCdkMDk7CS8vIExhbmd1YWdlIElEIDEgbG93IGJ5dGUKKwkgICA3J2g0YzoJZG91dCA8PSAjMSA4J2QwNDsJLy8gTGFuZ3VhZ2UgSUQgMSBoaWdoIGJ5dGUKKworCSAgIDcnaDRkOglkb3V0IDw9ICMxIDgnZDA5OwkvLyBMYW5ndWFnZSBJRCAyIGxvdyBieXRlCisJICAgNydoNGU6CWRvdXQgPD0gIzEgOCdkMDQ7CS8vIExhbmd1YWdlIElEIDIgaGlnaCBieXRlCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgU3RyaW5nIERlc2NyaXB0b3IgMCAgICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgIDcnaDUwOglkb3V0IDw9ICMxIDgnZDAxMDsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDUxOglkb3V0IDw9ICMxIDgnZDAzOwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2g1MjoJZG91dCA8PSAjMSAiMCI7CisJICAgNydoNTM6CWRvdXQgPD0gIzEgIiAiOworCSAgIDcnaDU0Oglkb3V0IDw9ICMxICJnIjsKKwkgICA3J2g1NToJZG91dCA8PSAjMSAibiI7CisJICAgNydoNTY6CWRvdXQgPD0gIzEgImkiOworCSAgIDcnaDU3Oglkb3V0IDw9ICMxICJyIjsKKwkgICA3J2g1ODoJZG91dCA8PSAjMSAidCI7CisJICAgNydoNTk6CWRvdXQgPD0gIzEgIlMiOworCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIFN0cmluZyBEZXNjcmlwdG9yIDEgICAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICA3J2g2MDoJZG91dCA8PSAjMSA4J2QwMTA7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2g2MToJZG91dCA8PSAjMSA4J2QwMzsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoNjI6CWRvdXQgPD0gIzEgIjEiOworCSAgIDcnaDYzOglkb3V0IDw9ICMxICIgIjsKKwkgICA3J2g2NDoJZG91dCA8PSAjMSAiZyI7CisJICAgNydoNjU6CWRvdXQgPD0gIzEgIm4iOworCSAgIDcnaDY2Oglkb3V0IDw9ICMxICJpIjsKKwkgICA3J2g2NzoJZG91dCA8PSAjMSAiciI7CisJICAgNydoNjg6CWRvdXQgPD0gIzEgInQiOworCSAgIDcnaDY5Oglkb3V0IDw9ICMxICJTIjsKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBTdHJpbmcgRGVzY3JpcHRvciAyICAgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJICAgNydoNzA6CWRvdXQgPD0gIzEgOCdkMDEwOwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoNzE6CWRvdXQgPD0gIzEgOCdkMDM7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDcyOglkb3V0IDw9ICMxICIyIjsKKwkgICA3J2g3MzoJZG91dCA8PSAjMSAiICI7CisJICAgNydoNzQ6CWRvdXQgPD0gIzEgImciOworCSAgIDcnaDc1Oglkb3V0IDw9ICMxICJuIjsKKwkgICA3J2g3NjoJZG91dCA8PSAjMSAiaSI7CisJICAgNydoNzc6CWRvdXQgPD0gIzEgInIiOworCSAgIDcnaDc4Oglkb3V0IDw9ICMxICJ0IjsKKwkgICA3J2g3OToJZG91dCA8PSAjMSAiUyI7CisKKyovCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJICAgLy9kZWZhdWx0Oglkb3V0IDw9ICMxIDgnZDAwOworCWVuZGNhc2UKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfc3luY19maWZvLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfc3luY19maWZvLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjM1ZTM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9zeW5jX2ZpZm8udgpAQCAtMCwwICsxLDE1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHNkcmFtIGNvbnRyb2xsZXIgcHJvamVjdCAgICAgICAgICAgCisgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9zZHJfY3RybC8gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRGVzY3JpcHRpb246IFNZTkMgRklGTyAKKyAgUGFyYW1ldGVyczoKKyAgICAgIFcgOiBXaWR0aCAoaW50ZWdlcikKKyAgICAgIEQgOiBEZXB0aCAoaW50ZWdlciwgcG93ZXIgb2YgMiwgNCB0byAyNTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBBdXRob3Iocyk6ICBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCisgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAorIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKK2xhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCisgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKKyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCittb2R1bGUgdXNiMWRfc3luY19maWZvIChjbGssCisJICAgICAgICAgIHJlc2V0X24sCisJCSAgY2xyLAorCQkgIHdyX2VuLAorCQkgIHdyX2RhdGEsCisJCSAgZnVsbCwKKwkJICBlbXB0eSwKKwkJICByZF9lbiwKKwkJICByZF9kYXRhKTsKKworICAgcGFyYW1ldGVyIFcgPSA4OworICAgcGFyYW1ldGVyIEQgPSA0OworCisgICBwYXJhbWV0ZXIgQVcgPSAoRCA9PSA0KSAgID8gMiA6CisJCSAgKEQgPT0gOCkgICA/IDMgOgorCQkgIChEID09IDE2KSAgPyA0IDoKKwkJICAoRCA9PSAzMikgID8gNSA6CisJCSAgKEQgPT0gNjQpICA/IDYgOgorCQkgIChEID09IDEyOCkgPyA3IDoKKwkJICAoRCA9PSAyNTYpID8gOCA6IDA7CisgICAKKyAgIG91dHB1dCBbVy0xIDogMF0gIHJkX2RhdGE7CisgICBpbnB1dCBbVy0xIDogMF0gICB3cl9kYXRhOworICAgaW5wdXQgCSAgICAgY2xrLCByZXNldF9uLCBjbHIsd3JfZW4sIHJkX2VuOworICAgb3V0cHV0IAkgICAgIGZ1bGwsIGVtcHR5OworCisgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCisKKyAgIGluaXRpYWwgYmVnaW4KKyAgICAgIGlmIChBVyA9PSAwKSBiZWdpbgorCSAkZGlzcGxheSAoIiVtIDogRVJST1IhISEgRmlmbyBkZXB0aCAlZCBub3QgaW4gcmFuZ2UgNCB0byAyNTYiLCBEKTsKKyAgICAgIGVuZCAvLyBpZiAoQVcgPT0gMCkKKyAgIGVuZCAvLyBpbml0aWFsIGJlZ2luCisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCisKKyAgIHJlZyBbVy0xIDogMF0gICAgbWVtW0QtMSA6IDBdOworICAgcmVnIFtBVy0xIDogMF0gICByZF9wdHIsIHdyX3B0cjsKKyAgIHJlZwkgCSAgICBmdWxsLCBlbXB0eTsKKworCisgICB3aXJlIFtXLTEgOiAwXSAgIHJkX2RhdGE7CisgICAKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pIAorICAgICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgIHdyX3B0ciA8PSB7QVd7MSdiMH19IDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorCSBpZihjbHIpICAgd3JfcHRyIDw9IHtBV3sxJ2IwfX0gOworCSBlbHNlIGJlZ2luCisJICAgIGlmICh3cl9lbiAmICFmdWxsKSBiZWdpbgorICAgICAgICAgICAgICAgd3JfcHRyIDw9IHdyX3B0ciArIDEnYjEgOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgIGVuZAorCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICByZF9wdHIgPD0ge0FXezEnYjB9fSA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKwkgaWYoY2xyKSAgIHJkX3B0ciA8PSB7QVd7MSdiMH19IDsKKwkgZWxzZSBiZWdpbgorCSAgICBpZiAocmRfZW4gJiAhZW1wdHkpIGJlZ2luCisgICAgICAgICAgICAgICByZF9wdHIgPD0gcmRfcHRyICsgMSdiMSA7CisgICAgICAgICAgICBlbmQKKwkgZW5kCisgICAgICBlbmQKKworCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICBlbXB0eSA8PSAxJ2IxIDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgZW1wdHkgPD0gKCgod3JfcHRyIC0gcmRfcHRyKSA9PSB7eyhBVy0xKXsxJ2IwfX0sIDEnYjF9KSAmIHJkX2VuICYgfndyX2VuKSA/IDEnYjEgOiAKKyAgICAgICAgICAgICAgICAgICAoKHdyX3B0ciA9PSByZF9wdHIpICYgfnJkX2VuICYgd3JfZW4pID8gMSdiMCA6IGVtcHR5IDsKKyAgICAgIGVuZAorCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICBmdWxsIDw9IDEnYjAgOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisgICAgICAgICBmdWxsIDw9ICgoKHdyX3B0ciAtIHJkX3B0cikgPT0ge3soQVctMSl7MSdiMX19LCAxJ2IwfSkgJiB+cmRfZW4gJiB3cl9lbikgPyAxJ2IxIDogCisgICAgICAgICAgICAgICAgICgoKHdyX3B0ciAtIHJkX3B0cikgPT0ge0FXezEnYjF9fSkgJiByZF9lbiAmIH53cl9lbikgPyAxJ2IwIDogZnVsbCA7CisgICAgICBlbmQKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSAKKyAgICAgIGlmICh3cl9lbikKKwkgbWVtW3dyX3B0cl0gPD0gd3JfZGF0YTsKKworYXNzaWduICByZF9kYXRhID0gbWVtW3JkX3B0cl07CisKKworLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorICAgYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgICBpZiAod3JfZW4gJiYgZnVsbCkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5KCIlbSA6IEVycm9yISBzZmlmbyBvdmVyZmxvdyEiKTsKKyAgICAgIGVuZAorICAgZW5kCisKKyAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgaWYgKHJkX2VuICYmIGVtcHR5KSBiZWdpbgorICAgICAgICAgJGRpc3BsYXkoIiVtIDogZXJyb3IhIHNmaWZvIHVuZGVyZmxvdyEiKTsKKyAgICAgIGVuZAorICAgZW5kCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW5kbW9kdWxlCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3V0bWlfaWYudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF91dG1pX2lmLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDU0NjkwNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF91dG1pX2lmLnYKQEAgLTAsMCArMSwxNDcgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVVE1JIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfdXRtaV9pZi52LHYgMS4xLjEuMSAyMDAyLTA5LTE5IDEyOjA3OjE0IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMTkgMTI6MDc6MTQgJAorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfdXRtaV9pZiggLy8gVVRNSSBJbnRlcmZhY2UgKEVYVEVSTkFMKQorCQlwaHlfY2xrLCByc3QsCisJCURhdGFPdXQsIFR4VmFsaWQsIFR4UmVhZHksCisJCVJ4VmFsaWQsIFJ4QWN0aXZlLCBSeEVycm9yLCBEYXRhSW4sCisKKwkJLy8gSW50ZXJuYWwgSW50ZXJmYWNlCisJCXJ4X2RhdGEsIHJ4X3ZhbGlkLCByeF9hY3RpdmUsIHJ4X2VyciwKKwkJdHhfZGF0YSwgdHhfdmFsaWQsIHR4X3ZhbGlkX2xhc3QsIHR4X3JlYWR5LAorCQl0eF9maXJzdAorCisJCSk7CisKK2lucHV0CQlwaHlfY2xrOworaW5wdXQJCXJzdDsKKworb3V0cHV0CVs3OjBdCURhdGFPdXQ7CitvdXRwdXQJCVR4VmFsaWQ7CitpbnB1dAkJVHhSZWFkeTsKKworaW5wdXQJWzc6MF0JRGF0YUluOworaW5wdXQJCVJ4VmFsaWQ7CitpbnB1dAkJUnhBY3RpdmU7CitpbnB1dAkJUnhFcnJvcjsKKworCitvdXRwdXQJWzc6MF0JcnhfZGF0YTsKK291dHB1dAkJcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyOworaW5wdXQJWzc6MF0JdHhfZGF0YTsKK2lucHV0CQl0eF92YWxpZDsKK2lucHV0CQl0eF92YWxpZF9sYXN0Oworb3V0cHV0CQl0eF9yZWFkeTsKK2lucHV0CQl0eF9maXJzdDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCityZWcJWzc6MF0JcnhfZGF0YTsKK3JlZwkJcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyOworcmVnCVs3OjBdCURhdGFPdXQ7CityZWcJCXR4X3JlYWR5OworcmVnCQlUeFZhbGlkOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUlggSW50ZXJmYWNlIElucHV0IHJlZ2lzdGVycworLy8KKworYWx3YXlzIEAocG9zZWRnZSBwaHlfY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXJ4X3ZhbGlkIDw9ICMxIDEnYjA7CisJZWxzZQkJcnhfdmFsaWQgPD0gIzEgUnhWYWxpZDsKKworYWx3YXlzIEAocG9zZWRnZSBwaHlfY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXJ4X2FjdGl2ZSA8PSAjMSAxJ2IwOworCWVsc2UJCXJ4X2FjdGl2ZSA8PSAjMSBSeEFjdGl2ZTsKKworYWx3YXlzIEAocG9zZWRnZSBwaHlfY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXJ4X2VyciA8PSAjMSAxJ2IwOworCWVsc2UJCXJ4X2VyciA8PSAjMSBSeEVycm9yOworCithbHdheXMgQChwb3NlZGdlIHBoeV9jbGspCisJCXJ4X2RhdGEgPD0gIzEgRGF0YUluOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVFggSW50ZXJmYWNlIE91dHB1dC9JbnB1dCByZWdpc3RlcnMKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgcGh5X2NsaykKKwlpZihUeFJlYWR5IHwgdHhfZmlyc3QpCURhdGFPdXQgPD0gIzEgdHhfZGF0YTsKKworYWx3YXlzIEAocG9zZWRnZSBwaHlfY2xrKQorCXR4X3JlYWR5IDw9ICMxIFR4UmVhZHk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgcGh5X2NsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlUeFZhbGlkIDw9ICMxIDEnYjA7CisJZWxzZQorCVR4VmFsaWQgPD0gIzEgdHhfdmFsaWQgfCB0eF92YWxpZF9sYXN0IHwgKFR4VmFsaWQgJiAhVHhSZWFkeSk7CisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF9waHkudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3BoeS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0NmM1MjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF9waHkudgpAQCAtMCwwICsxLDE5MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQiAxLjEgUEhZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiX3BoeS8gICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiX3BoeS52LHYgMS40IDIwMDMtMTAtMjEgMDU6NTg6NDAgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMy0xMC0yMSAwNTo1ODo0MCAkCisvLyAgJFJldmlzaW9uOiAxLjQgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjMgIDIwMDMvMTAvMTkgMTc6NDA6MTMgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgLSBNYWRlIGNvcmUgbW9yZSByb2J1c3QgYWdhaW5zdCBsaW5lIG5vaXNlCisvLyAgICAgICAgICAgICAgIC0gQWRkZWQgRXJyb3IgQ2hlY2tpbmcgYW5kIFJlcG9ydGluZworLy8gICAgICAgICAgICAgICAoU2VlIFJFQURNRS50eHQgZm9yIG1vcmUgaW5mbykKKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMiAgMjAwMi8wOS8xNiAxNjowNjozNyAgcnVkaQorLy8gICAgICAgICAgICAgICBDaGFuZ2VkIHRvcCBsZXZlbCBuYW1lIHRvIGJlIGNvbnNpc3RlbnQgLi4uCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE2IDE0OjI2OjU5ICBydWRpCisvLyAgICAgICAgICAgICAgIENyZWF0ZWQgRGlyZWN0b3J5IFN0cnVjdHVyZQorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisKKworbW9kdWxlIHVzYjFkX3BoeShjbGssIHJzdG4sIHBoeV90eF9tb2RlLCB1c2JfcnN0LAorCQorCQkvLyBUcmFuc2NpZXZlciBJbnRlcmZhY2UKKwkJdHhkcCwgdHhkbiwgdHhvZSwJCisJCXJ4ZCwgcnhkcCwgcnhkbiwKKworCQkvLyBVVE1JIEludGVyZmFjZQorCQlEYXRhT3V0X2ksIFR4VmFsaWRfaSwgVHhSZWFkeV9vLCBSeFZhbGlkX28sCisJCVJ4QWN0aXZlX28sIFJ4RXJyb3JfbywgRGF0YUluX28sIExpbmVTdGF0ZV9vCisJCSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29tbWFuIFNpZ25hbAorKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2lucHV0CQljbGsgICAgICAgICAgICAgIDsgLy8gNDhNaHogY2xvY2sKK2lucHV0CQlyc3RuICAgICAgICAgICAgICA7IC8vIEFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKworaW5wdXQJCXBoeV90eF9tb2RlICAgICAgOyAvLyBVc2VkIGluIFR4IFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBQSFkgc3VwcG9ydHMgc2luZ2xlIGVuZGVkIGFuZCBkaWZmZXJlbnRpYWwgb3V0cHV0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2NlaXZlciBEZXBlbmRpbmcgb24gd2hpY2ggZGV2aWNlIHlvdSBhcmUgdXNpbmcsIHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRpZSB0aGUgcGh5X3R4X21vZGUgaGlnaCBvciBsb3cuIAorb3V0cHV0CQl1c2JfcnN0ICAgICAgICAgIDsgLy8gdXNiX3JzdCBpcyBhc3NlcnRlZCB3aGVuZXZlciB0aGUgaG9zdCBzaWduYWxzIHJlc2V0IG9uIHRoZSBVU0IgYnVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgVVNCIGNvcmUgd2lsbCBpbnRlcm5hbGx5IHJlc2V0IGl0c2VsZiBhdXRvbWF0aWNhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG91dHB1dCBpcyBwcm92aWRlZCBmb3IgZXh0ZXJuYWwgbG9naWMgdGhhdCBuZWVkcyB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB3aGVuIHRoZSBVU0IgYnVzIGlzIHJlc2V0LgorCitvdXRwdXQJCXR4ZHAsIHR4ZG4sIHR4b2U7CitpbnB1dAkJcnhkLCByeGRwLCByeGRuOworaW5wdXQJWzc6MF0JRGF0YU91dF9pOworaW5wdXQJCVR4VmFsaWRfaTsKK291dHB1dAkJVHhSZWFkeV9vOworb3V0cHV0CVs3OjBdCURhdGFJbl9vOworb3V0cHV0CQlSeFZhbGlkX287CitvdXRwdXQJCVJ4QWN0aXZlX287CitvdXRwdXQJCVJ4RXJyb3JfbzsKK291dHB1dAlbMTowXQlMaW5lU3RhdGVfbzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3JlZwlbNDowXQlyc3RfY250OworcmVnCQl1c2JfcnN0Oword2lyZQkJZnNfY2U7Cit3aXJlCQlyc3RuOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRYIFBoeQorLy8KKwordXNiMWRfdHhfcGh5IGlfdHhfcGh5KAorCS5jbGsoCQljbGsJCSksCisJLnJzdG4oCQlyc3RuCQkpLAorCS5mc19jZSgJCWZzX2NlCQkpLAorCS5waHlfbW9kZSgJcGh5X3R4X21vZGUJKSwKKworCS8vIFRyYW5zY2lldmVyIEludGVyZmFjZQorCS50eGRwKAkJdHhkcAkJKSwKKwkudHhkbigJCXR4ZG4JCSksCisJLnR4b2UoCQl0eG9lCQkpLAorCisJLy8gVVRNSSBJbnRlcmZhY2UKKwkuRGF0YU91dF9pKAlEYXRhT3V0X2kJKSwKKwkuVHhWYWxpZF9pKAlUeFZhbGlkX2kJKSwKKwkuVHhSZWFkeV9vKAlUeFJlYWR5X28JKQorCSk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBSWCBQaHkgYW5kIERQTEwKKy8vCisKK3VzYjFkX3J4X3BoeSBpX3J4X3BoeSgKKwkuY2xrKAkJY2xrCQkpLAorCS5yc3RuKAkJcnN0bgkJKSwKKwkuZnNfY2UoCQlmc19jZQkJKSwKKworCS8vIFRyYW5zY2lldmVyIEludGVyZmFjZQorCS5yeGQoCQlyeGQJCSksCisJLnJ4ZHAoCQlyeGRwCQkpLAorCS5yeGRuKAkJcnhkbgkJKSwKKworCS8vIFVUTUkgSW50ZXJmYWNlCisJLkRhdGFJbl9vKAlEYXRhSW5fbwkpLAorCS5SeFZhbGlkX28oCVJ4VmFsaWRfbwkpLAorCS5SeEFjdGl2ZV9vKAlSeEFjdGl2ZV9vCSksCisJLlJ4RXJyb3JfbygJUnhFcnJvcl9vCSksCisJLlJ4RW5faSgJdHhvZQkJKSwKKwkuTGluZVN0YXRlKAlMaW5lU3RhdGVfbwkpCisJKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlIGFuIFVTQiBSZXNldCBpcyB3ZSBzZWUgU0UwIGZvciBhdCBsZWFzdCAyLjV1UworLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCQlyc3RfY250IDw9IDUnaDA7CisJZWxzZQorCWlmKExpbmVTdGF0ZV9vICE9IDInaDApCQlyc3RfY250IDw9IDUnaDA7CisJZWxzZQkKKwlpZighdXNiX3JzdCAmJiBmc19jZSkJCXJzdF9jbnQgPD0gcnN0X2NudCArIDUnaDE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXVzYl9yc3QgPD0gKHJzdF9jbnQgPT0gNSdoMWYpOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfcnhfcGh5LnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF9yeF9waHkudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Y2Y0MmRiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfcnhfcGh5LnYKQEAgLTAsMCArMSw0NTUgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVU0IgMS4xIFBIWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJYICYgRFBMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiX3BoeS8gICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiX3J4X3BoeS52LHYgMS41IDIwMDQtMTAtMTkgMDk6Mjk6MDcgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwNC0xMC0xOSAwOToyOTowNyAkCisvLyAgJFJldmlzaW9uOiAxLjUgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjQgIDIwMDMvMTIvMDIgMDQ6NTY6MDAgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgRml4ZWQgYSBidWcgcmVwb3J0ZWQgYnkgS2FybCBDLiBQb3NjaCBmcm9tIEdyYXogVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LiBUaGFua3MgS2FybCAhCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjMgIDIwMDMvMTAvMTkgMTg6MDc6NDUgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgLSBGaXhlZCBTeW5jIEVycm9yIHRvIGJlIG9ubHkgY2hlY2tlZC9nZW5lcmF0ZWQgZHVyaW5nIHRoZSBzeW5jIHBoYXNlCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjIgIDIwMDMvMTAvMTkgMTc6NDA6MTMgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgLSBNYWRlIGNvcmUgbW9yZSByb2J1c3QgYWdhaW5zdCBsaW5lIG5vaXNlCisvLyAgICAgICAgICAgICAgIC0gQWRkZWQgRXJyb3IgQ2hlY2tpbmcgYW5kIFJlcG9ydGluZworLy8gICAgICAgICAgICAgICAoU2VlIFJFQURNRS50eHQgZm9yIG1vcmUgaW5mbykKKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTYgMTQ6Mjc6MDEgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgQ3JlYXRlZCBEaXJlY3RvcnkgU3RydWN0dXJlCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKworCittb2R1bGUgdXNiMWRfcnhfcGh5KAljbGssIHJzdG4sIGZzX2NlLAorCQorCQkJLy8gVHJhbnNjaWV2ZXIgSW50ZXJmYWNlCisJCQlyeGQsIHJ4ZHAsIHJ4ZG4sCisKKwkJCS8vIFVUTUkgSW50ZXJmYWNlCisJCQlSeFZhbGlkX28sIFJ4QWN0aXZlX28sIFJ4RXJyb3JfbywgRGF0YUluX28sCisJCQlSeEVuX2ksIExpbmVTdGF0ZSk7CisKK2lucHV0CQljbGs7CitpbnB1dAkJcnN0bjsKK291dHB1dAkJZnNfY2U7CitpbnB1dAkJcnhkLCByeGRwLCByeGRuOworb3V0cHV0CVs3OjBdCURhdGFJbl9vOworb3V0cHV0CQlSeFZhbGlkX287CitvdXRwdXQJCVJ4QWN0aXZlX287CitvdXRwdXQJCVJ4RXJyb3JfbzsKK2lucHV0CQlSeEVuX2k7CitvdXRwdXQJWzE6MF0JTGluZVN0YXRlOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworcmVnCQlyeGRfczAsIHJ4ZF9zMSwgIHJ4ZF9zOworcmVnCQlyeGRwX3MwLCByeGRwX3MxLCByeGRwX3MsIHJ4ZHBfc19yOworcmVnCQlyeGRuX3MwLCByeGRuX3MxLCByeGRuX3MsIHJ4ZG5fc19yOworcmVnCQlzeW5jZWRfZDsKK3dpcmUJCWssIGosIHNlMDsKK3JlZwkJcnhkX3I7CityZWcJCXJ4X2VuOworcmVnCQlyeF9hY3RpdmU7CityZWcJWzI6MF0JYml0X2NudDsKK3JlZwkJcnhfdmFsaWQxLCByeF92YWxpZDsKK3JlZwkJc2hpZnRfZW47CityZWcJCXNkX3I7CityZWcJCXNkX25yemk7CityZWcJWzc6MF0JaG9sZF9yZWc7Cit3aXJlCQlkcm9wX2JpdDsJLy8gSW5kaWNhdGVzIGEgc3R1ZmZlZCBiaXQKK3JlZwlbMjowXQlvbmVfY250OworCityZWcJWzE6MF0JZHBsbF9zdGF0ZSwgZHBsbF9uZXh0X3N0YXRlOworcmVnCQlmc19jZV9kOworcmVnCQlmc19jZTsKK3dpcmUJCWNoYW5nZTsKK3dpcmUJCWxvY2tfZW47CityZWcJWzI6MF0JZnNfc3RhdGUsIGZzX25leHRfc3RhdGU7CityZWcJCXJ4X3ZhbGlkX3I7CityZWcJCXN5bmNfZXJyX2QsIHN5bmNfZXJyOworcmVnCQliaXRfc3R1ZmZfZXJyOworcmVnCQlzZTBfciwgYnl0ZV9lcnI7CityZWcJCXNlMF9zOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworYXNzaWduIFJ4QWN0aXZlX28gPSByeF9hY3RpdmU7Cithc3NpZ24gUnhWYWxpZF9vID0gcnhfdmFsaWQ7Cithc3NpZ24gUnhFcnJvcl9vID0gc3luY19lcnIgfCBiaXRfc3R1ZmZfZXJyIHwgYnl0ZV9lcnI7Cithc3NpZ24gRGF0YUluX28gPSBob2xkX3JlZzsKK2Fzc2lnbiBMaW5lU3RhdGUgPSB7cnhkbl9zMSwgcnhkcF9zMX07CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeF9lbiA8PSBSeEVuX2k7CithbHdheXMgQChwb3NlZGdlIGNsaykJc3luY19lcnIgPD0gIXJ4X2FjdGl2ZSAmIHN5bmNfZXJyX2Q7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTeW5jaHJvbml6ZSBJbnB1dHMKKy8vCisKKy8vIEZpcnN0IHN5bmNocm9uaXplIHRvIHRoZSBsb2NhbCBzeXN0ZW0gY2xvY2sgdG8KKy8vIGF2b2lkIG1ldGFzdGFiaWxpdHkgb3V0c2lkZSB0aGUgc3luYyBibG9jayAoKl9zMCkuCisvLyBUaGVuIG1ha2Ugc3VyZSB3ZSBzZWUgdGhlIHNpZ25hbCBmb3IgYXQgbGVhc3QgdHdvCisvLyBjbG9jayBjeWNsZXMgc3RhYmxlIHRvIGF2b2lkIGdsaXRjaGVzIGFuZCBub2lzZQorCithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkX3MwICA8PSByeGQ7CithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkX3MxICA8PSByeGRfczA7CithbHdheXMgQChwb3NlZGdlIGNsaykJCQkJCQkJLy8gQXZvaWQgZGV0ZWN0aW5nIExpbmUgR2xpdGNoZXMgYW5kIG5vaXNlCisJaWYocnhkX3MwICYmIHJ4ZF9zMSkJcnhkX3MgPD0gMSdiMTsKKwllbHNlCisJaWYoIXJ4ZF9zMCAmJiAhcnhkX3MxKQlyeGRfcyA8PSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkcF9zMCAgPD0gcnhkcDsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRwX3MxICA8PSByeGRwX3MwOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZHBfc19yIDw9IHJ4ZHBfczAgJiByeGRwX3MxOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZHBfcyAgIDw9IChyeGRwX3MwICYgcnhkcF9zMSkgfCByeGRwX3NfcjsJLy8gQXZvaWQgZGV0ZWN0aW5nIExpbmUgR2xpdGNoZXMgYW5kIG5vaXNlCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRuX3MwICA8PSByeGRuOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZG5fczEgIDw9IHJ4ZG5fczA7CithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkbl9zX3IgPD0gcnhkbl9zMCAmIHJ4ZG5fczE7CithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkbl9zICAgPD0gKHJ4ZG5fczAgJiByeGRuX3MxKSB8IHJ4ZG5fc19yOwkvLyBBdm9pZCBkZXRlY3RpbmcgTGluZSBHbGl0Y2hlcyBhbmQgbm9pc2UKKworYXNzaWduIGsgPSAhcnhkcF9zICYgIHJ4ZG5fczsKK2Fzc2lnbiBqID0gIHJ4ZHBfcyAmICFyeGRuX3M7Cithc3NpZ24gc2UwID0gIXJ4ZHBfcyAmICFyeGRuX3M7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlpZihmc19jZSkJc2UwX3MgPD0gc2UwOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRFBMTAorLy8KKworLy8gVGhpcyBkZXNpZ24gdXNlcyBhIGNsb2NrIGVuYWJsZSB0byBkbyAxMk1oeiB0aW1pbmcgYW5kIG5vdCBhCisvLyByZWFsIDEyTWh6IGNsb2NrLiBFdmVyeXRoaW5nIGFsd2F5cyBydW5zIGF0IDQ4TWh6LiBXZSB3YW50IHRvCisvLyBtYWtlIHN1cmUgaG93ZXZlciwgdGhhdCB0aGUgY2xvY2sgZW5hYmxlIGlzIGFsd2F5cyBleGFjdGx5IGluCisvLyB0aGUgbWlkZGxlIGJldHdlZW4gdHdvIHZpcnR1YWwgMTJNaHogcmlzaW5nIGVkZ2VzLgorLy8gV2UgbW9uaXRvciByeGRwIGFuZCByeGRuIGZvciBhbnkgY2hhbmdlcyBhbmQgZG8gdGhlIGFwcHJvcGlhdGUKKy8vIGFkanVzdG1lbnRzLgorLy8gSW4gYWRkaXRpb24gdG8gdGhlIGxvY2tpbmcgZG9uZSBpbiB0aGUgZHBsbCBGU00sIHdlIGFkanVzdCB0aGUKKy8vIGZpbmFsIGxhdGNoIGVuYWJsZSB0byBjb21wZW5zYXRlIGZvciB2YXJpb3VzIHN5bmMgcmVnaXN0ZXJzIC4uLgorCisvLyBBbGxvdyBsb2NraW5mIG9ubHkgd2hlbiB3ZSBhcmUgcmVjZWl2aW5nCithc3NpZ24JbG9ja19lbiA9IHJ4X2VuOworCithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkX3IgPD0gcnhkX3M7CisKKy8vIEVkZ2UgZGV0ZWN0b3IKK2Fzc2lnbiBjaGFuZ2UgPSByeGRfciAhPSByeGRfczsKKworLy8gRFBMTCBGU00KK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCWRwbGxfc3RhdGUgPD0gMidoMTsKKwllbHNlCQlkcGxsX3N0YXRlIDw9IGRwbGxfbmV4dF9zdGF0ZTsKKworYWx3YXlzIEAoZHBsbF9zdGF0ZSBvciBsb2NrX2VuIG9yIGNoYW5nZSkKKyAgIGJlZ2luCisJZnNfY2VfZCA9IDEnYjA7CisJY2FzZShkcGxsX3N0YXRlKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDInaDA6CisJCWlmKGxvY2tfZW4gJiYgY2hhbmdlKQlkcGxsX25leHRfc3RhdGUgPSAyJ2gwOworCQllbHNlCQkJZHBsbF9uZXh0X3N0YXRlID0gMidoMTsKKwkgICAyJ2gxOmJlZ2luCisJCWZzX2NlX2QgPSAxJ2IxOworCQlpZihsb2NrX2VuICYmIGNoYW5nZSkJZHBsbF9uZXh0X3N0YXRlID0gMidoMzsKKwkJZWxzZQkJCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDI7CisJCWVuZAorCSAgIDInaDI6CisJCWlmKGxvY2tfZW4gJiYgY2hhbmdlKQlkcGxsX25leHRfc3RhdGUgPSAyJ2gwOworCQllbHNlCQkJZHBsbF9uZXh0X3N0YXRlID0gMidoMzsKKwkgICAyJ2gzOgorCQlpZihsb2NrX2VuICYmIGNoYW5nZSkJZHBsbF9uZXh0X3N0YXRlID0gMidoMDsKKwkJZWxzZQkJCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDA7CisJZW5kY2FzZQorICAgZW5kCisKKy8vIENvbXBlbnNhdGUgZm9yIHN5bmMgcmVnaXN0ZXJzIGF0IHRoZSBpbnB1dCAtIGFsbGlnbiBmdWxsIHNwZWVkCisvLyBjbG9jayBlbmFibGUgdG8gYmUgaW4gdGhlIG1pZGRsZSBiZXR3ZWVuIHR3byBiaXQgY2hhbmdlcyAuLi4KK3JlZwlmc19jZV9yMSwgZnNfY2VfcjI7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlmc19jZV9yMSA8PSBmc19jZV9kOworYWx3YXlzIEAocG9zZWRnZSBjbGspCWZzX2NlX3IyIDw9IGZzX2NlX3IxOworYWx3YXlzIEAocG9zZWRnZSBjbGspCWZzX2NlIDw9IGZzX2NlX3IyOworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGaW5kIFN5bmMgUGF0dGVybiBGU00KKy8vCisKK3BhcmFtZXRlcglGU19JRExFCT0gMydoMCwKKwkJSzEJPSAzJ2gxLAorCQlKMQk9IDMnaDIsCisJCUsyCT0gMydoMywKKwkJSjIJPSAzJ2g0LAorCQlLMwk9IDMnaDUsCisJCUozCT0gMydoNiwKKwkJSzQJPSAzJ2g3OworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlmc19zdGF0ZSA8PSBGU19JRExFOworCWVsc2UJCWZzX3N0YXRlIDw9IGZzX25leHRfc3RhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgIERpbmVzaC5BLCA3dGggRmViIDIwMTMKKyAgICAgICBTeW5jIERldGVjdGlvbiwgd2hlbiBmb2xsb3dpbmcgcGF0dGVybiBkZXRlY3RlZAorICAgICAgICAgIGssaixrLGosayxqLGssaworICAgICAgIFdoZXJlIGsgPTE7IGlmICByeGRwID09IDAgIGFuZCByeGRuID09IDEgCisgICAgICAgV2hlcmUgaiA9MTsgaWYgIHJ4ZHAgPT0gMSAgYW5kIHJ4ZG4gPT0gMAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWx3YXlzIEAoZnNfc3RhdGUgb3IgZnNfY2Ugb3IgayBvciBqIG9yIHJ4X2VuIG9yIHJ4X2FjdGl2ZSBvciBzZTAgb3Igc2UwX3MpCisgICBiZWdpbgorCXN5bmNlZF9kID0gMSdiMDsKKwlzeW5jX2Vycl9kID0gMSdiMDsKKwlmc19uZXh0X3N0YXRlID0gZnNfc3RhdGU7CisJaWYoZnNfY2UgJiYgIXJ4X2FjdGl2ZSAmJiAhc2UwICYmICFzZTBfcykKKwkgICBjYXNlKGZzX3N0YXRlKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQlGU19JRExFOgorCQkgICAgIGJlZ2luCisJCQlpZihrICYmIHJ4X2VuKQlmc19uZXh0X3N0YXRlID0gSzE7CisJCSAgICAgZW5kCisJCUsxOgorCQkgICAgIGJlZ2luCisJCQlpZihqICYmIHJ4X2VuKQlmc19uZXh0X3N0YXRlID0gSjE7CisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCQlzeW5jX2Vycl9kID0gMSdiMTsKKwkJCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CisJCQkgICBlbmQKKwkJICAgICBlbmQKKwkJSjE6CisJCSAgICAgYmVnaW4KKwkJCWlmKGsgJiYgcnhfZW4pCWZzX25leHRfc3RhdGUgPSBLMjsKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJCXN5bmNfZXJyX2QgPSAxJ2IxOworCQkJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsKKwkJCSAgIGVuZAorCQkgICAgIGVuZAorCQlLMjoKKwkJICAgICBiZWdpbgorCQkJaWYoaiAmJiByeF9lbikJZnNfbmV4dF9zdGF0ZSA9IEoyOworCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQkJc3luY19lcnJfZCA9IDEnYjE7CisJCQkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOworCQkJICAgZW5kCisJCSAgICAgZW5kCisJCUoyOgorCQkgICAgIGJlZ2luCisJCQlpZihrICYmIHJ4X2VuKQlmc19uZXh0X3N0YXRlID0gSzM7CisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCQlzeW5jX2Vycl9kID0gMSdiMTsKKwkJCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CisJCQkgICBlbmQKKwkJICAgICBlbmQKKwkJSzM6CisJCSAgICAgYmVnaW4KKwkJCWlmKGogJiYgcnhfZW4pCWZzX25leHRfc3RhdGUgPSBKMzsKKwkJCWVsc2UKKwkJCWlmKGsgJiYgcnhfZW4pCisJCQkgICBiZWdpbgorCQkJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsJLy8gQWxsb3cgbWlzc2luZyBmaXJzdCBLLUoKKwkJCQkJc3luY2VkX2QgPSAxJ2IxOworCQkJICAgZW5kCisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCQlzeW5jX2Vycl9kID0gMSdiMTsKKwkJCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CisJCQkgICBlbmQKKwkJICAgICBlbmQKKwkJSjM6CisJCSAgICAgYmVnaW4KKwkJCWlmKGsgJiYgcnhfZW4pCWZzX25leHRfc3RhdGUgPSBLNDsKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJCXN5bmNfZXJyX2QgPSAxJ2IxOworCQkJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsKKwkJCSAgIGVuZAorCQkgICAgIGVuZAorCQlLNDoKKwkJICAgICBiZWdpbgorCQkJaWYoaykJc3luY2VkX2QgPSAxJ2IxOworCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CisJCSAgICAgZW5kCisJICAgZW5kY2FzZQorICAgZW5kCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5lcmF0ZSBSeEFjdGl2ZQorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCXJ4X2FjdGl2ZSA8PSAxJ2IwOworCWVsc2UKKwlpZihzeW5jZWRfZCAmJiByeF9lbikJcnhfYWN0aXZlIDw9IDEnYjE7CisJZWxzZQorCWlmKHNlMCAmJiByeF92YWxpZF9yKQlyeF9hY3RpdmUgPD0gMSdiMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYocnhfdmFsaWQpCXJ4X3ZhbGlkX3IgPD0gMSdiMTsKKwllbHNlCisJaWYoZnNfY2UpCXJ4X3ZhbGlkX3IgPD0gMSdiMDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE5SWkkgRGVjb2RlcgorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoZnNfY2UpCXNkX3IgPD0gcnhkX3M7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQlzZF9ucnppIDw9IDEnYjA7CisJZWxzZQorCWlmKCFyeF9hY3RpdmUpCQlzZF9ucnppIDw9IDEnYjE7CisJZWxzZQorCWlmKHJ4X2FjdGl2ZSAmJiBmc19jZSkJc2RfbnJ6aSA8PSAhKHJ4ZF9zIF4gc2Rfcik7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBCaXQgU3R1ZmYgRGV0ZWN0CisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlvbmVfY250IDw9IDMnaDA7CisJZWxzZQorCWlmKCFzaGlmdF9lbikJb25lX2NudCA8PSAzJ2gwOworCWVsc2UKKwlpZihmc19jZSkKKwkgICBiZWdpbgorCQlpZighc2RfbnJ6aSB8fCBkcm9wX2JpdCkJb25lX2NudCA8PSAzJ2gwOworCQllbHNlCQkJCW9uZV9jbnQgPD0gb25lX2NudCArIDMnaDE7CisJICAgZW5kCisKK2Fzc2lnbiBkcm9wX2JpdCA9IChvbmVfY250PT0zJ2g2KTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCWJpdF9zdHVmZl9lcnIgPD0gZHJvcF9iaXQgJiBzZF9ucnppICYgZnNfY2UgJiAhc2UwICYgcnhfYWN0aXZlOyAvLyBCaXQgU3R1ZmYgRXJyb3IKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFNlcmlhbCA9PiBQYXJhbGxlbCBjb252ZXJ0ZXIKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGZzX2NlKQlzaGlmdF9lbiA8PSBzeW5jZWRfZCB8IHJ4X2FjdGl2ZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoZnNfY2UgJiYgc2hpZnRfZW4gJiYgIWRyb3BfYml0KQorCQlob2xkX3JlZyA8PSB7c2RfbnJ6aSwgaG9sZF9yZWdbNzoxXX07CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5lcmF0ZSBSeFZhbGlkCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJYml0X2NudCA8PSAzJ2IwOworCWVsc2UKKwlpZighc2hpZnRfZW4pCQliaXRfY250IDw9IDMnaDA7CisJZWxzZQorCWlmKGZzX2NlICYmICFkcm9wX2JpdCkJYml0X2NudCA8PSBiaXRfY250ICsgMydoMTsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCQkJCXJ4X3ZhbGlkMSA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSAmJiAhZHJvcF9iaXQgJiYgKGJpdF9jbnQ9PTMnaDcpKQlyeF92YWxpZDEgPD0gMSdiMTsKKwllbHNlCisJaWYocnhfdmFsaWQxICYmIGZzX2NlICYmICFkcm9wX2JpdCkJCXJ4X3ZhbGlkMSA8PSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsaykJcnhfdmFsaWQgPD0gIWRyb3BfYml0ICYgcnhfdmFsaWQxICYgZnNfY2U7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlzZTBfciA8PSBzZTA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlieXRlX2VyciA8PSBzZTAgJiAhc2UwX3IgJiAofGJpdF9jbnRbMjoxXSkgJiByeF9hY3RpdmU7CisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF90eF9waHkudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3R4X3BoeS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjMGY5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF90eF9waHkudgpAQCAtMCwwICsxLDQ2MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQiAxLjEgUEhZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2JfcGh5LyAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2JfdHhfcGh5LnYsdiAxLjQgMjAwNC0xMC0xOSAwOToyOTowNyBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDA0LTEwLTE5IDA5OjI5OjA3ICQKKy8vICAkUmV2aXNpb246IDEuNCAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMyAgMjAwMy8xMC8yMSAwNTo1ODo0MSAgcnVkaQorLy8gICAgICAgICAgICAgICB1c2JfcnN0IGlzIG5vIGxvbmdlciBvcidlZCB3aXRoIHRoZSBpbmNvbW1pbmcgcmVzZXQgaW50ZXJuYWxseS4KKy8vICAgICAgICAgICAgICAgTm93IHVzYl9yc3QgaXMgc2ltcGx5IGFuIG91dHB1dCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgaG93CisvLyAgICAgICAgICAgICAgIHRvIHV0aWxpemUgaXQuCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjIgIDIwMDMvMTAvMTkgMTc6NDA6MTMgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgLSBNYWRlIGNvcmUgbW9yZSByb2J1c3QgYWdhaW5zdCBsaW5lIG5vaXNlCisvLyAgICAgICAgICAgICAgIC0gQWRkZWQgRXJyb3IgQ2hlY2tpbmcgYW5kIFJlcG9ydGluZworLy8gICAgICAgICAgICAgICAoU2VlIFJFQURNRS50eHQgZm9yIG1vcmUgaW5mbykKKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTYgMTQ6Mjc6MDIgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgQ3JlYXRlZCBEaXJlY3RvcnkgU3RydWN0dXJlCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworCisKK21vZHVsZSB1c2IxZF90eF9waHkoCisJCWNsaywgcnN0biwgZnNfY2UsIHBoeV9tb2RlLAorCQorCQkvLyBUcmFuc2NpZXZlciBJbnRlcmZhY2UKKwkJdHhkcCwgdHhkbiwgdHhvZSwJCisKKwkJLy8gVVRNSSBJbnRlcmZhY2UKKwkJRGF0YU91dF9pLCBUeFZhbGlkX2ksIFR4UmVhZHlfbworCQkpOworCitpbnB1dAkJY2xrOworaW5wdXQJCXJzdG47CitpbnB1dAkJZnNfY2U7CitpbnB1dAkJcGh5X21vZGU7CitvdXRwdXQJCXR4ZHAsIHR4ZG4sIHR4b2U7CitpbnB1dAlbNzowXQlEYXRhT3V0X2k7CitpbnB1dAkJVHhWYWxpZF9pOworb3V0cHV0CQlUeFJlYWR5X287CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCitwYXJhbWV0ZXIJSURMRQk9IDMnZDAsCisJCVNPUAk9IDMnaDEsCisJCURBVEEJPSAzJ2gyLAorCQlFT1AxCT0gMydoMywKKwkJRU9QMgk9IDMnaDQsCisJCVdBSVQJPSAzJ2g1OworCityZWcJCVR4UmVhZHlfbzsKK3JlZwlbMjowXQlzdGF0ZSwgbmV4dF9zdGF0ZTsKK3JlZwkJdHhfcmVhZHlfZDsKK3JlZwkJbGRfc29wX2Q7CityZWcJCWxkX2RhdGFfZDsKK3JlZwkJbGRfZW9wX2Q7CityZWcJCXR4X2lwOworcmVnCQl0eF9pcF9zeW5jOworcmVnCVsyOjBdCWJpdF9jbnQ7CityZWcJWzc6MF0JaG9sZF9yZWc7CityZWcJWzc6MF0JaG9sZF9yZWdfZDsKKworcmVnCQlzZF9yYXdfbzsKK3dpcmUJCWhvbGQ7CityZWcJCWRhdGFfZG9uZTsKK3JlZwkJc2Z0X2RvbmU7CityZWcJCXNmdF9kb25lX3I7Cit3aXJlCQlzZnRfZG9uZV9lOworcmVnCQlsZF9kYXRhOword2lyZQkJZW9wX2RvbmU7CityZWcJWzI6MF0Jb25lX2NudDsKK3dpcmUJCXN0dWZmOworcmVnCQlzZF9ic19vOworcmVnCQlzZF9ucnppX287CityZWcJCWFwcGVuZF9lb3A7CityZWcJCWFwcGVuZF9lb3Bfc3luYzE7CityZWcJCWFwcGVuZF9lb3Bfc3luYzI7CityZWcJCWFwcGVuZF9lb3Bfc3luYzM7CityZWcJCWFwcGVuZF9lb3Bfc3luYzQ7CityZWcJCXR4ZHAsIHR4ZG47CityZWcJCXR4b2VfcjEsIHR4b2VfcjI7CityZWcJCXR4b2U7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlUeFJlYWR5X28gPD0gMSdiMDsKKwllbHNlCQlUeFJlYWR5X28gPD0gdHhfcmVhZHlfZCAmIFR4VmFsaWRfaTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspIGxkX2RhdGEgPD0gbGRfZGF0YV9kOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVHJhbnNtaXQgaW4gcHJvZ3Jlc3MgaW5kaWNhdG9yCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQl0eF9pcCA8PSAxJ2IwOworCWVsc2UKKwlpZihsZF9zb3BfZCkJdHhfaXAgPD0gMSdiMTsKKwllbHNlCisJaWYoZW9wX2RvbmUpCXR4X2lwIDw9IDEnYjA7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQl0eF9pcF9zeW5jIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQkJdHhfaXBfc3luYyA8PSB0eF9pcDsKKworLy8gZGF0YV9kb25lIGhlbHBzIHVzIHRvIGNhdGNoIGNhc2VzIHdoZXJlIFR4VmFsaWQgZHJvcHMgZHVlIHRvCisvLyBwYWNrZXQgZW5kIGFuZCB0aGVuIGdldHMgcmUtYXNzZXJ0ZWQgYXMgYSBuZXcgcGFja2V0IHN0YXJ0cy4KKy8vIFdlIG1pZ2h0IG5vdCBzZWUgdGhpcyBiZWNhdXNlIHdlIGFyZSBzdGlsbCB0cmFuc21pdHRpbmcuCisvLyBkYXRhX2RvbmUgc2hvdWxkIHNvbHZlIHRob3NlIGNhc2VzIC4uLgorYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCQlkYXRhX2RvbmUgPD0gMSdiMDsKKwllbHNlCisJaWYoVHhWYWxpZF9pICYmICEgdHhfaXApCWRhdGFfZG9uZSA8PSAxJ2IxOworCWVsc2UKKwlpZighVHhWYWxpZF9pKQkJCWRhdGFfZG9uZSA8PSAxJ2IwOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gU2hpZnQgUmVnaXN0ZXIKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQliaXRfY250IDw9IDMnaDA7CisJZWxzZQorCWlmKCF0eF9pcF9zeW5jKQkJYml0X2NudCA8PSAzJ2gwOworCWVsc2UKKwlpZihmc19jZSAmJiAhaG9sZCkJYml0X2NudCA8PSBiaXRfY250ICsgMydoMTsKKworYXNzaWduIGhvbGQgPSBzdHVmZjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXR4X2lwX3N5bmMpCQlzZF9yYXdfbyA8PSAxJ2IwOworCWVsc2UKKwljYXNlKGJpdF9jbnQpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgMydoMDogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFswXTsKKwkgICAzJ2gxOiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzFdOworCSAgIDMnaDI6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbMl07CisJICAgMydoMzogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFszXTsKKwkgICAzJ2g0OiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzRdOworCSAgIDMnaDU6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbNV07CisJICAgMydoNjogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFs2XTsKKwkgICAzJ2g3OiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzddOworCWVuZGNhc2UKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2Z0X2RvbmUgPD0gIWhvbGQgJiAoYml0X2NudCA9PSAzJ2g3KTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2Z0X2RvbmVfciA8PSBzZnRfZG9uZTsKKworYXNzaWduIHNmdF9kb25lX2UgPSBzZnRfZG9uZSAmICFzZnRfZG9uZV9yOworCisvLyBPdXQgRGF0YSBIb2xkIFJlZ2lzdGVyCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihsZF9zb3BfZCkJaG9sZF9yZWcgPD0gOCdoODA7CisJZWxzZQorCWlmKGxkX2RhdGEpCWhvbGRfcmVnIDw9IERhdGFPdXRfaTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspIGhvbGRfcmVnX2QgPD0gaG9sZF9yZWc7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBCaXQgU3R1ZmZlcgorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJb25lX2NudCA8PSAzJ2gwOworCWVsc2UKKwlpZighdHhfaXBfc3luYykJb25lX2NudCA8PSAzJ2gwOworCWVsc2UKKwlpZihmc19jZSkKKwkgICBiZWdpbgorCQlpZighc2RfcmF3X28gfHwgc3R1ZmYpCW9uZV9jbnQgPD0gMydoMDsKKwkJZWxzZQkJCW9uZV9jbnQgPD0gb25lX2NudCArIDMnaDE7CisJICAgZW5kCisKK2Fzc2lnbiBzdHVmZiA9IChvbmVfY250PT0zJ2g2KTsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJc2RfYnNfbyA8PSAxJ2gwOworCWVsc2UKKwlpZihmc19jZSkJc2RfYnNfbyA8PSAhdHhfaXBfc3luYyA/IDEnYjAgOiAoc3R1ZmYgPyAxJ2IwIDogc2RfcmF3X28pOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTlJaSSBFbmNvZGVyCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJCXNkX25yemlfbyA8PSAxJ2IxOworCWVsc2UKKwlpZighdHhfaXBfc3luYyB8fCAhdHhvZV9yMSkJc2RfbnJ6aV9vIDw9IDEnYjE7CisJZWxzZQorCWlmKGZzX2NlKQkJCXNkX25yemlfbyA8PSBzZF9ic19vID8gc2RfbnJ6aV9vIDogfnNkX25yemlfbzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEVPUCBhcHBlbmQgbG9naWMKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQlhcHBlbmRfZW9wIDw9IDEnYjA7CisJZWxzZQorCWlmKGxkX2VvcF9kKQkJYXBwZW5kX2VvcCA8PSAxJ2IxOworCWVsc2UKKwlpZihhcHBlbmRfZW9wX3N5bmMyKQlhcHBlbmRfZW9wIDw9IDEnYjA7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCWFwcGVuZF9lb3Bfc3luYzEgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCWFwcGVuZF9lb3Bfc3luYzEgPD0gYXBwZW5kX2VvcDsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJYXBwZW5kX2VvcF9zeW5jMiA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJYXBwZW5kX2VvcF9zeW5jMiA8PSBhcHBlbmRfZW9wX3N5bmMxOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlhcHBlbmRfZW9wX3N5bmMzIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQlhcHBlbmRfZW9wX3N5bmMzIDw9IGFwcGVuZF9lb3Bfc3luYzIgfAorCQkJKGFwcGVuZF9lb3Bfc3luYzMgJiAhYXBwZW5kX2VvcF9zeW5jNCk7CS8vIE1ha2Ugc3VyZSBhbHdheXMgMiBiaXQgd2lkZQorCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlhcHBlbmRfZW9wX3N5bmM0IDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQlhcHBlbmRfZW9wX3N5bmM0IDw9IGFwcGVuZF9lb3Bfc3luYzM7CisKK2Fzc2lnbiBlb3BfZG9uZSA9IGFwcGVuZF9lb3Bfc3luYzM7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBPdXRwdXQgRW5hYmxlIExvZ2ljCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQl0eG9lX3IxIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQl0eG9lX3IxIDw9IHR4X2lwX3N5bmM7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXR4b2VfcjIgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCXR4b2VfcjIgPD0gdHhvZV9yMTsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJdHhvZSA8PSAxJ2IxOworCWVsc2UKKwlpZihmc19jZSkJdHhvZSA8PSAhKHR4b2VfcjEgfCB0eG9lX3IyKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE91dHB1dCBSZWdpc3RlcnMKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXR4ZHAgPD0gMSdiMTsKKwllbHNlCisJaWYoZnNfY2UpCXR4ZHAgPD0gcGh5X21vZGUgPworCQkJCQkoIWFwcGVuZF9lb3Bfc3luYzMgJiAgc2RfbnJ6aV9vKSA6CisJCQkJCXNkX25yemlfbzsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJdHhkbiA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJdHhkbiA8PSBwaHlfbW9kZSA/CisJCQkJCSghYXBwZW5kX2VvcF9zeW5jMyAmIH5zZF9ucnppX28pIDoKKwkJCQkJYXBwZW5kX2VvcF9zeW5jMzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFR4IFN0YXRlbWFzaGluZQorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJc3RhdGUgPD0gSURMRTsKKwllbHNlCQlzdGF0ZSA8PSBuZXh0X3N0YXRlOworCithbHdheXMgQChzdGF0ZSBvciBUeFZhbGlkX2kgb3IgZGF0YV9kb25lIG9yIHNmdF9kb25lX2Ugb3IgZW9wX2RvbmUgb3IgZnNfY2UpCisgICBiZWdpbgorCW5leHRfc3RhdGUgPSBzdGF0ZTsKKwl0eF9yZWFkeV9kID0gMSdiMDsKKworCWxkX3NvcF9kID0gMSdiMDsKKwlsZF9kYXRhX2QgPSAxJ2IwOworCWxkX2VvcF9kID0gMSdiMDsKKworCWNhc2Uoc3RhdGUpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgSURMRToKKwkJCWlmKFR4VmFsaWRfaSkKKwkJCSAgIGJlZ2luCisJCQkJbGRfc29wX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBTT1A7CisJCQkgICBlbmQKKwkgICBTT1A6CisJCQlpZihzZnRfZG9uZV9lKQorCQkJICAgYmVnaW4KKwkJCQl0eF9yZWFkeV9kID0gMSdiMTsKKwkJCQlsZF9kYXRhX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBEQVRBOworCQkJICAgZW5kCisJICAgREFUQToKKwkJICAgYmVnaW4KKwkJCWlmKCFkYXRhX2RvbmUgJiYgc2Z0X2RvbmVfZSkKKwkJCSAgIGJlZ2luCisJCQkJbGRfZW9wX2QgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBFT1AxOworCQkJICAgZW5kCisJCQkKKwkJCWlmKGRhdGFfZG9uZSAmJiBzZnRfZG9uZV9lKQorCQkJICAgYmVnaW4KKwkJCQl0eF9yZWFkeV9kID0gMSdiMTsKKwkJCQlsZF9kYXRhX2QgPSAxJ2IxOworCQkJICAgZW5kCisJCSAgIGVuZAorCSAgIEVPUDE6CisJCQlpZihlb3BfZG9uZSkJCW5leHRfc3RhdGUgPSBFT1AyOworCSAgIEVPUDI6CisJCQlpZighZW9wX2RvbmUgJiYgZnNfY2UpCW5leHRfc3RhdGUgPSBXQUlUOworCSAgIFdBSVQ6CisJCQlpZihmc19jZSkJCW5leHRfc3RhdGUgPSBJRExFOworCWVuZGNhc2UKKyAgIGVuZAorCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS90b3AvdXNiMWRfdG9wLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3RvcC91c2IxZF90b3AudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjFjMWIyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS90b3AvdXNiMWRfdG9wLnYKQEAgLTAsMCArMSw0MTEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBVU0IgRGV2aWNlIGxldmVsIGludGVncmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgRm9sbG93aW5nIG1vZHVsZXMgYXJlIGludGVncmF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAxLiB1c2IxX3BoeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgMi4gdXNiMV9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgIFZlciAwLjEgOiAwMS5NYXIuMjAxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLw0KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8NCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vDQorLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vDQorLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLw0KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8NCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vDQorLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vDQorLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLw0KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8NCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vDQorLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLw0KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKw0KKw0KK21vZHVsZSB1c2IxZF90b3AoDQorICAgICAgICBjbGtfaSwgDQorICAgICAgICByc3RuX2ksDQorDQorICAgICAgICAvLyBUcmFuc2NpZXZlciBJbnRlcmZhY2UNCisJdXNiX2RwLA0KKwl1c2JfZG4sDQorDQorICAgICAgICAvLyBVU0IgTWlzYw0KKyAgICAgICAgcGh5X3R4X21vZGUgLA0KKyAgICAgICAgdXNiX3JzdCwNCisNCisgICAgICAgIC8vIEludGVycnVwdHMNCisgICAgICAgIGRyb3BwZWRfZnJhbWUsIA0KKyAgICAgICAgbWlzYWxpZ25lZF9mcmFtZSwNCisgICAgICAgIGNyYzE2X2VyciwNCisNCisgICAgICAgIC8vIFZlbmRvciBGZWF0dXJlcw0KKyAgICAgICAgdl9zZXRfaW50LCANCisgICAgICAgIHZfc2V0X2ZlYXR1cmUsIA0KKyAgICAgICAgd1ZhbHVlLA0KKyAgICAgICAgd0luZGV4LCANCisgICAgICAgIHZlbmRvcl9kYXRhLA0KKw0KKyAgICAgICAgLy8gVVNCIFN0YXR1cw0KKyAgICAgICAgdXNiX2J1c3ksIA0KKyAgICAgICAgZXBfc2VsLA0KKw0KKyAgICAgICAgLy8gRW5kcG9pbnQgSW50ZXJmYWNlDQorICAgICAgICBlcDFfY2ZnLA0KKyAgICAgICAgZXAxX2RpbiwgIA0KKyAgICAgICAgZXAxX3dlLCANCisgICAgICAgIGVwMV9mdWxsLA0KKyAgICAgICAgZXAxX2RvdXQsIA0KKyAgICAgICAgZXAxX3JlLCANCisgICAgICAgIGVwMV9lbXB0eSwNCisgICAgICAgIGVwMV9iZl9lbiwgDQorICAgICAgICBlcDFfYmZfc2l6ZSwNCisNCisgICAgICAgIGVwMl9jZmcsDQorICAgICAgICBlcDJfZGluLCAgDQorICAgICAgICBlcDJfd2UsIA0KKyAgICAgICAgZXAyX2Z1bGwsDQorICAgICAgICBlcDJfZG91dCwgDQorICAgICAgICBlcDJfcmUsIA0KKyAgICAgICAgZXAyX2VtcHR5LA0KKyAgICAgICAgZXAyX2JmX2VuLCANCisgICAgICAgIGVwMl9iZl9zaXplLA0KKw0KKyAgICAgICAgZXAzX2NmZywNCisgICAgICAgIGVwM19kaW4sICANCisgICAgICAgIGVwM193ZSwgDQorICAgICAgICBlcDNfZnVsbCwNCisgICAgICAgIGVwM19kb3V0LCANCisgICAgICAgIGVwM19yZSwgDQorICAgICAgICBlcDNfZW1wdHksDQorICAgICAgICBlcDNfYmZfZW4sIA0KKyAgICAgICAgZXAzX2JmX3NpemUsDQorDQorICAgICAgICBlcDRfY2ZnLA0KKyAgICAgICAgZXA0X2RpbiwgIA0KKyAgICAgICAgZXA0X3dlLCANCisgICAgICAgIGVwNF9mdWxsLA0KKyAgICAgICAgZXA0X2RvdXQsIA0KKyAgICAgICAgZXA0X3JlLCANCisgICAgICAgIGVwNF9lbXB0eSwNCisgICAgICAgIGVwNF9iZl9lbiwgDQorICAgICAgICBlcDRfYmZfc2l6ZSwNCisNCisgICAgICAgIGVwNV9jZmcsDQorICAgICAgICBlcDVfZGluLCAgDQorICAgICAgICBlcDVfd2UsIA0KKyAgICAgICAgZXA1X2Z1bGwsDQorICAgICAgICBlcDVfZG91dCwgDQorICAgICAgICBlcDVfcmUsIA0KKyAgICAgICAgZXA1X2VtcHR5LA0KKyAgICAgICAgZXA1X2JmX2VuLCANCisgICAgICAgIGVwNV9iZl9zaXplLA0KKw0KKyAgICAgICAgZXA2X2NmZywNCisgICAgICAgIGVwNl9kaW4sICANCisgICAgICAgIGVwNl93ZSwgZXA2X2Z1bGwsDQorICAgICAgICBlcDZfZG91dCwgZXA2X3JlLCBlcDZfZW1wdHksDQorICAgICAgICBlcDZfYmZfZW4sIGVwNl9iZl9zaXplLA0KKw0KKyAgICAgICAgZXA3X2NmZywNCisgICAgICAgIGVwN19kaW4sICBlcDdfd2UsIGVwN19mdWxsLA0KKyAgICAgICAgZXA3X2RvdXQsIGVwN19yZSwgZXA3X2VtcHR5LA0KKyAgICAgICAgZXA3X2JmX2VuLCBlcDdfYmZfc2l6ZSwNCisJCS8vIFJlZ2lzdGVyIEludGVyZmFjZQ0KKwkJcmVnX2FkZHIsDQorCQlyZWdfcmR3cm4sDQorCQlyZWdfcmVxLA0KKwkJcmVnX3dkYXRhLA0KKwkJcmVnX3JkYXRhLA0KKwkJcmVnX2Fjaw0KKw0KKyAgICAgICAgKTsgICAgICANCisNCitpbnB1dCAgICAgICAgICAgY2xrX2k7DQoraW5wdXQgICAgICAgICAgIHJzdG5faTsNCisNCitpbm91dCAgICAgCXVzYl9kcDsNCitpbm91dCAgICAgCXVzYl9kbjsNCisNCitpbnB1dCAgICAgICAgICAgcGh5X3R4X21vZGU7DQorb3V0cHV0ICAgICAgICAgIHVzYl9yc3Q7DQorb3V0cHV0ICAgICAgICAgIGRyb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWU7DQorb3V0cHV0ICAgICAgICAgIGNyYzE2X2VycjsNCisNCitvdXRwdXQgICAgICAgICAgdl9zZXRfaW50Ow0KK291dHB1dCAgICAgICAgICB2X3NldF9mZWF0dXJlOw0KK291dHB1dCAgWzE1OjBdICB3VmFsdWU7DQorb3V0cHV0ICBbMTU6MF0gIHdJbmRleDsNCitpbnB1dCAgIFsxNTowXSAgdmVuZG9yX2RhdGE7DQorDQorb3V0cHV0ICAgICAgICAgIHVzYl9idXN5Ow0KK291dHB1dCAgWzM6MF0gICBlcF9zZWw7DQorDQorLy8gRW5kcG9pbnQgSW50ZXJmYWNlcw0KK2lucHV0ICAgWzEzOjBdICBlcDFfY2ZnOw0KK2lucHV0ICAgWzc6MF0gICBlcDFfZGluOw0KK291dHB1dCAgWzc6MF0gICBlcDFfZG91dDsNCitvdXRwdXQgICAgICAgICAgZXAxX3dlLCBlcDFfcmU7DQoraW5wdXQgICAgICAgICAgIGVwMV9lbXB0eSwgZXAxX2Z1bGw7DQoraW5wdXQgICAgICAgICAgIGVwMV9iZl9lbjsNCitpbnB1dCAgIFs2OjBdICAgZXAxX2JmX3NpemU7DQorDQoraW5wdXQgICBbMTM6MF0gIGVwMl9jZmc7DQoraW5wdXQgICBbNzowXSAgIGVwMl9kaW47DQorb3V0cHV0ICBbNzowXSAgIGVwMl9kb3V0Ow0KK291dHB1dCAgICAgICAgICBlcDJfd2UsIGVwMl9yZTsNCitpbnB1dCAgICAgICAgICAgZXAyX2VtcHR5LCBlcDJfZnVsbDsNCitpbnB1dCAgICAgICAgICAgZXAyX2JmX2VuOw0KK2lucHV0ICAgWzY6MF0gICBlcDJfYmZfc2l6ZTsNCisNCitpbnB1dCAgIFsxMzowXSAgZXAzX2NmZzsNCitpbnB1dCAgIFs3OjBdICAgZXAzX2RpbjsNCitvdXRwdXQgIFs3OjBdICAgZXAzX2RvdXQ7DQorb3V0cHV0ICAgICAgICAgIGVwM193ZSwgZXAzX3JlOw0KK2lucHV0ICAgICAgICAgICBlcDNfZW1wdHksIGVwM19mdWxsOw0KK2lucHV0ICAgICAgICAgICBlcDNfYmZfZW47DQoraW5wdXQgICBbNjowXSAgIGVwM19iZl9zaXplOw0KKw0KK2lucHV0ICAgWzEzOjBdICBlcDRfY2ZnOw0KK2lucHV0ICAgWzc6MF0gICBlcDRfZGluOw0KK291dHB1dCAgWzc6MF0gICBlcDRfZG91dDsNCitvdXRwdXQgICAgICAgICAgZXA0X3dlLCBlcDRfcmU7DQoraW5wdXQgICAgICAgICAgIGVwNF9lbXB0eSwgZXA0X2Z1bGw7DQoraW5wdXQgICAgICAgICAgIGVwNF9iZl9lbjsNCitpbnB1dCAgIFs2OjBdICAgZXA0X2JmX3NpemU7DQorDQoraW5wdXQgICBbMTM6MF0gIGVwNV9jZmc7DQoraW5wdXQgICBbNzowXSAgIGVwNV9kaW47DQorb3V0cHV0ICBbNzowXSAgIGVwNV9kb3V0Ow0KK291dHB1dCAgICAgICAgICBlcDVfd2UsIGVwNV9yZTsNCitpbnB1dCAgICAgICAgICAgZXA1X2VtcHR5LCBlcDVfZnVsbDsNCitpbnB1dCAgICAgICAgICAgZXA1X2JmX2VuOw0KK2lucHV0ICAgWzY6MF0gICBlcDVfYmZfc2l6ZTsNCisNCitpbnB1dCAgIFsxMzowXSAgZXA2X2NmZzsNCitpbnB1dCAgIFs3OjBdICAgZXA2X2RpbjsNCitvdXRwdXQgIFs3OjBdICAgZXA2X2RvdXQ7DQorb3V0cHV0ICAgICAgICAgIGVwNl93ZSwgZXA2X3JlOw0KK2lucHV0ICAgICAgICAgICBlcDZfZW1wdHksIGVwNl9mdWxsOw0KK2lucHV0ICAgICAgICAgICBlcDZfYmZfZW47DQoraW5wdXQgICBbNjowXSAgIGVwNl9iZl9zaXplOw0KKw0KK2lucHV0ICAgWzEzOjBdICBlcDdfY2ZnOw0KK2lucHV0ICAgWzc6MF0gICBlcDdfZGluOw0KK291dHB1dCAgWzc6MF0gICBlcDdfZG91dDsNCitvdXRwdXQgICAgICAgICAgZXA3X3dlLCBlcDdfcmU7DQoraW5wdXQgICAgICAgICAgIGVwN19lbXB0eSwgZXA3X2Z1bGw7DQoraW5wdXQgICAgICAgICAgIGVwN19iZl9lbjsNCitpbnB1dCAgIFs2OjBdICAgZXA3X2JmX3NpemU7DQorDQorDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIFJlZ2lzdGVyIEludGVyZmFjZQ0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitvdXRwdXQgWzMxOjBdICAgcmVnX2FkZHI7ICAgLy8gUmVnaXN0ZXIgQWRkcmVzcw0KK291dHB1dCAgICAgICAgICByZWdfcmR3cm47ICAvLyAwIC0+IHdyaXRlLCAxLT4gcmVhZA0KK291dHB1dCAgICAgICAgICByZWdfcmVxOyAgICAvLyAgUmVnaXN0ZXIgUmVxDQorb3V0cHV0IFszMTowXSAgIHJlZ193ZGF0YTsgIC8vIFJlZ2lzdGVyIHdyaXRlIGRhdGENCitpbnB1dCBbMzE6MF0gICAgcmVnX3JkYXRhOyAgLy8gUmVnaXN0ZXIgUmVhZCBEYXRhDQoraW5wdXQgICAgICAgICAgIHJlZ19hY2s7ICAgIC8vIFJlZ2lzdGVyIEFjaw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gVVRNSSBJbnRlcmZhY2UNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3dpcmUgICAgWzc6MF0gICBEYXRhT3V0Ow0KK3dpcmUgICAgICAgICAgICBUeFZhbGlkOw0KK3dpcmUgICAgICAgICAgICBUeFJlYWR5Ow0KK3dpcmUgICAgWzc6MF0gICBEYXRhSW47DQord2lyZSAgICAgICAgICAgIFJ4VmFsaWQ7DQord2lyZSAgICAgICAgICAgIFJ4QWN0aXZlOw0KK3dpcmUgICAgICAgICAgICBSeEVycm9yOw0KK3dpcmUgICAgWzE6MF0gICBMaW5lU3RhdGU7DQord2lyZSAgICAgICAgICAgIGNsazsNCit3aXJlICAgICAgICAgICAgcnN0Ow0KK3dpcmUgICAgICAgICAgICBwaHlfdHhfbW9kZTsNCit3aXJlICAgICAgICAgICAgdXNiX3JzdDsNCisNCisvLyBVU0IgVHJhY2VpdmVyIGludGVyZmFjZQ0KK3dpcmUgICAgICAgICAgdXNiX3R4ZHA7IC8vIFVTQiBUWCArIA0KK3dpcmUgICAgICAgICAgdXNiX3R4ZG47IC8vIFVTQiBUWCAtDQord2lyZSAgICAgICAgICB1c2JfdHhvZTsgLy8gVVNCIFRYIE9FTiwgT3V0cHV0IGRyaXZlbiBhdCB0eG9lPTANCit3aXJlICAgICAgICAgIHVzYl9yeGQ7IA0KK3dpcmUgICAgICAgICAgdXNiX3J4ZHA7ICAvLyBVU0IgUlgrDQord2lyZSAgICAgICAgICB1c2JfcnhkbjsgIC8vIFVTQiBSWC0NCisNCithc3NpZ24gIHVzYl9kcCA9ICh1c2JfdHhvZSA9PSAxJ2IwKSA/IHVzYl90eGRwICA6IDEnYno7DQorYXNzaWduICB1c2JfZG4gPSAodXNiX3R4b2UgPT0gMSdiMCkgPyB1c2JfdHhkbiAgOiAxJ2J6Ow0KKw0KK2Fzc2lnbiAgdXNiX3J4ZCA9ICB1c2JfZHA7DQorYXNzaWduICB1c2JfcnhkcCA9IHVzYl9kcDsNCithc3NpZ24gIHVzYl9yeGRuID0gdXNiX2RuOw0KKw0KKyAgICANCit1c2IxZF9waHkgdV91c2JfcGh5KA0KKyAgICAgICAgICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAoIGNsa19pICAgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucnN0biAgICAgICAgICAgICAgICggcnN0bl9pICAgICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5waHlfdHhfbW9kZSAgICAgICAgKCBwaHlfdHhfbW9kZSAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnVzYl9yc3QgICAgICAgICAgICAoIHVzYl9yc3QgICAgICAgICAgICksDQorDQorICAgICAgICAvLyBUcmFuc2NlaXZlciBJbnRlcmZhY2UNCisgICAgICAgICAgICAgICAgICAgIC5yeGQgICAgICAgICAgICAgICAgKCB1c2JfcnhkICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJ4ZHAgICAgICAgICAgICAgICAoIHVzYl9yeGRwICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucnhkbiAgICAgICAgICAgICAgICggdXNiX3J4ZG4gICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC50eGRwICAgICAgICAgICAgICAgKCB1c2JfdHhkcCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnR4ZG4gICAgICAgICAgICAgICAoIHVzYl90eGRuICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAudHhvZSAgICAgICAgICAgICAgICggdXNiX3R4b2UgICAgICAgICAgKSwNCisNCisgICAgICAgIC8vIFVUTUkgSW50ZXJmYWNlDQorICAgICAgICAgICAgICAgICAgICAuRGF0YUluX28gICAgICAgICAgICggRGF0YUluICAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5SeFZhbGlkX28gICAgICAgICAgKCBSeFZhbGlkICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlJ4QWN0aXZlX28gICAgICAgICAoIFJ4QWN0aXZlICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuUnhFcnJvcl9vICAgICAgICAgICggUnhFcnJvciAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5EYXRhT3V0X2kgICAgICAgICAgKCBEYXRhT3V0ICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlR4VmFsaWRfaSAgICAgICAgICAoIFR4VmFsaWQgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuVHhSZWFkeV9vICAgICAgICAgICggVHhSZWFkeSAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5MaW5lU3RhdGVfbyAgICAgICAgKCBMaW5lU3RhdGUgICAgICAgICApDQorICAgICAgICApOw0KKw0KKw0KK3VzYjFkX2NvcmUgIHVfdXNiX2NvcmUoDQorICAgICAgICAgICAgICAgICAgICAuY2xrX2kgICAgICAgICAgICAgICggY2xrX2kgICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAucnN0X2kgICAgICAgICAgICAgICggcnN0bl9pICAgICAgICAgICAgICksDQorDQorDQorICAgICAgICAgICAgICAgICAvLyBVU0IgTWlzYw0KKyAgICAgICAgICAgICAgICAgICAgLnBoeV90eF9tb2RlICAgICAgICAoIHBoeV90eF9tb2RlICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLnVzYl9yc3QgICAgICAgICAgICAoIHVzYl9yc3QgICAgICAgICAgICksIA0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVVE1JIEludGVyZmFjZQ0KKyAgICAgICAgICAgICAgICAgICAgLkRhdGFJbiAgICAgICAgICAgICAoIERhdGFJbiAgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuUnhWYWxpZCAgICAgICAgICAgICggUnhWYWxpZCAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5SeEFjdGl2ZSAgICAgICAgICAgKCBSeEFjdGl2ZSAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlJ4RXJyb3IgICAgICAgICAgICAoIFJ4RXJyb3IgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuRGF0YU91dCAgICAgICAgICAgICggRGF0YU91dCAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5UeFZhbGlkICAgICAgICAgICAgKCBUeFZhbGlkICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlR4UmVhZHkgICAgICAgICAgICAoIFR4UmVhZHkgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuTGluZVN0YXRlICAgICAgICAgICggTGluZVN0YXRlICAgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgIC8vIEludGVycnVwdHMNCisgICAgICAgICAgICAgICAgICAgIC5kcm9wcGVkX2ZyYW1lICAgICAgKCBkcm9wcGVkX2ZyYW1lICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5taXNhbGlnbmVkX2ZyYW1lICAgKCBtaXNhbGlnbmVkX2ZyYW1lICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmNyYzE2X2VyciAgICAgICAgICAoIGNyYzE2X2VyciAgICAgICAgICksDQorDQorICAgICAgICAgICAgICAgICAgLy8gVmVuZG9yIEZlYXR1cmVzDQorICAgICAgICAgICAgICAgICAgICAudl9zZXRfaW50ICAgICAgICAgICggdl9zZXRfaW50ICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAudl9zZXRfZmVhdHVyZSAgICAgICggdl9zZXRfZmVhdHVyZSAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAud1ZhbHVlICAgICAgICAgICAgICggd1ZhbHVlICAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC53SW5kZXggICAgICAgICAgICAgKCB3SW5kZXggICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC52ZW5kb3JfZGF0YSAgICAgICAgKCB2ZW5kb3JfZGF0YSAgICAgICApLA0KKw0KKyAgICAgICAgLy8gVVNCIFN0YXR1cw0KKyAgICAgICAgICAgICAgICAgICAgLnVzYl9idXN5ICAgICAgICAgICAoIHVzYl9idXN5ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwX3NlbCAgICAgICAgICAgICAoIGVwX3NlbCAgICAgICAgICAgICksDQorDQorICAgICAgICAvLyBFbmRwb2ludCBJbnRlcmZhY2UNCisgICAgICAgICAgICAgICAgICAgIC5lcDFfY2ZnICAgICAgICAgICAgKCBlcDFfY2ZnICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9kaW4gICAgICAgICAgICAoIGVwMV9kaW4gICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5lcDFfd2UgICAgICAgICAgICAgKCBlcDFfd2UgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDFfZnVsbCAgICAgICAgICAgKCBlcDFfZnVsbCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9kb3V0ICAgICAgICAgICAoIGVwMV9kb3V0ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9yZSAgICAgICAgICAgICAoIGVwMV9yZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9lbXB0eSAgICAgICAgICAoIGVwMV9lbXB0eSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAxX2JmX2VuICAgICAgICAgICggZXAxX2JmX2VuICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAxX2JmX3NpemUgICAgICAgICggZXAxX2JmX3NpemUgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgICAgIC5lcDJfY2ZnICAgICAgICAgICAgKCBlcDJfY2ZnICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9kaW4gICAgICAgICAgICAoIGVwMl9kaW4gICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5lcDJfd2UgICAgICAgICAgICAgKCBlcDJfd2UgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDJfZnVsbCAgICAgICAgICAgKCBlcDJfZnVsbCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9kb3V0ICAgICAgICAgICAoIGVwMl9kb3V0ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9yZSAgICAgICAgICAgICAoIGVwMl9yZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9lbXB0eSAgICAgICAgICAoIGVwMl9lbXB0eSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAyX2JmX2VuICAgICAgICAgICggZXAyX2JmX2VuICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAyX2JmX3NpemUgICAgICAgICggZXAyX2JmX3NpemUgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgICAgIC5lcDNfY2ZnICAgICAgICAgICAgKCBlcDNfY2ZnICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19kaW4gICAgICAgICAgICAoIGVwM19kaW4gICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5lcDNfd2UgICAgICAgICAgICAgKCBlcDNfd2UgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDNfZnVsbCAgICAgICAgICAgKCBlcDNfZnVsbCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19kb3V0ICAgICAgICAgICAoIGVwM19kb3V0ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19yZSAgICAgICAgICAgICAoIGVwM19yZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19lbXB0eSAgICAgICAgICAoIGVwM19lbXB0eSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAzX2JmX2VuICAgICAgICAgICggZXAzX2JmX2VuICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAzX2JmX3NpemUgICAgICAgICggZXAzX2JmX3NpemUgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgICAgIC5lcDRfY2ZnICAgICAgICAgICAgKCBlcDRfY2ZnICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9kaW4gICAgICAgICAgICAoIGVwNF9kaW4gICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5lcDRfd2UgICAgICAgICAgICAgKCBlcDRfd2UgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDRfZnVsbCAgICAgICAgICAgKCBlcDRfZnVsbCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9kb3V0ICAgICAgICAgICAoIGVwNF9kb3V0ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9yZSAgICAgICAgICAgICAoIGVwNF9yZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9lbXB0eSAgICAgICAgICAoIGVwNF9lbXB0eSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA0X2JmX2VuICAgICAgICAgICggZXA0X2JmX2VuICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA0X2JmX3NpemUgICAgICAgICggZXA0X2JmX3NpemUgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgICAgIC5lcDVfY2ZnICAgICAgICAgICAgKCBlcDVfY2ZnICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9kaW4gICAgICAgICAgICAoIGVwNV9kaW4gICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5lcDVfd2UgICAgICAgICAgICAgKCBlcDVfd2UgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDVfZnVsbCAgICAgICAgICAgKCBlcDVfZnVsbCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9kb3V0ICAgICAgICAgICAoIGVwNV9kb3V0ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9yZSAgICAgICAgICAgICAoIGVwNV9yZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9lbXB0eSAgICAgICAgICAoIGVwNV9lbXB0eSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA1X2JmX2VuICAgICAgICAgICggZXA1X2JmX2VuICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA1X2JmX3NpemUgICAgICAgICggZXA1X2JmX3NpemUgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgICAgIC5lcDZfY2ZnICAgICAgICAgICAgKCBlcDZfY2ZnICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9kaW4gICAgICAgICAgICAoIGVwNl9kaW4gICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5lcDZfd2UgICAgICAgICAgICAgKCBlcDZfd2UgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDZfZnVsbCAgICAgICAgICAgKCBlcDZfZnVsbCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9kb3V0ICAgICAgICAgICAoIGVwNl9kb3V0ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9yZSAgICAgICAgICAgICAoIGVwNl9yZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9lbXB0eSAgICAgICAgICAoIGVwNl9lbXB0eSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA2X2JmX2VuICAgICAgICAgICggZXA2X2JmX2VuICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA2X2JmX3NpemUgICAgICAgICggZXA2X2JmX3NpemUgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgICAgIC5lcDdfY2ZnICAgICAgICAgICAgKCBlcDdfY2ZnICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19kaW4gICAgICAgICAgICAoIGVwN19kaW4gICAgICAgICAgICksICANCisgICAgICAgICAgICAgICAgICAgIC5lcDdfd2UgICAgICAgICAgICAgKCBlcDdfd2UgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDdfZnVsbCAgICAgICAgICAgKCBlcDdfZnVsbCAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19kb3V0ICAgICAgICAgICAoIGVwN19kb3V0ICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19yZSAgICAgICAgICAgICAoIGVwN19yZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19lbXB0eSAgICAgICAgICAoIGVwN19lbXB0eSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA3X2JmX2VuICAgICAgICAgICggZXA3X2JmX2VuICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA3X2JmX3NpemUgICAgICAgICggZXA3X2JmX3NpemUgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgSW50ZXJmYWNlDQorICAgICAgICAgICAgICAgICAgICAucmVnX2FkZHIgICAgICAgICAgICggcmVnX2FkZHIgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yZWdfcmR3cm4gICAgICAgICAgKCByZWdfcmR3cm4gICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJlZ19yZXEgICAgICAgICAgICAoIHJlZ19yZXEgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucmVnX3dkYXRhICAgICAgICAgICggcmVnX3dkYXRhICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yZWdfcmRhdGEgICAgICAgICAgKCByZWdfcmRhdGEgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJlZ19hY2sgICAgICAgICAgICAoIHJlZ19hY2sgICAgICAgICAgICkNCisNCisNCisgICAgICAgICk7ICAgICAgDQorDQorDQorDQorZW5kbW9kdWxlDQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiZF9maWxlcy52IGIvdmVyaWxvZy9kdi9iZm0vdXNiZF9maWxlcy52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODdjZjAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JkX2ZpbGVzLnYKQEAgLTAsMCArMSwxOSBAQAorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9jb3JlLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2N0cmwudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19kcHJhbS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9wYS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9wbC52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF91dG1pX2lmLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzE2LnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZmlmby52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9wZC52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9yb20xLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzUudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfZmlmbzIudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfaWRtYS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9wZS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9zeW5jX2ZpZm8udiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL3BoeS91c2IxZF9yeF9waHkudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL3BoeS91c2IxZF9waHkudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL3BoeS91c2IxZF90eF9waHkudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL3RvcC91c2IxZF90b3AudiIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy91c2VyX2Jhc2ljX3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvdXNlcl9iYXNpY190Yi52CmluZGV4IDk5ZTBhY2IuLmRlZGQyNjAgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy91c2VyX2Jhc2ljX3RiLnYKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpAQCAtMTc5LDYyICsxNzksNjEgQEAKICAgICAgICAgICAvLyBjZmdfd2JfY2xrX2N0cmwgICAgICA9IHJlZ18wWzExOjldOwogICAgICAgICAgIC8vIGNmZ19ydGNfY2xrX2N0cmwgICAgID0gcmVnXzBbMTk6MTJdOwogICAgICAgICAgIC8vIGNmZ19jcHVfY2xrX2N0cmwgICAgID0gcmVnXzBbMjM6MjBdOwotICAgICAgICAgIC8vIGNmZ19zZHJhbV9jbGtfY3RybCAgID0gcmVnXzBbMjc6MjRdOwotICAgICAgICAgIC8vIGNmZ191c2JfY2xrX2N0cmwgICAgID0gcmVnXzBbMzE6MjhdOworICAgICAgICAgIC8vIGNmZ191c2JfY2xrX2N0cmwgICAgID0gcmVnXzBbMzE6MjRdOwogCSAgJGRpc3BsYXkoIlN0ZXAtMSwgQ1BVOiBDTE9DSzEsIFJUQzogQ0xPQ0syICoyLCBVU0I6IENMT0NLMiwgV0JTOkNMT0NLMSIpOwogCSAgdGVzdF9zdGVwID0gMTsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDAsNCdoMCw0J2gwLDgnaDAsNCdoMCw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoMCw0J2gwLDgnaDAsNCdoMCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcihDTEsxX1BFUklPRCxDTEsyX1BFUklPRCoyLENMSzJfUEVSSU9ELENMSzFfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtMiwgQ1BVOiBDTE9DSzIsIFJUQzogQ0xPQ0syLygyKzEpLCBVU0I6IENMT0NLMi8yLCBXQlM6Q0xPQ0syIik7CiAJICB0ZXN0X3N0ZXAgPSAyOwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoOCw0J2gwLDQnaDgsOCdoMSw0J2g4LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4MCw0J2g4LDgnaDEsNCdoOCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcihDTEsyX1BFUklPRCwoMykqQ0xLMl9QRVJJT0QsMipDTEsyX1BFUklPRCxDTEsyX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTMsIENQVTogQ0xPQ0sxLzIsIFJUQzogQ0xPQ0syLygyKzIpLCBVU0I6IENMT0NLMi8oMisxKSwgV0JTOkNMT0NLMS8yIik7CiAJICB0ZXN0X3N0ZXAgPSAzOwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoOSw0J2gwLDQnaDQsOCdoMiw0J2g0LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4MSw0J2g0LDgnaDIsNCdoNCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcigyKkNMSzFfUEVSSU9ELCg0KSpDTEsyX1BFUklPRCwzKkNMSzJfUEVSSU9ELDIqQ0xLMV9QRVJJT0QpOwogCiAJICAkZGlzcGxheSgiU3RlcC00LCBDUFU6IENMT0NLMS8zLCBSVEM6IENMT0NLMi8oMiszKSwgVVNCOiBDTE9DSzIvKDIrMiksIFdCUzpDTE9DSzEvMyIpOwogCSAgdGVzdF9zdGVwID0gNDsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEEsNCdoMCw0J2g1LDgnaDMsNCdoNSw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODIsNCdoNSw4J2gzLDQnaDUsOCdoMDB9KTsKIAkgIGNsb2NrX21vbml0b3IoMypDTEsxX1BFUklPRCw1KkNMSzJfUEVSSU9ELDQqQ0xLMl9QRVJJT0QsMypDTEsxX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTUsIENQVTogQ0xPQ0sxLzQsIFJUQzogQ0xPQ0syLygyKzQpLCBVU0I6IENMT0NLMi8oMiszKSwgV0JTOkNMT0NLMS80Iik7CiAJICB0ZXN0X3N0ZXAgPSA1OwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoQiw0J2gwLDQnaDYsOCdoNCw0J2g2LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4Myw0J2g2LDgnaDQsNCdoNiw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcig0KkNMSzFfUEVSSU9ELDYqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCw0KkNMSzFfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtNiwgQ1BVOiBDTE9DSzEvKDIrMyksIFJUQzogQ0xPQ0syLygyKzUpLCBVU0I6IENMT0NLMi8oMis0KSwgV0JTOkNMT0NLMS8oMiszKSIpOwogCSAgdGVzdF9zdGVwID0gNjsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEMsNCdoMCw0J2g3LDgnaDUsNCdoNyw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODQsNCdoNyw4J2g1LDQnaDcsOCdoMDB9KTsKIAkgIGNsb2NrX21vbml0b3IoNSpDTEsxX1BFUklPRCw3KkNMSzJfUEVSSU9ELDYqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTcsIENQVTogQ0xPQ0syLygyKSwgUlRDOiBDTE9DSzIvKDIrNiksIFVTQjogQ0xPQ0syLygyKzUpLCBXQlM6Q0xPQ0syLygyKSIpOwogCSAgdGVzdF9zdGVwID0gNzsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEQsNCdoMCw0J2hDLDgnaDYsNCdoQyw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODUsNCdoQyw4J2g2LDQnaEMsOCdoMDB9KTsKIAkgIGNsb2NrX21vbml0b3IoMipDTEsyX1BFUklPRCw4KkNMSzJfUEVSSU9ELDcqQ0xLMl9QRVJJT0QsMipDTEsyX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTgsIENQVTogQ0xPQ0syLzMsIFJUQzogQ0xPQ0syLygyKzcpLCBVU0I6IENMT0NLMi8oMis2KSwgV0JTOkNMT0NLMi8zIik7CiAJICB0ZXN0X3N0ZXAgPSA4OwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRSw0J2gwLDQnaEQsOCdoNyw0J2hELDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4Niw0J2hELDgnaDcsNCdoRCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcigzKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsOCpDTEsyX1BFUklPRCwzKkNMSzJfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtOSwgQ1BVOiBDTE9DSzIvNCwgUlRDOiBDTE9DSzIvKDIrOCksIFVTQjogQ0xPQ0syLygyKzcpLCBXQlM6Q0xPQ0syLzQiKTsKIAkgIHRlc3Rfc3RlcCA9IDk7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoRSw4J2g4LDQnaEUsOCdoMDB9KTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDg3LDQnaEUsOCdoOCw0J2hFLDgnaDAwfSk7CiAJICBjbG9ja19tb25pdG9yKDQqQ0xLMl9QRVJJT0QsMTAqQ0xLMl9QRVJJT0QsOSpDTEsyX1BFUklPRCw0KkNMSzJfUEVSSU9EKTsKIAotCSAgJGRpc3BsYXkoIlN0ZXAtMTAsIENQVTogQ0xPQ0syLygyKzMpLCBSVEM6IENMT0NLMi8oMisxMjgpLCBVU0I6IENMT0NLMi8oMis3KSwgV0JTOkNMT0NLMS8oMiszKSIpOworCSAgJGRpc3BsYXkoIlN0ZXAtMTAsIENQVTogQ0xPQ0syLygyKzMpLCBSVEM6IENMT0NLMi8oMisxMjgpLCBVU0I6IENMT0NLMi8oMis4KSwgV0JTOkNMT0NLMS8oMiszKSIpOwogCSAgdGVzdF9zdGVwID0gMTA7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoRiw4J2g4MCw0J2hGLDgnaDAwfSk7Ci0JICBjbG9ja19tb25pdG9yKDUqQ0xLMl9QRVJJT0QsMTMwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4OCw0J2hGLDgnaDgwLDQnaEYsOCdoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNSpDTEsyX1BFUklPRCwxMzAqQ0xLMl9QRVJJT0QsMTAqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCk7CiAKLQkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMi8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMjU1KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzIvKDIrMykiKTsKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMi8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMjU1KSwgVVNCOiBDTE9DSzIvKDIrOSksIFdCUzpDTE9DSzIvKDIrMykiKTsKIAkgIHRlc3Rfc3RlcCA9IDEwOwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaEYsOCdoRkYsNCdoRiw4J2gwMH0pOwotCSAgY2xvY2tfbW9uaXRvcig1KkNMSzJfUEVSSU9ELDI1NypDTEsyX1BFUklPRCw5KkNMSzJfUEVSSU9ELDUqQ0xLMl9QRVJJT0QpOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODksNCdoRiw4J2hGRiw0J2hGLDgnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMl9QRVJJT0QsMjU3KkNMSzJfUEVSSU9ELDExKkNMSzJfUEVSSU9ELDUqQ0xLMl9QRVJJT0QpOwogCiAgICAgICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CiAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogQ2hlY2tpbmcgdGhlIGNoaXAgc2lnbmF0dXJlIDoiKTsKQEAgLTI0Miw4ICsyNDEsOCBAQAogICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CiAKIAkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoODI3M184MzQzKTsKLQkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDVDLHJlYWRfZGF0YSwzMidoMDIwM18yMDIyKTsKLQkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLHJlYWRfZGF0YSwzMidoMDAwM183MDAwKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDVDLHJlYWRfZGF0YSwzMidoMTAwM18yMDIyKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLHJlYWRfZGF0YSwzMidoMDAwM184MDAwKTsKIAogICAgICAgZW5kCiAgICAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9zc3BpL3VzZXJfc3NwaV90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3NzcGkvdXNlcl9zc3BpX3RiLnYKaW5kZXggNmRjZWEwMi4uODMzMGRlNyAxMDA2NDQKLS0tIGEvdmVyaWxvZy9kdi91c2VyX3NzcGkvdXNlcl9zc3BpX3RiLnYKKysrIGIvdmVyaWxvZy9kdi91c2VyX3NzcGkvdXNlcl9zc3BpX3RiLnYKQEAgLTI0LDIwICsyNCw3IEBACiAvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCiAvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCiAvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCi0vLy8vICAgRGlnaXRhbCBjb3JlIGZsYXNoIGFjY2VzcyB0aHJvdWdoIEV4dGVybmFsIFdCIGkvRi4gICAgICAgICAvLy8vCi0vLy8vICAgMS4gIENoZWNrIFNQSSBSZWFkIElkZW50aWZpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgMi4gIENoZWNrIHRoZSBEaXJlY3QgTWVtb3J5IFJlYWQgKFF1YWwvU2luZ2xlL1F1YWQpICAgICAgICAvLy8vICAgICAgICAKLS8vLy8gICAzLiAgRGlyZWN0IFNQSSBNZW1vcnkgUHJlZmV0Y2ggLSAzRFcgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICA0LiAgRGlyZWN0IFNQSSBNZW1vcnkgUHJlZmV0Y2ggLSAyRFcgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICA1LiAgRGlyZWN0IFNQSSBNZW1vcnkgUHJlZmV0Y2ggLSAxRFcgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICA2LiAgRGlyZWN0IFNQSSBNZW1vcnkgUHJlZmV0Y2ggLSA3RFcgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICA3LiAgMURXICBJbmRpcmVjdCBSZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICA4LiAgMkRXICBJbmRpcmVjdCBSZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICA5LiAgM0RXICBJbmRpcmVjdCBSZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAxMC4gNERXICBJbmRpcmVjdCBSZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAxMS4gNURXICBJbmRpcmVjdCBSZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAxMi4gOERXICBJbmRpcmVjdCBSZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLS8vLy8gICAxMy4gU2VjdG9yIEVyYXNlIGNvbW1hbmQgKyBQYWdlIFdyaXRlICYgUmVhZCBCYWNrICAgICAgICAgIC8vLy8KKy8vLy8gICBzc3BpIGludGVyZmFmYWNlIHRocm91Z2ggRXh0ZXJuYWwgV0IgaS9GLiAgICAgICAgICAgICAgICAgIC8vLy8KIC8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KIC8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KIC8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvLnVzZXJfdXNiX3RiLnYuc3dwIGIvdmVyaWxvZy9kdi91c2VyX3VzYi8udXNlcl91c2JfdGIudi5zd3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmYmI0MAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvLnVzZXJfdXNiX3RiLnYuc3dwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MmNhNTYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAwIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfQkVIQVZJT1VSQUxfQkZNICAgID0gLi4vYmZtCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9vcHQvcGRrL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdXNlcl91c2IKKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudgoraWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIC1JICQoVVBSSl9CRUhBVklPVVJBTF9CRk0pIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICAgZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgLUkgJChVUFJKX0JFSEFWSU9VUkFMX0JGTSkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1ER0wgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoVVBSSl9HTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKyUuaGV4OiAKKwllY2hvIEAiVGhpcyBpcyB1c2VyIGJvb3QgdGVzdCwgbm90aW5nIHRvIGNvbXBpbGUgdGhlIG1hbmdtZW50IGNvcmUgY29kZSIKKworCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmZzdAorCisuUEhPTlk6IGNsZWFuIGhleCBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvLnVzYl90ZXN0My52LnN3cCBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvLnVzYl90ZXN0My52LnN3cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU0ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy8udXNiX3Rlc3QzLnYuc3dwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QxLnYgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0MS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MjJkMDgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0MS52CkBAIC0wLDAgKzEsNTYgQEAKK2BkZWZpbmUgdXNiYmZtICB1X3VzYl9hZ2VudAordGFzayB1c2JfdGVzdDE7CisKK3JlZyBbNjowXSBhZGRyZXNzOworcmVnIFszOjBdIGVuZHB0OworcmVnIFszOjBdIFN0YXR1czsKK3JlZyBbMzE6MF0gQnl0ZUNvdW50OworCitpbnRlZ2VyICAgIGksajsKK3JlZyBbNzowXSAgc3RhcnRieXRlOworcmVnIFsxNTowXSBtYXNrOworaW50ZWdlciAgICBNYXhQa3RTaXplOworcmVnIFszOjBdICBQYWNrVHlwZTsKKworCitwYXJhbWV0ZXIgIE1ZQUNLICAgPSA0J2IwMDAwLAorICAgICAgICAgICBNWU5BSyAgID0gNCdiMDAwMSwKKyAgICAgICAgICAgTVlTVEFMTCA9IDQnYjAwMTAsCisgICAgICAgICAgIE1ZVE9VVCAgPSA0J2IwMDExLAorICAgICAgICAgICBNWUlWUkVTID0gNCdiMDEwMCwKKyAgICAgICAgICAgTVlDUkNFUiA9IDQnYjAxMDE7CisKKworCisgICAgIGJlZ2luCisgIAorCisgICAgJGRpc3BsYXkoIiUwZDogVVNCIFJlc2V0ICAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLnVzYmh3X3Jlc2V0OworCisgICAgYWRkcmVzcyA9IDE7CisgICAgZW5kcHQgICAgPSAwOworICAgICRkaXNwbGF5KCIlMGQ6IFNldCBBZGRyZXNzID0gJXggLS0tLS0iLCAkdGltZSxhZGRyZXNzKTsKKyAgICBgdXNiYmZtLlNldEFkZHJlc3MgKGFkZHJlc3MpOworICAgICRkaXNwbGF5KCIlMGQ6IFNlbmRpbmcgU2V0dXAgQ29tbWFuZCAiLCAkdGltZSk7CisgICAgYHVzYmJmbS5zZXR1cCg3J2gwMCwgNCdoMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgICRkaXNwbGF5KCIlMGQ6IFNlbmRpbmcgU3RhdHVzIENvbW1hbmQgIiwgJHRpbWUpOworICAgIGB1c2JiZm0uc3RhdHVzX0lOKDcnaDAwLCBlbmRwdCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgICM1MDAwOworICAKKyAgICAkZGlzcGxheSgiJTBkOiBTZXQgY29uZmlndXJhdGlvbiAgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS5TZXRDb25maWd1cmF0aW9uKDInYjAxKTsKKyAgICBgdXNiYmZtLnNldHVwKGFkZHJlc3MsIDQnYjAwMDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICBgdXNiYmZtLnN0YXR1c19JTihhZGRyZXNzLCA0J2IwMDAwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgIzIwMDA7CisKKyAgICAkZGlzcGxheSgiJTBkOiBDb25maWd1cmF0aW9uIGRvbmUgISEhISEhIiwgJHRpbWUpOworICAgIHRlc3RfY29udHJvbC5maW5pc2hfdGVzdDsKKyAgICAgCisgIGVuZAorCitlbmR0YXNrCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0Mi52IGIvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDIudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTM3NTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDIudgpAQCAtMCwwICsxLDkxIEBACitgZGVmaW5lIHVzYmJmbSAgdV91c2JfYWdlbnQKK3Rhc2sgdXNiX3Rlc3QyOworCityZWcgWzY6MF0gYWRkcmVzczsKK3JlZyBbMzowXSBlbmRwdDsKK3JlZyBbMzowXSBTdGF0dXM7CisKKyAgaW50ZWdlciAgICBpLGo7CisgIHJlZyBbNzowXSAgc3RhcnRieXRlOworICByZWcgWzE1OjBdIG1hc2s7CisgIGludGVnZXIgICAgTWF4UGt0U2l6ZTsKKyAgcmVnIFszOjBdICBQYWNrVHlwZTsKKworCitwYXJhbWV0ZXIgIE1ZQUNLICAgPSA0J2IwMDAwLAorICAgICAgICAgICBNWU5BSyAgID0gNCdiMDAwMSwKKyAgICAgICAgICAgTVlTVEFMTCA9IDQnYjAwMTAsCisgICAgICAgICAgIE1ZVE9VVCAgPSA0J2IwMDExLAorICAgICAgICAgICBNWUlWUkVTID0gNCdiMDEwMCwKKyAgICAgICAgICAgTVlDUkNFUiA9IDQnYjAxMDE7CisKKyAgICAgYmVnaW4KKyAgICAgYWRkcmVzcyA9IDcnYjAwMF8wMDAxOworICAgICBlbmRwdCAgID0gNCdiMDAwMDsKKworICAgICRkaXNwbGF5KCIlMGQ6IFVTQiBSZXNldCAgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS51c2Jod19yZXNldDsKKworICAgICRkaXNwbGF5KCIlMGQ6IFNldCBBZGRyZXNzID0gMSAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLlNldEFkZHJlc3MgKGFkZHJlc3MpOworICAgIGB1c2JiZm0uc2V0dXAoNydoMDAsIDQnaDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICBgdXNiYmZtLnN0YXR1c19JTig3J2gwMCwgZW5kcHQsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICAjNTAwMDsKKyAgCisgICAgJGRpc3BsYXkoIiUwZDogU2V0IGNvbmZpZ3VyYXRpb24gIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0uU2V0Q29uZmlndXJhdGlvbigyJ2IwMSk7CisgICAgYHVzYmJmbS5zZXR1cChhZGRyZXNzLCA0J2IwMDAwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgYHVzYmJmbS5zdGF0dXNfSU4oYWRkcmVzcywgNCdiMDAwMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgICMyMDAwOworCisgICAgJGRpc3BsYXkoIiUwZDogQ29uZmlndXJhdGlvbiBkb25lICEhISEhISIsICR0aW1lKTsKKyAgICAgCisgICAvLyB3cml0ZSBVQVJUICByZWdpc3RlcnMgdGhyb3VnaCBVU0IKKwkKKyAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorCQorICAgIC8vIHJlZ2lzdGVyIHdvcmQgd3JpdGUKKyAgICAkZGlzcGxheSgiJTBkOiBQZXJmb3JtaW5nIFJlZ2lzdGVyIFdvcmQgV3JpdGUtLS0tLS0tLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gwLCAgMzInaDExMjIzMzQ0KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDQsICAzMidoMjIzMzQ0NTUpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoOCwgIDMyJ2gzMzQ0NTU2Nik7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2hDLCAgMzInaDQ0NTU2Njc3KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDEwLCAzMidoNTU2Njc3ODgpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMTQsIDMyJ2g2Njc3ODg5OSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gxOCwgMzInaDc3ODg5OUFBKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDFDLCAzMidoODg5OUFBQkIpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMjAsIDMyJ2g5OUFBQkJDQyk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gyNCwgMzInaEFBQkJDQ0REKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDI4LCAzMidoQkJDQ0RERUUpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMkMsIDMyJ2hDQ0RERUVGRik7CisgICAgIzUwMDsKKworICAgIC8vIHJlZ2lzdGVyIHdvcmQgUmVhZAorICAgICRkaXNwbGF5KCIlMGQ6IFBlcmZvcm1pbmcgUmVnaXN0ZXIgV29yZCBSZWFkLS0tLS0tLS0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMCAsIDMyJ2gxMTIyMzM0NCk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2g0ICwgMzInaDIyMzM0NDU1KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDggLCAzMidoMzM0NDU1NjYpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoQyAsIDMyJ2g0NDU1NjY3Nyk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gxMCwgMzInaDU1NjY3Nzg4KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDE0LCAzMidoNjY3Nzg4OTkpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMTgsIDMyJ2g3Nzg4OTlBQSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gxQywgMzInaDg4OTlBQUJCKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDIwLCAzMidoOTlBQUJCQ0MpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMjQsIDMyJ2hBQUJCQ0NERCk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gyOCwgMzInaEJCQ0NEREVFKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDJDLCAzMidoQ0NEREVFRkYpOworICAgICM1MDAKKworCisgIAorICAgICRkaXNwbGF5ICgiVVNCIGRvaW5nIHJlZ2lzdGVyIHdyaXRlcyBhbmQgcmVhZHMgdG8gVVNCIGJsb2NrIGVuZCBcbiIpOworCisgICAgdGVzdF9jb250cm9sLmZpbmlzaF90ZXN0OworICBlbmQKKworZW5kdGFzawpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDMudiBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QzLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTFkMWM2OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QzLnYKQEAgLTAsMCArMSwxODIgQEAKK2BkZWZpbmUgdXNiYmZtICB0Yl90b3AudV91c2JfYWdlbnQKK3Rhc2sgdXNiX3Rlc3QzOworCityZWcgWzY6MF0gYWRkcmVzczsKK3JlZyBbMzowXSBlbmRwdDsKK3JlZyBbMzowXSBTdGF0dXM7CityZWcgWzMxOjBdIEJ5dGVDb3VudDsKK3JlZyBbMzE6MF0gUmVhZERhdGE7CitpbnRlZ2VyICAgIGksaixrOworCisKK3JlZyBbMTowXSBkYXRhX2JpdCAgICAgICAgOworcmVnCSAgc3RvcF9iaXRzICAgICAgIDsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKK3JlZwkgIHN0aWNrX3Bhcml0eSAgICA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CityZWcJICBwYXJpdHlfZW4gICAgICAgOyAvLyBwYXJpdHkgZW5hYmxlCityZWcJICBldmVuX29kZF9wYXJpdHkgOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorcmVnIFsxNTowXSBkaXZpc29yICAgICAgICA7CS8vIGRpdmlkZWQgYnkgKG4rMSkgKiAxNgorcmVnIFsxNTowXSB0aW1lb3V0ICAgICAgICA7Ly8gd2FpdCB0aW1lIGxpbWl0CityZWcgCWZpZm9fZW5hYmxlICAgICAgIDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworcmVnIFs3OjBdIHdyaXRlX2RhdGEgWzA6MzldOworcmVnIFsxNTowXSByeF9udTsKK3JlZyBbMTU6MF0gdHhfbnU7CisKKworcGFyYW1ldGVyICBNWUFDSyAgID0gNCdiMDAwMCwKKyAgICAgICAgICAgTVlOQUsgICA9IDQnYjAwMDEsCisgICAgICAgICAgIE1ZU1RBTEwgPSA0J2IwMDEwLAorICAgICAgICAgICBNWVRPVVQgID0gNCdiMDAxMSwKKyAgICAgICAgICAgTVlJVlJFUyA9IDQnYjAxMDAsCisgICAgICAgICAgIE1ZQ1JDRVIgPSA0J2IwMTAxOworCisgICAgIGJlZ2luCisgICAgIGFkZHJlc3MgPSA3J2IwMDBfMDAwMTsKKyAgICAgZW5kcHQgICA9IDQnYjAwMDA7CisKKyAgICAkZGlzcGxheSgiJTBkOiBVU0IgUmVzZXQgIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0udXNiaHdfcmVzZXQ7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgICAgICAgICBIT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRQorICAgICogIDEuICAweDJELDB4MDAsIDB4MDAgICAgCisgICAgKiAgMi4gIDB4QzMsMHgwMCwweDA1LDB4MDEsCisgICAgKiAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsCisgICAgKiAgICAgIDB4MDAsMHhFQiwweDI1CisgICAgKiAgMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAqICA0LiAgMHg2OSwweDAwLCAweDEwICAKKyAgICAqICA1LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0QiwgMHgwMCAgCisgICAgKiAgNi4gIDB4RDIKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICRkaXNwbGF5KCIlMGQ6IFNldCBBZGRyZXNzID0gMSAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLlNldEFkZHJlc3MgKGFkZHJlc3MpOworICAgIGB1c2JiZm0uc2V0dXAoNydoMDAsIDQnaDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICBgdXNiYmZtLnN0YXR1c19JTig3J2gwMCwgZW5kcHQsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKworICAgICM1MDAwOworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICAgICAgICAgIEhPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFCisgICAgKiAgMS4gIDB4MkQsMHgwMSwgMHhFOCAgICAKKyAgICAqICAyLiAgMHhDMywweDAwLDB4MDksMHgwMSwKKyAgICAqICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgICAqICAgICAgMHgwMCwweDI3LDB4MjUKKyAgICAqICAzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICogIDQuICAweDY5LDB4MDEsIDB4RTggIAorICAgICogIDUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRCLCAweDAwICAKKyAgICAqICA2LiAgMHhEMgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIAorICAgICRkaXNwbGF5KCIlMGQ6IFNldCBjb25maWd1cmF0aW9uICAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLlNldENvbmZpZ3VyYXRpb24oMidiMDEpOworICAgIGB1c2JiZm0uc2V0dXAoYWRkcmVzcywgNCdiMDAwMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgIGB1c2JiZm0uc3RhdHVzX0lOKGFkZHJlc3MsIDQnYjAwMDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICAjMjAwMDsKKworICAgICRkaXNwbGF5KCIlMGQ6IENvbmZpZ3VyYXRpb24gZG9uZSAhISEhISEiLCAkdGltZSk7CisgICAgIAorICAgLy8gd3JpdGUgVUFSVCAgcmVnaXN0ZXJzIHRocm91Z2ggVVNCCisJCisgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgZGF0YV9iaXQgICAgICAgID0gMidiMTE7CisgICAgICBzdG9wX2JpdHMgICAgICAgPSAwOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworICAgICAgc3RpY2tfcGFyaXR5ICAgID0gMDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKKyAgICAgIHBhcml0eV9lbiAgICAgICA9IDE7IC8vIHBhcml0eSBlbmFibGUKKyAgICAgIGV2ZW5fb2RkX3Bhcml0eSA9IDE7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisgICAgICBkaXZpc29yICAgICAgICA9IDE1OwkvLyBkaXZpZGVkIGJ5IChuKzEpICogMTYKKyAgICAgIHRpbWVvdXQgICAgICAgID0gNTAwOy8vIHdhaXQgdGltZSBsaW1pdAorICAgICAgZmlmb19lbmFibGUgICAgICAgPSAwOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCQorICAgIHRiX3RvcC51X3VhcnRfYWdlbnQudWFydF9pbml0OworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICAgICAgICAgIEhPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFCisgICAgKiAgMS4gIDB4MkQsMHgwMSwgMHhFOCAgICAKKyAgICAqICAyLiAgMHhDMywweDQwLDB4MTAsMHgwMCwKKyAgICAqICAgICAgMHgwMCwweDAwLDB4MDAsMHgwNCwKKyAgICAqICAgICAgMHgwMCwweEE4LDB4QzUKKyAgICAqICAzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICogIDQuICAweEUxLDB4MDEsIDB4RTggIAorICAgICogIDUuICAweDRCLDB4MDAsMHgwMCwweDAwICAgICAgICAgICAgICAgICAKKyAgICAqICAgICAgMHgxNywweEJGLDB4RDUKKyAgICAqICA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICogIDcuICAweDY5LDB4MDEsMHhFOAorICAgICogIDguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRCLDB4MDAKKyAgICAqICA5LiAgIDB4RDIKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMCwgezI3J2gwLDInYjEwLDEnYjEsMSdiMSwxJ2IxfSk7ICAKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgICAgICAgICBIT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRQorICAgICogIDEuICAweDJELDB4MDEsIDB4RTggICAgCisgICAgKiAgMi4gIDB4QzMsMHg0MCwweDEwLDB4MDAsCisgICAgKiAgICAgIDB4MDAsMHgwMCwweDA4LDB4MDQsCisgICAgKiAgICAgIDB4MDAsMHgyOSwweDA3CisgICAgKiAgMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAqICA0LiAgMHhFMSwweDAxLCAweEU4ICAKKyAgICAqICA1LiAgMHg0QiwweDAwLDB4MDAsMHgwMCAgICAgICAgICAgICAgICAgCisgICAgKiAgICAgIDB4MEUsMHg3RSwweDFGCisgICAgKiAgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAqICA3LiAgMHg2OSwweDAxLDB4RTgKKyAgICAqICA4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0QiwweDAwCisgICAgKiAgOS4gICAweEQyCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvLyBCYXVkIENsb2NrIDE2eCwgIE1hc3RlciBDbG9jay8gKDIrY2ZnX3ZhbHVlKQorICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoOCwgZGl2aXNvci0xKTsgIAorICAgIHRiX3RvcC51X3VhcnRfYWdlbnQuY29udHJvbF9zZXR1cCAoZGF0YV9iaXQsIHN0b3BfYml0cywgcGFyaXR5X2VuLCBldmVuX29kZF9wYXJpdHksIHN0aWNrX3Bhcml0eSwgdGltZW91dCwgZGl2aXNvciwgZmlmb19lbmFibGUpOworCQorICAgIGZvciAoaT0wOyBpPDQwOyBpPWkrMSkKKwl3cml0ZV9kYXRhW2ldID0gJHJhbmRvbTsKKworICAgZm9yaworICAgYmVnaW4KKyAgICAgIGZvciAoaT0wOyBpPDQwOyBpPWkrMSkKKyAgICAgIGJlZ2luCisgICAgICAgICRkaXNwbGF5ICgiXG4uLi4gV3JpdGluZyBjaGFyICVkIC4uLiIsIHdyaXRlX2RhdGFbaV0pOworICAgICAgICAgdGJfdG9wLnVfdWFydF9hZ2VudC53cml0ZV9jaGFyICh3cml0ZV9kYXRhW2ldKTsKKwkgIzIwMDAwOworICAgICAgZW5kCisgICBlbmQKKworICAgYmVnaW4KKyAgICAgIGZvciAoaj0wOyBqPDQwOyBqPWorMSkKKyAgICAgIGJlZ2luCisgICAgICAgIHRiX3RvcC51X3VhcnRfYWdlbnQucmVhZF9jaGFyX2Noayh3cml0ZV9kYXRhW2pdKTsKKyAgICAgIGVuZAorICAgZW5kCisKKyAgIC8vIFJlYWQgdGhyb3VnaCB0aGUgVVNCIGFuZCBjaGVjayB0aGUgVUFSVCBSWCBGaWZvIFN0YXR1czsKKyAgIC8vIElmIEF2YWlsYWJsZSwgdGhlbiBsb29wIGl0IGJhY2sKKyAgIGJlZ2luCisgICAgICBmb3IgKGs9MDsgazw0MDsgaz1rKzEpCisgICAgICBiZWdpbgorICAgICAgICBSZWFkRGF0YVsxXT0gMSdiMTsKKyAgICAgICAgd2hpbGUoUmVhZERhdGFbMV0gPT0gMSdiMSApIGJlZ2luIC8vIENoZWNrIGZvciBVQVJUIFJYIGZpZm8gbm90IGVtcHR5CisgICAgICAgICAgICRkaXNwbGF5ICgiXG4uLi4gUmVhZGluZyB0aGUgVUFSVCBTdGF0dXM6ICV4IC4uLiIsIFJlYWREYXRhKTsKKyAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgKiAgICAgICAgICBIT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRQorICAgICAgICAgICogIDEuICAweDJELDB4MDEsIDB4RTggICAgCisgICAgICAgICAgKiAgMi4gIDB4QzMsMHhDMCwweDExLDB4MDAsCisgICAgICAgICAgKiAgICAgIDB4MDAsMHgwMCwweDBDLDB4MDQsCisgICAgICAgICAgKiAgICAgIDB4MDAsMHg3MCwweDY2CisgICAgICAgICAgKiAgMy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAgICAgICAqICA0LiAgMHg2OSwweDAxLCAweEU4ICAKKwkgICogIDUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRCLDAwCisJICAqICA2LiAgMHhEMgorCSAgKiAgNy4gIDB4RTEsMHgwMSwweEU4CisJICAqICA4LiAgMHg0QiwweDAwLCAweDAwCisgICAgICAgICAgKiAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RDIKKyAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkIChhZGRyZXNzLCAzMidoQywgUmVhZERhdGEpOyAgCisgICAgICAgZW5kCisgICAgICAgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmQgKGFkZHJlc3MsIDMyJ2gxNCwgUmVhZERhdGEpOyAgLy8gUmVhZCB0aGUgVUFSVCBSWEQgRGF0YQorICAgICAgICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMTAsIFJlYWREYXRhKTsgICAvLyBXcml0ZSBCYWNrIHRvIFVBUlQgVFhECisgICAgICBlbmQKKyAgIGVuZAorICAgam9pbgorCisgICAjMTAwCisgICB0Yl90b3AudV91YXJ0X2FnZW50LnJlcG9ydF9zdGF0dXMocnhfbnUsIHR4X251KTsKK2VuZAorZW5kdGFzawpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VzYi91c2VyX3VzYl90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3VzYi91c2VyX3VzYl90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTJiNDcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3VzZXJfdXNiX3RiLnYKQEAgLTAsMCArMSw1NjEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIHByb2plY3QgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgdXNiIGludGVyZmFmYWNlIHRocm91Z2ggRXh0ZXJuYWwgV0IgaS9GLiAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDA5IE1hciAyMDIyLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKKy8vIE5vdGUgaW4gY2FyYXZlbCwgMHgzMFhYX1hYWFggb25seSBjb21lIHRvIHVzZXIgaW50ZXJmYWNlCisvLyBTbywgdXNpbmcgd2JfaG9zdCBiYW5rIHNlbGVjdCB3ZSBoYXZlIGNoYW5naW5nIE1TQiBhZGRyZXNzIFszMToyNF0gPSAweDEwCitgZGVmaW5lIEFERFJfU1BBQ0VfVUFSVCAgICAzMidoMzAwMV8wMDAwCitgZGVmaW5lIEFERFJfU1BBQ0VfVVNCICAgICAzMidoMzAwMV8wMDgwCitgZGVmaW5lIEFERFJfU1BBQ0VfU1NQSSAgICAzMidoMzAwMV8wMEMwCitgZGVmaW5lIEFERFJfU1BBQ0VfUElOTVVYICAzMidoMzAwMl8wMDAwCisKK2BkZWZpbmUgVEJfR0xCTCAgICB1c2VyX3VzYl90YgorYGRlZmluZSBVU0JfQkZNICAgIHVfdXNiX2FnZW50CisKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAidXNiX2FnZW50cy52IgorYGluY2x1ZGUgInRlc3RfY29udHJvbC52IgorYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKK2BpbmNsdWRlICJ1c2JkX2ZpbGVzLnYiCisKK21vZHVsZSB1c2VyX3VzYl90YjsKKworcGFyYW1ldGVyICBVU0JfSFBFUiAgID0gMTAuNDE2NzsgLy8gNDhNaHogSGFsZiBjeWNsZQorcGFyYW1ldGVyICBVU0VSMl9IUEVSID0gMi42MDQyOyAvLyAxOTJNaHogSGFsZiBjeWNsZQorCisJcmVnIGNsb2NrOworCXJlZyB1c2VyX2Nsb2NrMjsKKwlyZWcgdXNiXzQ4bWh6X2NsazsKKwlyZWcgd2JfcnN0X2k7CisJcmVnIHBvd2VyMSwgcG93ZXIyOworCXJlZyBwb3dlcjMsIHBvd2VyNDsKKworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfY3ljX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgICAgICAgIHdiZF9leHRfc3RiX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF93ZV9pOyAgLy8gd3JpdGUKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2RhdF9pOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgcmVnIFszOjBdICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKworICAgICAgICB3aXJlIFszMTowXSB3YmRfZXh0X2RhdF9vOyAgLy8gZGF0YSBpbnB1dAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Fja19vOyAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKwkvLyBVc2VyIEkvTworCXdpcmUgWzM3OjBdIGlvX29lYjsKKwl3aXJlIFszNzowXSBpb19vdXQ7CisJd2lyZSBbMzc6MF0gaW9faW47CisKKworCXJlZyBbMTowXSBzcGlfY2hpcF9ubzsKKworCXdpcmUgZ3BpbzsKKwl3aXJlIFszNzowXSBtcHJqX2lvOworCXdpcmUgWzc6MF0gbXByal9pb18wOworCXJlZyAgICAgICAgdGVzdF9mYWlsOworCXJlZyBbMzE6MF0gcmVhZF9kYXRhOworCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgd2lyZSBbMzE6MF0gICB1c2JkX3JlZ19hZGRyOyAgIC8vIFJlZ2lzdGVyIEFkZHJlc3MKKyAgICAgICAJd2lyZSAJICAgICAgdXNiZF9yZWdfcmR3cm47ICAvLyAwIC0+IHdyaXRlLCAxLT4gcmVhZAorICAgICAgIAl3aXJlIAkgICAgICB1c2JkX3JlZ19yZXE7ICAgIC8vICBSZWdpc3RlciBSZXEKKyAgICAgICAgd2lyZSBbMzE6MF0gICB1c2JkX3JlZ193ZGF0YTsgIC8vIFJlZ2lzdGVyIHdyaXRlIGRhdGEKKyAgICAgICAgcmVnIFszMTowXSAgICB1c2JkX3JlZ19yZGF0YTsgIC8vIFJlZ2lzdGVyIFJlYWQgRGF0YQorICAgICAgICByZWcgICAgICAgICAgIHVzYmRfcmVnX2FjayA9IDEnYjE7ICAgIC8vIFJlZ2lzdGVyIEFjaworCisJcmVnICBbMzE6MF0gICBSZWdCYW5rIFswOjE1XTsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJLy8gNDhNaHogY2xvY2sgZ2VuZXJhdGlvbgorCWFsd2F5cyBiZWdpbgorICAgICAgICAgICNVU0JfSFBFUiAgICAgdXNiXzQ4bWh6X2NsayA9IDEnYjA7CisgICAgICAgICAgI1VTQl9IUEVSICAgICB1c2JfNDhtaHpfY2xrID0gMSdiMTsKKyAgICAgICAgZW5kCisKKwkvLyBVU0VSIENsb2NrIGdlbmVyYXRpb24KKwlhbHdheXMgYmVnaW4KKyAgICAgICAgICAjVVNFUjJfSFBFUiAgICAgdXNlcl9jbG9jazIgPSAxJ2IwOworICAgICAgICAgICNVU0VSMl9IUEVSICAgICB1c2VyX2Nsb2NrMiA9IDEnYjE7CisgICAgICAgIGVuZAorCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKwlpbml0aWFsIGJlZ2luCisJCXdiX3JzdF9pIDw9IDEnYjE7CisJCSMxMDA7CisJCXdiX3JzdF9pIDw9IDEnYjA7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJzaW14LnZjZCIpOworCSAgIAkkZHVtcHZhcnMoNSwgdXNlcl91c2JfdGIpOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisgICAgICAgIGFsd2F5c0AocG9zZWRnZSB3Yl9yc3RfaSAgb3IgcG9zZWRnZSB1c2JfNDhtaHpfY2xrKQorCWJlZ2luCisJICAgaWYod2JfcnN0X2kgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgdXNiZF9yZWdfcmRhdGEgPSAnaDA7CisgICAgICAgICAgICAgIHVzYmRfcmVnX2FjayAgID0gJ2gwOworCSAgIGVuZCBlbHNlIGJlZ2luCisJICAgICAgaWYodXNiZF9yZWdfcmVxICYmIHVzYmRfcmVnX3Jkd3JuID09IDEnYjAgJiYgIXVzYmRfcmVnX2FjaykgYmVnaW4KKyAgICAgICAgICAgICAgICAgdXNiZF9yZWdfYWNrID0gJ2gxOworCQkgUmVnQmFua1t1c2JkX3JlZ19hZGRyWzU6Ml1dID0gdXNiZF9yZWdfd2RhdGE7CisJCSAkZGlzcGxheSgiU1RBVFVTOiBXcml0ZSBBY2Nlc3MgQWRkcmVzcyA6ICV4IERhdGE6ICV4Iix1c2JkX3JlZ19hZGRyWzc6MF0sdXNiZF9yZWdfd2RhdGEpOworCSAgICAgIGVuZCBlbHNlIGlmKHVzYmRfcmVnX3JlcSAmJiB1c2JkX3JlZ19yZHdybiA9PSAxJ2IxICYmICF1c2JkX3JlZ19hY2spIGJlZ2luCisgICAgICAgICAgICAgICAgIHVzYmRfcmVnX2FjayA9ICdoMTsKKwkJIHVzYmRfcmVnX3JkYXRhID0gUmVnQmFua1t1c2JkX3JlZ19hZGRyWzU6Ml1dOworCQkgJGRpc3BsYXkoIlNUQVRVUzogUmVhZCBBY2Nlc3MgQWRkcmVzcyA6ICV4IERhdGE6ICV4Iix1c2JkX3JlZ19hZGRyWzc6MF0sdXNiZF9yZWdfcmRhdGEpOworCSAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgIHVzYmRfcmVnX2FjayA9ICdoMDsKKwkgICAgICBlbmQKKwkgICBlbmQKKwllbmQKKworCWluaXRpYWwgYmVnaW4KKwkJJGR1bXBvbjsKKworCQkjMjAwOyAvLyBXYWl0IGZvciByZXNldCByZW1vdmFsCisJICAgICAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFJpc2MgQm9vdCBUZXN0IFN0YXJ0ZWQiKTsKKworCQkvLyBSZW1vdmUgV2IgUmVzZXQKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CisKKyAgICAgICAgICAgICAgICAvLyBFbmFibGUgU1BJIE11bHRpIEZ1bmN0aW9uYWwgUG9ydHMKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfUElOTVVYKydoMDAzOCwnaDQwMCk7CisKKwkgICAgICAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKwkJIzE7CisgICAgICAgICAKKwkgICAgICAgIC8vIFNldCBVU0IgY2xvY2sgOiAxOTIvNCA9IDQ4TWh6CQorICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODIsNCdoMCw4J2gwLDQnaDAsOCdoMDF9KTsKKworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcmVzZXQKKwkJLy8gUmVtb3ZlIFdCIGFuZCBTUEkvVUFSVCBSZXNldCwgS2VlcCBDT1JFIHVuZGVyIFJlc2V0CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX1BJTk1VWCs4J2g4LCdoMDNGKTsKKworCisJCXRlc3RfZmFpbCA9IDA7CisJICAgICAgICByZXBlYXQgKDIwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKworCisJCS8vdXNiX3Rlc3QxOworCQl1c2JfdGVzdDI7CisKKworCQlyZXBlYXQgKDEwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKworICAgICAgICAgIAlpZih0ZXN0X2NvbnRyb2wuZXJyb3JfY291bnQgPT0gMCkgYmVnaW4KKwkJICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFVTQiBNb2RlIChHTCkgUGFzc2VkIik7CisJCSAgIGBlbHNlCisJCSAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogVVNCIE1vZGUgKFJUTCkgUGFzc2VkIik7CisJCSAgIGBlbmRpZgorCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkJICAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogVVNCIE1vZGUgKEdMKSBGYWlsZWQiKTsKKwkJICAgIGBlbHNlCisJCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFVTQiBNb2RlIChSVEwpIEZhaWxlZCIpOworCQkgICAgYGVuZGlmCisJCSBlbmQKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgICAgICRmaW5pc2g7CisJZW5kCisKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgKGNsb2NrICAgICAgICksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgKHVzZXJfY2xvY2syICksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgKHdiX3JzdF9pICAgICksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisgICAgdXNiX2FnZW50IHVfdXNiX2FnZW50KCk7CisgICAgdGVzdF9jb250cm9sIHRlc3RfY29udHJvbCgpOworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKworICAgIGVuZAorYGVuZGlmICAKKworLy8gRHJpdmUgVVNCIFBhZHMKKy8vCit0cmkgdXNiZF90eGRwID0gKGlvX29lYlszNl0gPT0gMSdiMCkgPyBpb19vdXRbMzZdIDogMSdiejsKK3RyaSB1c2JkX3R4ZG4gPSAoaW9fb2ViWzM3XSA9PSAxJ2IwKSA/IGlvX291dFszN10gOiAxJ2J6OworCithc3NpZ24gaW9faW5bMzZdID0gdXNiZF90eGRwOworYXNzaWduIGlvX2luWzM3XSA9IHVzYmRfdHhkbjsKKworLy8gRnVsbCBTcGVlZCBEZXZpY2UgSW5kaWNhdGlvbgorCitwdWxsdXAodXNiZF90eGRwKTsgCisvL3B1bGxkb3duKHVzYmRfdHhkbik7CisKK3VzYjFkX3RvcCB1X3VzYl90b3AoCisKKwkuY2xrX2kgICAgICAgICAgICh1c2JfNDhtaHpfY2xrKSwgCisJLnJzdG5faSAgICAgICAgICAoIXdiX3JzdF9pKSwKKyAKKwkJLy8gVVNCIFBIWSBJbnRlcmZhY2UKKwkudXNiX2RwICAgICAgICAgICh1c2JkX3R4ZHApLCAKKwkudXNiX2RuICAgICAgICAgICh1c2JkX3R4ZG4pLCAKKyAKKwkvLyBVU0IgTWlzYworCS5waHlfdHhfbW9kZSAgICAgKDEnYjEpLCAKKyAgICAgICAgLnVzYl9yc3QgICAgICAgICAoKSwKKyAKKwkvLyBJbnRlcnJ1cHRzCisJLmRyb3BwZWRfZnJhbWUgICAoKSwgCisJLm1pc2FsaWduZWRfZnJhbWUoKSwKKwkuY3JjMTZfZXJyICAgICAgICgpLAorIAorCS8vIFZlbmRvciBGZWF0dXJlcworCS52X3NldF9pbnQgICAgICAgKCksIAorCS52X3NldF9mZWF0dXJlICAgKCksIAorCS53VmFsdWUgICAgICAgICAgKCksCisJLndJbmRleCAgICAgICAgICAoKSwgCisJLnZlbmRvcl9kYXRhICAgICAoKSwKKyAKKwkvLyBVU0IgU3RhdHVzCisJLnVzYl9idXN5ICAgICAgICAoKSwgCisJLmVwX3NlbCAgICAgICAgICAoKSwKKyAKKwkvLyBFbmQgcG9pbnQgMSBjb25maWd1cmF0aW9uCisJLmVwMV9jZmcgICAgICAgICAoCWBJU08gIHwgYElOICB8IDE0J2QwMjU2CQkpLAorCS8vIEVuZCBwb2ludCAxICdPVVQnIEZJRk8gaS9mCisJLmVwMV9kb3V0ICAgICAgICAoCQkJCQkpLAorCS5lcDFfd2UgICAgICAgICAgKAkJCQkJKSwKKwkuZXAxX2Z1bGwgICAgICAgICgJCTEnYjAJCQkpLAorCS8vIEVuZCBwb2ludCAxICdJTicgRklGTyBpL2YKKwkuZXAxX2RpbiAgICAgICAgICgJCTgnaDAJCSAgICAgICAgKSwKKwkuZXAxX3JlICAgICAgICAgICgJCSAgIAkJICAgICAgICApLAorCS5lcDFfZW1wdHkgICAgICAgKAkJMSdiMCAgICAgCQkpLAorCS5lcDFfYmZfZW4gICAgICAgKAkJMSdiMAkJCSksCisJLmVwMV9iZl9zaXplICAgICAoCQk3J2gwCQkJKSwKKyAKKwkvLyBFbmQgcG9pbnQgMiBjb25maWd1cmF0aW9uCisJLmVwMl9jZmcgICAgICAgICAoCWBJU08gIHwgYE9VVCB8IDE0J2QwMjU2CQkpLAorCS8vIEVuZCBwb2ludCAyICdPVVQnIEZJRk8gaS9mCisJLmVwMl9kb3V0ICAgICAgICAoCQkJCSAgICAgICAgKSwKKwkuZXAyX3dlICAgICAgICAgICgJCQkJICAgICAgICApLAorCS5lcDJfZnVsbCAgICAgICAgKAkJMSdiMCAgICAgCQkpLAorCS8vIEVuZCBwb2ludCAyICdJTicgRklGTyBpL2YKKwkuZXAyX2RpbiAgICAgICAgICgJCTgnaDAJCQkpLAorCS5lcDJfcmUgICAgICAgICAgKAkJCQkJKSwKKwkuZXAyX2VtcHR5ICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDJfYmZfZW4gICAgICAgKAkJMSdiMAkJCSksCisJLmVwMl9iZl9zaXplICAgICAoCQk3J2gwCQkJKSwKKyAKKwkvLyBFbmQgcG9pbnQgMyBjb25maWd1cmF0aW9uCisJLmVwM19jZmcgICAgICAgICAoCWBCVUxLIHwgYElOICB8IDE0J2QwNjQJCSksCisJLy8gRW5kIHBvaW50IDMgJ09VVCcgRklGTyBpL2YKKwkuZXAzX2RvdXQgICAgICAgICgJCQkJCSksCisJLmVwM193ZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDNfZnVsbCAgICAgICAgKAkJMSdiMAkJCSksCisJLy8gRW5kIHBvaW50IDMgJ0lOJyBGSUZPIGkvZgorCS5lcDNfZGluICAgICAgICAgKAkJOCdoMCAgICAgIAkJKSwKKwkuZXAzX3JlICAgICAgICAgICgJCSAgICAgICAgCQkpLAorCS5lcDNfZW1wdHkgICAgICAgKAkJMSdiMCAgICAJCSksCisJLmVwM19iZl9lbiAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXAzX2JmX3NpemUgICAgICgJCTcnaDAJCQkpLAorIAorCS8vIEVuZCBwb2ludCA0IGNvbmZpZ3VyYXRpb24KKwkuZXA0X2NmZyAgICAgICAgICgJYEJVTEsgfCBgT1VUIHwgMTQnZDA2NAkJKSwKKwkvLyBFbmQgcG9pbnQgNCAnT1VUJyBGSUZPIGkvZgorCS5lcDRfZG91dCAgICAgICAgKAkJICAgICAgICAJCSksCisJLmVwNF93ZSAgICAgICAgICAoCQkgICAgICAgIAkJKSwKKwkuZXA0X2Z1bGwgICAgICAgICgJCTEnYjAgICAgIAkJKSwKKwkvLyBFbmQgcG9pbnQgNCAnSU4nIEZJRk8gaS9mCisJLmVwNF9kaW4gICAgICAgICAoCQk4J2gwCQkJKSwKKwkuZXA0X3JlICAgICAgICAgICgJCQkJCSksCisJLmVwNF9lbXB0eSAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXA0X2JmX2VuICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDRfYmZfc2l6ZSAgICAgKAkJNydoMAkJCSksCisgCisJLy8gRW5kIHBvaW50IDUgY29uZmlndXJhdGlvbgorCS5lcDVfY2ZnICAgICAgICAgKAlgSU5UICB8IGBJTiAgfCAxNCdkMDY0CQkpLAorCS8vIEVuZCBwb2ludCA1ICdPVVQnIEZJRk8gaS9mCisJLmVwNV9kb3V0ICAgICAgICAoCQkJCQkpLAorCS5lcDVfd2UgICAgICAgICAgKAkJCQkJKSwKKwkuZXA1X2Z1bGwgICAgICAgICgJCTEnYjAJCQkpLAorCS8vIEVuZCBwb2ludCA1ICdJTicgRklGTyBpL2YKKwkuZXA1X2RpbiAgICAgICAgICgJCTgnaDAgICAgIAkJKSwKKwkuZXA1X3JlICAgICAgICAgICgJCQkJICAgICAgICApLAorCS5lcDVfZW1wdHkgICAgICAgKAkJMSdiMCAgICAgCQkpLAorCS5lcDVfYmZfZW4gICAgICAgKAkJMSdiMAkJCSksCisJLmVwNV9iZl9zaXplICAgICAoCQk3J2gwCQkJKSwKKyAKKwkvLyBFbmQgcG9pbnQgNiBjb25maWd1cmF0aW9uCisJLmVwNl9jZmcgICAgICAgICAoCQkxNCdoMDAJCQkpLAorCS8vIEVuZCBwb2ludCA2ICdPVVQnIEZJRk8gaS9mCisJLmVwNl9kb3V0ICAgICAgICAoCQkJCQkpLAorCS5lcDZfd2UgICAgICAgICAgKAkJCQkJKSwKKwkuZXA2X2Z1bGwgICAgICAgICgJCTEnYjAJCQkpLAorCS8vIEVuZCBwb2ludCA2ICdJTicgRklGTyBpL2YKKwkuZXA2X2RpbiAgICAgICAgICgJCTgnaDAJCQkpLAorCS5lcDZfcmUgICAgICAgICAgKAkJCQkJKSwKKwkuZXA2X2VtcHR5ICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDZfYmZfZW4gICAgICAgKAkJMSdiMAkJCSksCisJLmVwNl9iZl9zaXplICAgICAoCQk3J2gwCQkJKSwKKyAKKwkvLyBFbmQgcG9pbnQgNyBjb25maWd1cmF0aW9uCisJLmVwN19jZmcgICAgICAgICAoCQkxNCdoMDAJCQkpLAorCS8vIEVuZCBwb2ludCA3ICdPVVQnIEZJRk8gaS9mCisJLmVwN19kb3V0ICAgICAgICAoCQkJCQkpLAorCS5lcDdfd2UgICAgICAgICAgKAkJCQkJKSwKKwkuZXA3X2Z1bGwgICAgICAgICgJCTEnYjAJCQkpLAorCS8vIEVuZCBwb2ludCA3ICdJTicgRklGTyBpL2YKKwkuZXA3X2RpbiAgICAgICAgICgJCTgnaDAJCQkpLAorCS5lcDdfcmUgICAgICAgICAgKAkJCQkJKSwKKwkuZXA3X2VtcHR5ICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDdfYmZfZW4gICAgICAgKAkJMSdiMAkJCSksCisJLmVwN19iZl9zaXplICAgICAoCQk3J2gwCQkJKSwKKyAKKyAgICAgICAgLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisJLnJlZ19hZGRyICAgICAgICAodXNiZF9yZWdfYWRkciksCisJLnJlZ19yZHdybiAgICAgICAodXNiZF9yZWdfcmR3cm4pLAorCS5yZWdfcmVxICAgICAgICAgKHVzYmRfcmVnX3JlcSksCisJLnJlZ193ZGF0YSAgICAgICAodXNiZF9yZWdfd2RhdGEpLAorCS5yZWdfcmRhdGEgICAgICAgKHVzYmRfcmVnX3JkYXRhKSwKKwkucmVnX2FjayAgICAgICAgICh1c2JkX3JlZ19hY2spCisgCisJKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBUYXNrCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayB0ZXN0X2VycjsKK2JlZ2luCisgICAgIHRlc3RfZmFpbCA9IDE7CitlbmQKK2VuZHRhc2sKKwordGFzayB3Yl91c2VyX2NvcmVfd3JpdGU7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK2lucHV0IFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gxOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9ZGF0YTsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZDsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIC8vJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgUkVBRCAgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2s7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK2lucHV0IFszMTowXSBjbXBfZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICBpZihkYXRhICE9PSBjbXBfZGF0YSkgYmVnaW4KKyAgICAgJGRpc3BsYXkoIkVSUk9SIDogV0IgVVNFUiBBQ0NFU1MgUkVBRCAgQWRkcmVzcyA6IDB4JXgsIEV4ZDogMHgleCBSeGQ6IDB4JXggIixhZGRyZXNzLGNtcF9kYXRhLGRhdGEpOworICAgICB1c2VyX3VzYl90Yi50ZXN0X2ZhaWwgPSAxOworICBlbmQgZWxzZSBiZWdpbgorICAgICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsZGF0YSk7CisgIGVuZAorICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworYGluY2x1ZGUgInRlc3RzL3VzYl90ZXN0MS52IgorYGluY2x1ZGUgInRlc3RzL3VzYl90ZXN0Mi52IgorCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXhfcmVnLnN2IGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXhfcmVnLnN2CmluZGV4IDhmOTAwYjEuLjFiMGQzMTAgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdgorKysgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YKQEAgLTI3OSw2ICsyNzksMTIgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gQ2hpcCBJRAorLy8gY2hpcC1pZFszOjBdIG1hcHBpbmcKKy8vICAgIDAgLSAgWUlGSVZFIChNUFctMikKKy8vICAgIDEgLSAgUmlzY2R1bmlvIChNUFctMykKKy8vICAgIDIgLSAgUmlzY2R1bmlvIChNUFctNCkKKy8vICAgIDMgLSAgUmlzY2R1bmlvIChNUFctNSkKKwogd2lyZSBbMTU6MF0gbWFudV9pZCAgICAgID0gIDE2J2g4MjY4OyAvLyBBc2NpIHZhbHVlIG9mIFJECiB3aXJlIFszOjBdICB0b3RhbF9jb3JlICAgPSAgNCdoMTsKIHdpcmUgWzM6MF0gIGNoaXBfaWQgICAgICA9ICA0J2gzOwpAQCAtNzYzLDcgKzc2OSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBTb2Z0d2FyZSBSZWctMiwgUmVsZWFzZSBkYXRlOiA8REFZPjxNT05USD48WUVBUj4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWdlbl8zMmJfcmVnICAjKDMyJ2gwMjAzXzIwMjIpIHVfcmVnXzIzCSgKK2dlbl8zMmJfcmVnICAjKDMyJ2gxMDAzXzIwMjIpIHVfcmVnXzIzCSgKIAkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCiAJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKIAkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLApAQCAtNzc2LDkgKzc4Miw5IEBACiAJICAgICAgKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU29mdHdhcmUgUmVnLTM6IFBvamVjdCBSZXZpc29uIDMuNyA9IDAwMDM3MDAKKy8vIFNvZnR3YXJlIFJlZy0zOiBQb2plY3QgUmV2aXNvbiAzLjggPSAwMDAzODAwCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1nZW5fMzJiX3JlZyAgIygzMidoMDAwM183MDAwKSB1X3JlZ18yNAkoCitnZW5fMzJiX3JlZyAgIygzMidoMDAwM184MDAwKSB1X3JlZ18yNAkoCiAJICAgICAgLy9MaXN0IG9mIElucHV0cwogCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCiAJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VhcnRfaTJjX3VzYl9zcGkvc3JjL3VhcnRfaTJjX3VzYl9zcGkuc3YgYi92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Jfc3BpL3NyYy91YXJ0X2kyY191c2Jfc3BpLnN2CmluZGV4IGQzMzc4ZTAuLjAyOGYxZDcgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3VhcnRfaTJjX3VzYl9zcGkvc3JjL3VhcnRfaTJjX3VzYl9zcGkuc3YKKysrIGIvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdgpAQCAtMTY4LDggKzE2OCw4IEBACiAKIHdpcmUgcmVnX3VhcnRfY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHJlZ19jcyA6IDEnYjA7CiB3aXJlIHJlZ19pMmNtX2NzICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfSTJDKSAgPyByZWdfY3MgOiAxJ2IwOwotd2lyZSByZWdfdXNiX2NzICAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1VBUlQpID8gcmVnX2NzIDogMSdiMDsKLXdpcmUgcmVnX3NwaW1fY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9TUEkpID8gIHJlZ19jcyA6IDEnYjA7Cit3aXJlIHJlZ191c2JfY3MgICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfVVNCKSAgPyByZWdfY3MgOiAxJ2IwOword2lyZSByZWdfc3BpbV9jcyAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1NQSSkgID8gIHJlZ19jcyA6IDEnYjA7CiAKIHVhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCiAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdgppbmRleCAxZGU3MGQ0Li42ZWUwZmY1IDEwMDY0NAotLS0gYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3RvcC91c2IxX2hvc3Quc3YKKysrIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy90b3AvdXNiMV9ob3N0LnN2CkBAIC01Nyw4ICs1Nyw4IEBACiAgICAgaW5wdXQgICAgICAgICAgICAgICAgICBpbl9kcCAgICwKICAgICBpbnB1dCAgICAgICAgICAgICAgICAgIGluX2RuICAgLAogCi0gICAgaW5wdXQgICAgICAgICAgICAgICAgICBvdXRfZHAgICAsCi0gICAgaW5wdXQgICAgICAgICAgICAgICAgICBvdXRfZG4gICAsCisgICAgb3V0cHV0ICAgICAgICAgICAgICAgICBvdXRfZHAgICAsCisgICAgb3V0cHV0ICAgICAgICAgICAgICAgICBvdXRfZG4gICAsCiAgICAgb3V0cHV0ICAgICAgICAgICAgICAgICBvdXRfdHhfb2VuLAogCiAgICAgLy8gTWFzdGVyIFBvcnQKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgYi92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52CmluZGV4IDY4YmE1NjEuLjM2ODg3NDcgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYKKysrIGIvdmVyaWxvZy9ydGwvdXNlcl9wcm9qZWN0X3dyYXBwZXIudgpAQCAtMTkxLDcgKzE5MSwxMCBAQAogLy8vLyAgICAgICAxLiBxc3BpIGNzIyBwb3J0IG1hcHBpbmcgY2hhbmdlZCBmcm9tIGlvIDI4OjI1IHRvIDI1OjI4Ly8vLwogLy8vLyAgICAgICAyLiBzc3BpLCBidWcgZml4IGluIHJlZyBhY2Nlc3MgYW5kIGVuZGlhbiBzdXBwb3J0IGFkZGVkLy8vLwogLy8vLyAgICAgICAzLiBXaXNoYm9uZSBpbnRlcmNvbm5lY3Qgbm93IHN1cHBvcnQgY3Jvc3MtY29ubmVjdCAgICAgLy8vLwotLy8vLyAgICAgICAgICBmZWF0dXJlCisvLy8vICAgICAgICAgIGZlYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDMuOCAgTWFyIDEwIDIwMjIsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgMS4gdXNiIGNoaXAgc2VsZWN0IGJ1ZyBpbnNpZGUgdWFydF8qIHdyYXBwZXIgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgMi4gaW4gd2JfaG9zdCwgaW5jcmVhc2VkIHVzYiBjbGsgY3RybCB0byA0IHRvIDggYml0ICAvLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCiAvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC93Yl9ob3N0L3NyYy93Yl9ob3N0LnN2IGIvdmVyaWxvZy9ydGwvd2JfaG9zdC9zcmMvd2JfaG9zdC5zdgppbmRleCA1NWJmOWZiLi5lZWY1NDlhIDEwMDY0NAotLS0gYS92ZXJpbG9nL3J0bC93Yl9ob3N0L3NyYy93Yl9ob3N0LnN2CisrKyBiL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YKQEAgLTE1Miw3ICsxNTIsNyBAQAogbG9naWMgIFszOjBdICAgICAgICBjZmdfd2JfY2xrX2N0cmw7CiBsb2dpYyAgWzM6MF0gICAgICAgIGNmZ19jcHVfY2xrX2N0cmw7CiBsb2dpYyAgWzc6MF0gICAgICAgIGNmZ19ydGNfY2xrX2N0cmw7Ci1sb2dpYyAgWzM6MF0gICAgICAgIGNmZ191c2JfY2xrX2N0cmw7Citsb2dpYyAgWzc6MF0gICAgICAgIGNmZ191c2JfY2xrX2N0cmw7CiBsb2dpYyAgWzc6MF0gICAgICAgIGNmZ19nbGJfY3RybDsKIAogLy8gdWFydCBNYXN0ZXIgUG9ydApAQCAtMzYzLDcgKzM2Myw3IEBACiBhc3NpZ24gY2ZnX3diX2Nsa19jdHJsICAgICAgPSByZWdfMFsxMTo4XTsKIGFzc2lnbiBjZmdfcnRjX2Nsa19jdHJsICAgICA9IHJlZ18wWzE5OjEyXTsKIGFzc2lnbiBjZmdfY3B1X2Nsa19jdHJsICAgICA9IHJlZ18wWzIzOjIwXTsKLWFzc2lnbiBjZmdfdXNiX2Nsa19jdHJsICAgICA9IHJlZ18wWzMxOjI4XTsKK2Fzc2lnbiBjZmdfdXNiX2Nsa19jdHJsICAgICA9IHJlZ18wWzMxOjI0XTsKIAogCiBhbHdheXMgQCggKikKQEAgLTU0NCw4ICs1NDQsOCBAQAogd2lyZSAgIHVzYl9yZWZfY2xrOwogd2lyZSAgIHVzYl9jbGtfaW50OwogCi13aXJlICAgICAgIGNmZ191c2JfY2xrX2RpdiAgICAgICA9IGNmZ191c2JfY2xrX2N0cmxbM107Ci13aXJlIFsyOjBdIGNmZ191c2JfY2xrX3JhdGlvICAgICA9IGNmZ191c2JfY2xrX2N0cmxbMjowXTsKK3dpcmUgICAgICAgY2ZnX3VzYl9jbGtfZGl2ICAgICAgID0gY2ZnX3VzYl9jbGtfY3RybFs3XTsKK3dpcmUgWzY6MF0gY2ZnX3VzYl9jbGtfcmF0aW8gICAgID0gY2ZnX3VzYl9jbGtfY3RybFs2OjBdOwogCiBhc3NpZ24gdXNiX3JlZl9jbGsgPSB1c2VyX2Nsb2NrMiA7CiAvL2Fzc2lnbiB1c2JfY2xrX2ludCA9IChjZmdfdXNiX2Nsa19kaXYpICAgICA/IHVzYl9jbGtfZGl2IDogdXNiX3JlZl9jbGs7CkBAIC01NTQsNyArNTU0LDcgQEAKIAogY3RlY2hfY2xrX2J1ZiB1X2Nsa2J1Zl91c2IgKC5BICh1c2JfY2xrX2ludCksIC4gWCh1c2JfY2xrKSk7CiAKLWNsa19jdGwgIygyKSB1X3VzYmNsayAoCitjbGtfY3RsICMoNikgdV91c2JjbGsgKAogICAgLy8gT3V0cHV0cwogICAgICAgIC5jbGtfbyAgICAgICAgICh1c2JfY2xrX2RpdiAgICAgICksCiAgICAvLyBJbnB1dHMK